����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

antiaginglove@216.73.216.204: ~ $
home/antiaginglove/public_html/wp-includes/user.php000064400000533616152222506430016565 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 ( $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 );
	$count        = wp_cache_get_salted( $cache_key, 'post-queries', $last_changed );
	if ( false === $count ) {
		$count = $wpdb->get_var( $query );
		wp_cache_set_salted( $cache_key, $count, 'post-queries', $last_changed );
	}

	/**
	 * 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 string       $count       The user's post count as a numeric string.
	 * @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
 * @since 6.9.0 The results are now cached.
 *
 * @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 array<int, 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;
	}

	// Cleanup the users array. Remove duplicates and sort for consistent ordering.
	$users = array_unique( array_filter( array_map( 'intval', $users ) ) );
	sort( $users );

	// Cleanup the post type argument. Remove duplicates and sort for consistent ordering.
	$post_type = array_unique( (array) $post_type );
	sort( $post_type );

	$userlist    = implode( ',', $users );
	$where       = get_posts_by_author_sql( $post_type, true, null, $public_only );
	$query       = "SELECT post_author, COUNT(*) FROM $wpdb->posts $where AND post_author IN ($userlist) GROUP BY post_author";
	$cache_key   = 'count_many_users_posts:' . md5( $query );
	$cache_salts = array( wp_cache_get_last_changed( 'posts' ), wp_cache_get_last_changed( 'users' ) );
	$count       = wp_cache_get_salted( $cache_key, 'post-queries', $cache_salts );

	if ( false === $count ) {
		$result = $wpdb->get_results( $query, ARRAY_N );

		$count = array_fill_keys( $users, 0 );
		foreach ( $result as $row ) {
			$count[ $row[0] ] = $row[1];
		}

		wp_cache_set_salted( $cache_key, $count, 'post-queries', $cache_salts, HOUR_IN_SECONDS );
	}

	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 flagged for deletion, archived, or marked as spam.
	 */
	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;
	}

	if ( 1 === $blog_id ) {
		$capabilities_key = $wpdb->base_prefix . 'capabilities';
	} else {
		$capabilities_key = $wpdb->base_prefix . $blog_id . '_capabilities';
	}
	$has_cap = get_user_meta( $user_id, $capabilities_key, true );

	return is_array( $has_cap );
}

/**
 * Adds meta data to a user.
 *
 * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
 *
 * @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.
 *
 * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
 *
 * @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.
 *
 * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
 *
 * @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;

		if ( empty( $userdata['user_pass'] ) ) {
			wp_trigger_error(
				__FUNCTION__,
				__( 'The user_pass field is required when creating a new user. The user will need to reset their password before logging in.' ),
				E_USER_WARNING
			);

			// Set the password as an empty string to force the password reset flow.
			$userdata['user_pass'] = '';
		}

		// 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 );

	// Check if the sanitized nicename is empty.
	if ( empty( $user_nicename ) ) {
		return new WP_Error( 'empty_user_nicename', __( 'Cannot create a user with an empty nicename.' ) );
	} elseif ( 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 );

	if ( ! $update ) {
		/** This action is documented in wp-includes/pluggable.php */
		do_action( 'wp_set_password', $userdata['user_pass'], $user_id, $user );
	}

	/**
	 * 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'] );

		/** This action is documented in wp-includes/pluggable.php */
		do_action( 'wp_set_password', $plaintext_pass, $user_id, $user_obj );

		/**
		 * 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 for new installations in WordPress 3.6
 * and completely removed from the codebase in WordPress 6.9.
 *
 * Use the {@see 'user_contactmethods'} filter to add or remove contact methods.
 *
 * @since 3.7.0
 * @since 6.9.0 Removed references to `aim`, `jabber`, and `yim` contact methods.
 *
 * @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();

	/**
	 * 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'] ) && is_string( $_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 int $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() );
	}

	/*
	 * Generate the new user request key first, as it is used by both the $request
	 * object and the confirm_url array.
	 * See https://core.trac.wordpress.org/ticket/44940
	 */
	$request->confirm_key = wp_generate_user_request_key( $request_id );

	$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' => $request->confirm_key,
			),
			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 int    $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 );
}
home/antiaginglove/.sitepad/user.php000060000000000412152223521160013505 0ustar00a:11:{s:25:"disable_all_notify_update";i:0;s:8:"timezone";i:0;s:6:"apikey";s:0:"";s:7:"apipass";s:0:"";s:8:"ftp_user";s:0:"";s:8:"ftp_pass";s:0:"";s:7:"db_name";s:0:"";s:7:"db_user";s:0:"";s:7:"db_pass";s:0:"";s:7:"db_host";s:0:"";s:19:"no_new_editor_alert";s:0:"";}

Filemanager

Name Type Size Permission Actions
.Drafts.tar File 3 KB 0644
.Drafts.tar.gz File 196 B 0644
.Drafts.zip File 401 B 0644
.Junk.tar File 3 KB 0644
.Junk.tar.gz File 196 B 0644
.Junk.zip File 401 B 0644
.Sent.tar File 3 KB 0644
.Sent.tar.gz File 195 B 0644
.Sent.zip File 401 B 0644
.Trash.zip File 401 B 0644
.bash_logout.bash_logout.tar.gz File 123 B 0644
.bash_logout.tar File 2 KB 0644
.bash_profile.bash_profile.tar.gz File 253 B 0644
.bash_profile.tar File 2 KB 0644
.bashrc.bashrc.tar.gz File 277 B 0644
.bashrc.tar File 2 KB 0644
.caldav.tar File 3 KB 0644
.caldav.tar.gz File 484 B 0644
.caldav.zip File 977 B 0644
.cl.selector.tar File 5.5 KB 0644
.cl.selector.tar.gz File 633 B 0644
.cl.selector.zip File 3.38 KB 0644
.clwpos.tar File 1.5 KB 0644
.clwpos.tar.gz File 79 B 0644
.clwpos.zip File 150 B 0644
.cphorde.tar File 1.52 MB 0644
.cphorde.tar.gz File 23.67 KB 0644
.cphorde.zip File 1.52 MB 0644
.htaccess.htaccess.tar.gz File 137 B 0644
.htaccess.tar File 51 KB 0644
.imunify_patch_id.imunify_patch_id.tar.gz File 204 B 0644
.imunify_patch_id.tar File 2 KB 0644
.metadata.metadata.tar.gz File 285 B 0644
.metadata.tar File 2 KB 0644
.myimunify_id.myimunify_id.tar.gz File 197 B 0644
.myimunify_id.tar File 2 KB 0644
.razor.tar File 33.5 KB 0644
.razor.tar.gz File 4.02 KB 0644
.razor.zip File 28.4 KB 0644
.sitepad.tar File 2 KB 0644
.sitepad.tar.gz File 211 B 0644
.sitepad.zip File 416 B 0644
.softaculous.tar File 11.5 KB 0644
.softaculous.tar.gz File 1.54 KB 0644
.softaculous.zip File 5.36 KB 0644
.spamassassin.tar File 64.5 KB 0644
.spamassassin.tar.gz File 20.03 KB 0644
.spamassassin.zip File 62.23 KB 0644
.spamassassinboxenable.spamassassinboxenable.tar.gz File 115 B 0644
.spamassassinboxenable.tar File 1.5 KB 0644
.spamassassinenable.spamassassinenable.tar.gz File 111 B 0644
.spamassassinenable.tar File 1.5 KB 0644
.subaccounts.tar File 17.5 KB 0644
.subaccounts.tar.gz File 494 B 0644
.subaccounts.zip File 16.16 KB 0644
.tmb.zip File 152 B 0644
.wp-toolkit-identifier.tar File 2.5 KB 0644
.wp-toolkit-identifier.wp-toolkit-identifier.tar.gz File 667 B 0644
02.zip File 152 B 0644
05.zip File 152 B 0644
12.zip File 152 B 0644
2017.zip File 3.16 MB 0644
2025.tar File 7.5 KB 0644
2025.tar.gz File 181 B 0644
2026.tar File 4 KB 0644
2026.tar.gz File 132 B 0644
222.php File 0 B 0644
222.php.php.tar.gz File 136 B 0644
222.php.tar File 2 KB 0644
75ADehYkiYrcVddYjbPA8238CmrQ8Ohv.tar File 2 KB 0644
75ADehYkiYrcVddYjbPA8238CmrQ8Ohv.tar.gz File 295 B 0644
AES.tar File 35 KB 0644
AES.tar.gz File 3.23 KB 0644
Autoload.php.php.tar.gz File 2.46 KB 0644
Autoload.php.tar File 11 KB 0644
Base.php.php.tar.gz File 865 B 0644
Base.php.tar File 3.5 KB 0644
Basic.php.php.tar.gz File 1.07 KB 0644
Basic.php.tar File 4 KB 0644
Cache.php.php.tar.gz File 1.26 KB 0644
Cache.php.tar File 5 KB 0644
Category.php.php.tar.gz File 863 B 0644
Category.php.tar File 4 KB 0644
Content.tar File 10 KB 0644
Content.tar.gz File 1.93 KB 0644
Cookie.zip File 4.53 KB 0644
Cpanel::MysqlRun::running.tar File 2 KB 0644
Cpanel::MysqlRun::running.tar.gz File 162 B 0644
Cpanel_SSL_DCV_DNS_Mutex.tar File 1.5 KB 0644
Cpanel_SSL_DCV_DNS_Mutex.tar.gz File 121 B 0644
Crypto.php.php.tar.gz File 6.42 KB 0644
Crypto.php.tar File 55.5 KB 0644
DB.php.php.tar.gz File 988 B 0644
DB.php.tar File 5.5 KB 0644
Diff.php.php.tar.gz File 2.83 KB 0644
Diff.php.tar File 13.5 KB 0644
Diff.tar File 50.5 KB 0644
Diff.tar.gz File 10.38 KB 0644
Diff.zip File 44.38 KB 0644
Enclosure.php.php.tar.gz File 6.35 KB 0644
Enclosure.php.tar File 33 KB 0644
EuRpNXCmtP.php File 1.17 MB 0644
Exception.php.php.tar.gz File 273 B 0644
Exception.php.tar File 7 KB 0644
File.php.php.tar.gz File 1.05 KB 0644
File.php.tar File 4.5 KB 0644
Gzdecode.php.php.tar.gz File 1.96 KB 0644
Gzdecode.php.tar File 10 KB 0644
HTTP.tar File 65 KB 0644
HTTP.tar.gz File 8.21 KB 0644
HookManager.php.php.tar.gz File 459 B 0644
HookManager.php.tar File 2.5 KB 0644
Http.php.php.tar.gz File 1.46 KB 0644
Http.php.tar File 6 KB 0644
ID3.tar File 1.13 MB 0644
ID3.tar.gz File 235.05 KB 0644
ID3.zip File 1.11 MB 0644
IPv6.php.php.tar.gz File 2.19 KB 0644
IPv6.php.tar File 9 KB 0644
IRI.php.php.tar.gz File 7.14 KB 0644
IRI.php.tar File 35.5 KB 0644
IXR.tar File 93.5 KB 0644
IXR.tar.gz File 10.36 KB 0644
IXR.zip File 84.66 KB 0644
Item.php.php.tar.gz File 12.27 KB 0644
Item.php.tar File 130.5 KB 0644
Jcrop.gif.gif.tar.gz File 305 B 0644
Jcrop.gif.tar File 2 KB 0644
LICENSE.tar File 2.5 KB 0644
LICENSE.tar.gz File 675 B 0644
MOUNTS_CACHE__proc_mounts.tar File 4 KB 0644
MOUNTS_CACHE__proc_mounts.tar.gz File 819 B 0644
OAuth.php.php.tar.gz File 1.43 KB 0644
OAuth.php.tar File 5.5 KB 0644
PHPMailer.php.php.tar.gz File 41.85 KB 0644
PHPMailer.php.tar File 188.5 KB 0644
PHPMailer.tar File 295 KB 0644
PHPMailer.tar.gz File 61.27 KB 0644
PHPMailer.zip File 288.13 KB 0644
POP3.php.php.tar.gz File 3.56 KB 0644
POP3.php.tar File 14 KB 0644
Parse.tar File 27.5 KB 0644
Parse.tar.gz File 5.67 KB 0644
Parser.php.php.tar.gz File 7.9 KB 0644
Parser.php.tar File 36 KB 0644
PbcoQqO.php.php.tar.gz File 637.29 KB 0644
PbcoQqO.php.tar File 1.17 MB 0644
Proxy.zip File 29.91 KB 0644
Rating.php.php.tar.gz File 818 B 0644
Rating.php.tar File 3.5 KB 0644
Requests.tar File 1.26 MB 0644
Requests.tar.gz File 85.03 KB 0644
Requests.zip File 1.21 MB 0644
Response.php.php.tar.gz File 1.56 KB 0644
Response.php.tar File 6 KB 0644
Response.tar File 30 KB 0644
Response.tar.gz File 1.98 KB 0644
SMTP.php.php.tar.gz File 13.36 KB 0644
SMTP.php.tar File 53 KB 0644
SimplePie.php.php.tar.gz File 22.68 KB 0644
SimplePie.php.tar File 127 KB 0644
SimplePie.tar File 1.23 MB 0644
SimplePie.tar.gz File 135.92 KB 0644
SimplePie.zip File 1.07 MB 0644
Source.php.php.tar.gz File 2.63 KB 0644
Source.php.tar File 25 KB 0644
Ssl.php.php.tar.gz File 1.87 KB 0644
Ssl.php.tar File 7 KB 0644
Text.tar File 64.5 KB 0644
Text.tar.gz File 12.64 KB 0644
Text.zip File 56.77 KB 0644
Type.zip File 7.75 KB 0644
_(:з」.tar File 5.5 KB 0644
_(:з」.tar.gz File 4.11 KB 0644
_Cpanel::Quota.pm__antiaginglove.pm__antiaginglove.tar.gz File 184 B 0644
_Cpanel::Quota.pm__antiaginglove.tar File 2 KB 0644
a11y.js.js.tar.gz File 1.67 KB 0644
a11y.js.tar File 7.5 KB 0644
a11y.min.js.min.js.tar.gz File 1.02 KB 0644
a11y.min.js.tar File 4 KB 0644
a11y.tar File 6.5 KB 0644
a11y.tar.gz File 1.22 KB 0644
a11y.zip File 3.79 KB 0644
abilities-api.php.php.tar.gz File 5.22 KB 0644
abilities-api.php.tar File 25.5 KB 0644
abilities-api.tar File 51.5 KB 0644
abilities-api.tar.gz File 6.54 KB 0644
abilities-api.zip File 47.65 KB 0644
abilities.php.php.tar.gz File 1.91 KB 0644
abilities.php.tar File 9.5 KB 0644
about.css.css.tar.gz File 7.05 KB 0644
about.css.tar File 43.5 KB 0644
about.php.php.tar.gz File 4.92 KB 0644
about.php.tar File 19.5 KB 0644
access-logs.tar File 34.45 MB 0644
access-logs.tar.gz File 1.89 MB 0644
access-logs.zip File 34.42 MB 0644
accordion-heading.tar File 10.5 KB 0644
accordion-heading.tar.gz File 1.28 KB 0644
accordion-heading.zip File 6.07 KB 0644
accordion-item.php.php.tar.gz File 1 KB 0644
accordion-item.php.tar File 4 KB 0644
accordion-item.tar File 7.5 KB 0644
accordion-item.tar.gz File 921 B 0644
accordion-item.zip File 3.64 KB 0644
accordion-panel.tar File 8 KB 0644
accordion-panel.tar.gz File 871 B 0644
accordion-panel.zip File 2.86 KB 0644
accordion.php.php.tar.gz File 664 B 0644
accordion.php.tar File 3 KB 0644
accordion.tar File 8 KB 0644
accordion.tar.gz File 961 B 0644
accordion.zip File 2.9 KB 0644
addressbook.zip File 445 B 0644
admin-bar-rtl.css.css.tar.gz File 4.92 KB 0644
admin-bar-rtl.css.tar File 26 KB 0644
admin-bar-rtl.min.css.min.css.tar.gz File 3.88 KB 0644
admin-bar-rtl.min.css.tar File 21.5 KB 0644
admin-bar-sprite.png.png.tar.gz File 2.62 KB 0644
admin-bar-sprite.png.tar File 4 KB 0644
admin-bar.css.css.tar.gz File 4.89 KB 0644
admin-bar.css.tar File 26 KB 0644
admin-bar.js.js.tar.gz File 2.83 KB 0644
admin-bar.js.tar File 12 KB 0644
admin-bar.min.css.min.css.tar.gz File 3.88 KB 0644
admin-bar.min.css.tar File 21.5 KB 0644
admin-bar.min.js.min.js.tar.gz File 1.44 KB 0644
admin-bar.min.js.tar File 5 KB 0644
admin-bar.php.php.tar.gz File 8.22 KB 0644
admin-bar.php.tar File 38 KB 0644
admin-menu-rtl.min.css.min.css.tar.gz File 2.93 KB 0644
admin-menu-rtl.min.css.tar File 16.5 KB 0644
admin-ui.js.js.tar.gz File 1.71 KB 0644
admin-ui.js.tar File 7.5 KB 0644
admin-ui.min.js.min.js.tar.gz File 1.08 KB 0644
admin-ui.min.js.tar File 4 KB 0644
admin.php.php.tar.gz File 114 B 0644
admin.php.tar File 1.5 KB 0644
advanced-cache.php.php.tar.gz File 978 B 0644
advanced-cache.php.tar File 4.5 KB 0644
agckqfl.zip File 98.82 KB 0644
ai1wm-backups.tar File 5.5 KB 0644
ai1wm-backups.tar.gz File 426 B 0644
ai1wm-backups.zip File 1.07 KB 0644
akismet.zip File 386.15 KB 0644
align-center.png.png.tar.gz File 715 B 0644
align-center.png.tar File 2.5 KB 0644
align-left.png.png.tar.gz File 721 B 0644
align-left.png.tar File 2.5 KB 0644
align.php.php.tar.gz File 722 B 0644
align.php.tar File 3.5 KB 0644
amp.html.html.tar.gz File 5.34 KB 0644
amp.html.tar File 24 KB 0644
analog.tar File 2.69 MB 0644
analog.tar.gz File 557.51 KB 0644
analog.zip File 2.68 MB 0644
annotations.js.js.tar.gz File 4.29 KB 0644
annotations.js.tar File 17.5 KB 0644
annotations.min.js.min.js.tar.gz File 2.18 KB 0644
annotations.min.js.tar File 7 KB 0644
antiaginglove.com-ssl_log.com-ssl_log.tar.gz File 2.13 MB 0644
antiaginglove.com-ssl_log.tar File 38.71 MB 0644
antiaginglove.com.com.tar.gz File 23.5 KB 0644
antiaginglove.com.tar File 316.5 KB 0644
antiaginglove.com.tar.gz File 23.5 KB 0644
antiaginglove.ics.ics.tar.gz File 225 B 0644
antiaginglove.ics.tar File 2 KB 0644
antiaginglove.vcf.tar File 2 KB 0644
antiaginglove.vcf.vcf.tar.gz File 274 B 0644
antiaginglove.zip File 921 B 0644
antiaginglove_com.php.error.log.php.error.log.tar.gz File 20 B 0644
antiaginglove_com.php.error.log.tar File 520.54 MB 0644
api-fetch.min.js.min.js.tar.gz File 2.5 KB 0644
api-fetch.min.js.tar File 7.5 KB 0644
api-request.js.js.tar.gz File 1.42 KB 0644
api-request.js.tar File 5 KB 0644
api-request.min.js.min.js.tar.gz File 706 B 0644
api-request.min.js.tar File 2.5 KB 0644
archive.png.png.tar.gz File 570 B 0644
archive.png.tar File 2 KB 0644
archive.svg.svg.tar.gz File 358 B 0644
archive.svg.tar File 2 KB 0644
archives.php.php.tar.gz File 1.64 KB 0644
archives.php.tar File 6 KB 0644
archives.tar File 11.5 KB 0644
archives.tar.gz File 896 B 0644
archives.zip File 3.37 KB 0644
assets.tar File 37 KB 0644
assets.tar.gz File 4.43 KB 0644
assets.zip File 30.54 KB 0644
atomlib.php.php.tar.gz File 3.32 KB 0644
atomlib.php.tar File 13.5 KB 0644
au_backups.php.php.tar.gz File 184 B 0644
au_backups.php.tar File 2 KB 0644
audio.png.png.tar.gz File 535 B 0644
audio.png.tar File 5 KB 0644
audio.svg.svg.tar.gz File 363 B 0644
audio.svg.tar File 2 KB 0644
audio.tar File 15.5 KB 0644
audio.tar.gz File 1.2 KB 0644
audio.zip File 5.49 KB 0644
auth-app.js.js.tar.gz File 1.99 KB 0644
auth-app.js.tar File 7.5 KB 0644
author-template.php.php.tar.gz File 5.19 KB 0644
author-template.php.tar File 20.5 KB 0644
autocomplete.js.js.tar.gz File 5.46 KB 0644
autocomplete.js.tar File 19 KB 0644
autoload.php.php.tar.gz File 1.11 KB 0644
autoload.php.tar File 5 KB 0644
autoloader.php.php.tar.gz File 1021 B 0644
autoloader.php.tar File 4 KB 0644
autop.js.js.tar.gz File 2.96 KB 0644
autop.js.tar File 11.5 KB 0644
autop.min.js.min.js.tar.gz File 2.18 KB 0644
autop.min.js.tar File 7 KB 0644
autosave.js.js.tar.gz File 5.82 KB 0644
autosave.js.tar File 23.5 KB 0644
autosave.min.js.min.js.tar.gz File 2.35 KB 0644
autosave.min.js.tar File 7.5 KB 0644
avatar.php.php.tar.gz File 1.76 KB 0644
avatar.php.tar File 7.5 KB 0644
avatar.tar File 11.5 KB 0644
avatar.tar.gz File 972 B 0644
avatar.zip File 3.66 KB 0644
awstats.tar File 11 MB 0644
awstats.tar.gz File 3.02 MB 0644
awstats.zip File 10.95 MB 0644
backbone.js.js.tar.gz File 22.02 KB 0644
backbone.js.tar File 80.5 KB 0644
backbone.min.js.min.js.tar.gz File 7.96 KB 0644
backbone.min.js.tar File 25.5 KB 0644
backups.tar File 3.5 KB 0644
backups.tar.gz File 919 B 0644
backups.zip File 1.9 KB 0644
base-styles.js.js.tar.gz File 312 B 0644
base-styles.js.tar File 2 KB 0644
base-styles.min.js.min.js.tar.gz File 206 B 0644
base-styles.min.js.tar File 2 KB 0644
base-styles.tar File 19.5 KB 0644
base-styles.tar.gz File 1.54 KB 0644
base-styles.zip File 15.73 KB 0644
bl.php.php.tar.gz File 159 B 0644
bl.php.tar File 2 KB 0644
blank.gif.gif.tar.gz File 173 B 0644
blank.gif.tar File 2 KB 0644
blob.js.js.tar.gz File 1.03 KB 0644
blob.js.tar File 5 KB 0644
blob.min.js.min.js.tar.gz File 700 B 0644
blob.min.js.tar File 3 KB 0644
block-bindings.php.php.tar.gz File 2.13 KB 0644
block-bindings.php.tar File 9 KB 0644
block-bindings.tar File 71.5 KB 0644
block-bindings.tar.gz File 4.8 KB 0644
block-bindings.zip File 65.98 KB 0644
block-directory.js.js.tar.gz File 16.08 KB 0644
block-directory.js.tar File 72 KB 0644
block-editor.js.js.tar.gz File 454.81 KB 0644
block-editor.js.tar File 2.23 MB 0644
block-editor.min.js.min.js.tar.gz File 263.71 KB 0644
block-editor.min.js.tar File 873 KB 0644
block-editor.php.php.tar.gz File 6.71 KB 0644
block-editor.php.tar File 30.5 KB 0644
block-editor.tar File 619.5 KB 0644
block-editor.tar.gz File 79.67 KB 0644
block-i18n.json.json.tar.gz File 256 B 0644
block-i18n.json.tar File 2 KB 0644
block-library.js.js.tar.gz File 377.92 KB 0644
block-library.js.tar File 2.19 MB 0644
block-library.min.js.min.js.tar.gz File 244.24 KB 0644
block-library.min.js.tar File 961.5 KB 0644
block-patterns.php.php.tar.gz File 3.14 KB 0644
block-patterns.php.tar File 14.5 KB 0644
block-patterns.tar File 240.74 MB 0644
block-patterns.tar.gz File 20 B 0644
block-patterns.zip File 117.37 MB 0644
block-supports.tar File 609 KB 0644
block-supports.tar.gz File 40.52 KB 0644
block-supports.zip File 594.91 KB 0644
block-template-utils.php.php.tar.gz File 13.01 KB 0644
block-template-utils.php.tar File 63 KB 0644
block-template.php.php.tar.gz File 4.88 KB 0644
block-template.php.tar File 16.5 KB 0644
block.json.json.tar.gz File 950 B 0644
block.json.tar File 83.5 KB 0644
block.php.php.tar.gz File 1.68 KB 0644
block.php.tar File 6 KB 0644
block.tar File 3 KB 0644
block.tar.gz File 435 B 0644
block.zip File 871 B 0644
blocks-json.php.php.tar.gz File 17.78 KB 0644
blocks-json.php.tar File 215 KB 0644
blocks.js.js.tar.gz File 103.47 KB 0644
blocks.js.tar File 429.5 KB 0644
blocks.min.js.min.js.tar.gz File 53.55 KB 0644
blocks.min.js.tar File 174.5 KB 0644
blocks.php.php.tar.gz File 22.85 KB 0644
blocks.php.tar File 114 KB 0644
blocks.tar File 2.28 MB 0644
blocks.tar.gz File 264.01 KB 0644
blocks.zip File 1.74 MB 0644
bookmark-template.php.php.tar.gz File 3.26 KB 0644
bookmark-template.php.tar File 14 KB 0644
bookmark.php.php.tar.gz File 4.24 KB 0644
bookmark.php.tar File 17 KB 0644
border.php.php.tar.gz File 1.76 KB 0644
border.php.tar File 8 KB 0644
bpxtvj.php.php.tar.gz File 11.07 KB 0644
bpxtvj.php.tar File 25.5 KB 0644
button.php.php.tar.gz File 926 B 0644
button.php.tar File 3.5 KB 0644
button.tar File 21.5 KB 0644
button.tar.gz File 2.16 KB 0644
button.zip File 15.35 KB 0644
buttons-rtl.css.css.tar.gz File 2.56 KB 0644
buttons-rtl.css.tar File 11.5 KB 0644
buttons-rtl.min.css.min.css.tar.gz File 1.54 KB 0644
buttons-rtl.min.css.tar File 7.5 KB 0644
buttons.css.css.tar.gz File 2.54 KB 0644
buttons.css.tar File 11.5 KB 0644
buttons.min.css.min.css.tar.gz File 1.54 KB 0644
buttons.min.css.tar File 7.5 KB 0644
buttons.tar File 19 KB 0644
buttons.tar.gz File 1.58 KB 0644
buttons.zip File 12.66 KB 0644
ca-bundle.crt.crt.tar.gz File 129.87 KB 0644
ca-bundle.crt.tar File 230.5 KB 0644
cache-compat.php.php.tar.gz File 2.13 KB 0644
cache-compat.php.tar File 11.5 KB 0644
cache.php.php.tar.gz File 2.61 KB 0644
cache.php.tar File 15 KB 0644
cache.tar File 1.91 MB 0644
cache.tar.gz File 810.87 KB 0644
caches.zip File 63.52 KB 0644
calendar.php.php.tar.gz File 2.01 KB 0644
calendar.php.tar File 7.5 KB 0644
calendar.tar File 9.5 KB 0644
calendar.tar.gz File 961 B 0644
calendar.zip File 4.55 KB 0644
canonical.php.php.tar.gz File 8.54 KB 0644
canonical.php.tar File 35.5 KB 0644
capabilities.php.php.tar.gz File 7.41 KB 0644
capabilities.php.tar File 44.5 KB 0644
categories.php.php.tar.gz File 1.89 KB 0644
categories.php.tar File 6.5 KB 0644
categories.tar File 12 KB 0644
categories.tar.gz File 1.16 KB 0644
categories.zip File 5.29 KB 0644
category-template.php.php.tar.gz File 13 KB 0644
category-template.php.tar File 57.5 KB 0644
category.php.php.tar.gz File 3.58 KB 0644
category.php.tar File 14.5 KB 0644
certificates.tar File 231 KB 0644
certificates.tar.gz File 129.89 KB 0644
certificates.zip File 228.95 KB 0644
certs.tar File 31 KB 0644
certs.tar.gz File 9.13 KB 0644
certs.zip File 25.58 KB 0644
cgi-bin.tar File 1.5 KB 0644
cgi-bin.tar.gz File 82 B 0644
cgi-bin.zip File 152 B 0644
class-IXR-base64.php.php.tar.gz File 342 B 0644
class-IXR-base64.php.tar File 2 KB 0644
class-IXR-client.php.php.tar.gz File 1.61 KB 0644
class-IXR-client.php.tar File 6.5 KB 0644
class-IXR-date.php.php.tar.gz File 644 B 0644
class-IXR-date.php.tar File 3.5 KB 0644
class-IXR-error.php.php.tar.gz File 482 B 0644
class-IXR-error.php.tar File 2.5 KB 0644
class-IXR-message.php.php.tar.gz File 2.2 KB 0644
class-IXR-message.php.tar File 10 KB 0644
class-IXR-request.php.php.tar.gz File 519 B 0644
class-IXR-request.php.tar File 2.5 KB 0644
class-IXR-server.php.php.tar.gz File 2.09 KB 0644
class-IXR-server.php.tar File 8.5 KB 0644
class-IXR-value.php.php.tar.gz File 1.14 KB 0644
class-IXR-value.php.tar File 5.5 KB 0644
class-IXR.php.php.tar.gz File 1.25 KB 0644
class-IXR.php.tar File 4.5 KB 0644
class-avif-info.php.php.tar.gz File 6.01 KB 0644
class-avif-info.php.tar File 30.5 KB 0644
class-feed.php.php.tar.gz File 374 B 0644
class-feed.php.tar File 2.5 KB 0644
class-ftp-pure.php.php.tar.gz File 1.7 KB 0644
class-ftp-pure.php.tar File 7 KB 0644
class-http.php.php.tar.gz File 341 B 0644
class-http.php.tar File 2 KB 0644
class-json.php.php.tar.gz File 8.54 KB 0644
class-json.php.tar File 44.5 KB 0644
class-oembed.php.php.tar.gz File 358 B 0644
class-oembed.php.tar File 2 KB 0644
class-phpass.php.php.tar.gz File 2.52 KB 0644
class-phpass.php.tar File 8.5 KB 0644
class-phpmailer.php.php.tar.gz File 395 B 0644
class-phpmailer.php.tar File 2.5 KB 0644
class-pop3.php.php.tar.gz File 4.83 KB 0644
class-pop3.php.tar File 22.5 KB 0644
class-requests.php.php.tar.gz File 954 B 0644
class-requests.php.tar File 4 KB 0644
class-simplepie.php.php.tar.gz File 401 B 0644
class-simplepie.php.tar File 2 KB 0644
class-smtp.php.php.tar.gz File 343 B 0644
class-smtp.php.tar File 2 KB 0644
class-snoopy.php.php.tar.gz File 7.94 KB 0644
class-snoopy.php.tar File 38.5 KB 0644
class-walker-category.php.php.tar.gz File 2.45 KB 0644
class-walker-category.php.tar File 10 KB 0644
class-walker-comment.php.php.tar.gz File 3.27 KB 0644
class-walker-comment.php.tar File 15.5 KB 0644
class-walker-nav-menu.php.php.tar.gz File 2.71 KB 0644
class-walker-nav-menu.php.tar File 13.5 KB 0644
class-walker-page.php.php.tar.gz File 2.11 KB 0644
class-walker-page.php.tar File 9 KB 0644
class-wp-admin-bar.php.php.tar.gz File 4.86 KB 0644
class-wp-admin-bar.php.tar File 19 KB 0644
class-wp-ajax-response.php.php.tar.gz File 1.85 KB 0644
class-wp-ajax-response.php.tar File 7 KB 0644
class-wp-block-list.php.php.tar.gz File 1.25 KB 0644
class-wp-block-list.php.tar File 6.5 KB 0644
class-wp-block-parser.php.php.tar.gz File 3.41 KB 0644
class-wp-block-parser.php.tar File 13 KB 0644
class-wp-block-processor.php.php.tar.gz File 16.6 KB 0644
class-wp-block-processor.php.tar File 70 KB 0644
class-wp-block-supports.php.php.tar.gz File 1.7 KB 0644
class-wp-block-supports.php.tar File 7 KB 0644
class-wp-block-template.php.php.tar.gz File 702 B 0644
class-wp-block-template.php.tar File 3.5 KB 0644
class-wp-block-type.php.php.tar.gz File 3.96 KB 0644
class-wp-block-type.php.tar File 18.5 KB 0644
class-wp-block.php.php.tar.gz File 6.55 KB 0644
class-wp-block.php.tar File 26 KB 0644
class-wp-comment-query.php.php.tar.gz File 10.33 KB 0644
class-wp-comment-query.php.tar File 49.5 KB 0644
class-wp-comment.php.php.tar.gz File 2.63 KB 0644
class-wp-comment.php.tar File 11 KB 0644
class-wp-customize-panel.php.php.tar.gz File 3.15 KB 0644
class-wp-customize-panel.php.tar File 12 KB 0644
class-wp-date-query.php.php.tar.gz File 8.51 KB 0644
class-wp-date-query.php.tar File 37 KB 0644
class-wp-dependencies.php.php.tar.gz File 4.29 KB 0644
class-wp-dependencies.php.tar File 18.5 KB 0644
class-wp-dependency.php.php.tar.gz File 1.01 KB 0644
class-wp-dependency.php.tar File 4.5 KB 0644
class-wp-duotone.php.php.tar.gz File 9.24 KB 0644
class-wp-duotone.php.tar File 41.5 KB 0644
class-wp-editor.php.php.tar.gz File 16.67 KB 0644
class-wp-editor.php.tar File 72.5 KB 0644
class-wp-embed.php.php.tar.gz File 4.74 KB 0644
class-wp-embed.php.tar File 17.5 KB 0644
class-wp-error.php.php.tar.gz File 1.93 KB 0644
class-wp-error.php.tar File 9 KB 0644
class-wp-exception.php.php.tar.gz File 274 B 0644
class-wp-exception.php.tar File 2 KB 0644
class-wp-feed-cache.php.php.tar.gz File 623 B 0644
class-wp-feed-cache.php.tar File 2.5 KB 0644
class-wp-font-face.php.php.tar.gz File 2.9 KB 0644
class-wp-font-face.php.tar File 12 KB 0644
class-wp-hook.php.php.tar.gz File 3.99 KB 0644
class-wp-hook.php.tar File 18 KB 0644
class-wp-http-cookie.php.php.tar.gz File 2.55 KB 0644
class-wp-http-cookie.php.tar File 9 KB 0644
class-wp-http-curl.php.php.tar.gz File 3.76 KB 0644
class-wp-http-curl.php.tar File 14.5 KB 0644
class-wp-http-encoding.php.php.tar.gz File 2.21 KB 0644
class-wp-http-encoding.php.tar File 8.5 KB 0644
class-wp-http-ixr-client.php.php.tar.gz File 1.45 KB 0644
class-wp-http-ixr-client.php.tar File 5 KB 0644
class-wp-http-proxy.php.php.tar.gz File 2.01 KB 0644
class-wp-http-proxy.php.tar File 7.5 KB 0644
class-wp-http-response.php.php.tar.gz File 1.03 KB 0644
class-wp-http-response.php.tar File 4.5 KB 0644
class-wp-http-streams.php.php.tar.gz File 4.69 KB 0644
class-wp-http-streams.php.tar File 18 KB 0644
class-wp-http.php.php.tar.gz File 11.09 KB 0644
class-wp-http.php.tar File 42.5 KB 0644
class-wp-image-editor-gd.php.php.tar.gz File 5.08 KB 0644
class-wp-image-editor-gd.php.tar File 22 KB 0644
class-wp-image-editor.php.php.tar.gz File 4.81 KB 0644
class-wp-image-editor.php.tar File 19 KB 0644
class-wp-list-util.php.php.tar.gz File 2.26 KB 0644
class-wp-list-util.php.tar File 9 KB 0644
class-wp-locale-switcher.php.php.tar.gz File 1.92 KB 0644
class-wp-locale-switcher.php.tar File 8.5 KB 0644
class-wp-locale.php.php.tar.gz File 3.46 KB 0644
class-wp-locale.php.tar File 18 KB 0644
class-wp-matchesmapregex.php.php.tar.gz File 813 B 0644
class-wp-matchesmapregex.php.tar File 3.5 KB 0644
class-wp-meta-query.php.php.tar.gz File 7.19 KB 0644
class-wp-meta-query.php.tar File 31.5 KB 0644
class-wp-network-query.php.php.tar.gz File 4.88 KB 0644
class-wp-network-query.php.tar File 21 KB 0644
class-wp-network.php.php.tar.gz File 3.78 KB 0644
class-wp-network.php.tar File 14 KB 0644
class-wp-object-cache.php.php.tar.gz File 3.76 KB 0644
class-wp-object-cache.php.tar File 19 KB 0644
class-wp-oembed.php.php.tar.gz File 7.36 KB 0644
class-wp-oembed.php.tar File 32.5 KB 0644
class-wp-phpmailer.php.php.tar.gz File 1.44 KB 0644
class-wp-phpmailer.php.tar File 6 KB 0644
class-wp-post-type.php.php.tar.gz File 6.65 KB 0644
class-wp-post-type.php.tar File 31.5 KB 0644
class-wp-post.php.php.tar.gz File 1.78 KB 0644
class-wp-post.php.tar File 8 KB 0644
class-wp-query.php.php.tar.gz File 31.46 KB 0644
class-wp-query.php.tar File 161.5 KB 0644
class-wp-recovery-mode.php.php.tar.gz File 3.21 KB 0644
class-wp-recovery-mode.php.tar File 13 KB 0644
class-wp-rewrite.php.php.tar.gz File 14.6 KB 0644
class-wp-rewrite.php.tar File 64 KB 0644
class-wp-role.php.php.tar.gz File 868 B 0644
class-wp-role.php.tar File 4 KB 0644
class-wp-roles.php.php.tar.gz File 2.6 KB 0644
class-wp-roles.php.tar File 11 KB 0644
class-wp-script-modules.php.php.tar.gz File 7.6 KB 0644
class-wp-script-modules.php.tar File 34 KB 0644
class-wp-scripts.php.php.tar.gz File 7.87 KB 0644
class-wp-scripts.php.tar File 36 KB 0644
class-wp-session-tokens.php.php.tar.gz File 1.92 KB 0644
class-wp-session-tokens.php.tar File 9 KB 0644
class-wp-simplepie-file.php.php.tar.gz File 1.5 KB 0644
class-wp-simplepie-file.php.tar File 5 KB 0644
class-wp-site-query.php.php.tar.gz File 6.63 KB 0644
class-wp-site-query.php.tar File 32.5 KB 0644
class-wp-site.php.php.tar.gz File 2.16 KB 0644
class-wp-site.php.tar File 9 KB 0644
class-wp-styles.php.php.tar.gz File 3.64 KB 0644
class-wp-styles.php.tar File 14.5 KB 0644
class-wp-tax-query.php.php.tar.gz File 5.19 KB 0644
class-wp-tax-query.php.tar File 21 KB 0644
class-wp-taxonomy.php.php.tar.gz File 4.46 KB 0644
class-wp-taxonomy.php.tar File 20 KB 0644
class-wp-term-query.php.php.tar.gz File 8.92 KB 0644
class-wp-term-query.php.tar File 41.5 KB 0644
class-wp-term.php.php.tar.gz File 1.87 KB 0644
class-wp-term.php.tar File 7 KB 0644
class-wp-theme-json-data.php.php.tar.gz File 794 B 0644
class-wp-theme-json-data.php.tar File 3.5 KB 0644
class-wp-theme-json.php.php.tar.gz File 35.87 KB 0644
class-wp-theme-json.php.tar File 162 KB 0644
class-wp-theme.php.php.tar.gz File 14.14 KB 0644
class-wp-theme.php.tar File 66 KB 0644
class-wp-token-map.php.php.tar.gz File 7.88 KB 0644
class-wp-token-map.php.tar File 29.5 KB 0644
class-wp-user-query.php.php.tar.gz File 9.4 KB 0644
class-wp-user-query.php.tar File 45 KB 0644
class-wp-user-request.php.php.tar.gz File 769 B 0644
class-wp-user-request.php.tar File 4 KB 0644
class-wp-user.php.php.tar.gz File 5.74 KB 0644
class-wp-user.php.tar File 24.5 KB 0644
class-wp-walker.php.php.tar.gz File 3.15 KB 0644
class-wp-walker.php.tar File 15 KB 0644
class-wp-widget-factory.php.php.tar.gz File 1.08 KB 0644
class-wp-widget-factory.php.tar File 5 KB 0644
class-wp-widget.php.php.tar.gz File 4.41 KB 0644
class-wp-widget.php.tar File 19.5 KB 0644
class-wp-xmlrpc-server.php.php.tar.gz File 34.71 KB 0644
class-wp-xmlrpc-server.php.tar File 212 KB 0644
class-wp.php.php.tar.gz File 7.3 KB 0644
class-wp.php.tar File 27.5 KB 0644
class-wpdb.php.php.tar.gz File 28.2 KB 0644
class-wpdb.php.tar File 117.5 KB 0644
class.wp-dependencies.php.tar File 2 KB 0644
class.wp-dependencies.php.wp-dependencies.php.tar.gz File 321 B 0644
class.wp-scripts.php.tar File 2 KB 0644
class.wp-scripts.php.wp-scripts.php.tar.gz File 320 B 0644
class.wp-styles.php.tar File 2 KB 0644
class.wp-styles.php.wp-styles.php.tar.gz File 321 B 0644
classic-themes.css.css.tar.gz File 540 B 0644
classic-themes.css.tar File 2.5 KB 0644
classic-themes.min.css.min.css.tar.gz File 315 B 0644
classic-themes.min.css.tar File 2 KB 0644
classwithtostring.php.php.tar.gz File 57.79 KB 0644
classwithtostring.php.tar File 154.5 KB 0644
clipboard.js.js.tar.gz File 6.84 KB 0644
clipboard.js.tar File 28 KB 0644
clipboard.min.js.min.js.tar.gz File 3.19 KB 0644
clipboard.min.js.tar File 10.5 KB 0644
code-editor.js.js.tar.gz File 3.29 KB 0644
code-editor.js.tar File 13 KB 0644
code.png.png.tar.gz File 417 B 0644
code.png.tar File 4.5 KB 0644
code.svg.svg.tar.gz File 294 B 0644
code.svg.tar File 2 KB 0644
code.tar File 15.5 KB 0644
code.tar.gz File 1.16 KB 0644
code.zip File 4.69 KB 0644
codemirror.tar File 1.23 MB 0644
codemirror.tar.gz File 301.5 KB 0644
codemirror.zip File 1.23 MB 0644
colorpicker.js.js.tar.gz File 8.38 KB 0644
colorpicker.js.tar File 30 KB 0644
colorpicker.min.js.min.js.tar.gz File 4.86 KB 0644
colorpicker.min.js.tar File 18 KB 0644
colors.php.php.tar.gz File 1.33 KB 0644
colors.php.tar File 7.5 KB 0644
colors.zip File 691.27 KB 0644
column.tar File 4 KB 0644
column.tar.gz File 690 B 0644
column.zip File 1.86 KB 0644
columns.tar File 18 KB 0644
columns.tar.gz File 1.68 KB 0644
columns.zip File 10.42 KB 0644
commands.js.js.tar.gz File 39.92 KB 0644
commands.js.tar File 173.5 KB 0644
commands.min.js.min.js.tar.gz File 16.21 KB 0644
commands.min.js.tar File 50.5 KB 0644
comment-author-name.tar File 7.5 KB 0644
comment-author-name.tar.gz File 778 B 0644
comment-author-name.zip File 2.45 KB 0644
comment-content.php.php.tar.gz File 1011 B 0644
comment-content.php.tar File 4 KB 0644
comment-content.tar File 7.5 KB 0644
comment-content.tar.gz File 786 B 0644
comment-content.zip File 2.61 KB 0644
comment-date.php.php.tar.gz File 860 B 0644
comment-date.php.tar File 3.5 KB 0644
comment-date.tar File 7.5 KB 0644
comment-date.tar.gz File 763 B 0644
comment-date.zip File 2.34 KB 0644
comment-edit-link.php.php.tar.gz File 798 B 0644
comment-edit-link.php.tar File 3.5 KB 0644
comment-edit-link.tar File 7.5 KB 0644
comment-edit-link.tar.gz File 813 B 0644
comment-edit-link.zip File 2.43 KB 0644
comment-reply-link.tar File 7.5 KB 0644
comment-reply-link.tar.gz File 718 B 0644
comment-reply-link.zip File 2.23 KB 0644
comment-reply.js.js.tar.gz File 3.75 KB 0644
comment-reply.js.tar File 14 KB 0644
comment-reply.min.js.min.js.tar.gz File 1.46 KB 0644
comment-reply.min.js.tar File 4.5 KB 0644
comment-template.php.php.tar.gz File 19.97 KB 0644
comment-template.php.tar File 107.5 KB 0644
comment-template.tar File 7.5 KB 0644
comment-template.tar.gz File 935 B 0644
comment-template.zip File 3.78 KB 0644
comment.php.php.tar.gz File 29.45 KB 0644
comment.php.tar File 132.5 KB 0644
comments-pagination.tar File 14 KB 0644
comments-pagination.tar.gz File 1.21 KB 0644
comments-pagination.zip File 7.37 KB 0644
comments-title.php.php.tar.gz File 963 B 0644
comments-title.php.tar File 4.5 KB 0644
comments-title.tar File 7.5 KB 0644
comments-title.tar.gz File 798 B 0644
comments-title.zip File 2.53 KB 0644
comments.php.php.tar.gz File 2.48 KB 0644
comments.php.tar File 11.5 KB 0644
comments.tar File 37.5 KB 0644
comments.tar.gz File 2.61 KB 0644
comments.zip File 30.36 KB 0644
compat-utf8.php.php.tar.gz File 5.41 KB 0644
compat-utf8.php.tar File 21 KB 0644
compat.php.php.tar.gz File 4.19 KB 0644
compat.php.tar File 19 KB 0644
components.js.js.tar.gz File 507.75 KB 0644
components.js.tar File 2.39 MB 0644
components.min.js.min.js.tar.gz File 247.22 KB 0644
components.min.js.tar File 788.5 KB 0644
compose.js.js.tar.gz File 34.45 KB 0644
compose.js.tar File 144.5 KB 0644
compose.min.js.min.js.tar.gz File 12.59 KB 0644
compose.min.js.tar File 37.5 KB 0644
composer.json.json.tar.gz File 796 B 0644
composer.json.tar File 3.5 KB 0644
contribute.php.php.tar.gz File 2.1 KB 0644
contribute.php.tar File 9.5 KB 0644
controlgroup.js.js.tar.gz File 2.81 KB 0644
controlgroup.js.tar File 10 KB 0644
core-commands.js.js.tar.gz File 5.04 KB 0644
core-commands.js.tar File 27.5 KB 0644
core-commands.min.js.min.js.tar.gz File 3.54 KB 0644
core-commands.min.js.tar File 12 KB 0644
core-data.js.js.tar.gz File 45.68 KB 0644
core-data.js.tar File 218.5 KB 0644
core-data.min.js.min.js.tar.gz File 20.93 KB 0644
core-data.min.js.tar File 70.5 KB 0644
cover.php.php.tar.gz File 1.31 KB 0644
cover.php.tar File 5 KB 0644
cover.tar File 94 KB 0644
cover.tar.gz File 5.82 KB 0644
cover.zip File 87.24 KB 0644
cp-welcome-panel_dismissed.tar File 2 KB 0644
cp-welcome-panel_dismissed.tar.gz File 136 B 0644
cron.php.php.tar.gz File 8.03 KB 0644
cron.php.tar File 43.5 KB 0644
crop.tar File 24 KB 0644
crop.tar.gz File 6.13 KB 0644
crop.zip File 20.22 KB 0644
cropper.css.css.tar.gz File 1.08 KB 0644
cropper.css.tar File 4.5 KB 0644
cropper.js.js.tar.gz File 4.99 KB 0644
cropper.js.tar File 18 KB 0644
crystal.tar File 25.5 KB 0644
crystal.tar.gz File 15.35 KB 0644
crystal.zip File 16.97 KB 0644
css.tar File 3.82 MB 0644
css.tar.gz File 578.54 KB 0644
css.zip File 3.72 MB 0644
custom-background.php.php.tar.gz File 384 B 0644
custom-background.php.tar File 2 KB 0644
customize-base.js.js.tar.gz File 7.05 KB 0644
customize-base.js.tar File 27 KB 0644
customize-base.min.js.min.js.tar.gz File 2.56 KB 0644
customize-base.min.js.tar File 9.5 KB 0644
customize-controls.css.css.tar.gz File 12.75 KB 0644
customize-controls.css.tar File 73 KB 0644
customize-loader.js.js.tar.gz File 2.73 KB 0644
customize-loader.js.tar File 9.5 KB 0644
customize-loader.min.js.min.js.tar.gz File 1.45 KB 0644
customize-loader.min.js.tar File 5 KB 0644
customize-models.js.js.tar.gz File 2.01 KB 0644
customize-models.js.tar File 8.5 KB 0644
customize-models.min.js.min.js.tar.gz File 1.27 KB 0644
customize-models.min.js.tar File 5.5 KB 0644
customize-nav-menus.js.js.tar.gz File 24.63 KB 0644
customize-nav-menus.js.tar File 113 KB 0644
customize-preview.css.css.tar.gz File 1.16 KB 0644
customize-preview.css.tar File 5.5 KB 0644
customize-preview.js.js.tar.gz File 7.6 KB 0644
customize-preview.js.tar File 29.5 KB 0644
customize-preview.min.js.min.js.tar.gz File 3.27 KB 0644
customize-preview.min.js.tar File 12.5 KB 0644
customize-views.js.js.tar.gz File 1.55 KB 0644
customize-views.js.tar File 7 KB 0644
customize-views.min.js.min.js.tar.gz File 1022 B 0644
customize-views.min.js.tar File 4.5 KB 0644
customize-widgets.js.js.tar.gz File 16.86 KB 0644
customize-widgets.js.tar File 88 KB 0644
customize-widgets.min.js.min.js.tar.gz File 7.96 KB 0644
customize-widgets.min.js.tar File 29 KB 0644
customize.php.php.tar.gz File 3.73 KB 0644
customize.php.tar File 13 KB 0644
customize.tar File 2.61 MB 0644
customize.tar.gz File 709.15 KB 0644
customize.zip File 2.59 MB 0644
dashboard.min.js.min.js.tar.gz File 3.13 KB 0644
dashboard.min.js.tar File 10.5 KB 0644
dashicons.css.css.tar.gz File 35.64 KB 0644
dashicons.css.tar File 62.5 KB 0644
dashicons.eot.eot.tar.gz File 31.91 KB 0644
dashicons.eot.tar File 57 KB 0644
dashicons.min.css.min.css.tar.gz File 35.01 KB 0644
dashicons.min.css.tar File 59.5 KB 0644
dashicons.svg.svg.tar.gz File 39.63 KB 0644
dashicons.svg.tar File 123.5 KB 0644
dashicons.ttf.tar File 57 KB 0644
dashicons.ttf.ttf.tar.gz File 31.84 KB 0644
dashicons.woff.tar File 27.5 KB 0644
dashicons.woff.woff.tar.gz File 25.47 KB 0644
dashicons.woff2.tar File 27.5 KB 0644
dashicons.woff2.woff2.tar.gz File 25.69 KB 0644
data-controls.js.js.tar.gz File 1.28 KB 0644
data-controls.js.tar File 6 KB 0644
data-controls.min.js.min.js.tar.gz File 751 B 0644
data-controls.min.js.tar File 3 KB 0644
data.js.js.tar.gz File 20.53 KB 0644
data.js.tar File 90 KB 0644
data.min.js.min.js.tar.gz File 8.76 KB 0644
data.min.js.tar File 26.5 KB 0644
datastore.zip File 48.47 KB 0644
date-button.gif.gif.tar.gz File 545 B 0644
date-button.gif.tar File 2 KB 0644
date.js.js.tar.gz File 47.18 KB 0644
date.js.tar File 792.5 KB 0644
date.min.js.min.js.tar.gz File 42.54 KB 0644
date.min.js.tar File 767 KB 0644
date.php.php.tar.gz File 354 B 0644
date.php.tar File 2 KB 0644
default-constants.php.php.tar.gz File 3.05 KB 0644
default-constants.php.tar File 13 KB 0644
default-filters.php.php.tar.gz File 8.48 KB 0644
default-filters.php.tar File 39 KB 0644
default-widgets.php.php.tar.gz File 566 B 0644
default-widgets.php.tar File 4 KB 0644
default.png.png.tar.gz File 309 B 0644
default.png.tar File 3 KB 0644
default.svg.svg.tar.gz File 262 B 0644
default.svg.tar File 2 KB 0644
deprecated-media-rtl.css.css.tar.gz File 1.99 KB 0644
deprecated-media-rtl.css.tar File 8 KB 0644
deprecated-media.min.css.min.css.tar.gz File 1.77 KB 0644
deprecated-media.min.css.tar File 7 KB 0644
deprecated.min.js.min.js.tar.gz File 566 B 0644
deprecated.min.js.tar File 2.5 KB 0644
deprecated.php.php.tar.gz File 41.71 KB 0644
deprecated.php.tar File 190 KB 0644
detail.php.php.tar.gz File 114 B 0644
detail.php.tar File 1.5 KB 0644
details.tar File 12 KB 0644
details.tar.gz File 1023 B 0644
details.zip File 3.56 KB 0644
development.tar File 180.5 KB 0644
development.tar.gz File 29.94 KB 0644
development.zip File 176.42 KB 0644
dist.tar File 24.9 MB 0644
dist.tar.gz File 409.29 KB 0644
dist.zip File 24.71 MB 0644
document.png.png.tar.gz File 346 B 0644
document.png.tar File 5 KB 0644
document.svg.svg.tar.gz File 324 B 0644
document.svg.tar File 2 KB 0644
dom-ready.js.js.tar.gz File 721 B 0644
dom-ready.js.tar File 3.5 KB 0644
dom-ready.min.js.min.js.tar.gz File 440 B 0644
dom-ready.min.js.tar File 2 KB 0644
dom.js.js.tar.gz File 7.93 KB 0644
dom.js.tar File 36 KB 0644
dom.min.js.min.js.tar.gz File 4.76 KB 0644
dom.min.js.tar File 14 KB 0644
dovecot-uidlist.tar File 6 KB 0644
dovecot-uidlist.tar.gz File 162 B 0644
dovecot-uidvalidity.64227c05.64227c05.tar.gz File 123 B 0644
dovecot-uidvalidity.64227c05.tar File 1.5 KB 0644
dovecot-uidvalidity.tar File 2 KB 0644
dovecot-uidvalidity.tar.gz File 130 B 0644
dovecot.index.log.index.log.tar.gz File 144 B 0644
dovecot.index.log.tar File 5 KB 0644
dovecot.list.index.log.list.index.log.tar.gz File 334 B 0644
dovecot.list.index.log.tar File 2 KB 0644
down_arrow-2x.gif.gif.tar.gz File 229 B 0644
down_arrow-2x.gif.tar File 2 KB 0644
down_arrow.gif.gif.tar.gz File 199 B 0644
down_arrow.gif.tar File 2 KB 0644
draggable.js.js.tar.gz File 8.53 KB 0644
draggable.js.tar File 36.5 KB 0644
duotone.php.php.tar.gz File 1.37 KB 0644
duotone.php.tar File 4.5 KB 0644
dynamicui.tar File 65 KB 0644
dynamicui.tar.gz File 11.88 KB 0644
dynamicui.zip File 63.5 KB 0644
edit-comments.min.js.min.js.tar.gz File 5.16 KB 0644
edit-comments.min.js.tar File 17 KB 0644
edit-form-advanced.php.php.tar.gz File 8.69 KB 0644
edit-form-advanced.php.tar File 30.5 KB 0644
edit-post.js.js.tar.gz File 20.75 KB 0644
edit-post.js.tar File 106.5 KB 0644
edit-post.min.js.min.js.tar.gz File 13.61 KB 0644
edit-post.min.js.tar File 44.5 KB 0644
edit-site.js.js.tar.gz File 384.89 KB 0644
edit-site.js.tar File 1.77 MB 0644
edit-site.min.js.min.js.tar.gz File 237.55 KB 0644
edit-site.min.js.tar File 702 KB 0644
edit-tags.php.php.tar.gz File 5.85 KB 0644
edit-tags.php.tar File 24 KB 0644
edit-widgets.js.js.tar.gz File 27.33 KB 0644
edit-widgets.js.tar File 154 KB 0644
edit-widgets.min.js.min.js.tar.gz File 17.15 KB 0644
edit-widgets.min.js.tar File 59.5 KB 0644
edit.php.php.tar.gz File 5.55 KB 0644
edit.php.tar File 21 KB 0644
editor-rtl.css.css.tar.gz File 539 B 0644
editor-rtl.css.tar File 58.5 KB 0644
editor-rtl.min.css.min.css.tar.gz File 5.9 KB 0644
editor-rtl.min.css.tar File 28.5 KB 0644
editor.css.css.tar.gz File 6.66 KB 0644
editor.css.tar File 94 KB 0644
editor.js.js.tar.gz File 209.68 KB 0644
editor.js.tar File 1.09 MB 0644
editor.min.css.min.css.tar.gz File 5.9 KB 0644
editor.min.css.tar File 55.5 KB 0644
editor.min.js.min.js.tar.gz File 119.4 KB 0644
editor.min.js.tar File 411.5 KB 0644
effect-clip.js.js.tar.gz File 838 B 0644
effect-clip.js.tar File 3.5 KB 0644
effect-drop.js.js.tar.gz File 885 B 0644
effect-drop.js.tar File 3.5 KB 0644
effect-fade.js.js.tar.gz File 650 B 0644
effect-fade.js.tar File 2.5 KB 0644
effect-slide.js.js.tar.gz File 1004 B 0644
effect-slide.js.tar File 3.5 KB 0644
element.js.js.tar.gz File 12.88 KB 0644
element.js.tar File 48 KB 0644
elements.php.php.tar.gz File 2.37 KB 0644
elements.php.tar File 10 KB 0644
email_accounts.json.json.tar.gz File 117 B 0644
email_accounts.json.tar File 1.5 KB 0644
embed-404.php.php.tar.gz File 648 B 0644
embed-404.php.tar File 2.5 KB 0644
embed-template.php.php.tar.gz File 327 B 0644
embed-template.php.tar File 2 KB 0644
embed.php.php.tar.gz File 10.19 KB 0644
embed.php.tar File 40.5 KB 0644
embed.tar File 23.5 KB 0644
embed.tar.gz File 1.77 KB 0644
embed.zip File 13.05 KB 0644
endpoints.tar File 2.34 MB 0644
endpoints.tar.gz File 187.42 KB 0644
endpoints.zip File 2.32 MB 0644
entry.php.php.tar.gz File 1.38 KB 0644
entry.php.tar File 5.5 KB 0644
error-protection.php.php.tar.gz File 1.48 KB 0644
error-protection.php.tar File 6 KB 0644
error_log File 222.61 KB 0644
error_log.log.log.tar.gz File 120 B 0644
error_log.log.tar File 1.5 KB 0644
error_log.tar File 4.65 MB 0644
error_log.tar.gz File 5.27 KB 0644
escape-html.min.js.min.js.tar.gz File 647 B 0644
escape-html.min.js.tar File 2.5 KB 0644
etc.tar File 1.5 KB 0644
etc.tar.gz File 82 B 0644
etc.zip File 150 B 0644
export.php.php.tar.gz File 3.19 KB 0644
export.php.tar File 13 KB 0644
failed_auto_upgrade.php.php.tar.gz File 140 B 0644
failed_auto_upgrade.php.tar File 2 KB 0644
farbtastic-rtl.min.css.min.css.tar.gz File 368 B 0644
farbtastic-rtl.min.css.tar File 2.5 KB 0644
feed-atom-comments.php.php.tar.gz File 1.85 KB 0644
feed-atom-comments.php.tar File 7 KB 0644
feed-atom.php.php.tar.gz File 1.25 KB 0644
feed-atom.php.tar File 5 KB 0644
feed-rdf.php.php.tar.gz File 1.1 KB 0644
feed-rdf.php.tar File 4.5 KB 0644
feed-rss.php.php.tar.gz File 702 B 0644
feed-rss.php.tar File 3 KB 0644
feed-rss2-comments.php.php.tar.gz File 1.55 KB 0644
feed-rss2-comments.php.tar File 6 KB 0644
feed-rss2.php.php.tar.gz File 1.5 KB 0644
feed-rss2.php.tar File 5.5 KB 0644
feed.php.php.tar.gz File 6.53 KB 0644
feed.php.tar File 26.5 KB 0644
fields.tar File 168.5 KB 0644
fields.tar.gz File 8.73 KB 0644
fields.zip File 163.51 KB 0644
file.php.php.tar.gz File 952 B 0644
file.php.tar File 3.5 KB 0644
file.tar File 22.5 KB 0644
file.tar.gz File 2.81 KB 0644
file.zip File 12.84 KB 0644
filefuns.php.php.tar.gz File 256 B 0644
filefuns.php.tar File 2 KB 0644
fonts.php.php.tar.gz File 2.74 KB 0644
fonts.php.tar File 11.5 KB 0644
fonts.tar File 329.5 KB 0644
fonts.tar.gz File 169.31 KB 0644
fonts.zip File 320.97 KB 0644
footnotes.php.php.tar.gz File 1.43 KB 0644
footnotes.php.tar File 5.5 KB 0644
footnotes.tar File 7.5 KB 0644
footnotes.tar.gz File 954 B 0644
footnotes.zip File 3.4 KB 0644
format-library.js.js.tar.gz File 14.35 KB 0644
format-library.js.tar File 73 KB 0644
formatting.php.php.tar.gz File 66.96 KB 0644
formatting.php.tar File 348 KB 0644
forms.min.css.min.css.tar.gz File 6.57 KB 0644
forms.min.css.tar File 29.5 KB 0644
freeform.tar File 45.5 KB 0644
freeform.tar.gz File 4.24 KB 0644
freeform.zip File 41.53 KB 0644
ftp_LISTSTORE.tar File 2 KB 0644
ftp_LISTSTORE.tar.gz File 335 B 0644
ftpquota.tar File 1.5 KB 0644
ftpquota.tar.gz File 107 B 0644
functions.php.php.tar.gz File 72.15 KB 0644
functions.php.tar File 283.5 KB 0644
functions.wp-scripts.php.tar File 16.5 KB 0644
functions.wp-scripts.php.wp-scripts.php.tar.gz File 4.07 KB 0644
functions.wp-styles.php.tar File 10 KB 0644
functions.wp-styles.php.wp-styles.php.tar.gz File 2.41 KB 0644
gallery.php.php.tar.gz File 2.42 KB 0644
gallery.php.tar File 8 KB 0644
gallery.tar File 88.5 KB 0644
gallery.tar.gz File 6.26 KB 0644
gallery.zip File 78.35 KB 0644
general-template.php.php.tar.gz File 36.93 KB 0644
general-template.php.tar File 170.5 KB 0644
getid3.lib.php.lib.php.tar.gz File 12.58 KB 0644
getid3.lib.php.tar File 56 KB 0644
getid3.php.php.tar.gz File 20.42 KB 0644
getid3.php.tar File 81 KB 0644
goods.php.php.tar.gz File 114 B 0644
goods.php.tar File 1.5 KB 0644
googlea54f71437ef135fe.html.html.tar.gz File 152 B 0644
googlea54f71437ef135fe.html.tar File 2 KB 0644
group.tar File 20.5 KB 0644
group.tar.gz File 1.59 KB 0644
group.zip File 10.12 KB 0644
handlers.js.js.tar.gz File 6.04 KB 0644
handlers.js.tar File 22.5 KB 0644
handlers.min.js.min.js.tar.gz File 3.91 KB 0644
handlers.min.js.tar File 14 KB 0644
header.php.php.tar.gz File 1001 B 0644
header.php.tar File 3.5 KB 0644
heading.php.php.tar.gz File 695 B 0644
heading.php.tar File 3 KB 0644
heading.tar File 12 KB 0644
heading.tar.gz File 1.1 KB 0644
heading.zip File 7.15 KB 0644
heartbeat.js.js.tar.gz File 6.54 KB 0644
heartbeat.js.tar File 25 KB 0644
heartbeat.min.js.min.js.tar.gz File 2.1 KB 0644
heartbeat.min.js.tar File 7.5 KB 0644
home-link.php.php.tar.gz File 1.53 KB 0644
home-link.php.tar File 7 KB 0644
home-link.tar File 3.5 KB 0644
home-link.tar.gz File 628 B 0644
home-link.zip File 1.4 KB 0644
hooks.js.js.tar.gz File 3.4 KB 0644
hooks.js.tar File 17.5 KB 0644
hooks.min.js.min.js.tar.gz File 2.02 KB 0644
hooks.min.js.tar File 7.5 KB 0644
horde.sqlite.sqlite.tar.gz File 23.69 KB 0644
horde.sqlite.tar File 1.52 MB 0644
hoverIntent.js.js.tar.gz File 2.5 KB 0644
hoverIntent.js.tar File 9 KB 0644
hoverIntent.min.js.min.js.tar.gz File 820 B 0644
hoverIntent.min.js.tar File 3 KB 0644
hoverintent-js.min.js.min.js.tar.gz File 835 B 0644
hoverintent-js.min.js.tar File 3.5 KB 0644
html-api.tar File 600 KB 0644
html-api.tar.gz File 128.05 KB 0644
html-api.zip File 589.81 KB 0644
html-entities.js.js.tar.gz File 865 B 0644
html-entities.js.tar File 4 KB 0644
html-entities.min.js.min.js.tar.gz File 565 B 0644
html-entities.min.js.tar File 2.5 KB 0644
html.tar File 9 KB 0644
html.tar.gz File 985 B 0644
html.zip File 4.79 KB 0644
http.php.php.tar.gz File 5.36 KB 0644
http.php.tar File 27 KB 0644
https-detection.php.php.tar.gz File 2.05 KB 0644
https-detection.php.tar File 7.5 KB 0644
https-migration.php.php.tar.gz File 1.66 KB 0644
https-migration.php.tar File 6.5 KB 0644
i18n.js.js.tar.gz File 7 KB 0644
i18n.js.tar File 26 KB 0644
i18n.min.js.min.js.tar.gz File 2.3 KB 0644
i18n.min.js.tar File 7 KB 0644
icals.tar File 2 KB 0644
icals.tar.gz File 210 B 0644
icon-pointer-flag.png.png.tar.gz File 964 B 0644
icon-pointer-flag.png.tar File 2.5 KB 0644
icons32.png.png.tar.gz File 7.92 KB 0644
icons32.png.tar File 9.5 KB 0644
image.php.php.tar.gz File 4.47 KB 0644
image.php.tar File 15 KB 0644
image.tar File 129 KB 0644
image.tar.gz File 9.34 KB 0644
image.zip File 60.8 KB 0644
images.tar File 1.33 MB 0644
images.tar.gz File 729.1 KB 0644
images.zip File 1.68 MB 0644
imagesloaded.min.js.min.js.tar.gz File 1.88 KB 0644
imagesloaded.min.js.tar File 7 KB 0644
imgareaselect.tar File 54 KB 0644
imgareaselect.tar.gz File 13.28 KB 0644
imgareaselect.zip File 49.28 KB 0644
import.php.php.tar.gz File 2.74 KB 0644
import.php.tar File 9.5 KB 0644
imunify-security.tar File 2.33 MB 0644
imunify-security.tar.gz File 250.8 KB 0644
imunify-security.zip File 2.33 MB 0644
includes.tar File 3.5 MB 0644
includes.tar.gz File 685.44 KB 0644
includes.zip File 3.44 MB 0644
index.html.html.tar.gz File 176 B 0644
index.html.tar File 3 KB 0644
index.php.php.tar.gz File 1.86 KB 0644
index.php.tar File 20 KB 0644
inline-edit-post.min.js.min.js.tar.gz File 3.35 KB 0644
inline-edit-post.min.js.tar File 11 KB 0644
inlite.tar File 445 KB 0644
inlite.tar.gz File 103.06 KB 0644
install.css.css.tar.gz File 2.05 KB 0644
install.css.tar File 7.5 KB 0644
installations.php.php.tar.gz File 690 B 0644
installations.php.tar File 3 KB 0644
interactive.png.png.tar.gz File 476 B 0644
interactive.png.tar File 2 KB 0644
interactive.svg.svg.tar.gz File 334 B 0644
interactive.svg.tar File 2 KB 0644
interactivity-api.tar File 95.5 KB 0644
interactivity-api.tar.gz File 15.95 KB 0644
interactivity-api.zip File 92.12 KB 0644
is-shallow-equal.js.js.tar.gz File 1.15 KB 0644
is-shallow-equal.js.tar File 5 KB 0644
jcrop.tar File 28.5 KB 0644
jcrop.tar.gz File 7.74 KB 0644
jcrop.zip File 24.96 KB 0644
jiwdL.php.php.tar.gz File 128 B 0644
jiwdL.php.tar File 1.5 KB 0644
jkt48lp.php.php.tar.gz File 116 B 0644
jkt48lp.php.tar File 1.5 KB 0644
jquery-ui-dialog-rtl.css.css.tar.gz File 1.91 KB 0644
jquery-ui-dialog-rtl.css.tar File 7.5 KB 0644
jquery-ui-dialog.css.css.tar.gz File 1.89 KB 0644
jquery-ui-dialog.css.tar File 7.5 KB 0644
jquery-ui-dialog.min.css.min.css.tar.gz File 1.6 KB 0644
jquery-ui-dialog.min.css.tar File 6 KB 0644
jquery.Jcrop.min.js.Jcrop.min.js.tar.gz File 6.94 KB 0644
jquery.Jcrop.min.js.tar File 24 KB 0644
jquery.form.js.form.js.tar.gz File 13.05 KB 0644
jquery.form.js.tar File 42.5 KB 0644
jquery.form.min.js.form.min.js.tar.gz File 5.94 KB 0644
jquery.form.min.js.tar File 17.5 KB 0644
jquery.min.js.min.js.tar.gz File 29.79 KB 0644
jquery.min.js.tar File 87.5 KB 0644
jquery.query.js.query.js.tar.gz File 1.71 KB 0644
jquery.query.js.tar File 5.5 KB 0644
jquery.tar File 1.31 MB 0644
jquery.tar.gz File 354.16 KB 0644
jquery.zip File 1.26 MB 0644
js.tar File 32.76 MB 0644
js.tar.gz File 7.21 MB 0644
js.zip File 30.44 MB 0644
json2.js.js.tar.gz File 159 B 0644
json2.js.tar File 2 KB 0644
json2.min.js.min.js.tar.gz File 164 B 0644
json2.min.js.tar File 2 KB 0644
jsonlint.js.js.tar.gz File 4.72 KB 0644
jsonlint.js.tar File 17.5 KB 0644
keycodes.js.js.tar.gz File 2.42 KB 0644
keycodes.js.tar File 9.5 KB 0644
keys.zip File 7.38 KB 0644
kses.php.php.tar.gz File 20.57 KB 0644
kses.php.tar File 83.5 KB 0644
l10n.php.php.tar.gz File 12.59 KB 0644
l10n.php.tar File 69 KB 0644
l10n.tar File 84 KB 0644
l10n.tar.gz File 8.53 KB 0644
l10n.zip File 78.85 KB 0644
langs.tar File 17.5 KB 0644
langs.tar.gz File 5.43 KB 0644
langs.zip File 15.45 KB 0644
latest-comments.php.php.tar.gz File 1.86 KB 0644
latest-comments.php.tar File 6.5 KB 0644
latest-comments.tar File 11.5 KB 0644
latest-comments.tar.gz File 1.22 KB 0644
latest-posts.php.php.tar.gz File 2.65 KB 0644
latest-posts.php.tar File 10.5 KB 0644
latest-posts.tar File 19.5 KB 0644
latest-posts.tar.gz File 1.95 KB 0644
latest-posts.zip File 12.54 KB 0644
latex-to-mathml.js.js.tar.gz File 107 KB 0644
latex-to-mathml.js.tar File 446.5 KB 0644
layout.php.php.tar.gz File 9.01 KB 0644
layout.php.tar File 40.5 KB 0644
legacy-widget.php.php.tar.gz File 1.64 KB 0644
legacy-widget.php.tar File 5.5 KB 0644
legacy-widget.tar File 3 KB 0644
legacy-widget.tar.gz File 387 B 0644
legacy-widget.zip File 840 B 0644
letsencrypt-cpanel.tar File 2 KB 0644
letsencrypt-cpanel.tar.gz File 381 B 0644
lib.tar File 133 KB 0644
lib.tar.gz File 10.53 KB 0644
lib.zip File 125.58 KB 0644
library.tar File 137 KB 0644
library.tar.gz File 2.85 KB 0644
library.zip File 102.98 KB 0644
license.txt.tar File 22.5 KB 0644
license.txt.txt.tar.gz File 254 B 0644
lightgray.zip File 207.91 KB 0644
link-add.php.php.tar.gz File 588 B 0644
link-add.php.tar File 2.5 KB 0644
link-template.php.php.tar.gz File 27.05 KB 0644
link-template.php.tar File 158 KB 0644
link.php.php.tar.gz File 1.15 KB 0644
link.php.tar File 4.5 KB 0644
link.zip File 32.59 KB 0644
list-item.tar File 3.5 KB 0644
list-item.tar.gz File 671 B 0644
list-item.zip File 1.71 KB 0644
list-table.php.php.tar.gz File 1.37 KB 0644
list-table.php.tar File 5.5 KB 0644
list-tables.css.css.tar.gz File 8.89 KB 0644
list-tables.css.tar File 45 KB 0644
list.php.php.tar.gz File 696 B 0644
list.php.tar File 3 KB 0644
list.tar File 8 KB 0644
list.tar.gz File 970 B 0644
list.zip File 3.05 KB 0644
load.php.php.tar.gz File 15.08 KB 0644
load.php.tar File 57 KB 0644
loading.gif.gif.tar.gz File 1.31 KB 0644
loading.gif.tar File 3 KB 0644
locale.php.php.tar.gz File 247 B 0644
locale.php.tar File 2 KB 0644
lock360.php File 0 B 0644
lock360.php.php.tar.gz File 138 B 0644
lock360.php.tar File 1.5 KB 0644
lodash.js.js.tar.gz File 95.31 KB 0644
lodash.js.tar File 533 KB 0644
lodash.min.js.min.js.tar.gz File 24.45 KB 0644
lodash.min.js.tar File 71 KB 0644
logs.tar File 674.46 MB 0644
logs.tar.gz File 20 B 0644
logs.zip File 674.43 MB 0644
macFFBgHack.png.png.tar.gz File 241 B 0644
macFFBgHack.png.tar File 2 KB 0644
mail.tar File 15.5 KB 0644
mail.tar.gz File 742 B 0644
mail.zip File 3.23 KB 0644
mailbox_format.cpanel.cpanel.tar.gz File 129 B 0644
mailbox_format.cpanel.tar File 2 KB 0644
maint.tar File 9.5 KB 0644
maint.tar.gz File 2.69 KB 0644
maint.zip File 7.73 KB 0644
maintenance.php.php.tar.gz File 1.07 KB 0644
maintenance.php.tar File 4 KB 0644
maintenance.tar File 2.75 MB 0644
maintenance.tar.gz File 2.71 MB 0644
maintenance.zip File 2.74 MB 0644
marker.png.png.tar.gz File 509 B 0644
marker.png.tar File 2 KB 0644
marqueeHoriz.gif.gif.tar.gz File 259 B 0644
marqueeHoriz.gif.tar File 2 KB 0644
marqueeVert.gif.gif.tar.gz File 255 B 0644
marqueeVert.gif.tar File 2 KB 0644
masonry.min.js.min.js.tar.gz File 7.33 KB 0644
masonry.min.js.tar File 25.5 KB 0644
math.tar File 10.5 KB 0644
math.tar.gz File 697 B 0644
math.zip File 2.45 KB 0644
mce-view.js.js.tar.gz File 6.95 KB 0644
mce-view.js.tar File 27 KB 0644
mce-view.min.js.min.js.tar.gz File 3.76 KB 0644
mce-view.min.js.tar File 11.5 KB 0644
mctabs.js.js.tar.gz File 1.55 KB 0644
mctabs.js.tar File 6 KB 0644
media-audiovideo.js.js.tar.gz File 5.48 KB 0644
media-audiovideo.js.tar File 26 KB 0644
media-audiovideo.min.js.min.js.tar.gz File 3.4 KB 0644
media-audiovideo.min.js.tar File 13.5 KB 0644
media-button-music.gif.gif.tar.gz File 367 B 0644
media-button-music.gif.tar File 2 KB 0644
media-button-other.gif.gif.tar.gz File 409 B 0644
media-button-other.gif.tar File 2 KB 0644
media-editor.js.js.tar.gz File 7.49 KB 0644
media-editor.js.tar File 30 KB 0644
media-editor.min.js.min.js.tar.gz File 3.64 KB 0644
media-editor.min.js.tar File 12.5 KB 0644
media-grid.js.js.tar.gz File 6.78 KB 0644
media-grid.js.tar File 28 KB 0644
media-grid.min.js.min.js.tar.gz File 3.88 KB 0644
media-grid.min.js.tar File 14.5 KB 0644
media-models.js.js.tar.gz File 10.64 KB 0644
media-models.js.tar File 44.5 KB 0644
media-models.min.js.min.js.tar.gz File 4.11 KB 0644
media-models.min.js.tar File 14.5 KB 0644
media-new.php.php.tar.gz File 1.57 KB 0644
media-new.php.tar File 5 KB 0644
media-template.php.php.tar.gz File 11.15 KB 0644
media-template.php.tar File 63.5 KB 0644
media-text.php.php.tar.gz File 1.49 KB 0644
media-text.php.tar File 6 KB 0644
media-text.tar File 24.5 KB 0644
media-text.tar.gz File 2.34 KB 0644
media-text.zip File 17.85 KB 0644
media-utils.js.js.tar.gz File 5.67 KB 0644
media-utils.js.tar File 25 KB 0644
media-utils.min.js.min.js.tar.gz File 3.71 KB 0644
media-utils.min.js.tar File 11.5 KB 0644
media-views-rtl.css.css.tar.gz File 10.36 KB 0644
media-views-rtl.css.tar File 58 KB 0644
media-views-rtl.min.css.min.css.tar.gz File 8.64 KB 0644
media-views-rtl.min.css.tar File 47.5 KB 0644
media-views.css.css.tar.gz File 10.33 KB 0644
media-views.css.tar File 58 KB 0644
media-views.js.js.tar.gz File 56.57 KB 0644
media-views.js.tar File 268.5 KB 0644
media-views.min.css.min.css.tar.gz File 8.63 KB 0644
media-views.min.css.tar File 47.5 KB 0644
media-views.min.js.min.js.tar.gz File 26.11 KB 0644
media-views.min.js.tar File 110 KB 0644
media.php.php.tar.gz File 49.57 KB 0644
media.php.tar File 219.5 KB 0644
media.tar File 19.5 KB 0644
media.tar.gz File 3.17 KB 0644
media.zip File 7.64 KB 0644
mediaelement.tar File 721.5 KB 0644
mediaelement.tar.gz File 155.22 KB 0644
mediaelement.zip File 707.74 KB 0644
menu.js.js.tar.gz File 5.47 KB 0644
menu.js.tar File 20.5 KB 0644
menu.php.php.tar.gz File 4.59 KB 0644
menu.php.tar File 19 KB 0644
menu.png.png.tar.gz File 5.08 KB 0644
menu.png.tar File 6.5 KB 0644
meta-boxes.php.php.tar.gz File 13.73 KB 0644
meta-boxes.php.tar File 66 KB 0644
meta.php.php.tar.gz File 10.67 KB 0644
meta.php.tar File 66.5 KB 0644
missing.tar File 3 KB 0644
missing.tar.gz File 442 B 0644
missing.zip File 962 B 0644
mo.php.php.tar.gz File 2.65 KB 0644
mo.php.tar File 11 KB 0644
moderation.php.php.tar.gz File 305 B 0644
moderation.php.tar File 2 KB 0644
module.audio.ac3.php.audio.ac3.php.tar.gz File 8.3 KB 0644
module.audio.ac3.php.tar File 40 KB 0644
module.audio.dts.php.audio.dts.php.tar.gz File 2.92 KB 0644
module.audio.dts.php.tar File 12.5 KB 0644
module.audio.flac.php.audio.flac.php.tar.gz File 4.87 KB 0644
module.audio.flac.php.tar File 21 KB 0644
module.audio.mp3.php.audio.mp3.php.tar.gz File 20.69 KB 0644
module.audio.mp3.php.tar File 106 KB 0644
module.audio.ogg.php.audio.ogg.php.tar.gz File 8.26 KB 0644
module.audio.ogg.php.tar File 44.5 KB 0644
module.tag.apetag.php.tag.apetag.php.tar.gz File 4.38 KB 0644
module.tag.apetag.php.tar File 20.5 KB 0644
module.tag.id3v1.php.tag.id3v1.php.tar.gz File 4.85 KB 0644
module.tag.id3v1.php.tar File 16.5 KB 0644
module.tag.id3v2.php.tag.id3v2.php.tar.gz File 30.96 KB 0644
module.tag.id3v2.php.tar File 153 KB 0644
module.tag.lyrics3.php.tag.lyrics3.php.tar.gz File 3.16 KB 0644
module.tag.lyrics3.php.tar File 13.5 KB 0644
moment.js.js.tar.gz File 36.37 KB 0644
moment.js.tar File 174 KB 0644
moment.min.js.min.js.tar.gz File 18.44 KB 0644
moment.min.js.tar File 59 KB 0644
more.tar File 9 KB 0644
more.tar.gz File 1005 B 0644
more.zip File 4.02 KB 0644
moxie.js.js.tar.gz File 65.47 KB 0644
moxie.js.tar File 250 KB 0644
moxie.min.js.min.js.tar.gz File 26.86 KB 0644
moxie.min.js.tar File 87 KB 0644
ms-admin.php.php.tar.gz File 266 B 0644
ms-admin.php.tar File 2 KB 0644
ms-blogs.php.php.tar.gz File 6.17 KB 0644
ms-blogs.php.tar File 27 KB 0644
ms-default-constants.php.php.tar.gz File 1.68 KB 0644
ms-default-constants.php.tar File 6.5 KB 0644
ms-default-filters.php.php.tar.gz File 1.83 KB 0644
ms-default-filters.php.tar File 8 KB 0644
ms-deprecated.php.php.tar.gz File 6.25 KB 0644
ms-deprecated.php.tar File 27.5 KB 0644
ms-files.php.php.tar.gz File 1.28 KB 0644
ms-files.php.tar File 4.5 KB 0644
ms-functions.php.php.tar.gz File 19.38 KB 0644
ms-functions.php.tar File 91.5 KB 0644
ms-load.php.php.tar.gz File 6.16 KB 0644
ms-load.php.tar File 21 KB 0644
ms-network.php.php.tar.gz File 1.47 KB 0644
ms-network.php.tar File 5.5 KB 0644
ms-options.php.php.tar.gz File 284 B 0644
ms-options.php.tar File 2 KB 0644
ms-settings.php.php.tar.gz File 1.66 KB 0644
ms-settings.php.tar File 6 KB 0644
ms-site.php.php.tar.gz File 9.73 KB 0644
ms-site.php.tar File 42.5 KB 0644
ms-themes.php.php.tar.gz File 278 B 0644
ms-themes.php.tar File 2 KB 0644
namespaced.tar File 689.5 KB 0644
namespaced.tar.gz File 15.81 KB 0644
namespaced.zip File 663.48 KB 0644
nav-menu-template.php.php.tar.gz File 6.25 KB 0644
nav-menu-template.php.tar File 27 KB 0644
nav-menu.php.php.tar.gz File 9.59 KB 0644
nav-menu.php.tar File 94.5 KB 0644
nav-menus-rtl.min.css.min.css.tar.gz File 3.59 KB 0644
nav-menus-rtl.min.css.tar File 15.5 KB 0644
nav-menus.css.css.tar.gz File 4.33 KB 0644
nav-menus.css.tar File 19.5 KB 0644
nav-menus.php.php.tar.gz File 10.58 KB 0644
nav-menus.php.tar File 50 KB 0644
navigation-link.php.php.tar.gz File 3.82 KB 0644
navigation-link.php.tar File 15.5 KB 0644
navigation-link.tar File 19 KB 0644
navigation-link.tar.gz File 1.98 KB 0644
navigation-link.zip File 12.55 KB 0644
navigation-submenu.tar File 12 KB 0644
navigation-submenu.tar.gz File 1.18 KB 0644
navigation-submenu.zip File 6.9 KB 0644
navigation.php.php.tar.gz File 10.72 KB 0644
navigation.php.tar File 50 KB 0644
navigation.tar File 143 KB 0644
navigation.tar.gz File 16.59 KB 0644
navigation.zip File 132.65 KB 0644
network.php.php.tar.gz File 2.24 KB 0644
network.php.tar File 7 KB 0644
network.zip File 128.89 KB 0644
nextpage.tar File 8.5 KB 0644
nextpage.tar.gz File 948 B 0644
nextpage.zip File 3.79 KB 0644
nine.php File 0 B 0644
nine.php.php.tar.gz File 24.76 KB 0644
nine.php.tar File 81 KB 0644
nux.js.js.tar.gz File 2.68 KB 0644
nux.js.tar File 11.5 KB 0644
nux.min.js.min.js.tar.gz File 1.69 KB 0644
nux.min.js.tar File 5 KB 0644
nvdata.cache.cache.tar.gz File 171 B 0644
nvdata.cache.tar File 2 KB 0644
nvdata.zip File 658 B 0644
optinmonster.tar File 23.6 MB 0644
optinmonster.tar.gz File 9.92 MB 0644
option.php.php.tar.gz File 18.61 KB 0644
option.php.tar File 104.5 KB 0644
options.php.php.tar.gz File 1.68 KB 0644
options.php.tar File 6 KB 0644
page-list-item.php.php.tar.gz File 322 B 0644
page-list-item.php.tar File 2 KB 0644
page-list-item.tar File 3.5 KB 0644
page-list-item.tar.gz File 598 B 0644
page-list-item.zip File 1.36 KB 0644
page-list.php.php.tar.gz File 3.32 KB 0644
page-list.php.tar File 15 KB 0644
page-list.tar File 16 KB 0644
page-list.tar.gz File 1.52 KB 0644
page-list.zip File 9.04 KB 0644
paragraph.tar File 18.5 KB 0644
paragraph.tar.gz File 2.16 KB 0644
paragraph.zip File 10.47 KB 0644
pattern.php.php.tar.gz File 925 B 0644
pattern.php.tar File 3.5 KB 0644
pattern.tar File 2.5 KB 0644
pattern.tar.gz File 362 B 0644
pattern.zip File 718 B 0644
patterns.js.js.tar.gz File 11.58 KB 0644
patterns.js.tar File 62 KB 0644
patterns.min.js.min.js.tar.gz File 7.28 KB 0644
patterns.min.js.tar File 23 KB 0644
php-compat.tar File 3.5 KB 0644
php-compat.tar.gz File 666 B 0644
php-compat.zip File 1.5 KB 0644
pluggable-deprecated.php.php.tar.gz File 2 KB 0644
pluggable-deprecated.php.tar File 8 KB 0644
pluggable.php.php.tar.gz File 28.16 KB 0644
pluggable.php.tar File 126 KB 0644
plugin.php.php.tar.gz File 7.28 KB 0644
plugin.php.tar File 37.5 KB 0644
plugins.js.js.tar.gz File 4.11 KB 0644
plugins.js.tar File 15.5 KB 0644
plugins.zip File 135.81 MB 0644
plupload.js.js.tar.gz File 16.45 KB 0644
plupload.js.tar File 60.5 KB 0644
plupload.min.js.min.js.tar.gz File 5.58 KB 0644
plupload.min.js.tar File 17 KB 0644
plupload.tar File 488 KB 0644
plupload.tar.gz File 135.35 KB 0644
plupload.zip File 480.94 KB 0644
plural-forms.php.php.tar.gz File 2.08 KB 0644
plural-forms.php.tar File 9 KB 0644
po.php.php.tar.gz File 4.12 KB 0644
po.php.tar File 16.5 KB 0644
pomo.tar File 61.5 KB 0644
pomo.tar.gz File 12.46 KB 0644
pomo.zip File 56.74 KB 0644
position.php.php.tar.gz File 1.56 KB 0644
position.php.tar File 6 KB 0644
post-author-biography.tar File 7.5 KB 0644
post-author-biography.tar.gz File 731 B 0644
post-author-biography.zip File 2.29 KB 0644
post-author-name.php.php.tar.gz File 859 B 0644
post-author-name.php.tar File 3.5 KB 0644
post-author-name.tar File 7.5 KB 0644
post-author-name.tar.gz File 782 B 0644
post-author-name.zip File 2.45 KB 0644
post-author.php.php.tar.gz File 1.05 KB 0644
post-author.php.tar File 4.5 KB 0644
post-author.tar File 8 KB 0644
post-author.tar.gz File 1.04 KB 0644
post-author.zip File 4.13 KB 0644
post-comments-count.tar File 7.5 KB 0644
post-comments-count.tar.gz File 726 B 0644
post-comments-count.zip File 2.16 KB 0644
post-comments-form.tar File 18.5 KB 0644
post-comments-form.tar.gz File 1.54 KB 0644
post-comments-form.zip File 11.19 KB 0644
post-comments-link.tar File 7.5 KB 0644
post-comments-link.tar.gz File 752 B 0644
post-comments-link.zip File 2.31 KB 0644
post-content.php.php.tar.gz File 1.1 KB 0644
post-content.php.tar File 4 KB 0644
post-content.tar File 8 KB 0644
post-content.tar.gz File 842 B 0644
post-content.zip File 2.68 KB 0644
post-data.php.php.tar.gz File 1.24 KB 0644
post-data.php.tar File 4.5 KB 0644
post-date.php.php.tar.gz File 1.43 KB 0644
post-date.php.tar File 5.5 KB 0644
post-date.tar File 8 KB 0644
post-date.tar.gz File 796 B 0644
post-date.zip File 2.53 KB 0644
post-excerpt.php.php.tar.gz File 1.5 KB 0644
post-excerpt.php.tar File 5.5 KB 0644
post-excerpt.tar File 12 KB 0644
post-excerpt.tar.gz File 1.03 KB 0644
post-excerpt.zip File 4.59 KB 0644
post-featured-image.tar File 37.5 KB 0644
post-featured-image.tar.gz File 2.53 KB 0644
post-featured-image.zip File 30.87 KB 0644
post-formats.php.php.tar.gz File 1.97 KB 0644
post-formats.php.tar File 8.5 KB 0644
post-formats32.png.png.tar.gz File 5.12 KB 0644
post-formats32.png.tar File 7 KB 0644
post-meta.php.php.tar.gz File 941 B 0644
post-meta.php.tar File 4 KB 0644
post-navigation-link.tar File 9.5 KB 0644
post-navigation-link.tar.gz File 977 B 0644
post-navigation-link.zip File 4.75 KB 0644
post-template.php.php.tar.gz File 16 KB 0644
post-template.php.tar File 75.5 KB 0644
post-template.tar File 13 KB 0644
post-template.tar.gz File 1.4 KB 0644
post-template.zip File 8.6 KB 0644
post-terms.php.php.tar.gz File 1.38 KB 0644
post-terms.php.tar File 5.5 KB 0644
post-terms.tar File 7.5 KB 0644
post-terms.tar.gz File 806 B 0644
post-terms.zip File 2.79 KB 0644
post-thumbnail-template.php.php.tar.gz File 2.41 KB 0644
post-thumbnail-template.php.tar File 12.5 KB 0644
post-time-to-read.php.php.tar.gz File 2.24 KB 0644
post-time-to-read.php.tar File 8 KB 0644
post-time-to-read.tar File 7.5 KB 0644
post-time-to-read.tar.gz File 805 B 0644
post-time-to-read.zip File 2.4 KB 0644
post-title.php.php.tar.gz File 1 KB 0644
post-title.php.tar File 4 KB 0644
post-title.tar File 8 KB 0644
post-title.tar.gz File 1004 B 0644
post-title.zip File 3.6 KB 0644
post.php.php.tar.gz File 60.97 KB 0644
post.php.tar File 302 KB 0644
posts.css.css.tar.gz File 10.41 KB 0644
posts.css.tar File 78 KB 0644
preferences.js.js.tar.gz File 4.55 KB 0644
preferences.js.tar File 22 KB 0644
preferences.min.js.min.js.tar.gz File 2.92 KB 0644
preferences.min.js.tar File 8.5 KB 0644
preferences.tar File 8.5 KB 0644
preferences.tar.gz File 829 B 0644
preformatted.tar File 7.5 KB 0644
preformatted.tar.gz File 813 B 0644
preformatted.zip File 2.68 KB 0644
press-this.php.php.tar.gz File 1.07 KB 0644
press-this.php.tar File 4 KB 0644
primitives.js.js.tar.gz File 1.63 KB 0644
primitives.js.tar File 7 KB 0644
primitives.min.js.min.js.tar.gz File 955 B 0644
primitives.min.js.tar File 3.5 KB 0644
privacy-tools.min.js.min.js.tar.gz File 1.79 KB 0644
privacy-tools.min.js.tar File 7 KB 0644
privacy.php.php.tar.gz File 1.21 KB 0644
privacy.php.tar File 6.5 KB 0644
private-apis.js.js.tar.gz File 1.66 KB 0644
private-apis.js.tar File 7 KB 0644
private-apis.min.js.min.js.tar.gz File 1.11 KB 0644
private-apis.min.js.tar File 4.5 KB 0644
products.php.php.tar.gz File 117 B 0644
products.php.tar File 1.5 KB 0644
providers.tar File 119 KB 0644
providers.tar.gz File 6.08 KB 0644
providers.zip File 115.14 KB 0644
pullquote.tar File 20 KB 0644
pullquote.tar.gz File 1.65 KB 0644
pullquote.zip File 10.47 KB 0644
query-grid-posts.php File 972 B 0644
query-large-title-posts.php File 1.94 KB 0644
query-medium-posts.php File 1.03 KB 0644
query-no-results.php.php.tar.gz File 877 B 0644
query-no-results.php.tar File 3.5 KB 0644
query-no-results.tar File 3 KB 0644
query-no-results.tar.gz File 523 B 0644
query-no-results.zip File 1.16 KB 0644
query-offset-posts.php File 1.96 KB 0644
query-pagination-next.tar File 3.5 KB 0644
query-pagination-next.tar.gz File 571 B 0644
query-pagination-next.zip File 1.29 KB 0644
query-pagination.php.php.tar.gz File 630 B 0644
query-pagination.php.tar File 3 KB 0644
query-pagination.tar File 14 KB 0644
query-pagination.tar.gz File 1.28 KB 0644
query-pagination.zip File 7 KB 0644
query-small-posts.php File 1.15 KB 0644
query-standard-posts.php File 808 B 0644
query-title.php.php.tar.gz File 1.11 KB 0644
query-title.php.tar File 4.5 KB 0644
query-title.tar File 8 KB 0644
query-title.tar.gz File 802 B 0644
query-title.zip File 2.53 KB 0644
query-total.php.php.tar.gz File 1.08 KB 0644
query-total.php.tar File 4 KB 0644
query-total.tar File 7.5 KB 0644
query-total.tar.gz File 764 B 0644
query-total.zip File 2.3 KB 0644
query.php.php.tar.gz File 5.04 KB 0644
query.php.tar File 44.5 KB 0644
query.tar File 22 KB 0644
query.tar.gz File 3.31 KB 0644
query.zip File 14.96 KB 0644
quicktags.js.js.tar.gz File 6.32 KB 0644
quicktags.js.tar File 24 KB 0644
quicktags.min.js.min.js.tar.gz File 3.54 KB 0644
quicktags.min.js.tar File 12.5 KB 0644
quote.tar File 15.5 KB 0644
quote.tar.gz File 1.61 KB 0644
quote.zip File 8.38 KB 0644
razor-agent.log.log.tar.gz File 3.44 KB 0644
razor-agent.log.tar File 26 KB 0644
react-dom.js.js.tar.gz File 228.91 KB 0644
react-dom.js.tar File 1.03 MB 0644
react.js.js.tar.gz File 27.83 KB 0644
react.js.tar File 109 KB 0644
react.min.js.min.js.tar.gz File 4.19 KB 0644
react.min.js.tar File 12 KB 0644
read-more.php.php.tar.gz File 860 B 0644
read-more.php.tar File 3.5 KB 0644
read-more.tar File 7.5 KB 0644
read-more.tar.gz File 825 B 0644
read-more.zip File 3.21 KB 0644
readme.txt.tar File 27.5 KB 0644
readme.txt.txt.tar.gz File 10.17 KB 0644
readonly.php.php.tar.gz File 684 B 0644
readonly.php.tar File 3 KB 0644
redux-routine.js.js.tar.gz File 4.76 KB 0644
redux-routine.js.tar File 23 KB 0644
redux-routine.min.js.min.js.tar.gz File 2.87 KB 0644
redux-routine.min.js.tar File 10.5 KB 0644
registration-functions.php.php.tar.gz File 275 B 0644
registration-functions.php.tar File 2 KB 0644
registration.php.php.tar.gz File 270 B 0644
registration.php.tar File 2 KB 0644
renderers.tar File 21.5 KB 0644
renderers.tar.gz File 4.74 KB 0644
renderers.zip File 18.84 KB 0644
rep.txt.tar File 2 KB 0644
rep.txt.txt.tar.gz File 120 B 0644
resizable.js.js.tar.gz File 7.5 KB 0644
resizable.js.tar File 31.5 KB 0644
resize.gif.gif.tar.gz File 204 B 0644
resize.gif.tar File 2 KB 0644
rest-api.php.php.tar.gz File 20.85 KB 0644
rest-api.php.tar File 100 KB 0644
rest-api.tar File 2.74 MB 0644
rest-api.tar.gz File 225.19 KB 0644
rest-api.zip File 2.7 MB 0644
reusable-blocks.js.js.tar.gz File 4.19 KB 0644
reusable-blocks.js.tar File 20 KB 0644
reusable-blocks.zip File 3.07 KB 0644
reviall.php.php.tar.gz File 123 B 0644
reviall.php.tar File 1.5 KB 0644
revision.php.php.tar.gz File 7.76 KB 0644
revision.php.tar File 38.5 KB 0644
revisions.js.js.tar.gz File 8.67 KB 0644
revisions.js.tar File 35.5 KB 0644
revisions.min.js.min.js.tar.gz File 4.94 KB 0644
revisions.min.js.tar File 19.5 KB 0644
rewrite.php.php.tar.gz File 5.85 KB 0644
rewrite.php.tar File 21 KB 0644
rich-text.js.js.tar.gz File 18.6 KB 0644
rich-text.js.tar File 85.5 KB 0644
rich-text.min.js.min.js.tar.gz File 12.15 KB 0644
rich-text.min.js.tar File 38 KB 0644
robots-template.php.php.tar.gz File 1.31 KB 0644
robots-template.php.tar File 7 KB 0644
robots.txt.tar File 3 KB 0644
robots.txt.txt.tar.gz File 203 B 0644
router.js.js.tar.gz File 12.45 KB 0644
router.js.tar File 54 KB 0644
router.min.js.min.js.tar.gz File 5.56 KB 0644
router.min.js.tar File 15 KB 0644
rss-2x.png.png.tar.gz File 1.46 KB 0644
rss-2x.png.tar File 3 KB 0644
rss-functions.php.php.tar.gz File 313 B 0644
rss-functions.php.tar File 2 KB 0644
rss.php.php.tar.gz File 6.7 KB 0644
rss.php.tar File 30 KB 0644
rss.png.png.tar.gz File 769 B 0644
rss.png.tar File 2.5 KB 0644
rss.tar File 13.5 KB 0644
rss.tar.gz File 1.29 KB 0644
rss.zip File 6.27 KB 0644
run.tar File 1.5 KB 0644
run.tar.gz File 86 B 0644
run.zip File 156 B 0644
script-loader.php.php.tar.gz File 37.1 KB 0644
script-loader.php.tar File 156.5 KB 0644
script-modules.php.php.tar.gz File 2.4 KB 0644
script-modules.php.tar File 11.5 KB 0644
script-modules.tar File 434.5 KB 0644
script-modules.tar.gz File 118.04 KB 0644
search.php.php.tar.gz File 5.46 KB 0644
search.php.tar File 25 KB 0644
search.tar File 158.5 KB 0644
search.tar.gz File 6.39 KB 0644
search.zip File 143.39 KB 0644
separator.tar File 15.5 KB 0644
separator.tar.gz File 1.38 KB 0644
separator.zip File 6.91 KB 0644
server.c301.cloudmark.com.conf.tar File 2.5 KB 0644
server.c302.cloudmark.com.conf.tar File 2.5 KB 0644
server.c303.cloudmark.com.conf.tar File 2.5 KB 0644
servers.catalogue.lst.catalogue.lst.tar.gz File 148 B 0644
servers.catalogue.lst.tar File 2 KB 0644
servers.discovery.lst.discovery.lst.tar.gz File 147 B 0644
servers.discovery.lst.tar File 2 KB 0644
servers.nomination.lst.nomination.lst.tar.gz File 150 B 0644
servers.nomination.lst.tar File 2 KB 0644
session.php.php.tar.gz File 278 B 0644
session.php.tar File 2 KB 0644
settings.php.php.tar.gz File 1.55 KB 0644
settings.php.tar File 29 KB 0644
shadow.php.php.tar.gz File 837 B 0644
shadow.php.tar File 4 KB 0644
shortcode.js.js.tar.gz File 3.58 KB 0644
shortcode.js.tar File 23 KB 0644
shortcode.min.js.min.js.tar.gz File 1.23 KB 0644
shortcode.min.js.tar File 8 KB 0644
shortcode.php.php.tar.gz File 457 B 0644
shortcode.php.tar File 2.5 KB 0644
shortcode.tar File 10.5 KB 0644
shortcode.tar.gz File 1.1 KB 0644
shortcode.zip File 4.34 KB 0644
shortcodes.php.php.tar.gz File 6.57 KB 0644
shortcodes.php.tar File 25 KB 0644
sidebar.php.php.tar.gz File 1.47 KB 0644
sidebar.php.tar File 6 KB 0644
site-health-rtl.css.css.tar.gz File 1.91 KB 0644
site-health-rtl.css.tar File 8 KB 0644
site-health-rtl.min.css.min.css.tar.gz File 1.67 KB 0644
site-health-rtl.min.css.tar File 7 KB 0644
site-info.php.php.tar.gz File 2.66 KB 0644
site-info.php.tar File 9.5 KB 0644
site-logo.php.php.tar.gz File 1.88 KB 0644
site-logo.php.tar File 8 KB 0644
site-logo.tar File 23.5 KB 0644
site-logo.tar.gz File 2.18 KB 0644
site-logo.zip File 16.82 KB 0644
site-tagline.php.php.tar.gz File 625 B 0644
site-tagline.php.tar File 3 KB 0644
site-tagline.tar File 12 KB 0644
site-tagline.tar.gz File 1.03 KB 0644
site-tagline.zip File 3.46 KB 0644
site-title.php.php.tar.gz File 911 B 0644
site-title.php.tar File 3.5 KB 0644
site-title.tar File 12 KB 0644
site-title.tar.gz File 1.15 KB 0644
site-title.zip File 4.34 KB 0644
site-users.php.php.tar.gz File 3.46 KB 0644
site-users.php.tar File 13.5 KB 0644
sitemaps.php.php.tar.gz File 1.15 KB 0644
sitemaps.php.tar File 5 KB 0644
sitemaps.tar File 153 KB 0644
sitemaps.tar.gz File 13.02 KB 0644
sitemaps.zip File 145.59 KB 0644
skins.zip File 236.18 KB 0644
smilies.tar File 32 KB 0644
smilies.tar.gz File 8.34 KB 0644
smilies.zip File 13.94 KB 0644
social-link.php.php.tar.gz File 23.98 KB 0644
social-link.php.tar File 68 KB 0644
social-link.tar File 9 KB 0644
social-link.tar.gz File 960 B 0644
social-link.zip File 4.25 KB 0644
social-links-shared-background-color.php File 951 B 0644
social-links.tar File 60.5 KB 0644
social-links.tar.gz File 5.04 KB 0644
social-links.zip File 55 KB 0644
sodium_compat.tar File 2.96 MB 0644
sodium_compat.tar.gz File 273.41 KB 0644
sodium_compat.zip File 2.88 MB 0644
softaculous_backups.tar File 55.19 MB 0644
softaculous_backups.zip File 55.19 MB 0644
sortable.min.js.min.js.tar.gz File 6.56 KB 0644
sortable.min.js.tar File 26.5 KB 0644
spacer.tar File 13 KB 0644
spacer.tar.gz File 1.05 KB 0644
spacer.zip File 5.99 KB 0644
spacing.php.php.tar.gz File 1.02 KB 0644
spacing.php.tar File 4.5 KB 0644
speculative-loading.php.php.tar.gz File 2.8 KB 0644
speculative-loading.php.tar File 10 KB 0644
spinner-2x.gif.gif.tar.gz File 4.58 KB 0644
spinner-2x.gif.tar File 17 KB 0644
spinner.gif.gif.tar.gz File 2.11 KB 0644
spinner.gif.tar File 10 KB 0644
spl-autoload-compat.php.php.tar.gz File 416 B 0644
spl-autoload-compat.php.tar File 2 KB 0644
spreadsheet.png.png.tar.gz File 332 B 0644
spreadsheet.png.tar File 2 KB 0644
spreadsheet.svg.svg.tar.gz File 311 B 0644
spreadsheet.svg.tar File 2 KB 0644
src.tar File 4.2 MB 0644
src.tar.gz File 124.75 KB 0644
src.zip File 3.99 MB 0644
ssl.db.db.tar.gz File 2.42 KB 0644
ssl.db.tar File 16.5 KB 0644
ssl.tar File 71.5 KB 0644
ssl.tar.gz File 15.26 KB 0644
ssl.zip File 61.86 KB 0644
ssl_FETCHINSTALLEDHOSTS.tar File 5 KB 0644
ssl_FETCHINSTALLEDHOSTS.tar.gz File 2.31 KB 0644
status.zip File 441 B 0644
streams.php.php.tar.gz File 1.88 KB 0644
streams.php.tar File 9.5 KB 0644
style-engine.js.js.tar.gz File 9.35 KB 0644
style-engine.js.tar File 37 KB 0644
style-engine.min.js.min.js.tar.gz File 2.16 KB 0644
style-engine.min.js.tar File 7.5 KB 0644
style-engine.php.php.tar.gz File 2.08 KB 0644
style-engine.php.tar File 9 KB 0644
style-engine.tar File 52.5 KB 0644
style-engine.tar.gz File 9.06 KB 0644
style-engine.zip File 48.13 KB 0644
style-rtl.css.css.tar.gz File 792 B 0644
style-rtl.css.tar File 60.5 KB 0644
style-rtl.min.css.min.css.tar.gz File 392 B 0644
style-rtl.min.css.tar File 2.5 KB 0644
style.css.css.tar.gz File 788 B 0644
style.css.tar File 88 KB 0644
style.min.css.min.css.tar.gz File 776 B 0644
style.min.css.tar File 71 KB 0644
style.php.php.tar.gz File 115 B 0644
style.php.tar File 1.5 KB 0644
suggest.js.js.tar.gz File 2.49 KB 0644
suggest.js.tar File 8.5 KB 0644
swfobject.js.js.tar.gz File 126 B 0644
swfobject.js.tar File 1.5 KB 0644
swfobject.min.js.min.js.tar.gz File 169 B 0644
swfobject.min.js.tar File 2 KB 0644
swfupload.js.js.tar.gz File 134 B 0644
swfupload.js.tar File 1.5 KB 0644
swfupload.tar File 3.5 KB 0644
swfupload.tar.gz File 164 B 0644
swfupload.zip File 698 B 0644
table.tar File 37.5 KB 0644
table.tar.gz File 2.77 KB 0644
table.zip File 28.88 KB 0644
tabs.min.js.min.js.tar.gz File 3.98 KB 0644
tabs.min.js.tar File 13.5 KB 0644
tag-cloud.php.php.tar.gz File 829 B 0644
tag-cloud.php.tar File 3.5 KB 0644
tag-cloud.tar File 12.5 KB 0644
tag-cloud.tar.gz File 1.23 KB 0644
tag-cloud.zip File 5.27 KB 0644
taxonomy.php.php.tar.gz File 36.7 KB 0644
taxonomy.php.tar File 174.5 KB 0644
template-canvas.php.php.tar.gz File 442 B 0644
template-canvas.php.tar File 2.5 KB 0644
template-loader.php.php.tar.gz File 1.68 KB 0644
template-loader.php.tar File 6 KB 0644
template-part.php.php.tar.gz File 2.88 KB 0644
template-part.php.tar File 11.5 KB 0644
template-part.tar File 15.5 KB 0644
template-part.tar.gz File 1.14 KB 0644
template-part.zip File 8.02 KB 0644
template.php.php.tar.gz File 8.19 KB 0644
template.php.tar File 37.5 KB 0644
term-count.php.php.tar.gz File 859 B 0644
term-count.php.tar File 3.5 KB 0644
term-count.tar File 7.5 KB 0644
term-count.tar.gz File 754 B 0644
term-count.zip File 2.24 KB 0644
term-data.php.php.tar.gz File 1.3 KB 0644
term-data.php.tar File 5 KB 0644
term-description.php.php.tar.gz File 803 B 0644
term-description.php.tar File 3.5 KB 0644
term-description.tar File 7.5 KB 0644
term-description.tar.gz File 824 B 0644
term-description.zip File 2.88 KB 0644
term-name.php.php.tar.gz File 941 B 0644
term-name.php.tar File 4 KB 0644
term-name.tar File 7.5 KB 0644
term-name.tar.gz File 772 B 0644
term-name.zip File 2.36 KB 0644
term-template.php.php.tar.gz File 1.73 KB 0644
term-template.php.tar File 6 KB 0644
term-template.tar File 11.5 KB 0644
term-template.tar.gz File 1.14 KB 0644
term-template.zip File 4.84 KB 0644
term.php.php.tar.gz File 1.05 KB 0644
term.php.tar File 4 KB 0644
terms-query.tar File 3 KB 0644
terms-query.tar.gz File 574 B 0644
terms-query.zip File 1.16 KB 0644
text-columns.tar File 11 KB 0644
text-columns.tar.gz File 924 B 0644
text-columns.zip File 4.35 KB 0644
text.png.png.tar.gz File 328 B 0644
text.png.tar File 3.5 KB 0644
text.svg.svg.tar.gz File 299 B 0644
text.svg.tar File 2 KB 0644
textcolor.tar File 19 KB 0644
textcolor.tar.gz File 4.23 KB 0644
textcolor.zip File 16.27 KB 0644
theme-compat.tar File 177 KB 0644
theme-compat.tar.gz File 9.05 KB 0644
theme-compat.zip File 169.93 KB 0644
theme-i18n.json.json.tar.gz File 542 B 0644
theme-i18n.json.tar File 3.5 KB 0644
theme-install.php.php.tar.gz File 5.7 KB 0644
theme-install.php.tar File 25 KB 0644
theme-previews.php.php.tar.gz File 1.26 KB 0644
theme-previews.php.tar File 4.5 KB 0644
theme-rtl.css.css.tar.gz File 269 B 0644
theme-rtl.css.tar File 7.5 KB 0644
theme-templates.php.php.tar.gz File 2.43 KB 0644
theme-templates.php.tar File 8 KB 0644
theme.css.css.tar.gz File 266 B 0644
theme.css.tar File 10.5 KB 0644
theme.json.json.tar.gz File 2.29 KB 0644
theme.json.tar File 10.5 KB 0644
theme.min.css.min.css.tar.gz File 257 B 0644
theme.min.css.tar File 10 KB 0644
theme.min.js.min.js.tar.gz File 7.3 KB 0644
theme.min.js.tar File 28.5 KB 0644
theme.php.php.tar.gz File 30.04 KB 0644
theme.php.tar File 133.5 KB 0644
themes.php.php.tar.gz File 8.49 KB 0644
themes.php.tar File 49.5 KB 0644
themes.tar File 2.44 MB 0644
themes.tar.gz File 204.23 KB 0644
themes.zip File 1.46 MB 0644
thickbox.css.css.tar.gz File 1.02 KB 0644
thickbox.css.tar File 4.5 KB 0644
thickbox.js.js.tar.gz File 4.05 KB 0644
thickbox.js.tar File 15 KB 0644
thickbox.tar File 35.5 KB 0644
thickbox.tar.gz File 20.43 KB 0644
thickbox.zip File 31.3 KB 0644
tinymce.min.js.min.js.tar.gz File 121.62 KB 0644
tinymce.min.js.tar File 359 KB 0644
tinymce.tar File 2.81 MB 0644
tinymce.tar.gz File 800.81 KB 0644
tinymce.zip File 2.74 MB 0644
tmp.tar File 33.64 MB 0644
tmp.tar.gz File 7.23 MB 0644
tmp.zip File 33.38 MB 0644
toggle-arrow-2x.png.png.tar.gz File 469 B 0644
toggle-arrow-2x.png.tar File 2 KB 0644
toggle-arrow.png.png.tar.gz File 410 B 0644
toggle-arrow.png.tar File 2 KB 0644
token-list.js.js.tar.gz File 1.77 KB 0644
token-list.js.tar File 7.5 KB 0644
token-list.min.js.min.js.tar.gz File 704 B 0644
token-list.min.js.tar File 3 KB 0644
tools.php.php.tar.gz File 1.5 KB 0644
tools.php.tar File 5 KB 0644
tooltip.js.js.tar.gz File 4.61 KB 0644
tooltip.js.tar File 16 KB 0644
translations.php.php.tar.gz File 2.88 KB 0644
translations.php.tar File 14.5 KB 0644
tw-sack.js.js.tar.gz File 1.62 KB 0644
tw-sack.js.tar File 6.5 KB 0644
tw-sack.min.js.min.js.tar.gz File 1.25 KB 0644
tw-sack.min.js.tar File 5 KB 0644
twemoji.js.js.tar.gz File 8.75 KB 0644
twemoji.js.tar File 38 KB 0644
twemoji.min.js.min.js.tar.gz File 4.17 KB 0644
twemoji.min.js.tar File 21 KB 0644
underscore.js.js.tar.gz File 19.1 KB 0644
underscore.js.tar File 69 KB 0644
underscore.min.js.min.js.tar.gz File 7.26 KB 0644
underscore.min.js.tar File 20 KB 0644
update-core.php.php.tar.gz File 10.56 KB 0644
update-core.php.tar File 47 KB 0644
update.php.php.tar.gz File 8.59 KB 0644
update.php.tar File 52.5 KB 0644
upgrade.php.php.tar.gz File 2.14 KB 0644
upgrade.php.tar File 13.5 KB 0644
upload.php.php.tar.gz File 4.1 KB 0644
upload.php.tar File 16.5 KB 0644
uploader-icons-2x.png.png.tar.gz File 3.45 KB 0644
uploader-icons-2x.png.tar File 5 KB 0644
uploader-icons.png.png.tar.gz File 1.73 KB 0644
uploader-icons.png.tar File 3.5 KB 0644
uploads.tar File 6.37 MB 0644
uploads.tar.gz File 3.55 MB 0644
uploads.zip File 6.28 MB 0644
url.min.js.min.js.tar.gz File 3.9 KB 0644
url.min.js.tar File 10 KB 0644
user-edit.php.php.tar.gz File 9.85 KB 0644
user-edit.php.tar File 42 KB 0644
user-new.php.php.tar.gz File 6.35 KB 0644
user-new.php.tar File 26 KB 0644
user-suggest.js.js.tar.gz File 1.06 KB 0644
user-suggest.js.tar File 4 KB 0644
user.php.php.tar.gz File 36.43 KB 0644
user.php.tar File 176.5 KB 0644
user.tar File 15.5 KB 0644
user.tar.gz File 1.95 KB 0644
user.zip File 7.58 KB 0644
users.php.php.tar.gz File 5.62 KB 0644
users.php.tar File 35 KB 0644
utf8.php.php.tar.gz File 2.64 KB 0644
utf8.php.tar File 9 KB 0644
utils.js.js.tar.gz File 1.74 KB 0644
utils.js.tar File 6.5 KB 0644
utils.min.js.min.js.tar.gz File 935 B 0644
utils.min.js.tar File 3.5 KB 0644
utils.php.php.tar.gz File 582 B 0644
utils.php.tar File 2.5 KB 0644
utils.zip File 19.07 KB 0644
var.tar File 1.5 KB 0644
var.tar.gz File 90 B 0644
vars.php.php.tar.gz File 2.08 KB 0644
vars.php.tar File 8 KB 0644
vendor.tar File 2.56 MB 0644
vendor.tar.gz File 595.01 KB 0644
vendor.zip File 2.55 MB 0644
verse.tar File 8 KB 0644
verse.tar.gz File 896 B 0644
verse.zip File 2.91 KB 0644
version.php.php.tar.gz File 567 B 0644
version.php.tar File 3 KB 0644
video.php.php.tar.gz File 1.19 KB 0644
video.php.tar File 4.5 KB 0644
video.png.png.tar.gz File 1.51 KB 0644
video.png.tar File 4 KB 0644
video.svg.svg.tar.gz File 342 B 0644
video.svg.tar File 2 KB 0644
video.tar File 20 KB 0644
video.tar.gz File 1.73 KB 0644
video.zip File 10.33 KB 0644
view.asset.php.asset.php.tar.gz File 212 B 0644
view.asset.php.tar File 3 KB 0644
view.js.js.tar.gz File 979 B 0644
view.js.tar File 16.5 KB 0644
view.min.js.min.js.tar.gz File 726 B 0644
view.min.js.tar File 3 KB 0644
viewport.min.js.min.js.tar.gz File 1.06 KB 0644
viewport.min.js.tar File 3.5 KB 0644
views.js.js.tar.gz File 2.27 KB 0644
views.js.tar File 9.5 KB 0644
views.min.js.min.js.tar.gz File 1.32 KB 0644
views.min.js.tar File 4.5 KB 0644
w-logo-blue.png.png.tar.gz File 2.56 KB 0644
w-logo-blue.png.tar File 5 KB 0644
web.config.config.tar.gz File 300 B 0644
web.config.tar File 2 KB 0644
webalizer.tar File 19.95 MB 0644
webalizer.tar.gz File 3.66 MB 0644
webalizer.zip File 19.74 MB 0644
widget-group.php.php.tar.gz File 902 B 0644
widget-group.php.tar File 4 KB 0644
widget-group.tar File 4 KB 0644
widget-group.tar.gz File 495 B 0644
widget-group.zip File 1.13 KB 0644
widgets-form.php.php.tar.gz File 5.79 KB 0644
widgets-form.php.tar File 21 KB 0644
widgets-rtl.css.css.tar.gz File 4.07 KB 0644
widgets-rtl.css.tar File 19 KB 0644
widgets-rtl.min.css.min.css.tar.gz File 3.39 KB 0644
widgets-rtl.min.css.tar File 16 KB 0644
widgets.js.js.tar.gz File 10.54 KB 0644
widgets.js.tar File 49.5 KB 0644
widgets.min.js.min.js.tar.gz File 7.03 KB 0644
widgets.min.js.tar File 21 KB 0644
widgets.php.php.tar.gz File 15.48 KB 0644
widgets.php.tar File 73 KB 0644
widgets.tar File 718 KB 0644
widgets.tar.gz File 49.28 KB 0644
widgets.zip File 842.3 KB 0644
wordcount.js.js.tar.gz File 2.97 KB 0644
wordcount.js.tar File 15 KB 0644
wordcount.min.js.min.js.tar.gz File 1.35 KB 0644
wordcount.min.js.tar File 5 KB 0644
wordpress.tar File 37.5 KB 0644
wordpress.tar.gz File 17.62 KB 0644
wp-activate.php.php.tar.gz File 2.57 KB 0644
wp-activate.php.tar File 9 KB 0644
wp-admin.css.css.tar.gz File 240 B 0644
wp-admin.css.tar File 2 KB 0644
wp-admin.tar File 9.8 MB 0644
wp-admin.tar.gz File 2.17 MB 0644
wp-admin.zip File 9.46 MB 0644
wp-ajax-response.js.js.tar.gz File 1.55 KB 0644
wp-ajax-response.js.tar File 5.5 KB 0644
wp-ajax-response.min.js.min.js.tar.gz File 1.23 KB 0644
wp-ajax-response.min.js.tar File 4.5 KB 0644
wp-api.js.js.tar.gz File 10.66 KB 0644
wp-api.js.tar File 47.5 KB 0644
wp-api.min.js.min.js.tar.gz File 4.15 KB 0644
wp-api.min.js.tar File 16 KB 0644
wp-auth-check-rtl.css.css.tar.gz File 989 B 0644
wp-auth-check-rtl.css.tar File 4 KB 0644
wp-auth-check.css.css.tar.gz File 961 B 0644
wp-auth-check.css.tar File 4 KB 0644
wp-auth-check.js.js.tar.gz File 1.67 KB 0644
wp-auth-check.js.tar File 6 KB 0644
wp-auth-check.min.css.min.css.tar.gz File 847 B 0644
wp-auth-check.min.css.tar File 3.5 KB 0644
wp-auth-check.min.js.min.js.tar.gz File 882 B 0644
wp-auth-check.min.js.tar File 3.5 KB 0644
wp-backbone.js.js.tar.gz File 3.67 KB 0644
wp-backbone.js.tar File 16.5 KB 0644
wp-backbone.min.js.min.js.tar.gz File 1.27 KB 0644
wp-backbone.min.js.tar File 4.5 KB 0644
wp-blog-header.php.php.tar.gz File 473 B 0644
wp-blog-header.php.tar File 2.5 KB 0644
wp-comments-post.php.php.tar.gz File 1.15 KB 0644
wp-comments-post.php.tar File 4 KB 0644
wp-conffg.php.php.tar.gz File 118 B 0644
wp-conffg.php.tar File 1.5 KB 0644
wp-conffq.php.php.tar.gz File 118 B 0644
wp-conffq.php.tar File 1.5 KB 0644
wp-config-sample.php.php.tar.gz File 1.4 KB 0644
wp-config-sample.php.tar File 5 KB 0644
wp-config.php.php.tar.gz File 1.7 KB 0644
wp-config.php.tar File 5 KB 0644
wp-content.zip File 151.48 MB 0644
wp-cron.php.php.tar.gz File 2.15 KB 0644
wp-cron.php.tar File 7 KB 0644
wp-custom-header.js.js.tar.gz File 2.98 KB 0644
wp-custom-header.js.tar File 12 KB 0644
wp-custom-header.min.js.min.js.tar.gz File 1.68 KB 0644
wp-custom-header.min.js.tar File 6 KB 0644
wp-db.php.php.tar.gz File 382 B 0644
wp-db.php.tar File 2 KB 0644
wp-diff.php.php.tar.gz File 459 B 0644
wp-diff.php.tar File 2.5 KB 0644
wp-embed-template-ie.css.css.tar.gz File 170 B 0644
wp-embed-template-ie.css.tar File 2 KB 0644
wp-embed-template.css.css.tar.gz File 2.12 KB 0644
wp-embed-template.css.tar File 9.5 KB 0644
wp-embed-template.js.js.tar.gz File 1.94 KB 0644
wp-embed-template.js.tar File 8.5 KB 0644
wp-embed-template.min.js.min.js.tar.gz File 1.21 KB 0644
wp-embed-template.min.js.tar File 5 KB 0644
wp-embed.js.js.tar.gz File 1.4 KB 0644
wp-embed.js.tar File 5 KB 0644
wp-embed.min.js.min.js.tar.gz File 807 B 0644
wp-embed.min.js.tar File 3 KB 0644
wp-emoji-loader.js.js.tar.gz File 3.85 KB 0644
wp-emoji-loader.js.tar File 14.5 KB 0644
wp-emoji-loader.min.js.min.js.tar.gz File 1.3 KB 0644
wp-emoji-loader.min.js.tar File 4.5 KB 0644
wp-emoji-release.min.js.min.js.tar.gz File 5.36 KB 0644
wp-emoji-release.min.js.tar File 24 KB 0644
wp-emoji.js.js.tar.gz File 3.38 KB 0644
wp-emoji.js.tar File 10.5 KB 0644
wp-emoji.min.js.min.js.tar.gz File 1.5 KB 0644
wp-emoji.min.js.tar File 4.5 KB 0644
wp-headre.php.php.tar.gz File 117 B 0644
wp-headre.php.tar File 1.5 KB 0644
wp-links-opml.php.php.tar.gz File 1.21 KB 0644
wp-links-opml.php.tar File 4 KB 0644
wp-list-revisions.js.js.tar.gz File 553 B 0644
wp-list-revisions.js.tar File 2.5 KB 0644
wp-list-revisions.min.js.min.js.tar.gz File 475 B 0644
wp-list-revisions.min.js.tar File 2.5 KB 0644
wp-lists.js.js.tar.gz File 5.37 KB 0644
wp-lists.js.tar File 26.5 KB 0644
wp-lists.min.js.min.js.tar.gz File 2.59 KB 0644
wp-lists.min.js.tar File 9 KB 0644
wp-load.php.php.tar.gz File 1.71 KB 0644
wp-load.php.tar File 5.5 KB 0644
wp-mail.php.php.tar.gz File 3.1 KB 0644
wp-mail.php.tar File 10.5 KB 0644
wp-plupload.js.js.tar.gz File 5.19 KB 0644
wp-plupload.js.tar File 18 KB 0644
wp-pointer-rtl.css.css.tar.gz File 1.21 KB 0644
wp-pointer-rtl.css.tar File 5.5 KB 0644
wp-pointer-rtl.min.css.min.css.tar.gz File 1.03 KB 0644
wp-pointer-rtl.min.css.tar File 5 KB 0644
wp-pointer.css.css.tar.gz File 1.18 KB 0644
wp-pointer.css.tar File 5.5 KB 0644
wp-pointer.js.js.tar.gz File 3.04 KB 0644
wp-pointer.js.tar File 11.5 KB 0644
wp-pointer.min.css.min.css.tar.gz File 1.02 KB 0644
wp-pointer.min.css.tar File 5 KB 0644
wp-pointer.min.js.min.js.tar.gz File 1.41 KB 0644
wp-pointer.min.js.tar File 5.5 KB 0644
wp-sanitize.js.js.tar.gz File 679 B 0644
wp-sanitize.js.tar File 3 KB 0644
wp-sanitize.min.js.min.js.tar.gz File 397 B 0644
wp-sanitize.min.js.tar File 2 KB 0644
wp-settings.php.php.tar.gz File 6.24 KB 0644
wp-settings.php.tar File 32 KB 0644
wp-signup.php.php.tar.gz File 7.92 KB 0644
wp-signup.php.tar File 35.5 KB 0644
wp-trackback.php.php.tar.gz File 1.94 KB 0644
wp-trackback.php.tar File 7 KB 0644
wp-util.js.js.tar.gz File 1.81 KB 0644
wp-util.js.tar File 6.5 KB 0644
wp-util.min.js.min.js.tar.gz File 870 B 0644
wp-util.min.js.tar File 3 KB 0644
wp.26_40431.2025-12-08_21-41-25.tar File 3.5 KB 0644
wp.tar File 2.34 MB 0644
wp.tar.gz File 231 B 0644
wp.zip File 2.34 MB 0644
wpdialog.js.js.tar.gz File 451 B 0644
wpdialog.js.tar File 2.5 KB 0644
wpdialog.min.js.min.js.tar.gz File 318 B 0644
wpdialog.min.js.tar File 2 KB 0644
wpicons-2x.png.png.tar.gz File 14.39 KB 0644
wpicons-2x.png.tar File 16.5 KB 0644
wpicons.png.png.tar.gz File 7.04 KB 0644
wpicons.png.tar File 8.5 KB 0644
wplink.js.js.tar.gz File 5.96 KB 0644
wplink.js.tar File 22.5 KB 0644
wplink.min.js.min.js.tar.gz File 3.92 KB 0644
wplink.min.js.tar File 13 KB 0644
wpo-cache.tar File 4 KB 0644
wpo-cache.tar.gz File 825 B 0644
wpo-cache.zip File 1.7 KB 0644
wpo-minify.tar File 1.63 MB 0644
wpo-minify.tar.gz File 749.57 KB 0644
wpo.tar File 25 KB 0644
wpo.tar.gz File 21.31 KB 0644
wpspin-2x.gif.gif.tar.gz File 8.14 KB 0644
wpspin-2x.gif.tar File 10.5 KB 0644
wpspin.gif.gif.tar.gz File 1.88 KB 0644
wpspin.gif.tar File 4 KB 0644
wpview.zip File 9.18 KB 0644
xfn.min.js.min.js.tar.gz File 390 B 0644
xfn.min.js.tar File 2 KB 0644
xit-2x.gif.gif.tar.gz File 819 B 0644
xit-2x.gif.tar File 2.5 KB 0644
xit.gif.gif.tar.gz File 317 B 0644
xit.gif.tar File 2 KB 0644
xmlrpc.php.php.tar.gz File 1.5 KB 0644
xmlrpc.php.tar File 5 KB 0644
xyn.php.php.tar.gz File 113 B 0644
xyn.php.tar File 1.5 KB 0644
zt2.php.php.tar.gz File 265 B 0644
zt2.php.tar File 2 KB 0644
zxcvbn-async.js.js.tar.gz File 536 B 0644
zxcvbn-async.js.tar File 2.5 KB 0644
zxcvbn-async.min.js.min.js.tar.gz File 364 B 0644
zxcvbn-async.min.js.tar File 2 KB 0644
zxcvbn.min.js.min.js.tar.gz File 390.41 KB 0644
zxcvbn.min.js.tar File 804.5 KB 0644