2022-04-30 00:01:21 +00:00
var EJS = function ( _0x574f5e ) {
window . EJS _MODULES = _0x574f5e ;
var _0x41a1e4 = { } ;
2022-05-04 19:49:18 +00:00
var o = [ ] ;
2022-04-30 00:01:21 +00:00
function _0x1d686b ( _0x289550 ) {
if ( _0x41a1e4 [ _0x289550 ] ) return _0x41a1e4 [ _0x289550 ] . exports ;
o . push ( _0x289550 )
var _0x4f6398 = _0x41a1e4 [ _0x289550 ] = {
'i' : _0x289550 ,
2022-05-04 19:49:18 +00:00
'l' : false ,
2022-04-30 00:01:21 +00:00
'exports' : { }
} ;
return _0x574f5e [ _0x289550 ] . call ( _0x4f6398 . exports , _0x4f6398 , _0x4f6398 . exports , _0x1d686b ) , _0x4f6398 . l = true , _0x4f6398 . exports ;
}
2022-08-11 17:39:55 +00:00
window . getUsedModules = function ( ) {
2022-04-30 00:01:21 +00:00
return o . sort ( function ( a , b ) {
return ( a > b ) ? 1 : - 1 ;
} ) ;
}
2022-08-11 17:39:55 +00:00
window . getUnusedModules = function ( ) {
var rv = [ ] ;
var q = getUsedModules ( ) ;
for ( var i = 0 ; i < _0x574f5e . length ; i ++ ) {
if ( _0x574f5e [ i ] === null ) continue ;
if ( ! q . includes ( i ) ) rv . push ( i ) ;
}
return rv ;
}
2022-05-04 23:39:59 +00:00
if ( ! typeof Array . isArray == 'function' ) {
var _0x484695 = { } . toString ;
Array . isArray = function ( _0xd04970 ) {
return '[object Array]' == _0x484695 . call ( _0xd04970 ) ;
} ;
}
_0x1d686b . m = _0x574f5e ;
_0x1d686b . c = _0x41a1e4 ;
_0x1d686b . d = function ( _0x3c0e40 , _0x5aa193 , _0x1a35d2 ) {
2022-04-30 00:01:21 +00:00
_0x1d686b . o ( _0x3c0e40 , _0x5aa193 ) || Object . defineProperty ( _0x3c0e40 , _0x5aa193 , {
'enumerable' : true ,
'get' : _0x1a35d2
} ) ;
2022-05-04 23:39:59 +00:00
} ;
_0x1d686b . r = function ( _0x4668d1 ) {
2022-04-30 00:01:21 +00:00
'undefined' != typeof Symbol && Symbol . toStringTag && Object . defineProperty ( _0x4668d1 , Symbol . toStringTag , {
'value' : 'Module'
} ) , Object . defineProperty ( _0x4668d1 , '__esModule' , {
'value' : true
} ) ;
2022-05-04 23:39:59 +00:00
} ;
_0x1d686b . t = function ( _0xb8bed8 , _0x43e71a ) {
2022-04-30 00:01:21 +00:00
if ( 0x1 & _0x43e71a && ( _0xb8bed8 = _0x1d686b ( _0xb8bed8 ) ) , 0x8 & _0x43e71a ) return _0xb8bed8 ;
if ( 0x4 & _0x43e71a && 'object' == typeof _0xb8bed8 && _0xb8bed8 && _0xb8bed8 . _ _esModule ) return _0xb8bed8 ;
var _0x300168 = Object . create ( null ) ;
if ( _0x1d686b . r ( _0x300168 ) , Object . defineProperty ( _0x300168 , 'default' , {
'enumerable' : true ,
'value' : _0xb8bed8
} ) , 0x2 & _0x43e71a && 'string' != typeof _0xb8bed8 )
for ( var _0xbd7857 in _0xb8bed8 ) _0x1d686b . d ( _0x300168 , _0xbd7857 , function ( _0x811a86 ) {
return _0xb8bed8 [ _0x811a86 ] ;
} . bind ( null , _0xbd7857 ) ) ;
return _0x300168 ;
2022-05-04 23:39:59 +00:00
} ;
_0x1d686b . n = function ( _0x55b0d4 ) {
2022-04-30 00:01:21 +00:00
var _0x4d7468 = _0x55b0d4 && _0x55b0d4 . _ _esModule ? function ( ) {
return _0x55b0d4 . default ;
} : function ( ) {
return _0x55b0d4 ;
} ;
return _0x1d686b . d ( _0x4d7468 , 'a' , _0x4d7468 ) , _0x4d7468 ;
2022-05-04 23:39:59 +00:00
} ;
_0x1d686b . o = function ( _0x1ed01a , _0x4abf0b ) {
2022-04-30 00:01:21 +00:00
return Object . prototype . hasOwnProperty . call ( _0x1ed01a , _0x4abf0b ) ;
2022-05-04 23:39:59 +00:00
} ;
_0x1d686b . p = '' ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
_0x1d686b . s = 162 ;
2022-05-06 16:21:08 +00:00
return _0x1d686b ( _0x1d686b . s ) ;
2022-08-11 17:39:55 +00:00
} ( [ function ( module ) {
module . exports = function ( error , element , _this ) {
2022-05-07 15:07:32 +00:00
console . warn ( error )
2022-05-16 16:45:45 +00:00
if ( error && error . response && error . response . status === 0 ) {
2022-05-06 16:21:08 +00:00
element . innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">' + _this . localization ( 'CORS Error' ) + '</a></strong>' ;
} else {
element . innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">' + _this . localization ( 'Network Error' ) + '</strong>' ;
}
}
2023-01-31 05:50:17 +00:00
} , function ( module ) {
module . exports = function ( data ) {
fetch ( "https://netplay.emulatorjs.org/logs" , { method : "POST" , body : JSON . stringify ( data ) } ) ;
}
} , null , null , null , null , function ( module ) {
2022-09-27 16:30:00 +00:00
// Project located at https://github.com/ethanaobrien/gamepad
2023-03-07 16:07:38 +00:00
class GamepadHandler {
2022-09-27 16:30:00 +00:00
gamepads ;
timeout ;
listeners ;
constructor ( ) {
this . gamepads = [ ] ;
this . listeners = { } ;
this . timeout = null ;
this . loop ( ) ;
2022-08-15 23:52:09 +00:00
}
2022-09-27 16:30:00 +00:00
terminate ( ) {
window . clearTimeout ( this . timeout ) ;
2022-08-15 23:52:09 +00:00
}
2022-09-27 16:30:00 +00:00
getGamepads ( ) {
2022-08-15 23:52:09 +00:00
return navigator . getGamepads ? navigator . getGamepads ( ) : ( navigator . webkitGetGamepads ? navigator . webkitGetGamepads ( ) : [ ] ) ;
2022-09-27 16:30:00 +00:00
}
loop ( ) {
2022-08-15 23:52:09 +00:00
this . updateGamepadState ( ) ;
2022-09-27 16:30:00 +00:00
this . timeout = setTimeout ( this . loop . bind ( this ) , 10 ) ;
}
updateGamepadState ( ) {
const gamepads = this . getGamepads ( ) ;
gamepads . forEach ( ( gamepad , index ) => {
if ( ! gamepad ) return ;
let hasGamepad = false ;
this . gamepads . forEach ( ( oldGamepad , oldIndex ) => {
if ( oldGamepad . index !== gamepad . index ) return ;
hasGamepad = true ;
2023-03-07 16:07:38 +00:00
2022-09-27 16:30:00 +00:00
oldGamepad . axes . forEach ( ( axis , axisIndex ) => {
if ( gamepad . axes [ axisIndex ] !== axis ) {
2023-03-07 16:07:38 +00:00
const axis = [ 'LEFT_STICK_X' , 'LEFT_STICK_Y' , 'RIGHT_STICK_X' , 'RIGHT_STICK_Y' ] [ axisIndex ] ;
2022-09-27 16:30:00 +00:00
if ( ! axis ) return ;
this . dispatchEvent ( 'axischanged' , { axis : axis , value : gamepad . axes [ axisIndex ] , index : gamepad . index , gamepadIndex : gamepad . index } ) ;
2022-08-15 23:52:09 +00:00
}
2023-03-07 16:07:38 +00:00
2022-09-27 16:30:00 +00:00
} )
gamepad . buttons . forEach ( ( button , buttonIndex ) => {
let pressed = oldGamepad . buttons [ buttonIndex ] === 1.0 ;
if ( typeof oldGamepad . buttons [ buttonIndex ] === "object" ) {
pressed = oldGamepad . buttons [ buttonIndex ] . pressed ;
}
let pressed2 = button === 1.0 ;
if ( typeof button === "object" ) {
pressed2 = button . pressed ;
}
if ( pressed !== pressed2 ) {
if ( pressed2 ) {
this . dispatchEvent ( 'buttondown' , { index : buttonIndex , gamepadIndex : gamepad . index } ) ;
} else {
this . dispatchEvent ( 'buttonup' , { index : buttonIndex , gamepadIndex : gamepad . index } ) ;
2022-08-15 23:52:09 +00:00
}
}
2023-03-07 16:07:38 +00:00
2022-09-27 16:30:00 +00:00
} )
this . gamepads [ oldIndex ] = gamepads [ index ] ;
} )
2022-08-15 23:52:09 +00:00
if ( ! hasGamepad ) {
2022-09-27 16:30:00 +00:00
this . gamepads . push ( gamepads [ index ] ) ;
this . dispatchEvent ( 'connected' , { gamepadIndex : gamepad . index } ) ;
2022-08-15 23:52:09 +00:00
}
2022-09-27 16:30:00 +00:00
} ) ;
2023-03-07 16:07:38 +00:00
2022-09-27 16:30:00 +00:00
for ( let j = 0 ; j < this . gamepads . length ; j ++ ) {
2022-08-15 23:52:09 +00:00
if ( ! this . gamepads [ j ] ) continue ;
2022-09-27 16:30:00 +00:00
let has = false ;
for ( let i = 0 ; i < gamepads . length ; i ++ ) {
2022-08-15 23:52:09 +00:00
if ( ! gamepads [ i ] ) continue ;
2022-08-16 02:07:30 +00:00
if ( this . gamepads [ j ] . index === gamepads [ i ] . index ) {
2022-08-15 23:52:09 +00:00
has = true ;
2022-09-27 16:30:00 +00:00
break ;
2022-08-15 23:52:09 +00:00
}
}
if ( ! has ) {
2022-09-27 16:30:00 +00:00
this . dispatchEvent ( 'disconnected' , { gamepadIndex : this . gamepads [ j ] . index } ) ;
2022-08-15 23:52:09 +00:00
this . gamepads . splice ( j , 1 ) ;
j -- ;
2022-04-30 00:01:21 +00:00
}
}
2022-09-27 16:30:00 +00:00
}
dispatchEvent ( name , arg ) {
if ( typeof this . listeners [ name ] !== 'function' ) return ;
if ( ! arg ) arg = { } ;
arg . type = name ;
this . listeners [ name ] ( arg ) ;
}
on ( name , cb ) {
this . listeners [ name . toLowerCase ( ) ] = cb ;
2022-08-15 23:52:09 +00:00
}
}
2023-03-07 16:07:38 +00:00
module . exports = GamepadHandler ;
2022-05-04 19:49:18 +00:00
} , null , null , null , null , function ( module , _0x4f5203 , _0x5028a6 ) {
2022-08-26 14:17:39 +00:00
const _0x33171 = function ( inUrl , opts ) {
let url ;
try { url = new URL ( inUrl ) } catch ( e ) { } ;
if ( ( url && [ 'http:' , 'https:' ] . includes ( url . protocol ) ) || ! url ) {
return new Promise ( function ( resolve , reject ) {
let xhr = new XMLHttpRequest ( ) ;
if ( opts . onProgress ) {
xhr . addEventListener ( 'progress' , opts . onProgress ) ;
}
xhr . onload = function ( ) {
if ( xhr . readyState === xhr . DONE ) {
let data = xhr . response ;
try { data = JSON . parse ( data ) } catch ( e ) { }
resolve ( {
data : data ,
headers : {
"content-length" : xhr . getResponseHeader ( 'content-length' ) ,
"content-type" : xhr . getResponseHeader ( 'content-type' ) ,
"last-modified" : xhr . getResponseHeader ( 'last-modified' )
}
} ) ;
}
}
xhr . responseType = opts . type ;
xhr . onerror = reject ;
xhr . open ( opts . method , inUrl , true ) ;
xhr . send ( ) ;
} )
} else {
2022-05-16 16:45:45 +00:00
return new Promise ( async function ( resolve , reject ) {
if ( opts . method === 'HEAD' ) {
resolve ( { headers : { } } ) ;
return ;
}
2022-08-26 14:17:39 +00:00
let res ;
2022-05-16 16:45:45 +00:00
try {
2022-08-26 14:17:39 +00:00
res = await fetch ( inUrl ) ;
2022-05-16 16:45:45 +00:00
if ( opts . type && opts . type . toLowerCase ( ) === 'arraybuffer' ) {
res = await res . arrayBuffer ( ) ;
} else {
res = await res . text ( ) ;
try { res = JSON . parse ( res ) } catch ( e ) { }
}
} catch ( e ) {
reject ( e ) ;
}
2022-11-03 23:53:19 +00:00
if ( inUrl . startsWith ( 'blob:' ) ) URL . revokeObjectURL ( inUrl ) ;
2022-05-16 16:45:45 +00:00
resolve ( {
data : res ,
headers : { }
} ) ;
} ) ;
}
} ;
2022-08-05 00:10:36 +00:00
module . exports = {
a : {
get : async function ( url , set ) {
2022-08-26 14:17:39 +00:00
const type = ( set && set . responseType ) ? ( set && set . responseType ) : 'text' ;
const progress = ( set && set . onDownloadProgress ) ;
const res = _0x33171 ( url , { method : "GET" , type : type , onProgress : progress } ) ;
2022-08-05 00:10:36 +00:00
return res ;
} ,
head : async function ( url , set ) {
2022-08-26 14:17:39 +00:00
const type = ( set && set . responseType ) ? ( set && set . responseType ) : 'text' ;
const progress = ( set && set . onDownloadProgress ) ;
const res = _0x33171 ( url , { method : "HEAD" , type : type , onProgress : progress } ) ;
2022-08-05 00:10:36 +00:00
return res ;
}
}
}
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , function ( _0x25e628 , _0x2f1ee1 ) {
var _0x2fbe1c ;
_0x2fbe1c = function ( ) {
return this ;
} ( ) ;
try {
_0x2fbe1c = _0x2fbe1c || new Function ( 'return this' ) ( ) ;
} catch ( _0x36c4d5 ) {
'object' == typeof window && ( _0x2fbe1c = window ) ;
}
_0x25e628 . exports = _0x2fbe1c ;
} , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , function ( _0x4f4230 , _0x181c20 ) {
var _0x4b3a38 , _0x30dbdf , _0x40240d = _0x4f4230 . exports = { } ;
function _0x508793 ( ) {
throw new Error ( 'setTimeout has not been defined' ) ;
}
function _0x1e140b ( ) {
throw new Error ( 'clearTimeout has not been defined' ) ;
}
function _0x58e592 ( _0x1e83f0 ) {
if ( _0x4b3a38 === setTimeout ) return setTimeout ( _0x1e83f0 , 0x0 ) ;
if ( ( _0x4b3a38 === _0x508793 || ! _0x4b3a38 ) && setTimeout ) return _0x4b3a38 = setTimeout , setTimeout ( _0x1e83f0 , 0x0 ) ;
try {
return _0x4b3a38 ( _0x1e83f0 , 0x0 ) ;
} catch ( _0x4743cf ) {
try {
return _0x4b3a38 . call ( null , _0x1e83f0 , 0x0 ) ;
} catch ( _0x53620e ) {
return _0x4b3a38 . call ( this , _0x1e83f0 , 0x0 ) ;
}
}
} ! function ( ) {
try {
_0x4b3a38 = 'function' == typeof setTimeout ? setTimeout : _0x508793 ;
} catch ( _0x2ba20e ) {
_0x4b3a38 = _0x508793 ;
}
try {
_0x30dbdf = 'function' == typeof clearTimeout ? clearTimeout : _0x1e140b ;
} catch ( _0x5202a1 ) {
_0x30dbdf = _0x1e140b ;
}
} ( ) ;
var _0x493e74 , _0x501f0f = [ ] ,
_0x3ba731 = ! 0x1 ,
_0x21c3e3 = - 0x1 ;
function _0x21e6b7 ( ) {
_0x3ba731 && _0x493e74 && ( _0x3ba731 = ! 0x1 , _0x493e74 . length ? _0x501f0f = _0x493e74 . concat ( _0x501f0f ) : _0x21c3e3 = - 0x1 , _0x501f0f . length && _0x30d6c8 ( ) ) ;
}
function _0x30d6c8 ( ) {
if ( ! _0x3ba731 ) {
var _0x4f4230 = _0x58e592 ( _0x21e6b7 ) ;
_0x3ba731 = true ;
for ( var _0x181c20 = _0x501f0f . length ; _0x181c20 ; ) {
for ( _0x493e74 = _0x501f0f , _0x501f0f = [ ] ; ++ _0x21c3e3 < _0x181c20 ; ) _0x493e74 && _0x493e74 [ _0x21c3e3 ] . run ( ) ;
_0x21c3e3 = - 0x1 , _0x181c20 = _0x501f0f . length ;
}
_0x493e74 = null , _0x3ba731 = ! 0x1 ,
function ( _0x294b98 ) {
if ( _0x30dbdf === clearTimeout ) return clearTimeout ( _0x294b98 ) ;
if ( ( _0x30dbdf === _0x1e140b || ! _0x30dbdf ) && clearTimeout ) return _0x30dbdf = clearTimeout , clearTimeout ( _0x294b98 ) ;
try {
_0x30dbdf ( _0x294b98 ) ;
} catch ( _0x353086 ) {
try {
return _0x30dbdf . call ( null , _0x294b98 ) ;
} catch ( _0x430227 ) {
return _0x30dbdf . call ( this , _0x294b98 ) ;
}
}
} ( _0x4f4230 ) ;
}
}
function _0x5b9c05 ( _0x1d5ae2 , _0x5b9ff8 ) {
this . fun = _0x1d5ae2 , this . array = _0x5b9ff8 ;
}
function _0x11873d ( ) { }
_0x40240d . nextTick = function ( _0x14ed62 ) {
var _0x181c20 = new Array ( arguments . length - 0x1 ) ;
if ( arguments . length > 0x1 )
for ( var _0x1c0f88 = 0x1 ; _0x1c0f88 < arguments . length ; _0x1c0f88 ++ ) _0x181c20 [ _0x1c0f88 - 0x1 ] = arguments [ _0x1c0f88 ] ;
_0x501f0f . push ( new _0x5b9c05 ( _0x14ed62 , _0x181c20 ) ) , 0x1 !== _0x501f0f . length || _0x3ba731 || _0x58e592 ( _0x30d6c8 ) ;
} , _0x5b9c05 . prototype . run = function ( ) {
this . fun . apply ( null , this . array ) ;
} , _0x40240d . title = 'browser' , _0x40240d . browser = true , _0x40240d . env = { } , _0x40240d . argv = [ ] , _0x40240d . version = '' , _0x40240d . versions = { } , _0x40240d . on = _0x11873d , _0x40240d . addListener = _0x11873d , _0x40240d . once = _0x11873d , _0x40240d . off = _0x11873d , _0x40240d . removeListener = _0x11873d , _0x40240d . removeAllListeners = _0x11873d , _0x40240d . emit = _0x11873d , _0x40240d . prependListener = _0x11873d , _0x40240d . prependOnceListener = _0x11873d , _0x40240d . listeners = function ( _0x4a7ed5 ) {
return [ ] ;
} , _0x40240d . binding = function ( _0x4fe55f ) {
throw new Error ( 'process.binding is not supported' ) ;
} , _0x40240d . cwd = function ( ) {
return '/' ;
} , _0x40240d . chdir = function ( _0x33049c ) {
throw new Error ( 'process.chdir is not supported' ) ;
} , _0x40240d . umask = function ( ) {
return 0x0 ;
} ;
} , null , null , null , null , null , null , null , function ( _0x2e240f , _0x5b82af , _0x39b24a ) {
2022-04-30 00:01:21 +00:00
var _0xafdfe , _0x133983 ;
! function ( _0xcb4965 , _0x3924c5 , _0x2b6d6d ) {
'use strict' ;
void 0x0 === ( _0x133983 = 'function' == typeof ( _0xafdfe = function ( ) {
var _0x2e240f = function ( _0x207df4 ) {
throw _0x207df4 ;
} ,
_0x5b82af = function ( ) { } ,
_0x39b24a = {
'storeName' : 'Store' ,
'storePrefix' : 'IDBWrapper-' ,
'dbVersion' : 0x1 ,
'keyPath' : 'id' ,
'autoIncrement' : true ,
'onStoreReady' : function ( ) { } ,
'onError' : _0x2e240f ,
'indexes' : [ ] ,
'implementationPreference' : [ 'indexedDB' , 'webkitIndexedDB' , 'mozIndexedDB' , 'shimIndexedDB' ]
} ,
_0x2b9783 = function ( _0x1e2bea , _0x1aa4eb ) {
for ( var _0x19e5d1 in void 0x0 === _0x1aa4eb && 'function' == typeof _0x1e2bea && ( _0x1aa4eb = _0x1e2bea ) , '[object Object]' != Object . prototype . toString . call ( _0x1e2bea ) && ( _0x1e2bea = { } ) , _0x39b24a ) this [ _0x19e5d1 ] = void 0x0 !== _0x1e2bea [ _0x19e5d1 ] ? _0x1e2bea [ _0x19e5d1 ] : _0x39b24a [ _0x19e5d1 ] ;
this . dbName = this . storePrefix + this . storeName , this . dbVersion = parseInt ( this . dbVersion , 0xa ) || 0x1 , _0x1aa4eb && ( this . onStoreReady = _0x1aa4eb ) ;
var _0x346822 = 'object' == typeof window ? window : self ,
_0xcb4965 = this . implementationPreference . filter ( function ( _0x1ee9de ) {
return _0x1ee9de in _0x346822 ;
} ) ;
this . implementation = _0xcb4965 [ 0x0 ] , this . idb = _0x346822 [ this . implementation ] , this . keyRange = _0x346822 . IDBKeyRange || _0x346822 . webkitIDBKeyRange || _0x346822 . mozIDBKeyRange , this . consts = {
'READ_ONLY' : 'readonly' ,
'READ_WRITE' : 'readwrite' ,
'VERSION_CHANGE' : 'versionchange' ,
'NEXT' : 'next' ,
'NEXT_NO_DUPLICATE' : 'nextunique' ,
'PREV' : 'prev' ,
'PREV_NO_DUPLICATE' : 'prevunique'
} , this . openDB ( ) ;
} ,
_0x28a590 = {
'constructor' : _0x2b9783 ,
'version' : '1.7.2' ,
'db' : null ,
'dbName' : null ,
'dbVersion' : null ,
'store' : null ,
'storeName' : null ,
'storePrefix' : null ,
'keyPath' : null ,
'autoIncrement' : null ,
'indexes' : null ,
'implementationPreference' : null ,
'implementation' : '' ,
'onStoreReady' : null ,
'onError' : null ,
'_insertIdCount' : 0x0 ,
'openDB' : function ( ) {
var _0x2e240f = this . idb . open ( this . dbName , this . dbVersion ) ,
_0x5b82af = ! 0x1 ;
_0x2e240f . onerror = function ( _0x2923e1 ) {
if ( function ( _0x46ec43 ) {
if ( 'error' in _0x46ec43 . target ) return 'VersionError' == _0x46ec43 . target . error . name ;
if ( 'errorCode' in _0x46ec43 . target ) return 0xc == _0x46ec43 . target . errorCode ;
return ! 0x1 ;
} ( _0x2923e1 ) ) this . onError ( new Error ( 'The version number provided is lower than the existing one.' ) ) ;
else {
var _0x5b82af ;
if ( _0x2923e1 . target . error ) _0x5b82af = _0x2923e1 . target . error ;
else {
var _0x39b24a = 'IndexedDB unknown error occurred when opening DB ' + this . dbName + ' version ' + this . dbVersion ;
'errorCode' in _0x2923e1 . target && ( _0x39b24a += ' with error code ' + _0x2923e1 . target . errorCode ) , _0x5b82af = new Error ( _0x39b24a ) ;
}
this . onError ( _0x5b82af ) ;
}
} . bind ( this ) , _0x2e240f . onsuccess = function ( _0x3e2c2e ) {
if ( ! _0x5b82af )
if ( this . db ) this . onStoreReady ( ) ;
else if ( this . db = _0x3e2c2e . target . result , 'string' != typeof this . db . version )
if ( this . db . objectStoreNames . contains ( this . storeName ) ) {
var _0x39b24a = this . db . transaction ( [ this . storeName ] , this . consts . READ _ONLY ) ;
this . store = _0x39b24a . objectStore ( this . storeName ) ;
var _0x59b9b8 = Array . prototype . slice . call ( this . getIndexList ( ) ) ;
this . indexes . forEach ( function ( _0x350dd3 ) {
var _0x39b24a = _0x350dd3 . name ;
if ( ! _0x39b24a ) return _0x5b82af = true , void this . onError ( new Error ( 'Cannot create index: No index name given.' ) ) ;
if ( this . normalizeIndexData ( _0x350dd3 ) , this . hasIndex ( _0x39b24a ) ) {
var _0xa01269 = this . store . index ( _0x39b24a ) ;
this . indexComplies ( _0xa01269 , _0x350dd3 ) || ( _0x5b82af = true , this . onError ( new Error ( 'Cannot modify index "' + _0x39b24a + '" for current version. Please bump version number to ' + ( this . dbVersion + 0x1 ) + '.' ) ) ) , _0x59b9b8 . splice ( _0x59b9b8 . indexOf ( _0x39b24a ) , 0x1 ) ;
} else _0x5b82af = true , this . onError ( new Error ( 'Cannot create new index "' + _0x39b24a + '" for current version. Please bump version number to ' + ( this . dbVersion + 0x1 ) + '.' ) ) ;
} , this ) , _0x59b9b8 . length && ( _0x5b82af = true , this . onError ( new Error ( 'Cannot delete index(es) "' + _0x59b9b8 . toString ( ) + '" for current version. Please bump version number to ' + ( this . dbVersion + 0x1 ) + '.' ) ) ) , _0x5b82af || this . onStoreReady ( ) ;
} else this . onError ( new Error ( 'Object store couldn\'t be created.' ) ) ;
else this . onError ( new Error ( 'The IndexedDB implementation in this browser is outdated. Please upgrade your browser.' ) ) ;
} . bind ( this ) , _0x2e240f . onupgradeneeded = function ( _0x24bbe5 ) {
if ( this . db = _0x24bbe5 . target . result , this . db . objectStoreNames . contains ( this . storeName ) ) this . store = _0x24bbe5 . target . transaction . objectStore ( this . storeName ) ;
else {
var _0x39b24a = {
'autoIncrement' : this . autoIncrement
} ;
null !== this . keyPath && ( _0x39b24a . keyPath = this . keyPath ) , this . store = this . db . createObjectStore ( this . storeName , _0x39b24a ) ;
}
var _0x29403f = Array . prototype . slice . call ( this . getIndexList ( ) ) ;
this . indexes . forEach ( function ( _0x33fe6f ) {
var _0x39b24a = _0x33fe6f . name ;
if ( _0x39b24a || ( _0x5b82af = true , this . onError ( new Error ( 'Cannot create index: No index name given.' ) ) ) , this . normalizeIndexData ( _0x33fe6f ) , this . hasIndex ( _0x39b24a ) ) {
var _0x34a15e = this . store . index ( _0x39b24a ) ;
this . indexComplies ( _0x34a15e , _0x33fe6f ) || ( this . store . deleteIndex ( _0x39b24a ) , this . store . createIndex ( _0x39b24a , _0x33fe6f . keyPath , {
'unique' : _0x33fe6f . unique ,
'multiEntry' : _0x33fe6f . multiEntry
} ) ) , _0x29403f . splice ( _0x29403f . indexOf ( _0x39b24a ) , 0x1 ) ;
} else this . store . createIndex ( _0x39b24a , _0x33fe6f . keyPath , {
'unique' : _0x33fe6f . unique ,
'multiEntry' : _0x33fe6f . multiEntry
} ) ;
} , this ) , _0x29403f . length && _0x29403f . forEach ( function ( _0x57fb9c ) {
this . store . deleteIndex ( _0x57fb9c ) ;
} , this ) ;
} . bind ( this ) ;
} ,
'deleteDatabase' : function ( _0x65ce5d , _0x56cb3e ) {
if ( this . idb . deleteDatabase ) {
this . db . close ( ) ;
var _0x39b24a = this . idb . deleteDatabase ( this . dbName ) ;
_0x39b24a . onsuccess = _0x65ce5d , _0x39b24a . onerror = _0x56cb3e ;
} else _0x56cb3e ( new Error ( 'Browser does not support IndexedDB deleteDatabase!' ) ) ;
} ,
'put' : function ( _0x35bd36 , _0x54aa09 , _0x251b8c , _0x409d32 ) {
null !== this . keyPath && ( _0x409d32 = _0x251b8c , _0x251b8c = _0x54aa09 , _0x54aa09 = _0x35bd36 ) , _0x409d32 || ( _0x409d32 = _0x2e240f ) , _0x251b8c || ( _0x251b8c = _0x5b82af ) ;
var _0x2ad006 , _0x2b6d6d = ! 0x1 ,
_0x1a9aae = null ,
_0x499fa5 = this . db . transaction ( [ this . storeName ] , this . consts . READ _WRITE ) ;
return _0x499fa5 . oncomplete = function ( ) {
( _0x2b6d6d ? _0x251b8c : _0x409d32 ) ( _0x1a9aae ) ;
} , _0x499fa5 . onabort = _0x409d32 , _0x499fa5 . onerror = _0x409d32 , null !== this . keyPath ? ( this . _addIdPropertyIfNeeded ( _0x54aa09 ) , _0x2ad006 = _0x499fa5 . objectStore ( this . storeName ) . put ( _0x54aa09 ) ) : _0x2ad006 = _0x499fa5 . objectStore ( this . storeName ) . put ( _0x54aa09 , _0x35bd36 ) , _0x2ad006 . onsuccess = function ( _0xed2c3c ) {
_0x2b6d6d = true , _0x1a9aae = _0xed2c3c . target . result ;
} , _0x2ad006 . onerror = _0x409d32 , _0x499fa5 ;
} ,
'get' : function ( _0x3696ba , _0x4d8d90 , _0x322eb3 ) {
_0x322eb3 || ( _0x322eb3 = _0x2e240f ) , _0x4d8d90 || ( _0x4d8d90 = _0x5b82af ) ;
var _0xcb4965 = ! 0x1 ,
_0x2ad006 = null ,
_0x2b6d6d = this . db . transaction ( [ this . storeName ] , this . consts . READ _ONLY ) ;
_0x2b6d6d . oncomplete = function ( ) {
( _0xcb4965 ? _0x4d8d90 : _0x322eb3 ) ( _0x2ad006 ) ;
} , _0x2b6d6d . onabort = _0x322eb3 , _0x2b6d6d . onerror = _0x322eb3 ;
var _0x13d850 = _0x2b6d6d . objectStore ( this . storeName ) . get ( _0x3696ba ) ;
return _0x13d850 . onsuccess = function ( _0x34b965 ) {
_0xcb4965 = true , _0x2ad006 = _0x34b965 . target . result ;
} , _0x13d850 . onerror = _0x322eb3 , _0x2b6d6d ;
} ,
'remove' : function ( _0x22011d , _0x5b1f45 , _0x459b00 ) {
_0x459b00 || ( _0x459b00 = _0x2e240f ) , _0x5b1f45 || ( _0x5b1f45 = _0x5b82af ) ;
var _0xcb4965 = ! 0x1 ,
_0x2ad006 = null ,
_0x2b6d6d = this . db . transaction ( [ this . storeName ] , this . consts . READ _WRITE ) ;
_0x2b6d6d . oncomplete = function ( ) {
( _0xcb4965 ? _0x5b1f45 : _0x459b00 ) ( _0x2ad006 ) ;
} , _0x2b6d6d . onabort = _0x459b00 , _0x2b6d6d . onerror = _0x459b00 ;
var _0x2994f6 = _0x2b6d6d . objectStore ( this . storeName ) . delete ( _0x22011d ) ;
return _0x2994f6 . onsuccess = function ( _0x25907f ) {
_0xcb4965 = true , _0x2ad006 = _0x25907f . target . result ;
} , _0x2994f6 . onerror = _0x459b00 , _0x2b6d6d ;
} ,
'batch' : function ( _0x4d6e5e , _0x33f461 , _0x3440ab ) {
if ( _0x3440ab || ( _0x3440ab = _0x2e240f ) , _0x33f461 || ( _0x33f461 = _0x5b82af ) , '[object Array]' != Object . prototype . toString . call ( _0x4d6e5e ) ) _0x3440ab ( new Error ( 'dataArray argument must be of type Array.' ) ) ;
else if ( 0x0 === _0x4d6e5e . length ) return _0x33f461 ( true ) ;
var _0xcb4965 = _0x4d6e5e . length ,
_0x2ad006 = ! 0x1 ,
_0x2b6d6d = ! 0x1 ,
_0x244be0 = this . db . transaction ( [ this . storeName ] , this . consts . READ _WRITE ) ;
_0x244be0 . oncomplete = function ( ) {
( _0x2b6d6d ? _0x33f461 : _0x3440ab ) ( _0x2b6d6d ) ;
} , _0x244be0 . onabort = _0x3440ab , _0x244be0 . onerror = _0x3440ab ;
var _0x5a0c6a = function ( ) {
0x0 !== -- _0xcb4965 || _0x2ad006 || ( _0x2ad006 = true , _0x2b6d6d = true ) ;
} ;
return _0x4d6e5e . forEach ( function ( _0x2a2f2b ) {
var _0x5b82af = _0x2a2f2b . type ,
_0x4d6e5e = _0x2a2f2b . key ,
_0x33f461 = _0x2a2f2b . value ,
_0xcb4965 = function ( _0x2b3ae7 ) {
_0x244be0 . abort ( ) , _0x2ad006 || ( _0x2ad006 = true , _0x3440ab ( _0x2b3ae7 , _0x5b82af , _0x4d6e5e ) ) ;
} ;
if ( 'remove' == _0x5b82af ) {
var _0x2b6d6d = _0x244be0 . objectStore ( this . storeName ) . delete ( _0x4d6e5e ) ;
_0x2b6d6d . onsuccess = _0x5a0c6a , _0x2b6d6d . onerror = _0xcb4965 ;
} else if ( 'put' == _0x5b82af ) {
var _0x51ca22 ;
null !== this . keyPath ? ( this . _addIdPropertyIfNeeded ( _0x33f461 ) , _0x51ca22 = _0x244be0 . objectStore ( this . storeName ) . put ( _0x33f461 ) ) : _0x51ca22 = _0x244be0 . objectStore ( this . storeName ) . put ( _0x33f461 , _0x4d6e5e ) , _0x51ca22 . onsuccess = _0x5a0c6a , _0x51ca22 . onerror = _0xcb4965 ;
}
} , this ) , _0x244be0 ;
} ,
'putBatch' : function ( _0x51b697 , _0x14766d , _0x512afb ) {
var _0x4f224b = _0x51b697 . map ( function ( _0x2e83b2 ) {
return {
'type' : 'put' ,
'value' : _0x2e83b2
} ;
} ) ;
return this . batch ( _0x4f224b , _0x14766d , _0x512afb ) ;
} ,
'upsertBatch' : function ( _0x13fd8a , _0x5c23ce , _0x1cec44 , _0x539771 ) {
'function' == typeof _0x5c23ce && ( _0x539771 = _0x1cec44 = _0x5c23ce , _0x5c23ce = { } ) , _0x539771 || ( _0x539771 = _0x2e240f ) , _0x1cec44 || ( _0x1cec44 = _0x5b82af ) , _0x5c23ce || ( _0x5c23ce = { } ) , '[object Array]' != Object . prototype . toString . call ( _0x13fd8a ) && _0x539771 ( new Error ( 'dataArray argument must be of type Array.' ) ) ;
var _0x2ad006 = _0x5c23ce . keyField || this . keyPath ,
_0x2b6d6d = _0x13fd8a . length ,
_0x2232f4 = ! 0x1 ,
_0x307131 = ! 0x1 ,
_0x5914d3 = 0x0 ,
_0x10a4b5 = this . db . transaction ( [ this . storeName ] , this . consts . READ _WRITE ) ;
_0x10a4b5 . oncomplete = function ( ) {
_0x307131 ? _0x1cec44 ( _0x13fd8a ) : _0x539771 ( ! 0x1 ) ;
} , _0x10a4b5 . onabort = _0x539771 , _0x10a4b5 . onerror = _0x539771 ;
var _0x47ba06 = function ( _0x15b9da ) {
_0x13fd8a [ _0x5914d3 ++ ] [ _0x2ad006 ] = _0x15b9da . target . result , 0x0 !== -- _0x2b6d6d || _0x2232f4 || ( _0x2232f4 = true , _0x307131 = true ) ;
} ;
return _0x13fd8a . forEach ( function ( _0x32a8bd ) {
var _0x5b82af , _0x13fd8a = _0x32a8bd . key ;
null !== this . keyPath ? ( this . _addIdPropertyIfNeeded ( _0x32a8bd ) , _0x5b82af = _0x10a4b5 . objectStore ( this . storeName ) . put ( _0x32a8bd ) ) : _0x5b82af = _0x10a4b5 . objectStore ( this . storeName ) . put ( _0x32a8bd , _0x13fd8a ) , _0x5b82af . onsuccess = _0x47ba06 , _0x5b82af . onerror = function ( _0x378bb4 ) {
_0x10a4b5 . abort ( ) , _0x2232f4 || ( _0x2232f4 = true , _0x539771 ( _0x378bb4 ) ) ;
} ;
} , this ) , _0x10a4b5 ;
} ,
'removeBatch' : function ( _0x4a038d , _0x3ba0b8 , _0x251e88 ) {
var _0x540626 = _0x4a038d . map ( function ( _0x330621 ) {
return {
'type' : 'remove' ,
'key' : _0x330621
} ;
} ) ;
return this . batch ( _0x540626 , _0x3ba0b8 , _0x251e88 ) ;
} ,
'getBatch' : function ( _0x3a8a3a , _0x46ef82 , _0x24a69f , _0x4d4052 ) {
if ( _0x24a69f || ( _0x24a69f = _0x2e240f ) , _0x46ef82 || ( _0x46ef82 = _0x5b82af ) , _0x4d4052 || ( _0x4d4052 = 'sparse' ) , '[object Array]' != Object . prototype . toString . call ( _0x3a8a3a ) ) _0x24a69f ( new Error ( 'keyArray argument must be of type Array.' ) ) ;
else if ( 0x0 === _0x3a8a3a . length ) return _0x46ef82 ( [ ] ) ;
var _0x2ad006 = [ ] ,
_0x2b6d6d = _0x3a8a3a . length ,
_0xeccdf0 = ! 0x1 ,
_0x27f627 = null ,
_0x763dce = this . db . transaction ( [ this . storeName ] , this . consts . READ _ONLY ) ;
_0x763dce . oncomplete = function ( ) {
( _0xeccdf0 ? _0x46ef82 : _0x24a69f ) ( _0x27f627 ) ;
} , _0x763dce . onabort = _0x24a69f , _0x763dce . onerror = _0x24a69f ;
var _0x4f1954 = function ( _0x5dcefc ) {
_0x5dcefc . target . result || 'dense' == _0x4d4052 ? _0x2ad006 . push ( _0x5dcefc . target . result ) : 'sparse' == _0x4d4052 && _0x2ad006 . length ++ , 0x0 === -- _0x2b6d6d && ( true , _0xeccdf0 = true , _0x27f627 = _0x2ad006 ) ;
} ;
return _0x3a8a3a . forEach ( function ( _0x438c01 ) {
var _0x5b82af = _0x763dce . objectStore ( this . storeName ) . get ( _0x438c01 ) ;
_0x5b82af . onsuccess = _0x4f1954 , _0x5b82af . onerror = function ( _0x22fee1 ) {
true , _0x27f627 = _0x22fee1 , _0x24a69f ( _0x22fee1 ) , _0x763dce . abort ( ) ;
} ;
} , this ) , _0x763dce ;
} ,
'getAll' : function ( _0x4f6d5c , _0x20de05 ) {
_0x20de05 || ( _0x20de05 = _0x2e240f ) , _0x4f6d5c || ( _0x4f6d5c = _0x5b82af ) ;
var _0x354639 = this . db . transaction ( [ this . storeName ] , this . consts . READ _ONLY ) ,
_0xcb4965 = _0x354639 . objectStore ( this . storeName ) ;
return _0xcb4965 . getAll ? this . _getAllNative ( _0x354639 , _0xcb4965 , _0x4f6d5c , _0x20de05 ) : this . _getAllCursor ( _0x354639 , _0xcb4965 , _0x4f6d5c , _0x20de05 ) , _0x354639 ;
} ,
'_getAllNative' : function ( _0x41a196 , _0x29efcc , _0x29de64 , _0x147f7b ) {
var _0x6643e4 = ! 0x1 ,
_0xcb4965 = null ;
_0x41a196 . oncomplete = function ( ) {
( _0x6643e4 ? _0x29de64 : _0x147f7b ) ( _0xcb4965 ) ;
} , _0x41a196 . onabort = _0x147f7b , _0x41a196 . onerror = _0x147f7b ;
var _0x2ad006 = _0x29efcc . getAll ( ) ;
_0x2ad006 . onsuccess = function ( _0x2fcfde ) {
_0x6643e4 = true , _0xcb4965 = _0x2fcfde . target . result ;
} , _0x2ad006 . onerror = _0x147f7b ;
} ,
'_getAllCursor' : function ( _0x57bef8 , _0x4284f4 , _0x1e015d , _0x27d344 ) {
var _0x34dcf5 = [ ] ,
_0xcb4965 = ! 0x1 ,
_0x2ad006 = null ;
_0x57bef8 . oncomplete = function ( ) {
( _0xcb4965 ? _0x1e015d : _0x27d344 ) ( _0x2ad006 ) ;
} , _0x57bef8 . onabort = _0x27d344 , _0x57bef8 . onerror = _0x27d344 ;
var _0x2b6d6d = _0x4284f4 . openCursor ( ) ;
_0x2b6d6d . onsuccess = function ( _0x4ea7bf ) {
var _0x4284f4 = _0x4ea7bf . target . result ;
_0x4284f4 ? ( _0x34dcf5 . push ( _0x4284f4 . value ) , _0x4284f4 . continue ( ) ) : ( _0xcb4965 = true , _0x2ad006 = _0x34dcf5 ) ;
} , _0x2b6d6d . onError = _0x27d344 ;
} ,
'clear' : function ( _0x18f252 , _0x409346 ) {
_0x409346 || ( _0x409346 = _0x2e240f ) , _0x18f252 || ( _0x18f252 = _0x5b82af ) ;
var _0x536ee6 = ! 0x1 ,
_0xcb4965 = null ,
_0x2ad006 = this . db . transaction ( [ this . storeName ] , this . consts . READ _WRITE ) ;
_0x2ad006 . oncomplete = function ( ) {
( _0x536ee6 ? _0x18f252 : _0x409346 ) ( _0xcb4965 ) ;
} , _0x2ad006 . onabort = _0x409346 , _0x2ad006 . onerror = _0x409346 ;
var _0x2b6d6d = _0x2ad006 . objectStore ( this . storeName ) . clear ( ) ;
return _0x2b6d6d . onsuccess = function ( _0x4947d5 ) {
_0x536ee6 = true , _0xcb4965 = _0x4947d5 . target . result ;
} , _0x2b6d6d . onerror = _0x409346 , _0x2ad006 ;
} ,
'_addIdPropertyIfNeeded' : function ( _0x41f848 ) {
void 0x0 === _0x41f848 [ this . keyPath ] && ( _0x41f848 [ this . keyPath ] = this . _insertIdCount ++ + Date . now ( ) ) ;
} ,
'getIndexList' : function ( ) {
return this . store . indexNames ;
} ,
'hasIndex' : function ( _0x1c4ba1 ) {
return this . store . indexNames . contains ( _0x1c4ba1 ) ;
} ,
'normalizeIndexData' : function ( _0xf965ee ) {
_0xf965ee . keyPath = _0xf965ee . keyPath || _0xf965ee . name , _0xf965ee . unique = ! ! _0xf965ee . unique , _0xf965ee . multiEntry = ! ! _0xf965ee . multiEntry ;
} ,
'indexComplies' : function ( _0x4b67b0 , _0x24b195 ) {
return [ 'keyPath' , 'unique' , 'multiEntry' ] . every ( function ( _0xfc173c ) {
if ( 'multiEntry' == _0xfc173c && void 0x0 === _0x4b67b0 [ _0xfc173c ] && ! 0x1 === _0x24b195 [ _0xfc173c ] ) return true ;
if ( 'keyPath' == _0xfc173c && '[object Array]' == Object . prototype . toString . call ( _0x24b195 [ _0xfc173c ] ) ) {
var _0x22060c = _0x24b195 . keyPath ,
_0x1a6e38 = _0x4b67b0 . keyPath ;
if ( 'string' == typeof _0x1a6e38 ) return _0x22060c . toString ( ) == _0x1a6e38 ;
if ( 'function' != typeof _0x1a6e38 . contains && 'function' != typeof _0x1a6e38 . indexOf ) return ! 0x1 ;
if ( _0x1a6e38 . length !== _0x22060c . length ) return ! 0x1 ;
for ( var _0xcb4965 = 0x0 , _0x2ad006 = _0x22060c . length ; _0xcb4965 < _0x2ad006 ; _0xcb4965 ++ )
if ( ! ( _0x1a6e38 . contains && _0x1a6e38 . contains ( _0x22060c [ _0xcb4965 ] ) || _0x1a6e38 . indexOf ( - 0x1 !== _0x22060c [ _0xcb4965 ] ) ) ) return ! 0x1 ;
return true ;
}
return _0x24b195 [ _0xfc173c ] == _0x4b67b0 [ _0xfc173c ] ;
} ) ;
} ,
'iterate' : function ( _0x1cb264 , _0x42cd9d ) {
var _0x38e5c3 = 'desc' == ( _0x42cd9d = _0x2ad006 ( {
'index' : null ,
'order' : 'ASC' ,
'autoContinue' : true ,
'filterDuplicates' : ! 0x1 ,
'keyRange' : null ,
'writeAccess' : ! 0x1 ,
'onEnd' : null ,
'onError' : _0x2e240f ,
'limit' : 0x1 / 0x0 ,
'offset' : 0x0 ,
'allowItemRejection' : ! 0x1
} , _0x42cd9d || { } ) ) . order . toLowerCase ( ) ? 'PREV' : 'NEXT' ;
_0x42cd9d . filterDuplicates && ( _0x38e5c3 += '_NO_DUPLICATE' ) ;
var _0x5b5b48 = ! 0x1 ,
_0xcb4965 = this . db . transaction ( [ this . storeName ] , this . consts [ _0x42cd9d . writeAccess ? 'READ_WRITE' : 'READ_ONLY' ] ) ,
_0x2b6d6d = _0xcb4965 . objectStore ( this . storeName ) ;
_0x42cd9d . index && ( _0x2b6d6d = _0x2b6d6d . index ( _0x42cd9d . index ) ) ;
var _0x523630 = 0x0 ;
_0xcb4965 . oncomplete = function ( ) {
_0x5b5b48 ? _0x42cd9d . onEnd ? _0x42cd9d . onEnd ( ) : _0x1cb264 ( null ) : _0x42cd9d . onError ( null ) ;
} , _0xcb4965 . onabort = _0x42cd9d . onError , _0xcb4965 . onerror = _0x42cd9d . onError ;
var _0x3ac163 = _0x2b6d6d . openCursor ( _0x42cd9d . keyRange , this . consts [ _0x38e5c3 ] ) ;
return _0x3ac163 . onerror = _0x42cd9d . onError , _0x3ac163 . onsuccess = function ( _0x4f183f ) {
var _0xe7af78 = _0x4f183f . target . result ;
if ( _0xe7af78 )
if ( _0x42cd9d . offset ) _0xe7af78 . advance ( _0x42cd9d . offset ) , _0x42cd9d . offset = 0x0 ;
else {
var _0x2ad006 = _0x1cb264 ( _0xe7af78 . value , _0xe7af78 , _0xcb4965 ) ;
_0x42cd9d . allowItemRejection && ! 0x1 === _0x2ad006 || _0x523630 ++ , _0x42cd9d . autoContinue && ( _0x523630 + _0x42cd9d . offset < _0x42cd9d . limit ? _0xe7af78 . continue ( ) : _0x5b5b48 = true ) ;
}
else _0x5b5b48 = true ;
} , _0xcb4965 ;
} ,
'query' : function ( _0x2bc5fc , _0x39354f ) {
var _0x39b24a = [ ] ,
_0x47cb91 = 0x0 ;
return ( _0x39354f = _0x39354f || { } ) . autoContinue = true , _0x39354f . writeAccess = ! 0x1 , _0x39354f . allowItemRejection = ! ! _0x39354f . filter , _0x39354f . onEnd = function ( ) {
_0x2bc5fc ( _0x39b24a , _0x47cb91 ) ;
} , this . iterate ( function ( _0x13e82f ) {
_0x47cb91 ++ ;
var _0x4bb504 = ! _0x39354f . filter || _0x39354f . filter ( _0x13e82f ) ;
return ! 0x1 !== _0x4bb504 && _0x39b24a . push ( _0x13e82f ) , _0x4bb504 ;
} , _0x39354f ) ;
} ,
'count' : function ( _0x26682d , _0x7fbfc6 ) {
var _0x26315e = ( _0x7fbfc6 = _0x2ad006 ( {
'index' : null ,
'keyRange' : null
} , _0x7fbfc6 || { } ) ) . onError || _0x2e240f ,
_0x18a616 = ! 0x1 ,
_0xcb4965 = null ,
_0x2b6d6d = this . db . transaction ( [ this . storeName ] , this . consts . READ _ONLY ) ;
_0x2b6d6d . oncomplete = function ( ) {
( _0x18a616 ? _0x26682d : _0x26315e ) ( _0xcb4965 ) ;
} , _0x2b6d6d . onabort = _0x26315e , _0x2b6d6d . onerror = _0x26315e ;
var _0x2eb015 = _0x2b6d6d . objectStore ( this . storeName ) ;
_0x7fbfc6 . index && ( _0x2eb015 = _0x2eb015 . index ( _0x7fbfc6 . index ) ) ;
var _0xfff48 = _0x2eb015 . count ( _0x7fbfc6 . keyRange ) ;
return _0xfff48 . onsuccess = function ( _0x4a9790 ) {
_0x18a616 = true , _0xcb4965 = _0x4a9790 . target . result ;
} , _0xfff48 . onError = _0x26315e , _0x2b6d6d ;
} ,
'makeKeyRange' : function ( _0x18e1e0 ) {
var _0x5b82af , _0x39b24a = void 0x0 !== _0x18e1e0 . lower ,
_0x2d70fb = void 0x0 !== _0x18e1e0 . upper ;
switch ( true ) {
case void 0x0 !== _0x18e1e0 . only :
_0x5b82af = this . keyRange . only ( _0x18e1e0 . only ) ;
break ;
case _0x39b24a && _0x2d70fb :
_0x5b82af = this . keyRange . bound ( _0x18e1e0 . lower , _0x18e1e0 . upper , _0x18e1e0 . excludeLower , _0x18e1e0 . excludeUpper ) ;
break ;
case _0x39b24a :
_0x5b82af = this . keyRange . lowerBound ( _0x18e1e0 . lower , _0x18e1e0 . excludeLower ) ;
break ;
case _0x2d70fb :
_0x5b82af = this . keyRange . upperBound ( _0x18e1e0 . upper , _0x18e1e0 . excludeUpper ) ;
break ;
default :
throw new Error ( 'Cannot create KeyRange. Provide one or both of "lower" or "upper" value, or an "only" value.' ) ;
}
return _0x5b82af ;
}
} ,
_0xcb4965 = { } ;
function _0x2ad006 ( _0x4910d7 , _0x179cd8 ) {
var _0x39b24a , _0x3e1f3f ;
for ( _0x39b24a in _0x179cd8 ) ( _0x3e1f3f = _0x179cd8 [ _0x39b24a ] ) !== _0xcb4965 [ _0x39b24a ] && _0x3e1f3f !== _0x4910d7 [ _0x39b24a ] && ( _0x4910d7 [ _0x39b24a ] = _0x3e1f3f ) ;
return _0x4910d7 ;
}
return _0x2b9783 . prototype = _0x28a590 , _0x2b9783 . version = _0x28a590 . version , _0x2b9783 ;
} ) ? _0xafdfe . call ( _0x5b82af , _0x39b24a , _0x5b82af , _0x2e240f ) : _0xafdfe ) || ( _0x2e240f . exports = _0x133983 ) ;
} ( ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , function ( _0x5cc7da , _0xd81f9c , _0x5928dc ) {
/ * !
* The buffer module from node . js , for the browser .
*
* @ author Feross Aboukhadijeh < feross @ feross . org > < http : //feross.org>
* @ license MIT
* /
! function ( ) { return function t ( r , e , n ) { function i ( f , u ) { if ( ! e [ f ] ) { if ( ! r [ f ] ) { var s = "function" == typeof require && require ; if ( ! u && s ) return s ( f , ! 0 ) ; if ( o ) return o ( f , ! 0 ) ; var h = new Error ( "Cannot find module '" + f + "'" ) ; throw h . code = "MODULE_NOT_FOUND" , h } var a = e [ f ] = { exports : { } } ; r [ f ] [ 0 ] . call ( a . exports , function ( t ) { return i ( r [ f ] [ 1 ] [ t ] || t ) } , a , a . exports , t , r , e , n ) } return e [ f ] . exports } for ( var o = "function" == typeof require && require , f = 0 ; f < n . length ; f ++ ) i ( n [ f ] ) ; return i } } ( ) ( { 1 : [ function ( t , r , e ) { _0xd81f9c . Buffer = t ( "buffer" ) . Buffer } , { buffer : 3 } ] , 2 : [ function ( t , r , e ) { "use strict" ; e . byteLength = function ( t ) { var r = h ( t ) , e = r [ 0 ] , n = r [ 1 ] ; return 3 * ( e + n ) / 4 - n } , e . toByteArray = function ( t ) { var r , e , n = h ( t ) , f = n [ 0 ] , u = n [ 1 ] , s = new o ( function ( t , r , e ) { return 3 * ( r + e ) / 4 - e } ( 0 , f , u ) ) , a = 0 , c = u > 0 ? f - 4 : f ; for ( e = 0 ; e < c ; e += 4 ) r = i [ t . charCodeAt ( e ) ] << 18 | i [ t . charCodeAt ( e + 1 ) ] << 12 | i [ t . charCodeAt ( e + 2 ) ] << 6 | i [ t . charCodeAt ( e + 3 ) ] , s [ a ++ ] = r >> 16 & 255 , s [ a ++ ] = r >> 8 & 255 , s [ a ++ ] = 255 & r ; 2 === u && ( r = i [ t . charCodeAt ( e ) ] << 2 | i [ t . charCodeAt ( e + 1 ) ] >> 4 , s [ a ++ ] = 255 & r ) ; 1 === u && ( r = i [ t . charCodeAt ( e ) ] << 10 | i [ t . charCodeAt ( e + 1 ) ] << 4 | i [ t . charCodeAt ( e + 2 ) ] >> 2 , s [ a ++ ] = r >> 8 & 255 , s [ a ++ ] = 255 & r ) ; return s } , e . fromByteArray = function ( t ) { for ( var r , e = t . length , i = e % 3 , o = [ ] , f = 0 , u = e - i ; f < u ; f += 16383 ) o . push ( a ( t , f , f + 16383 > u ? u : f + 16383 ) ) ; 1 === i ? ( r = t [ e - 1 ] , o . push ( n [ r >> 2 ] + n [ r << 4 & 63 ] + "==" ) ) : 2 === i && ( r = ( t [ e - 2 ] << 8 ) + t [ e - 1 ] , o . push ( n [ r >> 10 ] + n [ r >> 4 & 63 ] + n [ r << 2 & 63 ] + "=" ) ) ; return o . join ( "" ) } ; for ( var n = [ ] , i = [ ] , o = "undefined" != typeof Uint8Array ? Uint8Array : Array , f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" , u = 0 , s = f . length ; u < s ; ++ u ) n [ u ] = f [ u ] , i [ f . charCodeAt ( u ) ] = u ; function h ( t ) { var r = t . length ; if ( r % 4 > 0 ) throw new Error ( "Invalid string. Length must be a multiple of 4" ) ; var e = t . indexOf ( "=" ) ; return - 1 === e && ( e = r ) , [ e , e === r ? 0 : 4 - e % 4 ] } function a ( t , r , e ) { for ( var i , o , f = [ ] , u = r ; u < e ; u += 3 ) i = ( t [ u ] << 16 & 16711680 ) + ( t [ u + 1 ] << 8 & 65280 ) + ( 255 & t [ u + 2 ] ) , f . push ( n [ ( o = i ) >> 18 & 63 ] + n [ o >> 12 & 63 ] + n [ o >> 6 & 63 ] + n [ 63 & o ] ) ; return f . join ( "" ) } i [ "-" . charCodeAt ( 0 ) ] = 62 , i [ "_" . charCodeAt ( 0 ) ] = 63 } , { } ] , 3 : [ function ( t , r , e ) { ( function ( r ) { ( function ( ) { "use strict" ; var r = t ( "base64-js" ) , n = t ( "ieee754" ) ; e . Buffer = f , e . SlowBuffer = function ( t ) { + t != t && ( t = 0 ) ; return f . alloc ( + t ) } , e . INSPECT _MAX _BYTES = 50 ; var i = 2147483647 ; function o ( t ) { if ( t > i ) throw new RangeError ( 'The value "' + t + '" is invalid for option "size"' ) ; var r = new Uint8Array ( t ) ; return r . _ _proto _ _ = f . prototype , r } function f ( t , r , e ) { if ( "number" == typeof t ) { if ( "string" == typeof r ) throw new TypeError ( 'The "string" argument must be of type string. Received type number' ) ; return h ( t ) } return u ( t , r , e ) } function u ( t , r , e ) { if ( "string" == typeof t ) return function ( t , r ) { "string" == typeof r && "" !== r || ( r = "utf8" ) ; if ( ! f . isEncoding ( r ) ) throw new TypeError ( "Unknown encoding: " + r ) ; var e = 0 | p ( t , r ) , n = o ( e ) , i = n . write ( t , r ) ; i !== e && ( n = n . slice ( 0 , i ) ) ; return n } ( t , r ) ; if ( ArrayBuffer . isView ( t ) ) return a ( t ) ; if ( null == t ) throw TypeError ( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t ) ; if ( z ( t , ArrayBuffer ) || t && z ( t . buffer , ArrayBuffer ) ) return function ( t , r , e ) { if ( r < 0 || t . byteLength < r ) throw new RangeError ( '"offset" is outside of buffer bounds' ) ; if ( t . byteLength < r + ( e || 0 ) ) throw new RangeError ( '"length" is outside of buffer bounds' ) ; var n ; n = void 0 === r && void 0 === e ? new Uint8Array ( t ) : void 0 === e ? new Uint8Array ( t , r ) : new Uint8Array ( t , r , e ) ; return n . _ _proto _ _ = f . prototype , n } ( t , r , e ) ; if ( "number" == typeof t ) throw new TypeError ( 'The "value" argument must not be of type number. Received type number' ) ; var n = t . valueOf && t . valueOf ( ) ; if ( null != n && n !== t ) return f . from ( n , r , e ) ; var i = function ( t ) { if ( f . isBuffer ( t ) ) { var r = 0 | c ( t . length ) , e = o ( r ) ; return 0 === e . length ? e : ( t . copy ( e , 0 , 0 , r ) , e ) } if ( void 0 !== t . length ) return "number" != typeof t . length || D ( t . length ) ? o ( 0 ) : a ( t ) ; if ( "Buffer" === t . type && Array . isArray ( t . data ) ) return a ( t . data ) } ( t ) ; if ( i ) return i ; if ( "undefined" != typeof Symbol && null != Symbol . toPrimitive && "function" == typeof t [ Symbol . toPrimitive ] ) return f . from ( t [ Symbol . toPrimitive ] ( "string" ) , r , e ) ; throw new TypeError ( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t ) } function s ( t ) { if ( "number" != typeof t ) throw new TypeError ( ' "size" argument must
} , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , function ( _0xc6a4b0 , _0x7437ff , _0x459722 ) {
2022-04-30 00:01:21 +00:00
var _0x4bddd8 ;
! function ( ) {
'use strict' ;
var _0x459722 = { } . hasOwnProperty ;
function _0x428a46 ( ) {
for ( var _0xc6a4b0 = [ ] , _0x7437ff = 0x0 ; _0x7437ff < arguments . length ; _0x7437ff ++ ) {
var _0x26c9fe = arguments [ _0x7437ff ] ;
if ( _0x26c9fe ) {
var _0x53e692 = typeof _0x26c9fe ;
if ( 'string' === _0x53e692 || 'number' === _0x53e692 ) _0xc6a4b0 . push ( this && this [ _0x26c9fe ] || _0x26c9fe ) ;
else if ( Array . isArray ( _0x26c9fe ) ) _0xc6a4b0 . push ( _0x428a46 . apply ( this , _0x26c9fe ) ) ;
else if ( 'object' === _0x53e692 )
for ( var _0x12d444 in _0x26c9fe ) _0x459722 . call ( _0x26c9fe , _0x12d444 ) && _0x26c9fe [ _0x12d444 ] && _0xc6a4b0 . push ( this && this [ _0x12d444 ] || _0x12d444 ) ;
}
}
return _0xc6a4b0 . join ( ' ' ) ;
}
_0xc6a4b0 . exports ? ( _0x428a46 . default = _0x428a46 , _0xc6a4b0 . exports = _0x428a46 ) : void 0x0 === ( _0x4bddd8 = function ( ) {
return _0x428a46 ;
} . apply ( _0x7437ff , [ ] ) ) || ( _0xc6a4b0 . exports = _0x4bddd8 ) ;
} ( ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} , function ( module ) {
module . exports = {
2022-05-16 16:45:45 +00:00
'ejs-wrapper' : 'ejs--de6433374cb30211f10e148b320b2f' ,
'ejs' : 'ejs--7a5f920ceffb2913f6dbda780573cf' ,
'ejs--full-ui' : 'ejs--f3a002bba9836fe4ebfed357a45521' ,
'controls-tabs' : 'ejs--008adea3c1ef33a8fc94892a1e97e6' ,
'overlay' : 'ejs--85a95eb6bf74a40ab61b91a91e5bff' ,
'key-setting-popup' : 'ejs--d169a219343bc32dd4aecc3f6b7f25' ,
'loading-info' : 'ejs--782e3572812f983b3a150eec177391' ,
'p1' : 'ejs--c426dd1d179aa351e6cec47e1d9438' ,
'p2' : 'ejs--31e7e81db48819ee35ec6f50378a2e' ,
'p3' : 'ejs--20d4eb2646d396f558a645dc0574f1' ,
'p4' : 'ejs--4de05306c8b099bdeb4585571ac095' ,
'ejs__contextmenu' : 'ejs--c7957d8666bb6b8fc7c3e9c021aaf8' ,
'ad' : 'ejs--cbcfe0a1421cadac9a04c81d6431d6' ,
'close-ad' : 'ejs--f3a1903d935f6cf720d4a0498db62a' ,
'start-game' : 'ejs--73f9b4e94a7a1fe74e11107d5ab2ef' ,
'pulse' : 'ejs--9bd947b3e6427453595f083d740a7c' ,
'ejs__control' : 'ejs--8732295ca5c4902a060d34706a8146' ,
'ejs__tab-focus' : 'ejs--a83b6c705e103e81a7762d0ed5e64b' ,
'ejs__control--pressed' : 'ejs--b1238136ec472a92297159882cf4b8' ,
'icon--pressed' : 'ejs--ec731619062226d943da67f5d83009' ,
'icon--not-pressed' : 'ejs--dc7068585e3d84fe0e676864c1439e' ,
'label--pressed' : 'ejs--0c6561f9155750b0aeeed6da5da7bf' ,
'label--not-pressed' : 'ejs--13d64e30c1333cc99391af48ddabaa' ,
'ejs--video' : 'ejs--d5f430a99a1619b3434bf58e34a99c' ,
'ejs__controls' : 'ejs--1acedc5ed6816abe96dd27d910fd74' ,
'ejs__progress' : 'ejs--f1aa376719b564cae0e653157cde14' ,
'ejs__time' : 'ejs--90d2780f99bcc76fdb6b0378a7238e' ,
'ejs__menu' : 'ejs--c7bfb2d1b75a40fdaaf90624bea9e7' ,
'ejs__volume' : 'ejs--36ceeeec0df37a9cf4bbe05fa204ec' ,
'ejs--hide-controls' : 'ejs--1b8cb7f2294b1eb5de5238daea3513' ,
'ejs--fullscreen-enabled' : 'ejs--19409fe2057ab935a7e46abb5b4f49' ,
'ejs__tooltip' : 'ejs--74c6d4176d27e37a19d2e9e61de8f4' ,
'ejs__menu__container' : 'ejs--013213afedeeb6878089b1ca1b4e47' ,
'ejs-popup' : 'ejs--c2532bfe04554193cc42b3be753700' ,
'ejs__control--forward' : 'ejs--0b4cdb4057d1a4623e60836ccc6275' ,
'ejs__control--back' : 'ejs--a7ad9de0cb0ca672b6703c50de7db9' ,
'ejs__menu__value' : 'ejs--f91e90fe7cabc875aff9a431bf5389' ,
'ejs__tooltip--visible' : 'ejs--6ea27aa07e60d1d6e4c9782740028a' ,
'ejs--menu-open' : 'ejs--da54136ccf8c6b0b16d98e8b8e8b88' ,
'ejs__video-wrapper' : 'ejs--057800d021995e1347ec07cb748672' ,
'portrait' : 'ejs--64f1256f556fb94454b930cb3ea7f2' ,
'game-started' : 'ejs--7da7949f602347007818e6d192eb23' ,
'ejs__progress__buffer' : 'ejs--f8d706413436fd119cf01aaf5a9d9d' ,
'ejs--audio' : 'ejs--bd0222e58d71b0a304d6037dfcffd5' ,
'ejs--loading' : 'ejs--2521e1257996f264de36e77cc9c5ee' ,
'ejs__dialogs' : 'ejs--d31688f864f56d6426ebbf2217d6ee' ,
'ejs__dialog' : 'ejs--5e71fd80268afbb1d588e40b993508' ,
'ejs__cache__container' : 'ejs--1e0f0672f67d0e96592314c9ed78b0' ,
'ejs__loading__container' : 'ejs--d7e6a6a8f38bfaa256fe5d709a8258' ,
'ejs__load-state__container' : 'ejs--b183f581b5336c4908ad258d3e1cc7' ,
'ejs__screenRecord__container' : 'ejs--b183f581b5336cashrqd258d3e1cc7' ,
'ejs__netplay__container' : 'ejs--158ea9dd34e3e7af2d837f8b05babb' ,
'ejs__gamepad__container' : 'ejs--3f0897a8158ba363a0ee0afe4da7c5' ,
'dialog-container' : 'ejs--38cc09882a55e98c76168dbe838aa0' ,
'dialog-title' : 'ejs--b373c9d5029d49324fb8ac3ece96c1' ,
'dialog-content' : 'ejs--a5e2629abb9a5bcbc8b2c1307922d2' ,
'dialog-buttons' : 'ejs--580e3c22e63f8a1eb29694fd0b141b' ,
'btn-cancel' : 'ejs--ad20569e1449d7b8e99e6465960456' ,
'btn-reset' : 'ejs--ad20569e1449d7b8e99e6465963825' ,
'btn-clear' : 'ejs--ad20569e1449d7b8e99e6468571053' ,
2022-11-03 23:53:19 +00:00
'btn-close' : 'ejs--iehanqurh382hriwqoriuehqr83hq9' ,
2022-05-16 16:45:45 +00:00
'tabs' : 'ejs--8e7922427f460a31935084b7acfb1a' ,
'active' : 'ejs--68d337c212ec6a5bc43125440d422b' ,
'tabs-content' : 'ejs--31eb28817642bb1bfe0a2c422108bb' ,
'tabs-panel' : 'ejs--f932566a0af5314da834324c901978' ,
'button-container' : 'ejs--c233fb69cbef43078bc39e9d1efac8' ,
'btn-submit' : 'ejs--bdb54e9fc47f9805b506b746e897bf' ,
'btn-create-room' : 'ejs--67d03ee7480b871ad6507d6319a839' ,
'btn-quit' : 'ejs--c2d931157456c1d438d40a2f66af2c' ,
'set' : 'ejs--6604c83041a275a78837c452a71dd8' ,
'btn-join-room' : 'ejs--99150e15f962c63c689cadc81ef40d' ,
'netplay-player-name' : 'ejs--71527b6509aa48afce3ce1a11c02f0' ,
'netplay-player-name-input' : 'ejs--7ad35768e3f6b9faf97db01d5b60ae' ,
'netplay-player-name-set' : 'ejs--9c403e5e107a3e4374ba244b636400' ,
'netplay-roomlist' : 'ejs--d6a46533fa6e510a571af5c28b440a' ,
'netplay-create-room' : 'ejs--57ca9b3853cc7de731483cfcc95a59' ,
'netplay-room-name-input' : 'ejs--0885d5e25e19127b6b516014426a1b' ,
'netplay-room-password-input' : 'ejs--25023d28756fdb9dfbbfb6dccb8677' ,
'netplay-create-room-set' : 'ejs--75b3a8d35aacc6424ed7422fdeaaaa' ,
'netplay-room' : 'ejs--eefdf28d69ed2d20f197308981bb61' ,
'cheats-add' : 'ejs--9e670880bb57e824400fa00f09aaad' ,
'cheats-list' : 'ejs--2b4e3c245b7b25dfdac5e09155a68e' ,
'cheat-code-input' : 'ejs--572b0b3a0345a6b01b01a15a02842c' ,
'cheat-name-input' : 'ejs--a7d7f80c8999469c991ea452a85dd9' ,
'ejs__widgets' : 'ejs--952c974392296e7f643d51db380157' ,
'ejs__widget' : 'ejs--0d7e216cf12ae73705b5d5bb0452fc' ,
2022-05-24 21:46:10 +00:00
'ejs__widget_controls_toggle' : 'ejs--666d4296310579687cf3cf3d2cf951' ,
2022-05-16 16:45:45 +00:00
'ejs__widget_netplay' : 'ejs--c0a5e71f6613caab66d6ae15a5a00f' ,
'virtual-gamepad' : 'ejs--2440e3b831017ff8327c939e2a4413' ,
'top' : 'ejs--b8d8b771d0bbb94e2bbd03054f53fd' ,
'left' : 'ejs--c83d70cb63c933edc073c7fe92e32b' ,
'buttons' : 'ejs--6e7015634623fd6a82e6a7d3488c84' ,
'center' : 'ejs--49fa47c86a131e4ca8fb268bfdde89' ,
'right' : 'ejs--7d2b19f77fd0ccabf94dc1ca39ae18' ,
'touch' : 'ejs--d708d9d486f1eca73a593d5c09f8ad' ,
'modal' : 'ejs--eefec939452eb92fad035932d0f47c' ,
'modal__overlay' : 'ejs--f1f43b27384834c8c22c6f81d0c5ae' ,
'modal__container' : 'ejs--c4ee33766a01ed0356c3ec07898e96' ,
'modal__header' : 'ejs--a073f32023da1ced805c5f95a4e81c' ,
'modal__footer' : 'ejs--ed44f59bb8cd49177586b140658c6c' ,
'modal__title' : 'ejs--81470ba5e6a6d68014839ad4d9a977' ,
'modal__close' : 'ejs--c3c85789c2a7f56d8b26dba75b7e1f' ,
'modal__content' : 'ejs--db44f5520e6f4fd0dd34b478bb9ee8' ,
'modal__btn' : 'ejs--319bcec5dee9444e1a2a53d6503b7c' ,
'modal__btn-primary' : 'ejs--eaf3c1cba25d415d92ac48d7db34dd' ,
'modal__errmsg' : 'ejs--940087708c06b6129ce2bfa45f1d89' ,
'micromodal-slide' : 'ejs--bef295f3125e9ba83d4f3677264bae' ,
'is-open' : 'ejs--60c17e0d149099f207b06f27edae6a' ,
'mmfadeIn' : 'ejs--9d7aa2bd5ee276be085e5b2a0bbc2e' ,
'mmslideIn' : 'ejs--8b069266f76099cc6bc220f6ea56cc' ,
'mmfadeOut' : 'ejs--184b7558ffeb569c1790654537477b' ,
'mmslideOut' : 'ejs--379a464ad0e66ea5fc601e5f2fd73e' ,
'ejs-switch' : 'ejs--4c3e63d4005bd8a0468e9c74a35f62' ,
'ejs-delete-cheat' : 'ejs--90bcdd71cd0d2307e9ee0dffa916da' ,
'icon--exit-fullscreen' : 'ejs--2b3dd6e2e26c0f0dc4ac5779dedd5e' ,
'ejs--fullscreen-fallback' : 'ejs--412041671de21945d3e028b6ae84c9' ,
'ejs--no-transition' : 'ejs--33643265135cf89e6c0a0d9866d6f1' ,
'ejs__sr-only' : 'ejs--6f0e996cd15e5fb6be0256918531d7' ,
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
'ejs-fade-in' : 'ejs--7cadf43f3d9eb17c7e3c36de84973b' ,
'dpad-container' : 'ejs--914358605501b11476e86626b2ff16' ,
'dpad-bg' : 'ejs--be66239219d594001da38f91c9ad02' ,
'dpad-front' : 'ejs--9dbb9be3403878e912527181e2d41b' ,
'dpad-1' : 'ejs--f9c7797bdf05569bdc13b4f2074270' ,
'dpad-2' : 'ejs--2645f3bad105488a313c5e30dab74f' ,
'dpad-1-bg' : 'ejs--a57cf324c8ff108947112e35e589b5' ,
'dpad-2-bg' : 'ejs--4873d94c18140ab195da609b40b71a' ,
'dpad-left' : 'ejs--bd9311b0a4f654af6ab5ba28bcf358' ,
'dpad-right' : 'ejs--704d45ea060cc6809451a0d9d47ad7' ,
'dpad-up' : 'ejs--f0b89ca5b5621659af184c8e012ccb' ,
'dpad-down' : 'ejs--8de361d6b01eaa181f8db4ac3eb7af'
2022-04-30 00:01:21 +00:00
} ;
} , function ( _0xfb1bcc , _0x54234e , _0x2fab2f ) {
var _0x19304b , _0x101743 , _0x30cf42 ;
function _0x5b8580 ( _0x55a2a2 ) {
return ( _0x5b8580 = 'function' == typeof Symbol && 'symbol' == typeof Symbol . iterator ? function ( _0x2b66f2 ) {
return typeof _0x2b66f2 ;
} : function ( _0x4d77c3 ) {
return _0x4d77c3 && 'function' == typeof Symbol && _0x4d77c3 . constructor === Symbol && _0x4d77c3 !== Symbol . prototype ? 'symbol' : typeof _0x4d77c3 ;
} ) ( _0x55a2a2 ) ;
} ! function ( _0x55acb1 ) {
'object' == _0x5b8580 ( _0x54234e ) && void 0x0 !== _0xfb1bcc ? _0xfb1bcc . exports = _0x55acb1 ( ) : ( _0x101743 = [ ] , void 0x0 === ( _0x30cf42 = 'function' == typeof ( _0x19304b = _0x55acb1 ) ? _0x19304b . apply ( _0x54234e , _0x101743 ) : _0x19304b ) || ( _0xfb1bcc . exports = _0x30cf42 ) ) ;
} ( function ( ) {
function _0x3fa093 ( ) { }
function _0x472eae ( _0x245243 , _0xb70880 ) {
return this . identifier = _0xb70880 . identifier , this . position = _0xb70880 . position , this . frontPosition = _0xb70880 . frontPosition , this . collection = _0x245243 , this . defaults = {
'size' : 0x64 ,
'threshold' : 0.1 ,
'color' : 'white' ,
'fadeTime' : 0xfa ,
'dataOnly' : ! 0x1 ,
'restJoystick' : true ,
'restOpacity' : 0.5 ,
'mode' : 'dynamic' ,
'zone' : document . body ,
'lockX' : ! 0x1 ,
'lockY' : ! 0x1
} , this . config ( _0xb70880 ) , 'dynamic' === this . options . mode && ( this . options . restOpacity = 0x0 ) , this . id = _0x472eae . id , _0x472eae . id += 0x1 , this . buildEl ( ) . stylize ( ) , this . instance = {
'el' : this . ui . el ,
'on' : this . on . bind ( this ) ,
'off' : this . off . bind ( this ) ,
'show' : this . show . bind ( this ) ,
'hide' : this . hide . bind ( this ) ,
'add' : this . addToDom . bind ( this ) ,
'remove' : this . removeFromDom . bind ( this ) ,
'destroy' : this . destroy . bind ( this ) ,
'resetDirection' : this . resetDirection . bind ( this ) ,
'computeDirection' : this . computeDirection . bind ( this ) ,
'trigger' : this . trigger . bind ( this ) ,
'position' : this . position ,
'frontPosition' : this . frontPosition ,
'ui' : this . ui ,
'identifier' : this . identifier ,
'id' : this . id ,
'options' : this . options
} , this . instance ;
}
function _0x16647e ( _0xa2b08 , _0x5f1598 ) {
var _0x3eabe7 = this ;
return _0x3eabe7 . nipples = [ ] , _0x3eabe7 . idles = [ ] , _0x3eabe7 . actives = [ ] , _0x3eabe7 . ids = [ ] , _0x3eabe7 . pressureIntervals = { } , _0x3eabe7 . manager = _0xa2b08 , _0x3eabe7 . id = _0x16647e . id , _0x16647e . id += 0x1 , _0x3eabe7 . defaults = {
'zone' : document . body ,
'multitouch' : ! 0x1 ,
'maxNumberOfNipples' : 0xa ,
'mode' : 'dynamic' ,
'position' : {
'top' : 0x0 ,
'left' : 0x0
} ,
'catchDistance' : 0xc8 ,
'size' : 0x64 ,
'threshold' : 0.1 ,
'color' : 'white' ,
'fadeTime' : 0xfa ,
'dataOnly' : ! 0x1 ,
'restJoystick' : true ,
'restOpacity' : 0.5 ,
'lockX' : ! 0x1 ,
'lockY' : ! 0x1
} , _0x3eabe7 . config ( _0x5f1598 ) , 'static' !== _0x3eabe7 . options . mode && 'semi' !== _0x3eabe7 . options . mode || ( _0x3eabe7 . options . multitouch = ! 0x1 ) , _0x3eabe7 . options . multitouch || ( _0x3eabe7 . options . maxNumberOfNipples = 0x1 ) , _0x3eabe7 . updateBox ( ) , _0x3eabe7 . prepareNipples ( ) , _0x3eabe7 . bindings ( ) , _0x3eabe7 . begin ( ) , _0x3eabe7 . nipples ;
}
function _0x239176 ( _0x314d03 ) {
var _0x472eae , _0x16647e = this ;
return _0x16647e . ids = { } , _0x16647e . index = 0x0 , _0x16647e . collections = [ ] , _0x16647e . config ( _0x314d03 ) , _0x16647e . prepareCollections ( ) , _0x58adb3 . bindEvt ( window , 'resize' , function ( _0x286619 ) {
clearTimeout ( _0x472eae ) , _0x472eae = setTimeout ( function ( ) {
var _0x286619 , _0x472eae = _0x58adb3 . getScroll ( ) ;
_0x16647e . collections . forEach ( function ( _0x51b063 ) {
_0x51b063 . forEach ( function ( _0xac9967 ) {
_0x286619 = _0xac9967 . el . getBoundingClientRect ( ) , _0xac9967 . position = {
'x' : _0x472eae . x + _0x286619 . left ,
'y' : _0x472eae . y + _0x286619 . top
} ;
} ) ;
} ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} , 0x64 ) ;
2022-04-30 00:01:21 +00:00
} ) , _0x16647e . collections ;
}
var _0x57280e , _0x127f2 = ! ! ( 'ontouchstart' in window ) ,
_0xaf874f = ! ! window . PointerEvent ,
_0xfaede4 = ! ! window . MSPointerEvent ,
_0x436e84 = {
'start' : 'mousedown' ,
'move' : 'mousemove' ,
'end' : 'mouseup'
} ,
_0x3ab23c = { } ;
_0xaf874f ? _0x57280e = {
'start' : 'pointerdown' ,
'move' : 'pointermove' ,
'end' : 'pointerup, pointercancel'
} : _0xfaede4 ? _0x57280e = {
'start' : 'MSPointerDown' ,
'move' : 'MSPointerMove' ,
'end' : 'MSPointerUp'
} : _0x127f2 ? ( _0x57280e = {
'start' : 'touchstart' ,
'move' : 'touchmove' ,
'end' : 'touchend, touchcancel'
} , _0x3ab23c = _0x436e84 ) : _0x57280e = _0x436e84 ;
var _0x58adb3 = {
'distance' : function ( _0xe2d137 , _0x4a91b4 ) {
var _0x16647e = _0x4a91b4 . x - _0xe2d137 . x ,
_0x69f31c = _0x4a91b4 . y - _0xe2d137 . y ;
return Math . sqrt ( _0x16647e * _0x16647e + _0x69f31c * _0x69f31c ) ;
} ,
'angle' : function ( _0x33e493 , _0x9d3464 ) {
var _0x16647e = _0x9d3464 . x - _0x33e493 . x ,
_0x41214c = _0x9d3464 . y - _0x33e493 . y ;
return _0x58adb3 . degrees ( Math . atan2 ( _0x41214c , _0x16647e ) ) ;
} ,
'findCoord' : function ( _0x3b9179 , _0x54b275 , _0x5b7648 ) {
var _0x3183ba = {
'x' : 0x0 ,
'y' : 0x0
} ;
return _0x5b7648 = _0x58adb3 . radians ( _0x5b7648 ) , _0x3183ba . x = _0x3b9179 . x - _0x54b275 * Math . cos ( _0x5b7648 ) , _0x3183ba . y = _0x3b9179 . y - _0x54b275 * Math . sin ( _0x5b7648 ) , _0x3183ba ;
} ,
'radians' : function ( _0x32b21c ) {
return _0x32b21c * ( Math . PI / 0xb4 ) ;
} ,
'degrees' : function ( _0x5a7b5a ) {
return _0x5a7b5a * ( 0xb4 / Math . PI ) ;
} ,
'bindEvt' : function ( _0x33d8ea , _0x4f8b23 , _0x3e6d3a ) {
for ( var _0x18d0a3 , _0x276598 = _0x4f8b23 . split ( /[ ,]+/g ) , _0x2f2026 = 0x0 ; _0x2f2026 < _0x276598 . length ; _0x2f2026 += 0x1 ) _0x18d0a3 = _0x276598 [ _0x2f2026 ] , _0x33d8ea . addEventListener ? _0x33d8ea . addEventListener ( _0x18d0a3 , _0x3e6d3a , ! 0x1 ) : _0x33d8ea . attachEvent && _0x33d8ea . attachEvent ( _0x18d0a3 , _0x3e6d3a ) ;
} ,
'unbindEvt' : function ( _0x5e647a , _0x4dd2d9 , _0x14fccc ) {
for ( var _0x463f77 , _0x22297b = _0x4dd2d9 . split ( /[ ,]+/g ) , _0x3a86ae = 0x0 ; _0x3a86ae < _0x22297b . length ; _0x3a86ae += 0x1 ) _0x463f77 = _0x22297b [ _0x3a86ae ] , _0x5e647a . removeEventListener ? _0x5e647a . removeEventListener ( _0x463f77 , _0x14fccc ) : _0x5e647a . detachEvent && _0x5e647a . detachEvent ( _0x463f77 , _0x14fccc ) ;
} ,
'trigger' : function ( _0x1c4995 , _0x1374ef , _0x20bf72 ) {
var _0x8fde6e = new CustomEvent ( _0x1374ef , _0x20bf72 ) ;
_0x1c4995 . dispatchEvent ( _0x8fde6e ) ;
} ,
'prepareEvent' : function ( _0x3f48af ) {
return _0x3f48af . preventDefault ( ) , _0x3f48af . type . match ( /^touch/ ) ? _0x3f48af . changedTouches : _0x3f48af ;
} ,
'getScroll' : function ( ) {
return {
'x' : void 0x0 !== window . pageXOffset ? window . pageXOffset : ( document . documentElement || document . body . parentNode || document . body ) . scrollLeft ,
'y' : void 0x0 !== window . pageYOffset ? window . pageYOffset : ( document . documentElement || document . body . parentNode || document . body ) . scrollTop
} ;
} ,
'applyPosition' : function ( _0x466237 , _0x7d975a ) {
_0x7d975a . top || _0x7d975a . right || _0x7d975a . bottom || _0x7d975a . left ? ( _0x466237 . style . top = _0x7d975a . top , _0x466237 . style . right = _0x7d975a . right , _0x466237 . style . bottom = _0x7d975a . bottom , _0x466237 . style . left = _0x7d975a . left ) : ( _0x466237 . style . left = _0x7d975a . x + 'px' , _0x466237 . style . top = _0x7d975a . y + 'px' ) ;
} ,
'getTransitionStyle' : function ( _0x1112bc , _0x4fa4c7 , _0xfe6b69 ) {
var _0x1356a5 = _0x58adb3 . configStylePropertyObject ( _0x1112bc ) ;
for ( var _0x7f9207 in _0x1356a5 )
if ( _0x1356a5 . hasOwnProperty ( _0x7f9207 ) )
if ( 'string' == typeof _0x4fa4c7 ) _0x1356a5 [ _0x7f9207 ] = _0x4fa4c7 + ' ' + _0xfe6b69 ;
else {
for ( var _0x2df8ef = '' , _0x14e123 = 0x0 , _0x19b35e = _0x4fa4c7 . length ; _0x14e123 < _0x19b35e ; _0x14e123 += 0x1 ) _0x2df8ef += _0x4fa4c7 [ _0x14e123 ] + ' ' + _0xfe6b69 + ', ' ;
_0x1356a5 [ _0x7f9207 ] = _0x2df8ef . slice ( 0x0 , - 0x2 ) ;
}
return _0x1356a5 ;
} ,
'getVendorStyle' : function ( _0x54efd6 , _0x3ce7bf ) {
var _0x16647e = _0x58adb3 . configStylePropertyObject ( _0x54efd6 ) ;
for ( var _0x3f54f3 in _0x16647e ) _0x16647e . hasOwnProperty ( _0x3f54f3 ) && ( _0x16647e [ _0x3f54f3 ] = _0x3ce7bf ) ;
return _0x16647e ;
} ,
'configStylePropertyObject' : function ( _0x483453 ) {
var _0x472eae = { } ;
return _0x472eae [ _0x483453 ] = '' , [ 'webkit' , 'Moz' , 'o' ] . forEach ( function ( _0x5285f6 ) {
_0x472eae [ _0x5285f6 + _0x483453 . charAt ( 0x0 ) . toUpperCase ( ) + _0x483453 . slice ( 0x1 ) ] = '' ;
} ) , _0x472eae ;
} ,
'extend' : function ( _0x4a9a4d , _0x406e9b ) {
for ( var _0x16647e in _0x406e9b ) _0x406e9b . hasOwnProperty ( _0x16647e ) && ( _0x4a9a4d [ _0x16647e ] = _0x406e9b [ _0x16647e ] ) ;
return _0x4a9a4d ;
} ,
'safeExtend' : function ( _0x96b22 , _0x393dc2 ) {
var _0x16647e = { } ;
for ( var _0x5586ca in _0x96b22 ) _0x96b22 . hasOwnProperty ( _0x5586ca ) && _0x393dc2 . hasOwnProperty ( _0x5586ca ) ? _0x16647e [ _0x5586ca ] = _0x393dc2 [ _0x5586ca ] : _0x96b22 . hasOwnProperty ( _0x5586ca ) && ( _0x16647e [ _0x5586ca ] = _0x96b22 [ _0x5586ca ] ) ;
return _0x16647e ;
} ,
'map' : function ( _0x3d3efe , _0x174497 ) {
if ( _0x3d3efe . length )
for ( var _0x16647e = 0x0 , _0x577b31 = _0x3d3efe . length ; _0x16647e < _0x577b31 ; _0x16647e += 0x1 ) _0x174497 ( _0x3d3efe [ _0x16647e ] ) ;
else _0x174497 ( _0x3d3efe ) ;
}
} ;
_0x3fa093 . prototype . on = function ( _0x2bb1a4 , _0x55f49f ) {
var _0x16647e , _0x584142 = this ,
_0x21f57b = _0x2bb1a4 . split ( /[ ,]+/g ) ;
_0x584142 . _handlers _ = _0x584142 . _handlers _ || { } ;
for ( var _0x271586 = 0x0 ; _0x271586 < _0x21f57b . length ; _0x271586 += 0x1 ) _0x16647e = _0x21f57b [ _0x271586 ] , _0x584142 . _handlers _ [ _0x16647e ] = _0x584142 . _handlers _ [ _0x16647e ] || [ ] , _0x584142 . _handlers _ [ _0x16647e ] . push ( _0x55f49f ) ;
return _0x584142 ;
} , _0x3fa093 . prototype . off = function ( _0x241550 , _0xc2215a ) {
var _0x16647e = this ;
return _0x16647e . _handlers _ = _0x16647e . _handlers _ || { } , void 0x0 === _0x241550 ? _0x16647e . _handlers _ = { } : void 0x0 === _0xc2215a ? _0x16647e . _handlers _ [ _0x241550 ] = null : _0x16647e . _handlers _ [ _0x241550 ] && _0x16647e . _handlers _ [ _0x241550 ] . indexOf ( _0xc2215a ) >= 0x0 && _0x16647e . _handlers _ [ _0x241550 ] . splice ( _0x16647e . _handlers _ [ _0x241550 ] . indexOf ( _0xc2215a ) , 0x1 ) , _0x16647e ;
} , _0x3fa093 . prototype . trigger = function ( _0x38a190 , _0x828e63 ) {
var _0x16647e , _0xcf280d = this ,
_0xaa0dc6 = _0x38a190 . split ( /[ ,]+/g ) ;
_0xcf280d . _handlers _ = _0xcf280d . _handlers _ || { } ;
for ( var _0x5c0574 = 0x0 ; _0x5c0574 < _0xaa0dc6 . length ; _0x5c0574 += 0x1 ) _0x16647e = _0xaa0dc6 [ _0x5c0574 ] , _0xcf280d . _handlers _ [ _0x16647e ] && _0xcf280d . _handlers _ [ _0x16647e ] . length && _0xcf280d . _handlers _ [ _0x16647e ] . forEach ( function ( _0xd6a234 ) {
_0xd6a234 . call ( _0xcf280d , {
'type' : _0x16647e ,
'target' : _0xcf280d
} , _0x828e63 ) ;
} ) ;
} , _0x3fa093 . prototype . config = function ( _0x4c598e ) {
var _0x472eae = this ;
_0x472eae . options = _0x472eae . defaults || { } , _0x4c598e && ( _0x472eae . options = _0x58adb3 . safeExtend ( _0x472eae . options , _0x4c598e ) ) ;
} , _0x3fa093 . prototype . bindEvt = function ( _0x1ada9c , _0x498cf5 ) {
var _0x16647e = this ;
return _0x16647e . _domHandlers _ = _0x16647e . _domHandlers _ || { } , _0x16647e . _domHandlers _ [ _0x498cf5 ] = function ( ) {
'function' == typeof _0x16647e [ 'on' + _0x498cf5 ] ? _0x16647e [ 'on' + _0x498cf5 ] . apply ( _0x16647e , arguments ) : console . warn ( '[WARNING] : Missing "on' + _0x498cf5 + '" handler.' ) ;
} , _0x58adb3 . bindEvt ( _0x1ada9c , _0x57280e [ _0x498cf5 ] , _0x16647e . _domHandlers _ [ _0x498cf5 ] ) , _0x3ab23c [ _0x498cf5 ] && _0x58adb3 . bindEvt ( _0x1ada9c , _0x3ab23c [ _0x498cf5 ] , _0x16647e . _domHandlers _ [ _0x498cf5 ] ) , _0x16647e ;
} , _0x3fa093 . prototype . unbindEvt = function ( _0x5d5ea4 , _0x581a68 ) {
var _0x16647e = this ;
return _0x16647e . _domHandlers _ = _0x16647e . _domHandlers _ || { } , _0x58adb3 . unbindEvt ( _0x5d5ea4 , _0x57280e [ _0x581a68 ] , _0x16647e . _domHandlers _ [ _0x581a68 ] ) , _0x3ab23c [ _0x581a68 ] && _0x58adb3 . unbindEvt ( _0x5d5ea4 , _0x3ab23c [ _0x581a68 ] , _0x16647e . _domHandlers _ [ _0x581a68 ] ) , delete _0x16647e . _domHandlers _ [ _0x581a68 ] , this ;
} , _0x472eae . prototype = new _0x3fa093 ( ) , _0x472eae . constructor = _0x472eae , _0x472eae . id = 0x0 , _0x472eae . prototype . buildEl = function ( _0x2b6936 ) {
return this . ui = { } , this . options . dataOnly ? this : ( this . ui . el = document . createElement ( 'div' ) , this . ui . back = document . createElement ( 'div' ) , this . ui . front = document . createElement ( 'div' ) , this . ui . el . className = 'nipple collection_' + this . collection . id , this . ui . back . className = 'back' , this . ui . front . className = 'front' , this . ui . el . setAttribute ( 'id' , 'nipple_' + this . collection . id + '_' + this . id ) , this . ui . el . appendChild ( this . ui . back ) , this . ui . el . appendChild ( this . ui . front ) , this ) ;
} , _0x472eae . prototype . stylize = function ( ) {
if ( this . options . dataOnly ) return this ;
var _0x3fa093 = this . options . fadeTime + 'ms' ,
_0x472eae = _0x58adb3 . getVendorStyle ( 'borderRadius' , '50%' ) ,
_0x16647e = _0x58adb3 . getTransitionStyle ( 'transition' , 'opacity' , _0x3fa093 ) ,
_0x344f45 = { } ;
return _0x344f45 . el = {
'position' : 'absolute' ,
'opacity' : this . options . restOpacity ,
'display' : 'block' ,
'zIndex' : 0x3e7
} , _0x344f45 . back = {
'position' : 'absolute' ,
'display' : 'block' ,
'width' : this . options . size + 'px' ,
'height' : this . options . size + 'px' ,
'marginLeft' : - this . options . size / 0x2 + 'px' ,
'marginTop' : - this . options . size / 0x2 + 'px' ,
'background' : this . options . color ,
'opacity' : '.5'
} , _0x344f45 . front = {
'width' : this . options . size / 0x2 + 'px' ,
'height' : this . options . size / 0x2 + 'px' ,
'position' : 'absolute' ,
'display' : 'block' ,
'marginLeft' : - this . options . size / 0x4 + 'px' ,
'marginTop' : - this . options . size / 0x4 + 'px' ,
'background' : this . options . color ,
'opacity' : '.5'
} , _0x58adb3 . extend ( _0x344f45 . el , _0x16647e ) , _0x58adb3 . extend ( _0x344f45 . back , _0x472eae ) , _0x58adb3 . extend ( _0x344f45 . front , _0x472eae ) , this . applyStyles ( _0x344f45 ) , this ;
} , _0x472eae . prototype . applyStyles = function ( _0x3381ee ) {
for ( var _0x472eae in this . ui )
if ( this . ui . hasOwnProperty ( _0x472eae ) )
for ( var _0x16647e in _0x3381ee [ _0x472eae ] ) this . ui [ _0x472eae ] . style [ _0x16647e ] = _0x3381ee [ _0x472eae ] [ _0x16647e ] ;
return this ;
} , _0x472eae . prototype . addToDom = function ( ) {
return this . options . dataOnly || document . body . contains ( this . ui . el ) ? this : ( this . options . zone . appendChild ( this . ui . el ) , this ) ;
} , _0x472eae . prototype . removeFromDom = function ( ) {
return this . options . dataOnly || ! document . body . contains ( this . ui . el ) ? this : ( this . options . zone . removeChild ( this . ui . el ) , this ) ;
} , _0x472eae . prototype . destroy = function ( ) {
clearTimeout ( this . removeTimeout ) , clearTimeout ( this . showTimeout ) , clearTimeout ( this . restTimeout ) , this . trigger ( 'destroyed' , this . instance ) , this . removeFromDom ( ) , this . off ( ) ;
} , _0x472eae . prototype . show = function ( _0x6bda29 ) {
var _0x472eae = this ;
return _0x472eae . options . dataOnly ? _0x472eae : ( clearTimeout ( _0x472eae . removeTimeout ) , clearTimeout ( _0x472eae . showTimeout ) , clearTimeout ( _0x472eae . restTimeout ) , _0x472eae . addToDom ( ) , _0x472eae . restCallback ( ) , setTimeout ( function ( ) {
_0x472eae . ui . el . style . opacity = 0x1 ;
} , 0x0 ) , _0x472eae . showTimeout = setTimeout ( function ( ) {
_0x472eae . trigger ( 'shown' , _0x472eae . instance ) , 'function' == typeof _0x6bda29 && _0x6bda29 . call ( this ) ;
} , _0x472eae . options . fadeTime ) , _0x472eae ) ;
} , _0x472eae . prototype . hide = function ( _0x5d40e9 ) {
var _0x472eae = this ;
return _0x472eae . options . dataOnly ? _0x472eae : ( _0x472eae . ui . el . style . opacity = _0x472eae . options . restOpacity , clearTimeout ( _0x472eae . removeTimeout ) , clearTimeout ( _0x472eae . showTimeout ) , clearTimeout ( _0x472eae . restTimeout ) , _0x472eae . removeTimeout = setTimeout ( function ( ) {
var _0x16647e = 'dynamic' === _0x472eae . options . mode ? 'none' : 'block' ;
_0x472eae . ui . el . style . display = _0x16647e , 'function' == typeof _0x5d40e9 && _0x5d40e9 . call ( _0x472eae ) , _0x472eae . trigger ( 'hidden' , _0x472eae . instance ) ;
} , _0x472eae . options . fadeTime ) , _0x472eae . options . restJoystick && _0x472eae . restPosition ( ) , _0x472eae ) ;
} , _0x472eae . prototype . restPosition = function ( _0x535ac8 ) {
var _0x472eae = this ;
_0x472eae . frontPosition = {
'x' : 0x0 ,
'y' : 0x0
} ;
var _0x16647e = _0x472eae . options . fadeTime + 'ms' ,
_0x274bb9 = { } ;
_0x274bb9 . front = _0x58adb3 . getTransitionStyle ( 'transition' , [ 'top' , 'left' ] , _0x16647e ) ;
var _0x4998bc = {
'front' : { }
} ;
_0x4998bc . front = {
'left' : _0x472eae . frontPosition . x + 'px' ,
'top' : _0x472eae . frontPosition . y + 'px'
} , _0x472eae . applyStyles ( _0x274bb9 ) , _0x472eae . applyStyles ( _0x4998bc ) , _0x472eae . restTimeout = setTimeout ( function ( ) {
'function' == typeof _0x535ac8 && _0x535ac8 . call ( _0x472eae ) , _0x472eae . restCallback ( ) ;
} , _0x472eae . options . fadeTime ) ;
} , _0x472eae . prototype . restCallback = function ( ) {
var _0x3fa093 = this ,
_0x472eae = { } ;
_0x472eae . front = _0x58adb3 . getTransitionStyle ( 'transition' , 'none' , '' ) , _0x3fa093 . applyStyles ( _0x472eae ) , _0x3fa093 . trigger ( 'rested' , _0x3fa093 . instance ) ;
} , _0x472eae . prototype . resetDirection = function ( ) {
this . direction = {
'x' : ! 0x1 ,
'y' : ! 0x1 ,
'angle' : ! 0x1
} ;
} , _0x472eae . prototype . computeDirection = function ( _0x43e5d8 ) {
var _0x472eae , _0x16647e , _0xfc023b , _0xee7b86 = _0x43e5d8 . angle . radian ,
_0x22a09e = Math . PI / 0x4 ,
_0xc76eb4 = Math . PI / 0x2 ;
if ( _0xee7b86 > _0x22a09e && _0xee7b86 < 0x3 * _0x22a09e && ! _0x43e5d8 . lockX ? _0x472eae = 'up' : _0xee7b86 > - _0x22a09e && _0xee7b86 <= _0x22a09e && ! _0x43e5d8 . lockY ? _0x472eae = 'left' : _0xee7b86 > 0x3 * - _0x22a09e && _0xee7b86 <= - _0x22a09e && ! _0x43e5d8 . lockX ? _0x472eae = 'down' : _0x43e5d8 . lockY || ( _0x472eae = 'right' ) , _0x43e5d8 . lockY || ( _0x16647e = _0xee7b86 > - _0xc76eb4 && _0xee7b86 < _0xc76eb4 ? 'left' : 'right' ) , _0x43e5d8 . lockX || ( _0xfc023b = _0xee7b86 > 0x0 ? 'up' : 'down' ) , _0x43e5d8 . force > this . options . threshold ) {
var _0x3e5187 = { } ;
for ( var _0x28b8ad in this . direction ) this . direction . hasOwnProperty ( _0x28b8ad ) && ( _0x3e5187 [ _0x28b8ad ] = this . direction [ _0x28b8ad ] ) ;
var _0x2939ab = { } ;
for ( var _0x28b8ad in this . direction = {
'x' : _0x16647e ,
'y' : _0xfc023b ,
'angle' : _0x472eae
} , _0x43e5d8 . direction = this . direction , _0x3e5187 ) _0x3e5187 [ _0x28b8ad ] === this . direction [ _0x28b8ad ] && ( _0x2939ab [ _0x28b8ad ] = true ) ;
if ( _0x2939ab . x && _0x2939ab . y && _0x2939ab . angle ) return _0x43e5d8 ;
_0x2939ab . x && _0x2939ab . y || this . trigger ( 'plain' , _0x43e5d8 ) , _0x2939ab . x || this . trigger ( 'plain:' + _0x16647e , _0x43e5d8 ) , _0x2939ab . y || this . trigger ( 'plain:' + _0xfc023b , _0x43e5d8 ) , _0x2939ab . angle || this . trigger ( 'dir dir:' + _0x472eae , _0x43e5d8 ) ;
}
return _0x43e5d8 ;
} , _0x16647e . prototype = new _0x3fa093 ( ) , _0x16647e . constructor = _0x16647e , _0x16647e . id = 0x0 , _0x16647e . prototype . prepareNipples = function ( ) {
var _0x3fa093 = this ,
_0x472eae = _0x3fa093 . nipples ;
_0x472eae . on = _0x3fa093 . on . bind ( _0x3fa093 ) , _0x472eae . off = _0x3fa093 . off . bind ( _0x3fa093 ) , _0x472eae . options = _0x3fa093 . options , _0x472eae . destroy = _0x3fa093 . destroy . bind ( _0x3fa093 ) , _0x472eae . ids = _0x3fa093 . ids , _0x472eae . id = _0x3fa093 . id , _0x472eae . processOnMove = _0x3fa093 . processOnMove . bind ( _0x3fa093 ) , _0x472eae . processOnEnd = _0x3fa093 . processOnEnd . bind ( _0x3fa093 ) , _0x472eae . get = function ( _0x551448 ) {
if ( void 0x0 === _0x551448 ) return _0x472eae [ 0x0 ] ;
for ( var _0x16647e = 0x0 , _0x189014 = _0x472eae . length ; _0x16647e < _0x189014 ; _0x16647e += 0x1 )
if ( _0x472eae [ _0x16647e ] . identifier === _0x551448 ) return _0x472eae [ _0x16647e ] ;
return ! 0x1 ;
} ;
} , _0x16647e . prototype . bindings = function ( ) {
var _0x3fa093 = this ;
_0x3fa093 . bindEvt ( _0x3fa093 . options . zone , 'start' ) , _0x3fa093 . options . zone . style . touchAction = 'none' , _0x3fa093 . options . zone . style . msTouchAction = 'none' ;
} , _0x16647e . prototype . begin = function ( ) {
var _0x3fa093 = this ,
_0x472eae = _0x3fa093 . options ;
if ( 'static' === _0x472eae . mode ) {
var _0x16647e = _0x3fa093 . createNipple ( _0x472eae . position , _0x3fa093 . manager . getIdentifier ( ) ) ;
_0x16647e . add ( ) , _0x3fa093 . idles . push ( _0x16647e ) ;
}
} , _0x16647e . prototype . createNipple = function ( _0xc0ab75 , _0x5ce020 ) {
var _0x386a33 = this ,
_0x173c13 = _0x58adb3 . getScroll ( ) ,
_0x3c5320 = { } ,
_0x500442 = _0x386a33 . options ;
if ( _0xc0ab75 . x && _0xc0ab75 . y ) _0x3c5320 = {
'x' : _0xc0ab75 . x - ( _0x173c13 . x + _0x386a33 . box . left ) ,
'y' : _0xc0ab75 . y - ( _0x173c13 . y + _0x386a33 . box . top )
} ;
else if ( _0xc0ab75 . top || _0xc0ab75 . right || _0xc0ab75 . bottom || _0xc0ab75 . left ) {
var _0x549507 = document . createElement ( 'DIV' ) ;
_0x549507 . style . display = 'hidden' , _0x549507 . style . top = _0xc0ab75 . top , _0x549507 . style . right = _0xc0ab75 . right , _0x549507 . style . bottom = _0xc0ab75 . bottom , _0x549507 . style . left = _0xc0ab75 . left , _0x549507 . style . position = 'absolute' , _0x500442 . zone . appendChild ( _0x549507 ) ;
var _0x399802 = _0x549507 . getBoundingClientRect ( ) ;
_0x500442 . zone . removeChild ( _0x549507 ) , _0x3c5320 = _0xc0ab75 , _0xc0ab75 = {
'x' : _0x399802 . left + _0x173c13 . x ,
'y' : _0x399802 . top + _0x173c13 . y
} ;
}
var _0x1efaec = new _0x472eae ( _0x386a33 , {
'color' : _0x500442 . color ,
'size' : _0x500442 . size ,
'threshold' : _0x500442 . threshold ,
'fadeTime' : _0x500442 . fadeTime ,
'dataOnly' : _0x500442 . dataOnly ,
'restJoystick' : _0x500442 . restJoystick ,
'restOpacity' : _0x500442 . restOpacity ,
'mode' : _0x500442 . mode ,
'identifier' : _0x5ce020 ,
'position' : _0xc0ab75 ,
'zone' : _0x500442 . zone ,
'frontPosition' : {
'x' : 0x0 ,
'y' : 0x0
}
} ) ;
return _0x500442 . dataOnly || ( _0x58adb3 . applyPosition ( _0x1efaec . ui . el , _0x3c5320 ) , _0x58adb3 . applyPosition ( _0x1efaec . ui . front , _0x1efaec . frontPosition ) ) , _0x386a33 . nipples . push ( _0x1efaec ) , _0x386a33 . trigger ( 'added ' + _0x1efaec . identifier + ':added' , _0x1efaec ) , _0x386a33 . manager . trigger ( 'added ' + _0x1efaec . identifier + ':added' , _0x1efaec ) , _0x386a33 . bindNipple ( _0x1efaec ) , _0x1efaec ;
} , _0x16647e . prototype . updateBox = function ( ) {
this . box = this . options . zone . getBoundingClientRect ( ) ;
} , _0x16647e . prototype . bindNipple = function ( _0xf4e27d ) {
var _0x472eae , _0x16647e = this ,
_0x4afd5b = function ( _0x15dccf , _0xc9235b ) {
_0x472eae = _0x15dccf . type + ' ' + _0xc9235b . id + ':' + _0x15dccf . type , _0x16647e . trigger ( _0x472eae , _0xc9235b ) ;
} ;
_0xf4e27d . on ( 'destroyed' , _0x16647e . onDestroyed . bind ( _0x16647e ) ) , _0xf4e27d . on ( 'shown hidden rested dir plain' , _0x4afd5b ) , _0xf4e27d . on ( 'dir:up dir:right dir:down dir:left' , _0x4afd5b ) , _0xf4e27d . on ( 'plain:up plain:right plain:down plain:left' , _0x4afd5b ) ;
} , _0x16647e . prototype . pressureFn = function ( _0x136ce1 , _0xc3b871 , _0x2644f5 ) {
var _0x19ef4e = this ,
_0xa70739 = 0x0 ;
clearInterval ( _0x19ef4e . pressureIntervals [ _0x2644f5 ] ) , _0x19ef4e . pressureIntervals [ _0x2644f5 ] = setInterval ( function ( ) {
var _0x2644f5 = _0x136ce1 . force || _0x136ce1 . pressure || _0x136ce1 . webkitForce || 0x0 ;
_0x2644f5 !== _0xa70739 && ( _0xc3b871 . trigger ( 'pressure' , _0x2644f5 ) , _0x19ef4e . trigger ( 'pressure ' + _0xc3b871 . identifier + ':pressure' , _0x2644f5 ) , _0xa70739 = _0x2644f5 ) ;
} . bind ( _0x19ef4e ) , 0x64 ) ;
} , _0x16647e . prototype . onstart = function ( _0x5699c2 ) {
var _0x472eae = this ,
_0x16647e = _0x472eae . options ;
_0x5699c2 = _0x58adb3 . prepareEvent ( _0x5699c2 ) , _0x472eae . updateBox ( ) ;
return _0x58adb3 . map ( _0x5699c2 , function ( _0x17a155 ) {
_0x472eae . actives . length < _0x16647e . maxNumberOfNipples && _0x472eae . processOnStart ( _0x17a155 ) ;
} ) , _0x472eae . manager . bindDocument ( ) , ! 0x1 ;
} , _0x16647e . prototype . processOnStart = function ( _0x4d7333 ) {
var _0x472eae , _0x16647e = this ,
_0x1c6bd6 = _0x16647e . options ,
_0x5a237d = _0x16647e . manager . getIdentifier ( _0x4d7333 ) ,
_0x4afe2c = _0x4d7333 . force || _0x4d7333 . pressure || _0x4d7333 . webkitForce || 0x0 ,
_0x47c07e = {
'x' : _0x4d7333 . pageX ,
'y' : _0x4d7333 . pageY
} ,
_0xd40c11 = _0x16647e . getOrCreate ( _0x5a237d , _0x47c07e ) ;
_0xd40c11 . identifier !== _0x5a237d && _0x16647e . manager . removeIdentifier ( _0xd40c11 . identifier ) , _0xd40c11 . identifier = _0x5a237d ;
var _0x5e158d = function ( _0x3f02f1 ) {
_0x3f02f1 . trigger ( 'start' , _0x3f02f1 ) , _0x16647e . trigger ( 'start ' + _0x3f02f1 . id + ':start' , _0x3f02f1 ) , _0x3f02f1 . show ( ) , _0x4afe2c > 0x0 && _0x16647e . pressureFn ( _0x4d7333 , _0x3f02f1 , _0x3f02f1 . identifier ) , _0x16647e . processOnMove ( _0x4d7333 ) ;
} ;
if ( ( _0x472eae = _0x16647e . idles . indexOf ( _0xd40c11 ) ) >= 0x0 && _0x16647e . idles . splice ( _0x472eae , 0x1 ) , _0x16647e . actives . push ( _0xd40c11 ) , _0x16647e . ids . push ( _0xd40c11 . identifier ) , 'semi' !== _0x1c6bd6 . mode ) _0x5e158d ( _0xd40c11 ) ;
else {
if ( ! ( _0x58adb3 . distance ( _0x47c07e , _0xd40c11 . position ) <= _0x1c6bd6 . catchDistance ) ) return _0xd40c11 . destroy ( ) , void _0x16647e . processOnStart ( _0x4d7333 ) ;
_0x5e158d ( _0xd40c11 ) ;
}
return _0xd40c11 ;
} , _0x16647e . prototype . getOrCreate = function ( _0x265630 , _0x4759b2 ) {
var _0x16647e , _0x2f9720 = this ,
_0x11375b = _0x2f9720 . options ;
return /(semi|static)/ . test ( _0x11375b . mode ) ? ( _0x16647e = _0x2f9720 . idles [ 0x0 ] ) ? ( _0x2f9720 . idles . splice ( 0x0 , 0x1 ) , _0x16647e ) : 'semi' === _0x11375b . mode ? _0x2f9720 . createNipple ( _0x4759b2 , _0x265630 ) : ( console . warn ( 'Coudln\x27t find the needed nipple.' ) , ! 0x1 ) : _0x16647e = _0x2f9720 . createNipple ( _0x4759b2 , _0x265630 ) ;
} , _0x16647e . prototype . processOnMove = function ( _0x15a60f ) {
var _0x472eae = this ,
_0x16647e = _0x472eae . options ,
_0x1a29a3 = _0x472eae . manager . getIdentifier ( _0x15a60f ) ,
_0x117854 = _0x472eae . nipples . get ( _0x1a29a3 ) ;
if ( ! _0x117854 ) return console . error ( 'Found zombie joystick with ID ' + _0x1a29a3 ) , void _0x472eae . manager . removeIdentifier ( _0x1a29a3 ) ;
_0x117854 . identifier = _0x1a29a3 ;
var _0x2f202f = _0x117854 . options . size / 0x2 ,
_0x4cd3e8 = {
'x' : _0x15a60f . pageX ,
'y' : _0x15a60f . pageY
} ,
_0xb2440c = _0x58adb3 . distance ( _0x4cd3e8 , _0x117854 . position ) ,
_0x2f6ab9 = _0x58adb3 . angle ( _0x4cd3e8 , _0x117854 . position ) ,
_0x266647 = _0x58adb3 . radians ( _0x2f6ab9 ) ,
_0x55efdf = _0xb2440c / _0x2f202f ;
_0xb2440c > _0x2f202f && ( _0xb2440c = _0x2f202f , _0x4cd3e8 = _0x58adb3 . findCoord ( _0x117854 . position , _0xb2440c , _0x2f6ab9 ) ) ;
var _0x2c7232 = _0x4cd3e8 . x - _0x117854 . position . x ,
_0x179519 = _0x4cd3e8 . y - _0x117854 . position . y ;
_0x16647e . lockX && ( _0x179519 = 0x0 ) , _0x16647e . lockY && ( _0x2c7232 = 0x0 ) , _0x117854 . frontPosition = {
'x' : _0x2c7232 ,
'y' : _0x179519
} , _0x16647e . dataOnly || _0x58adb3 . applyPosition ( _0x117854 . ui . front , _0x117854 . frontPosition ) ;
var _0x2d347e = {
'identifier' : _0x117854 . identifier ,
'position' : _0x4cd3e8 ,
'force' : _0x55efdf ,
'pressure' : _0x15a60f . force || _0x15a60f . pressure || _0x15a60f . webkitForce || 0x0 ,
'distance' : _0xb2440c ,
'angle' : {
'radian' : _0x266647 ,
'degree' : _0x2f6ab9
} ,
'instance' : _0x117854 ,
'lockX' : _0x16647e . lockX ,
'lockY' : _0x16647e . lockY
} ;
( _0x2d347e = _0x117854 . computeDirection ( _0x2d347e ) ) . angle = {
'radian' : _0x58adb3 . radians ( 0xb4 - _0x2f6ab9 ) ,
'degree' : 0xb4 - _0x2f6ab9
} , _0x117854 . trigger ( 'move' , _0x2d347e ) , _0x472eae . trigger ( 'move ' + _0x117854 . id + ':move' , _0x2d347e ) ;
} , _0x16647e . prototype . processOnEnd = function ( _0x17d221 ) {
var _0x472eae = this ,
_0x16647e = _0x472eae . options ,
_0xfa275e = _0x472eae . manager . getIdentifier ( _0x17d221 ) ,
_0x184c33 = _0x472eae . nipples . get ( _0xfa275e ) ,
_0x3c0d87 = _0x472eae . manager . removeIdentifier ( _0x184c33 . identifier ) ;
_0x184c33 && ( _0x16647e . dataOnly || _0x184c33 . hide ( function ( ) {
'dynamic' === _0x16647e . mode && ( _0x184c33 . trigger ( 'removed' , _0x184c33 ) , _0x472eae . trigger ( 'removed ' + _0x184c33 . id + ':removed' , _0x184c33 ) , _0x472eae . manager . trigger ( 'removed ' + _0x184c33 . id + ':removed' , _0x184c33 ) , _0x184c33 . destroy ( ) ) ;
} ) , clearInterval ( _0x472eae . pressureIntervals [ _0x184c33 . identifier ] ) , _0x184c33 . resetDirection ( ) , _0x184c33 . trigger ( 'end' , _0x184c33 ) , _0x472eae . trigger ( 'end ' + _0x184c33 . id + ':end' , _0x184c33 ) , _0x472eae . ids . indexOf ( _0x184c33 . identifier ) >= 0x0 && _0x472eae . ids . splice ( _0x472eae . ids . indexOf ( _0x184c33 . identifier ) , 0x1 ) , _0x472eae . actives . indexOf ( _0x184c33 ) >= 0x0 && _0x472eae . actives . splice ( _0x472eae . actives . indexOf ( _0x184c33 ) , 0x1 ) , /(semi|static)/ . test ( _0x16647e . mode ) ? _0x472eae . idles . push ( _0x184c33 ) : _0x472eae . nipples . indexOf ( _0x184c33 ) >= 0x0 && _0x472eae . nipples . splice ( _0x472eae . nipples . indexOf ( _0x184c33 ) , 0x1 ) , _0x472eae . manager . unbindDocument ( ) , /(semi|static)/ . test ( _0x16647e . mode ) && ( _0x472eae . manager . ids [ _0x3c0d87 . id ] = _0x3c0d87 . identifier ) ) ;
} , _0x16647e . prototype . onDestroyed = function ( _0x19ea83 , _0x59a0c6 ) {
var _0x16647e = this ;
_0x16647e . nipples . indexOf ( _0x59a0c6 ) >= 0x0 && _0x16647e . nipples . splice ( _0x16647e . nipples . indexOf ( _0x59a0c6 ) , 0x1 ) , _0x16647e . actives . indexOf ( _0x59a0c6 ) >= 0x0 && _0x16647e . actives . splice ( _0x16647e . actives . indexOf ( _0x59a0c6 ) , 0x1 ) , _0x16647e . idles . indexOf ( _0x59a0c6 ) >= 0x0 && _0x16647e . idles . splice ( _0x16647e . idles . indexOf ( _0x59a0c6 ) , 0x1 ) , _0x16647e . ids . indexOf ( _0x59a0c6 . identifier ) >= 0x0 && _0x16647e . ids . splice ( _0x16647e . ids . indexOf ( _0x59a0c6 . identifier ) , 0x1 ) , _0x16647e . manager . removeIdentifier ( _0x59a0c6 . identifier ) , _0x16647e . manager . unbindDocument ( ) ;
} , _0x16647e . prototype . destroy = function ( ) {
var _0x3fa093 = this ;
for ( var _0x472eae in _0x3fa093 . unbindEvt ( _0x3fa093 . options . zone , 'start' ) , _0x3fa093 . nipples . forEach ( function ( _0x658e68 ) {
_0x658e68 . destroy ( ) ;
} ) , _0x3fa093 . pressureIntervals ) _0x3fa093 . pressureIntervals . hasOwnProperty ( _0x472eae ) && clearInterval ( _0x3fa093 . pressureIntervals [ _0x472eae ] ) ;
_0x3fa093 . trigger ( 'destroyed' , _0x3fa093 . nipples ) , _0x3fa093 . manager . unbindDocument ( ) , _0x3fa093 . off ( ) ;
} , _0x239176 . prototype = new _0x3fa093 ( ) , _0x239176 . constructor = _0x239176 , _0x239176 . prototype . prepareCollections = function ( ) {
var _0x3fa093 = this ;
_0x3fa093 . collections . create = _0x3fa093 . create . bind ( _0x3fa093 ) , _0x3fa093 . collections . on = _0x3fa093 . on . bind ( _0x3fa093 ) , _0x3fa093 . collections . off = _0x3fa093 . off . bind ( _0x3fa093 ) , _0x3fa093 . collections . destroy = _0x3fa093 . destroy . bind ( _0x3fa093 ) , _0x3fa093 . collections . get = function ( _0x1ddafb ) {
var _0x16647e ;
return _0x3fa093 . collections . every ( function ( _0x14c8e1 ) {
return ! ( _0x16647e = _0x14c8e1 . get ( _0x1ddafb ) ) ;
} ) , _0x16647e ;
} ;
} , _0x239176 . prototype . create = function ( _0x46af65 ) {
return this . createCollection ( _0x46af65 ) ;
} , _0x239176 . prototype . createCollection = function ( _0x252eb1 ) {
var _0x472eae = this ,
_0x58e8ba = new _0x16647e ( _0x472eae , _0x252eb1 ) ;
return _0x472eae . bindCollection ( _0x58e8ba ) , _0x472eae . collections . push ( _0x58e8ba ) , _0x58e8ba ;
} , _0x239176 . prototype . bindCollection = function ( _0x56e9ba ) {
var _0x472eae , _0x16647e = this ,
_0x87b125 = function ( _0x7e6251 , _0x2c4076 ) {
_0x472eae = _0x7e6251 . type + ' ' + _0x2c4076 . id + ':' + _0x7e6251 . type , _0x16647e . trigger ( _0x472eae , _0x2c4076 ) ;
} ;
_0x56e9ba . on ( 'destroyed' , _0x16647e . onDestroyed . bind ( _0x16647e ) ) , _0x56e9ba . on ( 'shown hidden rested dir plain' , _0x87b125 ) , _0x56e9ba . on ( 'dir:up dir:right dir:down dir:left' , _0x87b125 ) , _0x56e9ba . on ( 'plain:up plain:right plain:down plain:left' , _0x87b125 ) ;
} , _0x239176 . prototype . bindDocument = function ( ) {
var _0x3fa093 = this ;
_0x3fa093 . binded || ( _0x3fa093 . bindEvt ( document , 'move' ) . bindEvt ( document , 'end' ) , _0x3fa093 . binded = true ) ;
} , _0x239176 . prototype . unbindDocument = function ( _0x1b19b9 ) {
var _0x472eae = this ;
Object . keys ( _0x472eae . ids ) . length && true !== _0x1b19b9 || ( _0x472eae . unbindEvt ( document , 'move' ) . unbindEvt ( document , 'end' ) , _0x472eae . binded = ! 0x1 ) ;
} , _0x239176 . prototype . getIdentifier = function ( _0x5b021b ) {
var _0x472eae ;
return _0x5b021b ? void 0x0 === ( _0x472eae = void 0x0 === _0x5b021b . identifier ? _0x5b021b . pointerId : _0x5b021b . identifier ) && ( _0x472eae = this . latest || 0x0 ) : _0x472eae = this . index , void 0x0 === this . ids [ _0x472eae ] && ( this . ids [ _0x472eae ] = this . index , this . index += 0x1 ) , this . latest = _0x472eae , this . ids [ _0x472eae ] ;
} , _0x239176 . prototype . removeIdentifier = function ( _0x371920 ) {
var _0x472eae = { } ;
for ( var _0x16647e in this . ids )
if ( this . ids [ _0x16647e ] === _0x371920 ) {
_0x472eae . id = _0x16647e , _0x472eae . identifier = this . ids [ _0x16647e ] , delete this . ids [ _0x16647e ] ;
break ;
}
return _0x472eae ;
} , _0x239176 . prototype . onmove = function ( _0x591f10 ) {
return this . onAny ( 'move' , _0x591f10 ) , ! 0x1 ;
} , _0x239176 . prototype . onend = function ( _0x383c4e ) {
return this . onAny ( 'end' , _0x383c4e ) , ! 0x1 ;
} , _0x239176 . prototype . oncancel = function ( _0x4ff5ab ) {
return this . onAny ( 'end' , _0x4ff5ab ) , ! 0x1 ;
} , _0x239176 . prototype . onAny = function ( _0x223496 , _0x1bbc17 ) {
var _0x16647e , _0x91a6ff = this ,
_0x348841 = 'processOn' + _0x223496 . charAt ( 0x0 ) . toUpperCase ( ) + _0x223496 . slice ( 0x1 ) ;
_0x1bbc17 = _0x58adb3 . prepareEvent ( _0x1bbc17 ) ;
var _0xcd5113 = function ( _0x578516 , _0x470568 , _0x2652b6 ) {
_0x2652b6 . ids . indexOf ( _0x470568 ) >= 0x0 && ( _0x2652b6 [ _0x348841 ] ( _0x578516 ) , _0x578516 . _found _ = true ) ;
} ;
return _0x58adb3 . map ( _0x1bbc17 , function ( _0x22d50b ) {
_0x16647e = _0x91a6ff . getIdentifier ( _0x22d50b ) , _0x58adb3 . map ( _0x91a6ff . collections , _0xcd5113 . bind ( null , _0x22d50b , _0x16647e ) ) , _0x22d50b . _found _ || _0x91a6ff . removeIdentifier ( _0x16647e ) ;
} ) , ! 0x1 ;
} , _0x239176 . prototype . destroy = function ( ) {
var _0x3fa093 = this ;
_0x3fa093 . unbindDocument ( true ) , _0x3fa093 . ids = { } , _0x3fa093 . index = 0x0 , _0x3fa093 . collections . forEach ( function ( _0x2b7da3 ) {
_0x2b7da3 . destroy ( ) ;
} ) , _0x3fa093 . off ( ) ;
} , _0x239176 . prototype . onDestroyed = function ( _0x31c290 , _0x2339d4 ) {
var _0x16647e = this ;
if ( _0x16647e . collections . indexOf ( _0x2339d4 ) < 0x0 ) return ! 0x1 ;
_0x16647e . collections . splice ( _0x16647e . collections . indexOf ( _0x2339d4 ) , 0x1 ) ;
} ;
var _0x5c2a4b = new _0x239176 ( ) ;
return {
'create' : function ( _0x19c0dc ) {
return _0x5c2a4b . create ( _0x19c0dc ) ;
} ,
'factory' : _0x5c2a4b
} ;
} ) ;
2022-11-28 01:35:30 +00:00
} , null , function ( _0x14da87 , _0x57407e , _0x2fa590 ) {
'use strict' ;
( function ( _0x227bc8 , _0x21b268 , _0x521a09 ) {
function _0x4ffbab ( _0x13a3d0 ) {
return ( _0x4ffbab = 'function' == typeof Symbol && 'symbol' == typeof Symbol . iterator ? function ( _0x5f01ef ) {
return typeof _0x5f01ef ;
} : function ( _0x1020c7 ) {
return _0x1020c7 && 'function' == typeof Symbol && _0x1020c7 . constructor === Symbol && _0x1020c7 !== Symbol . prototype ? 'symbol' : typeof _0x1020c7 ;
} ) ( _0x13a3d0 ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
function _0x375f8a ( ) {
var _0x227bc8 = this ,
_0x57407e = new _0x9828fc ( ) ;
_0x227bc8 . chunks = { } , _0x227bc8 . users = { } , _0x227bc8 . readAsArrayBuffer = function ( _0x58dfb2 , _0x7626c2 , _0x4af133 ) {
var _0x12911b = {
'file' : _0x58dfb2 ,
'earlyCallback' : function ( _0x12782b ) {
_0x7626c2 ( _0x7086f7 ( _0x12782b , {
'currentPosition' : - 0x1
} ) ) ;
} ,
'extra' : _0x4af133 || {
'userid' : 0x0
}
} ;
_0x58dfb2 . extra && Object . keys ( _0x58dfb2 . extra ) . length && Object . keys ( _0x58dfb2 . extra ) . forEach ( function ( _0x558fd0 ) {
_0x12911b . extra [ _0x558fd0 ] = _0x58dfb2 . extra [ _0x558fd0 ] ;
} ) , _0x57407e . readAsArrayBuffer ( _0x227bc8 , _0x12911b ) ;
} , _0x227bc8 . getNextChunk = function ( _0x37ae5a , _0x7972ae , _0x4c7a43 ) {
var _0x604a41 ;
void 0x0 !== _0x37ae5a . currentPosition && ( _0x604a41 = _0x37ae5a . currentPosition , _0x37ae5a = _0x37ae5a . uuid ) ;
var _0x476bde = _0x227bc8 . chunks [ _0x37ae5a ] ;
if ( _0x476bde ) {
void 0x0 !== _0x4c7a43 ? ( _0x227bc8 . users [ _0x4c7a43 + '' ] || ( _0x227bc8 . users [ _0x4c7a43 + '' ] = {
'fileUUID' : _0x37ae5a ,
'userid' : _0x4c7a43 ,
'currentPosition' : - 0x1
} ) , void 0x0 !== _0x604a41 && ( _0x227bc8 . users [ _0x4c7a43 + '' ] . currentPosition = _0x604a41 ) , _0x227bc8 . users [ _0x4c7a43 + '' ] . currentPosition ++ , _0x604a41 = _0x227bc8 . users [ _0x4c7a43 + '' ] . currentPosition ) : ( void 0x0 !== _0x604a41 && ( _0x227bc8 . chunks [ _0x37ae5a ] . currentPosition = _0x604a41 ) , _0x227bc8 . chunks [ _0x37ae5a ] . currentPosition ++ , _0x604a41 = _0x227bc8 . chunks [ _0x37ae5a ] . currentPosition ) ;
var _0x24854d = _0x476bde [ _0x604a41 ] ;
if ( ! _0x24854d ) return delete _0x227bc8 . chunks [ _0x37ae5a ] , void _0x227bc8 . convertToArrayBuffer ( {
'chunkMissing' : true ,
'currentPosition' : _0x604a41 ,
'uuid' : _0x37ae5a
} , _0x7972ae ) ;
_0x24854d = _0x7086f7 ( _0x24854d ) , void 0x0 !== _0x4c7a43 && ( _0x24854d . remoteUserId = _0x4c7a43 + '' ) , _0x24854d . start && _0x227bc8 . onBegin ( _0x24854d ) , _0x24854d . end && _0x227bc8 . onEnd ( _0x24854d ) , _0x227bc8 . onProgress ( _0x24854d ) , _0x227bc8 . convertToArrayBuffer ( _0x24854d , function ( _0x28aba8 ) {
_0x24854d . currentPosition != _0x24854d . maxChunks ? _0x7972ae ( _0x28aba8 , ! 0x1 ) : _0x7972ae ( _0x28aba8 , true ) ;
} ) ;
}
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} ;
2022-11-28 01:35:30 +00:00
var _0x2fa590 = new _0x16cb0d ( _0x227bc8 ) ;
function _0x7086f7 ( _0x5ae569 , _0x132129 ) {
if ( null == _0x5ae569 || 'object' != _0x4ffbab ( _0x5ae569 ) ) return _0x5ae569 ;
if ( _0x5ae569 . constructor != Object && _0x5ae569 . constructor != Array ) return _0x5ae569 ;
if ( _0x5ae569 . constructor == Date || _0x5ae569 . constructor == RegExp || _0x5ae569 . constructor == Function || _0x5ae569 . constructor == String || _0x5ae569 . constructor == Number || _0x5ae569 . constructor == Boolean ) return new _0x5ae569 [ ( 'constructor' ) ] ( _0x5ae569 ) ;
for ( var _0x2fa590 in _0x132129 = _0x132129 || new _0x5ae569 [ ( 'constructor' ) ] ( ) , _0x5ae569 ) _0x132129 [ _0x2fa590 ] = void 0x0 === _0x132129 [ _0x2fa590 ] ? _0x7086f7 ( _0x5ae569 [ _0x2fa590 ] , null ) : _0x132129 [ _0x2fa590 ] ;
return _0x132129 ;
}
_0x227bc8 . addChunk = function ( _0x1d353d , _0x2f8a6d ) {
_0x1d353d && _0x2fa590 . receive ( _0x1d353d , function ( _0x3b5f53 ) {
_0x227bc8 . convertToArrayBuffer ( {
'readyForNextChunk' : true ,
'currentPosition' : _0x3b5f53 . currentPosition ,
'uuid' : _0x3b5f53 . uuid
} , _0x2f8a6d ) ;
} ) ;
} , _0x227bc8 . chunkMissing = function ( _0x335036 ) {
delete _0x2fa590 . chunks [ _0x335036 . uuid ] , delete _0x2fa590 . chunksWaiters [ _0x335036 . uuid ] ;
} , _0x227bc8 . onBegin = function ( ) { } , _0x227bc8 . onEnd = function ( ) { } , _0x227bc8 . onProgress = function ( ) { } , _0x227bc8 . convertToObject = _0x312465 . ConvertToObject , _0x227bc8 . convertToArrayBuffer = _0x312465 . ConvertToArrayBuffer , _0x227bc8 . setMultipleUsers = function ( ) { } ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
function _0x9828fc ( ) {
this . readAsArrayBuffer = function ( _0x4dd34e , _0x4dcd47 ) {
var _0x2fa590 = _0x4dcd47 . earlyCallback ;
delete _0x4dcd47 . earlyCallback ,
function ( _0x10728e , _0x4af117 ) {
_0x4af117 = _0x4af117 || function ( _0x1b86cb ) {
postMessage ( _0x1b86cb ) ;
} ;
var _0x2fa590 = _0x10728e . file ;
_0x2fa590 . uuid || ( _0x2fa590 . uuid = ( 0x64 * Math . random ( ) ) . toString ( ) . replace ( /\./g , '' ) ) ;
var _0x21b268 = _0x10728e . chunkSize || 0x3a98 ;
_0x10728e . extra && _0x10728e . extra . chunkSize && ( _0x21b268 = _0x10728e . extra . chunkSize ) ;
var _0x521a09 , _0x501fda = 0x0 ,
_0x58b232 = _0x21b268 ,
_0x41e8e7 = Math . floor ( Math . min ( 0x5f5e100 , _0x58b232 ) / _0x21b268 ) * _0x21b268 ,
_0x24144f = Math . ceil ( _0x2fa590 . size / _0x21b268 ) ;
_0x2fa590 . maxChunks = _0x24144f ;
var _0x3a1fa3 = 0x0 ,
_0x36783 = [ ] ;
_0x4af117 ( {
'currentPosition' : _0x3a1fa3 ,
'uuid' : _0x2fa590 . uuid ,
'maxChunks' : _0x24144f ,
'size' : _0x2fa590 . size ,
'name' : _0x2fa590 . name ,
'type' : _0x2fa590 . type ,
'lastModifiedDate' : ( _0x2fa590 . lastModifiedDate || new Date ( ) ) . toString ( ) ,
'start' : true
} ) ;
var _0x14ba6c , _0x11a93b = new FileReader ( ) ;
_0x11a93b . onloadend = function ( _0x5ab3c3 ) {
_0x5ab3c3 . target . readyState == FileReader . DONE && function ( _0x1a8ac9 , _0x25d2e6 , _0x3fea4f ) {
_0x521a09 = Math . ceil ( _0x25d2e6 . byteLength / _0x21b268 ) ;
for ( var _0x26fcc7 = 0x0 ; _0x26fcc7 < _0x521a09 ; _0x26fcc7 ++ ) {
var _0x198455 = _0x26fcc7 * _0x21b268 ;
_0x36783 [ _0x3a1fa3 ] = _0x25d2e6 . slice ( _0x198455 , Math . min ( _0x198455 + _0x21b268 , _0x25d2e6 . byteLength ) ) , _0x4af117 ( {
'uuid' : _0x2fa590 . uuid ,
'buffer' : _0x36783 [ _0x3a1fa3 ] ,
'currentPosition' : _0x3a1fa3 ,
'maxChunks' : _0x24144f ,
'size' : _0x2fa590 . size ,
'name' : _0x2fa590 . name ,
'lastModifiedDate' : ( _0x2fa590 . lastModifiedDate || new Date ( ) ) . toString ( ) ,
'type' : _0x2fa590 . type
} ) , _0x3a1fa3 ++ ;
}
_0x3a1fa3 == _0x24144f && true , _0x3fea4f ( ) ;
} ( _0x2fa590 . name , _0x5ab3c3 . target . result , function ( ) {
( ++ _0x501fda + 0x1 ) * _0x41e8e7 < _0x2fa590 . size ? ( _0x14ba6c = _0x2fa590 . slice ( _0x501fda * _0x41e8e7 , ( _0x501fda + 0x1 ) * _0x41e8e7 ) , _0x11a93b . readAsArrayBuffer ( _0x14ba6c ) ) : _0x501fda * _0x41e8e7 < _0x2fa590 . size ? ( _0x14ba6c = _0x2fa590 . slice ( _0x501fda * _0x41e8e7 , _0x2fa590 . size ) , _0x11a93b . readAsArrayBuffer ( _0x14ba6c ) ) : ( _0x2fa590 . url = URL . createObjectURL ( _0x2fa590 ) , _0x4af117 ( {
'currentPosition' : _0x3a1fa3 ,
'uuid' : _0x2fa590 . uuid ,
'maxChunks' : _0x24144f ,
'size' : _0x2fa590 . size ,
'name' : _0x2fa590 . name ,
'lastModifiedDate' : ( _0x2fa590 . lastModifiedDate || new Date ( ) ) . toString ( ) ,
'url' : URL . createObjectURL ( _0x2fa590 ) ,
'type' : _0x2fa590 . type ,
'end' : true
} ) ) ;
} ) ;
} , _0x3a1fa3 += 0x1 , _0x14ba6c = _0x2fa590 . slice ( _0x501fda * _0x41e8e7 , ( _0x501fda + 0x1 ) * _0x41e8e7 ) , _0x11a93b . readAsArrayBuffer ( _0x14ba6c ) ;
} ( _0x4dcd47 , function ( _0x4a4561 ) {
_0x4dd34e . chunks [ _0x4a4561 . uuid ] || ( _0x4dd34e . chunks [ _0x4a4561 . uuid ] = {
'currentPosition' : - 0x1
} ) , _0x4dcd47 . extra = _0x4dcd47 . extra || {
'userid' : 0x0
} , _0x4a4561 . userid = _0x4dcd47 . userid || _0x4dcd47 . extra . userid || 0x0 , _0x4a4561 . extra = _0x4dcd47 . extra , _0x4dd34e . chunks [ _0x4a4561 . uuid ] [ _0x4a4561 . currentPosition ] = _0x4a4561 , _0x4a4561 . end && _0x2fa590 && ( _0x2fa590 ( _0x4a4561 . uuid ) , _0x2fa590 = null ) , _0x4a4561 . maxChunks > 0xc8 && 0xc8 == _0x4a4561 . currentPosition && _0x2fa590 && ( _0x2fa590 ( _0x4a4561 . uuid ) , _0x2fa590 = null ) ;
} ) ;
} ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
function _0x2e28ea ( ) {
var _0x227bc8 = this ,
_0x57407e = function ( ) { } ;
function _0x35adf9 ( _0x1e577f , _0x35d31a , _0x142c1a ) {
_0x1e577f = _0x1e577f || function ( ) { } ;
var _0x9eb682 = document . createElement ( 'input' ) ;
_0x9eb682 . type = 'file' , _0x35d31a && ( _0x9eb682 . multiple = true ) , _0x142c1a && ( _0x9eb682 . webkitdirectory = true ) , _0x9eb682 . accept = _0x227bc8 . accept , _0x9eb682 . onclick = function ( ) {
_0x9eb682 . clickStarted = true ;
} , document . body . onfocus = function ( ) {
setTimeout ( function ( ) {
_0x9eb682 . clickStarted && ( _0x9eb682 . clickStarted = ! 0x1 , _0x9eb682 . value || _0x57407e ( ) ) ;
} , 0x1f4 ) ;
} , _0x9eb682 . onchange = function ( ) {
if ( _0x35d31a ) {
if ( ! _0x9eb682 . files . length ) return void console . error ( 'No file selected.' ) ;
var _0x227bc8 = [ ] ;
return Array . from ( _0x9eb682 . files ) . forEach ( function ( _0x2af58c ) {
_0x2af58c . url = _0x2af58c . webkitRelativePath , _0x227bc8 . push ( _0x2af58c ) ;
} ) , void _0x1e577f ( _0x227bc8 ) ;
}
_0x9eb682 . files [ 0x0 ] ? ( _0x1e577f ( _0x9eb682 . files [ 0x0 ] ) , _0x9eb682 . parentNode . removeChild ( _0x9eb682 ) ) : console . error ( 'No file selected.' ) ;
} , _0x9eb682 . style . display = 'none' , ( document . body || document . documentElement ) . appendChild ( _0x9eb682 ) ,
function ( _0x19672d ) {
if ( 'function' == typeof _0x19672d . click ) return void _0x19672d . click ( ) ;
if ( 'function' == typeof _0x19672d . change ) return void _0x19672d . change ( ) ;
if ( void 0x0 !== document . createEvent ( 'Event' ) ) {
if ( 'function' == typeof ( _0x57407e = document . createEvent ( 'Event' ) ) . initEvent && 'function' == typeof _0x19672d . dispatchEvent ) return _0x57407e . initEvent ( 'click' , true , true ) , void _0x19672d . dispatchEvent ( _0x57407e ) ;
}
var _0x57407e = new MouseEvent ( 'click' , {
'view' : window ,
'bubbles' : true ,
'cancelable' : true
} ) ;
_0x19672d . dispatchEvent ( _0x57407e ) ;
} ( _0x9eb682 ) ;
}
_0x227bc8 . selectSingleFile = function ( _0x4fa940 , _0x591d34 ) {
_0x591d34 && ( _0x57407e = _0x591d34 ) , _0x35adf9 ( _0x4fa940 ) ;
} , _0x227bc8 . selectMultipleFiles = function ( _0x425e11 , _0x2ac31d ) {
_0x2ac31d && ( _0x57407e = _0x2ac31d ) , _0x35adf9 ( _0x425e11 , true ) ;
} , _0x227bc8 . selectDirectory = function ( _0x37cf39 , _0x415668 ) {
_0x415668 && ( _0x57407e = _0x415668 ) , _0x35adf9 ( _0x37cf39 , true , true ) ;
} , _0x227bc8 . accept = '*.*' ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
function _0x16cb0d ( _0x8e4e9f ) {
var _0x57407e = this ;
_0x57407e . chunks = { } , _0x57407e . chunksWaiters = { } , _0x57407e . receive = function _0x2fa590 ( _0x15cb17 , _0x5d669f ) {
if ( _0x15cb17 . uuid ) {
if ( _0x15cb17 . start && ! _0x57407e . chunks [ _0x15cb17 . uuid ] && ( _0x57407e . chunks [ _0x15cb17 . uuid ] = { } , _0x8e4e9f . onBegin && _0x8e4e9f . onBegin ( _0x15cb17 ) ) , ! _0x15cb17 . end && _0x15cb17 . buffer && ( _0x57407e . chunks [ _0x15cb17 . uuid ] [ _0x15cb17 . currentPosition ] = _0x15cb17 . buffer ) , _0x15cb17 . end ) {
var _0x31fb82 = _0x57407e . chunks [ _0x15cb17 . uuid ] ,
_0x32838f = [ ] ;
Object . keys ( _0x31fb82 ) . forEach ( function ( _0x5c3abb , _0x23c1e3 ) {
_0x32838f . push ( _0x31fb82 [ _0x5c3abb ] ) ;
} ) ;
var _0x2545f2 = new Blob ( _0x32838f , {
'type' : _0x15cb17 . type
} ) ;
( _0x2545f2 = _0x1e6a28 ( _0x2545f2 , _0x15cb17 ) ) . url = URL . createObjectURL ( _0x2545f2 ) , _0x2545f2 . uuid = _0x15cb17 . uuid , _0x2545f2 . size || console . error ( 'Something went wrong. Blob Size is 0.' ) , _0x8e4e9f . onEnd && _0x8e4e9f . onEnd ( _0x2545f2 ) , delete _0x57407e . chunks [ _0x15cb17 . uuid ] , delete _0x57407e . chunksWaiters [ _0x15cb17 . uuid ] ;
}
_0x15cb17 . buffer && _0x8e4e9f . onProgress && _0x8e4e9f . onProgress ( _0x15cb17 ) , _0x15cb17 . end || ( _0x5d669f ( _0x15cb17 ) , _0x57407e . chunksWaiters [ _0x15cb17 . uuid ] = function ( ) {
setTimeout ( function _0x8e4e9f ( ) {
_0x15cb17 . buffer && _0x57407e . chunks [ _0x15cb17 . uuid ] && ( _0x15cb17 . currentPosition == _0x15cb17 . maxChunks || _0x57407e . chunks [ _0x15cb17 . uuid ] [ _0x15cb17 . currentPosition ] || ( _0x5d669f ( _0x15cb17 ) , setTimeout ( _0x8e4e9f , 0x1388 ) ) ) ;
} , 0x1388 ) ;
} , _0x57407e . chunksWaiters [ _0x15cb17 . uuid ] ( ) ) ;
} else _0x8e4e9f . convertToObject ( _0x15cb17 , function ( _0x2fa56c ) {
_0x2fa590 ( _0x2fa56c ) ;
} ) ;
} ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
var _0x312465 = {
'ConvertToArrayBuffer' : function ( _0x561864 , _0x85e2e2 ) {
_0x4928e6 . pack ( _0x561864 , function ( _0xc97573 ) {
_0x85e2e2 ( _0xc97573 . buffer ) ;
} ) ;
} ,
'ConvertToObject' : function ( _0xbedec5 , _0x48182e ) {
_0x4928e6 . unpack ( _0xbedec5 , _0x48182e ) ;
}
} ;
function _0x1e6a28 ( _0x51381f , _0x26556f ) {
if ( _0x51381f || ( _0x51381f = { } ) , ! _0x26556f ) return _0x51381f ;
for ( var _0x2fa590 in _0x26556f ) try {
_0x51381f [ _0x2fa590 ] = _0x26556f [ _0x2fa590 ] ;
} catch ( _0x1cadcb ) { }
return _0x51381f ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
var _0x37e2da = Uint8Array . BYTES _PER _ELEMENT ,
_0x49bb1a = Uint16Array . BYTES _PER _ELEMENT ,
_0x4929a3 = Uint32Array . BYTES _PER _ELEMENT ,
_0x437498 = {
'NULL' : 0x0 ,
'UNDEFINED' : 0x1 ,
'STRING' : 0x2 ,
'NUMBER' : 0x3 ,
'BOOLEAN' : 0x4 ,
'ARRAY' : 0x5 ,
'OBJECT' : 0x6 ,
'INT8ARRAY' : 0x7 ,
'INT16ARRAY' : 0x8 ,
'INT32ARRAY' : 0x9 ,
'UINT8ARRAY' : 0xa ,
'UINT16ARRAY' : 0xb ,
'UINT32ARRAY' : 0xc ,
'FLOAT32ARRAY' : 0xd ,
'FLOAT64ARRAY' : 0xe ,
'ARRAYBUFFER' : 0xf ,
'BLOB' : 0x10 ,
'FILE' : 0x10 ,
'BUFFER' : 0x11
} ,
_0xb2a130 = [ null , null , 'Uint16' , 'Float64' , 'Uint8' , null , null , 'Int8' , 'Int16' , 'Int32' , 'Uint8' , 'Uint16' , 'Uint32' , 'Float32' , 'Float64' , 'Uint8' , 'Uint8' , 'Uint8' ] ,
_0x274b69 = function ( _0x297fe0 ) {
var _0x57407e = 0x0 ,
_0x2fa590 = 0x0 ,
_0x21b268 = 0x0 ,
_0x521a09 = new ArrayBuffer ( _0x297fe0 [ 0x0 ] . byte _length + _0x297fe0 [ 0x0 ] . header _size ) ,
_0x5e7442 = new DataView ( _0x521a09 ) ;
for ( _0x2fa590 = 0x0 ; _0x2fa590 < _0x297fe0 . length ; _0x2fa590 ++ ) {
_0x297fe0 [ _0x2fa590 ] . header _size ;
var _0x2227f0 = _0x297fe0 [ _0x2fa590 ] . type ,
_0x37072f = _0x297fe0 [ _0x2fa590 ] . length ,
_0x4841f8 = _0x297fe0 [ _0x2fa590 ] . value ,
_0x4015d6 = _0x297fe0 [ _0x2fa590 ] . byte _length ,
_0x5da52f = _0xb2a130 [ _0x2227f0 ] ,
_0x1b9cc6 = null === _0x5da52f ? 0x0 : window [ _0x5da52f + 'Array' ] . BYTES _PER _ELEMENT ;
switch ( _0x2227f0 === _0x437498 . BUFFER ? _0x5e7442 . setUint8 ( _0x57407e , _0x437498 . BLOB , ! 0x1 ) : _0x5e7442 . setUint8 ( _0x57407e , _0x2227f0 , ! 0x1 ) , _0x57407e += _0x37e2da , _0x2227f0 !== _0x437498 . ARRAY && _0x2227f0 !== _0x437498 . OBJECT || ( _0x5e7442 . setUint16 ( _0x57407e , _0x37072f , ! 0x1 ) , _0x57407e += _0x49bb1a ) , _0x5e7442 . setUint32 ( _0x57407e , _0x4015d6 , ! 0x1 ) , _0x57407e += _0x4929a3 , _0x2227f0 ) {
case _0x437498 . NULL :
case _0x437498 . UNDEFINED :
break ;
case _0x437498 . STRING :
for ( _0x21b268 = 0x0 ; _0x21b268 < _0x37072f ; _0x21b268 ++ , _0x57407e += _0x1b9cc6 ) _0x5e7442 . setUint16 ( _0x57407e , _0x4841f8 . charCodeAt ( _0x21b268 ) , ! 0x1 ) ;
break ;
case _0x437498 . NUMBER :
case _0x437498 . BOOLEAN :
0x0 , _0x5e7442 [ 'set' + _0x5da52f ] ( _0x57407e , _0x4841f8 , ! 0x1 ) , _0x57407e += _0x1b9cc6 ;
break ;
case _0x437498 . INT8ARRAY :
case _0x437498 . INT16ARRAY :
case _0x437498 . INT32ARRAY :
case _0x437498 . UINT8ARRAY :
case _0x437498 . UINT16ARRAY :
case _0x437498 . UINT32ARRAY :
case _0x437498 . FLOAT32ARRAY :
case _0x437498 . FLOAT64ARRAY :
new Uint8Array ( _0x5e7442 . buffer , _0x57407e , _0x4015d6 ) . set ( new Uint8Array ( _0x4841f8 . buffer ) ) , _0x57407e += _0x4015d6 ;
break ;
case _0x437498 . ARRAYBUFFER :
case _0x437498 . BUFFER :
new Uint8Array ( _0x5e7442 . buffer , _0x57407e , _0x4015d6 ) . set ( new Uint8Array ( _0x4841f8 ) ) , _0x57407e += _0x4015d6 ;
break ;
case _0x437498 . BLOB :
case _0x437498 . ARRAY :
case _0x437498 . OBJECT :
break ;
default :
throw 'TypeError: Unexpected type found.' ;
}
0x0 ;
}
return _0x5e7442 ;
} ,
_0x2e9e54 = function _0x57407e ( _0x37452e , _0x38040a ) {
var _0x521a09 , _0x26deb8 , _0xfbd54a , _0x3f6107 , _0x1535e7 , _0x406eb5 = 0x0 ;
_0x521a09 = _0x37452e . getUint8 ( _0x38040a , ! 0x1 ) , _0x38040a += _0x37e2da , _0x521a09 !== _0x437498 . ARRAY && _0x521a09 !== _0x437498 . OBJECT || ( _0x26deb8 = _0x37452e . getUint16 ( _0x38040a , ! 0x1 ) , _0x38040a += _0x49bb1a ) , _0xfbd54a = _0x37452e . getUint32 ( _0x38040a , ! 0x1 ) , _0x38040a += _0x4929a3 ;
var _0x3b56e7 = _0xb2a130 [ _0x521a09 ] ,
_0x5b8ec5 = null === _0x3b56e7 ? 0x0 : window [ _0x3b56e7 + 'Array' ] . BYTES _PER _ELEMENT ;
switch ( _0x521a09 ) {
case _0x437498 . NULL :
case _0x437498 . UNDEFINED :
0x0 , _0x3f6107 = null ;
break ;
case _0x437498 . STRING :
_0x26deb8 = _0xfbd54a / _0x5b8ec5 ;
var _0x3316fc = [ ] ;
for ( _0x406eb5 = 0x0 ; _0x406eb5 < _0x26deb8 ; _0x406eb5 ++ ) {
var _0x35da1f = _0x37452e . getUint16 ( _0x38040a , ! 0x1 ) ;
_0x38040a += _0x5b8ec5 , _0x3316fc . push ( String . fromCharCode ( _0x35da1f ) ) ;
}
_0x3f6107 = _0x3316fc . join ( '' ) ;
break ;
case _0x437498 . NUMBER :
_0x3f6107 = _0x37452e . getFloat64 ( _0x38040a , ! 0x1 ) , _0x38040a += _0x5b8ec5 ;
break ;
case _0x437498 . BOOLEAN :
_0x3f6107 = 0x1 === _0x37452e . getUint8 ( _0x38040a , ! 0x1 ) , _0x38040a += _0x5b8ec5 ;
break ;
case _0x437498 . INT8ARRAY :
case _0x437498 . INT16ARRAY :
case _0x437498 . INT32ARRAY :
case _0x437498 . UINT8ARRAY :
case _0x437498 . UINT16ARRAY :
case _0x437498 . UINT32ARRAY :
case _0x437498 . FLOAT32ARRAY :
case _0x437498 . FLOAT64ARRAY :
case _0x437498 . ARRAYBUFFER :
_0x1535e7 = _0x37452e . buffer . slice ( _0x38040a , _0x38040a + _0xfbd54a ) , _0x38040a += _0xfbd54a , _0x3f6107 = _0x521a09 === _0x437498 . ARRAYBUFFER ? _0x1535e7 : new window [ _0x3b56e7 + ( 'Array' ) ] ( _0x1535e7 ) ;
break ;
case _0x437498 . BLOB :
if ( window . Blob ) {
var _0x2161f5 = _0x57407e ( _0x37452e , _0x38040a ) ,
_0x5f11ba = _0x57407e ( _0x37452e , _0x2161f5 . cursor ) ;
_0x38040a = _0x5f11ba . cursor , _0x3f6107 = new Blob ( [ _0x5f11ba . value ] , {
'type' : _0x2161f5 . value
} ) ;
} else _0x1535e7 = _0x37452e . buffer . slice ( _0x38040a , _0x38040a + _0xfbd54a ) , _0x38040a += _0xfbd54a , _0x3f6107 = new _0x227bc8 ( _0x1535e7 ) ;
break ;
case _0x437498 . ARRAY :
for ( _0x3f6107 = [ ] , _0x406eb5 = 0x0 ; _0x406eb5 < _0x26deb8 ; _0x406eb5 ++ ) _0x38040a = ( _0x1535e7 = _0x57407e ( _0x37452e , _0x38040a ) ) . cursor , _0x3f6107 . push ( _0x1535e7 . value ) ;
break ;
case _0x437498 . OBJECT :
for ( _0x3f6107 = { } , _0x406eb5 = 0x0 ; _0x406eb5 < _0x26deb8 ; _0x406eb5 ++ ) {
var _0x4fee35 = _0x57407e ( _0x37452e , _0x38040a ) ,
_0x118c66 = _0x57407e ( _0x37452e , _0x4fee35 . cursor ) ;
_0x38040a = _0x118c66 . cursor , _0x3f6107 [ _0x4fee35 . value ] = _0x118c66 . value ;
}
break ;
default :
throw 'TypeError: Type not supported.' ;
}
return {
'value' : _0x3f6107 ,
'cursor' : _0x38040a
} ;
} ,
_0x3cd888 = function ( _0x7f4367 , _0x498c64 ) {
for ( var _0x2fa590 = _0x7f4367 . length , _0x21b268 = [ ] , _0x521a09 = 0x0 , _0x3fb688 = 0x0 , _0x48740b = 0x0 ; _0x48740b < _0x7f4367 . length ; _0x48740b ++ ) ! function ( _0x48a8b8 ) {
_0x131344 ( _0x7f4367 [ _0x48a8b8 ] , function ( _0x118c9f ) {
if ( _0x21b268 [ _0x48a8b8 ] = _0x118c9f , _0x3fb688 += _0x118c9f [ 0x0 ] . header _size + _0x118c9f [ 0x0 ] . byte _length , ++ _0x521a09 === _0x2fa590 ) {
for ( var _0x341601 = [ ] , _0x44bc9f = 0x0 ; _0x44bc9f < _0x21b268 . length ; _0x44bc9f ++ ) _0x341601 = _0x341601 . concat ( _0x21b268 [ _0x44bc9f ] ) ;
_0x498c64 ( _0x341601 , _0x3fb688 ) ;
}
} ) ;
} ( _0x48740b ) ;
} ,
_0x131344 = function ( _0x26bbec , _0x41d66e ) {
var _0x21b268 , _0x521a09 , _0xcfca39 = _0x37e2da + _0x4929a3 ,
_0x1c90b5 = 0x0 ,
_0x5a7868 = 0x0 ,
_0x23293e = _0x26bbec ;
switch ( _0x521a09 = function ( _0x54f8b4 ) {
var _0x41d66e = void 0x0 ;
if ( void 0x0 === _0x54f8b4 ) _0x41d66e = _0x437498 . UNDEFINED ;
else if ( null === _0x54f8b4 ) _0x41d66e = _0x437498 . NULL ;
else {
var _0x21b268 = _0x54f8b4 . constructor . name ,
_0x521a09 = _0x54f8b4 . constructor . toString ( ) . match ( /\w+/g ) [ 0x1 ] ;
if ( void 0x0 !== _0x21b268 && void 0x0 !== _0x437498 [ _0x21b268 . toUpperCase ( ) ] ) _0x41d66e = _0x437498 [ _0x21b268 . toUpperCase ( ) ] ;
else if ( void 0x0 !== _0x521a09 && void 0x0 !== _0x437498 [ _0x521a09 . toUpperCase ( ) ] ) _0x41d66e = _0x437498 [ _0x521a09 . toUpperCase ( ) ] ;
else switch ( _0x4ffbab ( _0x54f8b4 ) ) {
case 'string' :
_0x41d66e = _0x437498 . STRING ;
break ;
case 'number' :
_0x41d66e = _0x437498 . NUMBER ;
break ;
case 'boolean' :
_0x41d66e = _0x437498 . BOOLEAN ;
break ;
case 'object' :
_0x54f8b4 instanceof Array ? _0x41d66e = _0x437498 . ARRAY : _0x54f8b4 instanceof Int8Array ? _0x41d66e = _0x437498 . INT8ARRAY : _0x54f8b4 instanceof Int16Array ? _0x41d66e = _0x437498 . INT16ARRAY : _0x54f8b4 instanceof Int32Array ? _0x41d66e = _0x437498 . INT32ARRAY : _0x54f8b4 instanceof Uint8Array ? _0x41d66e = _0x437498 . UINT8ARRAY : _0x54f8b4 instanceof Uint16Array ? _0x41d66e = _0x437498 . UINT16ARRAY : _0x54f8b4 instanceof Uint32Array ? _0x41d66e = _0x437498 . UINT32ARRAY : _0x54f8b4 instanceof Float32Array ? _0x41d66e = _0x437498 . FLOAT32ARRAY : _0x54f8b4 instanceof Float64Array ? _0x41d66e = _0x437498 . FLOAT64ARRAY : _0x54f8b4 instanceof ArrayBuffer ? _0x41d66e = _0x437498 . ARRAYBUFFER : _0x54f8b4 instanceof Blob ? _0x41d66e = _0x437498 . BLOB : _0x54f8b4 instanceof _0x227bc8 ? _0x41d66e = _0x437498 . BUFFER : _0x54f8b4 instanceof Object && ( _0x41d66e = _0x437498 . OBJECT ) ;
}
}
return _0x41d66e ;
} ( _0x26bbec ) , _0x21b268 = null == _0xb2a130 [ _0x521a09 ] ? 0x0 : window [ _0xb2a130 [ _0x521a09 ] + 'Array' ] . BYTES _PER _ELEMENT , _0x521a09 ) {
case _0x437498 . UNDEFINED :
case _0x437498 . NULL :
break ;
case _0x437498 . NUMBER :
case _0x437498 . BOOLEAN :
_0x1c90b5 = _0x21b268 ;
break ;
case _0x437498 . STRING :
_0x1c90b5 += ( _0x5a7868 = _0x26bbec . length ) * _0x21b268 ;
break ;
case _0x437498 . INT8ARRAY :
case _0x437498 . INT16ARRAY :
case _0x437498 . INT32ARRAY :
case _0x437498 . UINT8ARRAY :
case _0x437498 . UINT16ARRAY :
case _0x437498 . UINT32ARRAY :
case _0x437498 . FLOAT32ARRAY :
case _0x437498 . FLOAT64ARRAY :
_0x1c90b5 += ( _0x5a7868 = _0x26bbec . length ) * _0x21b268 ;
break ;
case _0x437498 . ARRAY :
return void _0x3cd888 ( _0x26bbec , function ( _0x4ce812 , _0x3cc28c ) {
_0x41d66e ( [ {
'type' : _0x521a09 ,
'length' : _0x26bbec . length ,
'header_size' : _0xcfca39 + _0x49bb1a ,
'byte_length' : _0x3cc28c ,
'value' : null
} ] . concat ( _0x4ce812 ) ) ;
} ) ;
case _0x437498 . OBJECT :
var _0x1eb997 = [ ] ;
for ( var _0x501244 in _0x26bbec ) _0x26bbec . hasOwnProperty ( _0x501244 ) && ( _0x1eb997 . push ( _0x501244 ) , _0x1eb997 . push ( _0x26bbec [ _0x501244 ] ) , _0x5a7868 ++ ) ;
return void _0x3cd888 ( _0x1eb997 , function ( _0x57eeb8 , _0x18e5d9 ) {
_0x41d66e ( [ {
'type' : _0x521a09 ,
'length' : _0x5a7868 ,
'header_size' : _0xcfca39 + _0x49bb1a ,
'byte_length' : _0x18e5d9 ,
'value' : null
} ] . concat ( _0x57eeb8 ) ) ;
} ) ;
case _0x437498 . ARRAYBUFFER :
_0x1c90b5 += _0x26bbec . byteLength ;
break ;
case _0x437498 . BLOB :
var _0x485cd2 = _0x26bbec . type ,
_0x15ca13 = new FileReader ( ) ;
return _0x15ca13 . onload = function ( _0x238bf7 ) {
_0x3cd888 ( [ _0x485cd2 , _0x238bf7 . target . result ] , function ( _0x2faa2d , _0x5dc863 ) {
_0x41d66e ( [ {
'type' : _0x521a09 ,
'length' : _0x5a7868 ,
'header_size' : _0xcfca39 ,
'byte_length' : _0x5dc863 ,
'value' : null
} ] . concat ( _0x2faa2d ) ) ;
} ) ;
} , _0x15ca13 . onerror = function ( _0x18343b ) {
throw 'FileReader Error: ' + _0x18343b ;
} , void _0x15ca13 . readAsArrayBuffer ( _0x26bbec ) ;
case _0x437498 . BUFFER :
_0x1c90b5 += _0x26bbec . length ;
break ;
default :
throw 'TypeError: Type "' + _0x26bbec . constructor . name + '" not supported.' ;
}
_0x41d66e ( [ {
'type' : _0x521a09 ,
'length' : _0x5a7868 ,
'header_size' : _0xcfca39 ,
'byte_length' : _0x1c90b5 ,
'value' : _0x23293e
} ] . concat ( [ ] ) ) ;
} ,
_0x1913f9 = function ( _0xbd3651 , _0x26d417 ) {
var _0x2fa590 = _0xbd3651 instanceof DataView ? _0xbd3651 : new DataView ( _0xbd3651 ) ;
return _0x2e9e54 ( _0x2fa590 , 0x0 ) . value ;
} ;
var _0x4928e6 = {
'pack' : function ( _0x5aea7d , _0x22db9e ) {
try {
0x0 ,
_0x131344 ( _0x5aea7d , function ( _0xf0091e ) {
_0x22db9e ( _0x274b69 ( _0xf0091e ) ) ;
} ) ;
}
catch ( _0x5adeaa ) {
throw _0x5adeaa ;
}
} ,
'unpack' : function ( _0x458a5d , _0x3c312b ) {
try {
0x0 ;
var _0x2fa590 = _0x1913f9 ( _0x458a5d ) ;
0x0 , _0x3c312b ( _0x2fa590 ) ;
} catch ( _0x11220e ) {
throw _0x11220e ;
}
}
} ;
_0x57407e . a = function ( _0x1056a5 , _0x326931 ) {
var _0x3a9045 ;
let io ;
//socket.io library
! function ( t , e ) { io = e ( ) } ( this , ( function ( ) { "use strict" ; function t ( e ) { return t = "function" == typeof Symbol && "symbol" == typeof Symbol . iterator ? function ( t ) { return typeof t } : function ( t ) { return t && "function" == typeof Symbol && t . constructor === Symbol && t !== Symbol . prototype ? "symbol" : typeof t } , t ( e ) } function e ( t , e ) { if ( ! ( t instanceof e ) ) throw new TypeError ( "Cannot call a class as a function" ) } function n ( t , e ) { for ( var n = 0 ; n < e . length ; n ++ ) { var r = e [ n ] ; r . enumerable = r . enumerable || ! 1 , r . configurable = ! 0 , "value" in r && ( r . writable = ! 0 ) , Object . defineProperty ( t , r . key , r ) } } function r ( t , e , r ) { return e && n ( t . prototype , e ) , r && n ( t , r ) , Object . defineProperty ( t , "prototype" , { writable : ! 1 } ) , t } function i ( ) { return i = Object . assign ? Object . assign . bind ( ) : function ( t ) { for ( var e = 1 ; e < arguments . length ; e ++ ) { var n = arguments [ e ] ; for ( var r in n ) Object . prototype . hasOwnProperty . call ( n , r ) && ( t [ r ] = n [ r ] ) } return t } , i . apply ( this , arguments ) } function o ( t , e ) { if ( "function" != typeof e && null !== e ) throw new TypeError ( "Super expression must either be null or a function" ) ; t . prototype = Object . create ( e && e . prototype , { constructor : { value : t , writable : ! 0 , configurable : ! 0 } } ) , Object . defineProperty ( t , "prototype" , { writable : ! 1 } ) , e && a ( t , e ) } function s ( t ) { return s = Object . setPrototypeOf ? Object . getPrototypeOf . bind ( ) : function ( t ) { return t . _ _proto _ _ || Object . getPrototypeOf ( t ) } , s ( t ) } function a ( t , e ) { return a = Object . setPrototypeOf ? Object . setPrototypeOf . bind ( ) : function ( t , e ) { return t . _ _proto _ _ = e , t } , a ( t , e ) } function c ( ) { if ( "undefined" == typeof Reflect || ! Reflect . construct ) return ! 1 ; if ( Reflect . construct . sham ) return ! 1 ; if ( "function" == typeof Proxy ) return ! 0 ; try { return Boolean . prototype . valueOf . call ( Reflect . construct ( Boolean , [ ] , ( function ( ) { } ) ) ) , ! 0 } catch ( t ) { return ! 1 } } function u ( t , e , n ) { return u = c ( ) ? Reflect . construct . bind ( ) : function ( t , e , n ) { var r = [ null ] ; r . push . apply ( r , e ) ; var i = new ( Function . bind . apply ( t , r ) ) ; return n && a ( i , n . prototype ) , i } , u . apply ( null , arguments ) } function h ( t ) { var e = "function" == typeof Map ? new Map : void 0 ; return h = function ( t ) { if ( null === t || ( n = t , - 1 === Function . toString . call ( n ) . indexOf ( "[native code]" ) ) ) return t ; var n ; if ( "function" != typeof t ) throw new TypeError ( "Super expression must either be null or a function" ) ; if ( void 0 !== e ) { if ( e . has ( t ) ) return e . get ( t ) ; e . set ( t , r ) } function r ( ) { return u ( t , arguments , s ( this ) . constructor ) } return r . prototype = Object . create ( t . prototype , { constructor : { value : r , enumerable : ! 1 , writable : ! 0 , configurable : ! 0 } } ) , a ( r , t ) } , h ( t ) } function f ( t ) { if ( void 0 === t ) throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; return t } function l ( t , e ) { if ( e && ( "object" == typeof e || "function" == typeof e ) ) return e ; if ( void 0 !== e ) throw new TypeError ( "Derived constructors may only return object or undefined" ) ; return f ( t ) } function p ( t ) { var e = c ( ) ; return function ( ) { var n , r = s ( t ) ; if ( e ) { var i = s ( this ) . constructor ; n = Reflect . construct ( r , arguments , i ) } else n = r . apply ( this , arguments ) ; return l ( this , n ) } } function d ( t , e ) { for ( ; ! Object . prototype . hasOwnProperty . call ( t , e ) && null !== ( t = s ( t ) ) ; ) ; return t } function y ( ) { return y = "undefined" != typeof Reflect && Reflect . get ? Reflect . get . bind ( ) : function ( t , e , n ) { var r = d ( t , e ) ; if ( r ) { var i = Object . getOwnPropertyDescriptor ( r , e ) ; return i . get ? i . get . call ( arguments . length < 3 ? t : n ) : i . value } } , y . apply ( this , arguments ) } function v ( t , e ) { ( null == e || e > t . length ) && ( e = t . length ) ; for ( var n = 0 , r = new Array ( e ) ; n < e ; n ++ ) r [ n ] = t [ n ] ; return r } function g ( t , e ) { var n = "undefined" != typeof Symbol && t [ Symbol . iterator ] || t [ "@@iterator" ] ; if ( ! n ) { if ( Array . isArray ( t ) || ( n = function ( t , e ) { if ( t ) { if ( "string" == typeof t ) return v ( t , e ) ; var n = Object . prototype . toString . call ( t ) . slice ( 8 , - 1 ) ; return "Object" === n && t . constructor && ( n = t . constructor . name ) , "Map" === n || "Set" === n ? Array . from ( t ) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ? v ( t , e ) : void 0 } } ( t ) ) || e && t && "number" == typeof t . length ) { n && ( t = n ) ; var r = 0 , i = function ( ) { } ; return { s : i , n : function ( ) { return r >= t . length ? { done : ! 0 } : { done : ! 1 , value : t [ r ++ ] } } , e : function ( t ) { throw t } , f : i } } throw new TypeError ( "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) } var o , s = ! 0 , a = ! 1 ; return { s : function ( ) { n = n . call ( t ) } , n : function ( ) { var t = n . next ( ) ; retur
function _0x45c30f ( _0xa98659 , _0x1eb953 ) {
function _0x535f92 ( _0x27aced ) {
return ! _0x27aced . audio && ! _0x27aced . video && ! _0x27aced . screen && _0x27aced . data ;
}
var _0x21b268 = '' ;
_0x21b268 += '?coreVer=' + _0xa98659 . coreVer + '&userid=' + _0xa98659 . userid , _0x21b268 += '&sessionid=' + _0xa98659 . sessionid , _0x21b268 += '&msgEvent=' + _0xa98659 . socketMessageEvent , _0x21b268 += '&socketCustomEvent=' + _0xa98659 . socketCustomEvent , _0x21b268 += '&autoCloseEntireSession=' + ! ! _0xa98659 . autoCloseEntireSession , true === _0xa98659 . session . broadcast && ( _0x21b268 += '&oneToMany=true' ) , _0x21b268 += '&maxParticipantsAllowed=' + _0xa98659 . maxParticipantsAllowed , _0xa98659 . enableScalableBroadcast && ( _0x21b268 += '&enableScalableBroadcast=true' , _0x21b268 += '&maxRelayLimitPerUser=' + ( _0xa98659 . maxRelayLimitPerUser || 0x2 ) ) , _0x21b268 += '&extra=' + JSON . stringify ( _0xa98659 . extra || { } ) , _0xa98659 . socketCustomParameters && ( _0x21b268 += _0xa98659 . socketCustomParameters ) ;
if ( _0xa98659 . socketURL || ( _0xa98659 . socketURL = '/' ) , '/' != _0xa98659 . socketURL . substr ( _0xa98659 . socketURL . length - 0x1 , 0x1 ) ) throw '"socketURL" MUST end with a slash.' ;
_0xa98659 . enableLogs && ( '/' == _0xa98659 . socketURL ? console . info ( 'socket.io url is: ' , location . origin + '/' ) : console . info ( 'socket.io url is: ' , _0xa98659 . socketURL ) ) ;
_0xa98659 . socket = io ( _0xa98659 . socketURL + _0x21b268 ) ;
var _0x521a09 = _0xa98659 . multiPeersHandler ;
function _0x370cbb ( _0x2c02cf , _0x6d0458 ) {
_0xa98659 . peersBackup [ _0x2c02cf ] || ( _0xa98659 . peersBackup [ _0x2c02cf ] = {
'userid' : _0x2c02cf ,
'extra' : { }
} ) , _0xa98659 . peersBackup [ _0x2c02cf ] . extra = _0x6d0458 ;
}
_0xa98659 . socket . on ( 'extra-data-updated' , function ( _0x9c9848 , _0x58a2b1 ) {
_0xa98659 . peers [ _0x9c9848 ] && ( _0xa98659 . peers [ _0x9c9848 ] . extra = _0x58a2b1 , _0xa98659 . onExtraDataUpdated ( {
'userid' : _0x9c9848 ,
'extra' : _0x58a2b1
} ) , _0x370cbb ( _0x9c9848 , _0x58a2b1 ) ) ;
} ) , _0xa98659 . socket . on ( _0xa98659 . socketMessageEvent , function _0x1eb953 ( _0x42ad3e ) {
if ( _0x42ad3e . remoteUserId == _0xa98659 . userid )
if ( _0xa98659 . peers [ _0x42ad3e . sender ] && _0xa98659 . peers [ _0x42ad3e . sender ] . extra != _0x42ad3e . message . extra && ( _0xa98659 . peers [ _0x42ad3e . sender ] . extra = _0x42ad3e . extra , _0xa98659 . onExtraDataUpdated ( {
'userid' : _0x42ad3e . sender ,
'extra' : _0x42ad3e . extra
} ) , _0x370cbb ( _0x42ad3e . sender , _0x42ad3e . extra ) ) , _0x42ad3e . message . streamSyncNeeded && _0xa98659 . peers [ _0x42ad3e . sender ] ) {
var _0x12f90b = _0xa98659 . streamEvents [ _0x42ad3e . message . streamid ] ;
if ( ! _0x12f90b || ! _0x12f90b . stream ) return ;
var _0x7f592a = _0x42ad3e . message . action ;
if ( 'ended' === _0x7f592a || 'inactive' === _0x7f592a || 'stream-removed' === _0x7f592a ) return _0xa98659 . peersBackup [ _0x12f90b . userid ] && ( _0x12f90b . extra = _0xa98659 . peersBackup [ _0x12f90b . userid ] . extra ) , void _0xa98659 . onstreamended ( _0x12f90b ) ;
var _0x43403d = 'both' != _0x42ad3e . message . type ? _0x42ad3e . message . type : null ;
'function' == typeof _0x12f90b . stream [ _0x7f592a ] && _0x12f90b . stream [ _0x7f592a ] ( _0x43403d ) ;
} else if ( 'dropPeerConnection' !== _0x42ad3e . message ) {
if ( _0x42ad3e . message . allParticipants ) return - 0x1 === _0x42ad3e . message . allParticipants . indexOf ( _0x42ad3e . sender ) && _0x42ad3e . message . allParticipants . push ( _0x42ad3e . sender ) , void _0x42ad3e . message . allParticipants . forEach ( function ( _0x45f777 ) {
_0x521a09 [ _0xa98659 . peers [ _0x45f777 ] ? 'renegotiatePeer' : 'createNewPeer' ] ( _0x45f777 , {
'localPeerSdpConstraints' : {
'OfferToReceiveAudio' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'remotePeerSdpConstraints' : {
'OfferToReceiveAudio' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . audio : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . video || ! ! _0xa98659 . session . screen : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'isOneWay' : ! ! _0xa98659 . session . oneway || 'one-way' === _0xa98659 . direction ,
'isDataOnly' : _0x535f92 ( _0xa98659 . session )
} ) ;
} ) ;
if ( _0x42ad3e . message . newParticipant ) {
if ( _0x42ad3e . message . newParticipant == _0xa98659 . userid ) return ;
if ( _0xa98659 . peers [ _0x42ad3e . message . newParticipant ] ) return ;
_0x521a09 . createNewPeer ( _0x42ad3e . message . newParticipant , _0x42ad3e . message . userPreferences || {
'localPeerSdpConstraints' : {
'OfferToReceiveAudio' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'remotePeerSdpConstraints' : {
'OfferToReceiveAudio' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . audio : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . video || ! ! _0xa98659 . session . screen : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'isOneWay' : ! ! _0xa98659 . session . oneway || 'one-way' === _0xa98659 . direction ,
'isDataOnly' : _0x535f92 ( _0xa98659 . session )
} ) ;
} else if ( _0x42ad3e . message . readyForOffer && ( _0xa98659 . attachStreams . length && ( _0xa98659 . waitingForLocalMedia = ! 0x1 ) , _0xa98659 . waitingForLocalMedia ) ) setTimeout ( function ( ) {
_0x1eb953 ( _0x42ad3e ) ;
} , 0x1 ) ;
else if ( _0x42ad3e . message . newParticipationRequest && _0x42ad3e . sender !== _0xa98659 . userid ) {
_0xa98659 . peers [ _0x42ad3e . sender ] && _0xa98659 . deletePeer ( _0x42ad3e . sender ) ;
var _0x8b8a4a = {
'extra' : _0x42ad3e . extra || { } ,
'localPeerSdpConstraints' : _0x42ad3e . message . remotePeerSdpConstraints || {
'OfferToReceiveAudio' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'remotePeerSdpConstraints' : _0x42ad3e . message . localPeerSdpConstraints || {
'OfferToReceiveAudio' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . audio : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0xa98659 . session . oneway ? ! ! _0xa98659 . session . video || ! ! _0xa98659 . session . screen : _0xa98659 . sdpConstraints . mandatory . OfferToReceiveVideo
} ,
'isOneWay' : void 0x0 !== _0x42ad3e . message . isOneWay ? _0x42ad3e . message . isOneWay : ! ! _0xa98659 . session . oneway || 'one-way' === _0xa98659 . direction ,
'isDataOnly' : void 0x0 !== _0x42ad3e . message . isDataOnly ? _0x42ad3e . message . isDataOnly : _0x535f92 ( _0xa98659 . session ) ,
'dontGetRemoteStream' : void 0x0 !== _0x42ad3e . message . isOneWay ? _0x42ad3e . message . isOneWay : ! ! _0xa98659 . session . oneway || 'one-way' === _0xa98659 . direction ,
'dontAttachLocalStream' : ! ! _0x42ad3e . message . dontGetRemoteStream ,
'connectionDescription' : _0x42ad3e ,
'successCallback' : function ( ) { }
} ;
_0xa98659 . onNewParticipant ( _0x42ad3e . sender , _0x8b8a4a ) ;
} else {
if ( _0x42ad3e . message . changedUUID && _0xa98659 . peers [ _0x42ad3e . message . oldUUID ] && ( _0xa98659 . peers [ _0x42ad3e . message . newUUID ] = _0xa98659 . peers [ _0x42ad3e . message . oldUUID ] , delete _0xa98659 . peers [ _0x42ad3e . message . oldUUID ] ) , _0x42ad3e . message . userLeft ) return _0x521a09 . onUserLeft ( _0x42ad3e . sender ) , void ( _0x42ad3e . message . autoCloseEntireSession && _0xa98659 . leave ( ) ) ;
_0x521a09 . addNegotiatedMessage ( _0x42ad3e . message , _0x42ad3e . sender ) ;
}
} else _0xa98659 . deletePeer ( _0x42ad3e . sender ) ;
} ) ;
var _0x56cf17 = ! 0x1 ;
_0xa98659 . socket . resetProps = function ( ) {
_0x56cf17 = ! 0x1 ;
} , _0xa98659 . socket . on ( 'connect' , function ( ) {
_0x56cf17 || ( _0x56cf17 = true , _0xa98659 . enableLogs && console . info ( 'socket.io connection is opened.' ) , setTimeout ( function ( ) {
_0xa98659 . socket . emit ( 'extra-data-updated' , _0xa98659 . extra ) ;
} , 0x3e8 ) , _0x1eb953 && _0x1eb953 ( _0xa98659 . socket ) ) ;
} ) , _0xa98659 . socket . on ( 'disconnect' , function ( ) {
_0xa98659 . enableLogs && console . warn ( 'socket.io connection is closed' ) , _0xa98659 . close ( ) ;
} ) , _0xa98659 . socket . on ( 'user-disconnected' , function ( _0x54aa18 ) {
_0x54aa18 !== _0xa98659 . userid && ( _0xa98659 . onUserStatusChanged ( {
'userid' : _0x54aa18 ,
'status' : 'offline' ,
'extra' : _0xa98659 . peers [ _0x54aa18 ] && _0xa98659 . peers [ _0x54aa18 ] . extra || { }
} ) , _0xa98659 . deletePeer ( _0x54aa18 ) ) ;
} ) , _0xa98659 . socket . on ( 'user-connected' , function ( _0x5ca80a ) {
_0x5ca80a !== _0xa98659 . userid && _0xa98659 . onUserStatusChanged ( {
'userid' : _0x5ca80a ,
'status' : 'online' ,
'extra' : _0xa98659 . peers [ _0x5ca80a ] && _0xa98659 . peers [ _0x5ca80a ] . extra || { }
} ) ;
} ) , _0xa98659 . socket . on ( 'closed-entire-session' , function ( _0x4808cd , _0x427eb3 ) {
_0xa98659 . leave ( ) , _0xa98659 . onEntireSessionClosed ( {
'sessionid' : _0x4808cd ,
'userid' : _0x4808cd ,
'extra' : _0x427eb3
} ) ;
} ) , _0xa98659 . socket . on ( 'userid-already-taken' , function ( _0x420cd1 , _0x1408ae ) {
_0xa98659 . onUserIdAlreadyTaken ( _0x420cd1 , _0x1408ae ) ;
} ) , _0xa98659 . socket . on ( 'logs' , function ( _0x5e50a8 ) {
_0xa98659 . enableLogs && console . debug ( 'server-logs' , _0x5e50a8 ) ;
} ) , _0xa98659 . socket . on ( 'number-of-broadcast-viewers-updated' , function ( _0x6c7075 ) {
_0xa98659 . onNumberOfBroadcastViewersUpdated ( _0x6c7075 ) ;
} ) , _0xa98659 . socket . on ( 'set-isInitiator-true' , function ( _0x4f8f7b ) {
_0x4f8f7b == _0xa98659 . sessionid && ( _0xa98659 . isInitiator = true ) ;
} ) ;
}
function _0x11ea4f ( _0x433d1d ) {
var _0x326931 = this ,
_0x2fa590 = [ 'getAllParticipants' , 'getLength' , 'selectFirst' , 'streams' , 'send' , 'forEach' ] ;
function _0x2aa4ee ( ) {
_0x433d1d . fbr = new _0x375f8a ( ) , _0x433d1d . fbr . onProgress = function ( _0x4fd092 ) {
_0x433d1d . onFileProgress ( _0x4fd092 ) ;
} , _0x433d1d . fbr . onBegin = function ( _0x4d54b6 ) {
_0x433d1d . onFileStart ( _0x4d54b6 ) ;
} , _0x433d1d . fbr . onEnd = function ( _0x50bc40 ) {
_0x433d1d . onFileEnd ( _0x50bc40 ) ;
} ;
}
_0x433d1d . peers = {
'getLength' : function ( ) {
var _0x433d1d = 0x0 ;
for ( var _0x326931 in this ) - 0x1 == _0x2fa590 . indexOf ( _0x326931 ) && _0x433d1d ++ ;
return _0x433d1d ;
} ,
'selectFirst' : function ( ) {
var _0x433d1d ;
for ( var _0x326931 in this ) - 0x1 == _0x2fa590 . indexOf ( _0x326931 ) && ( _0x433d1d = this [ _0x326931 ] ) ;
return _0x433d1d ;
} ,
'getAllParticipants' : function ( _0x3c84ce ) {
var _0x326931 = [ ] ;
for ( var _0x2aa4ee in this ) - 0x1 == _0x2fa590 . indexOf ( _0x2aa4ee ) && _0x2aa4ee != _0x3c84ce && _0x326931 . push ( _0x2aa4ee ) ;
return _0x326931 ;
} ,
'forEach' : function ( _0x3602ec ) {
this . getAllParticipants ( ) . forEach ( function ( _0x5a1e0f ) {
_0x3602ec ( _0x433d1d . peers [ _0x5a1e0f ] ) ;
} ) ;
} ,
'send' : function ( _0x5ba79e , _0x17c086 ) {
var _0x521a09 = this ;
if ( ! _0x3b94ab ( _0x5ba79e . size ) && ! _0x3b94ab ( _0x5ba79e . type ) ) {
if ( _0x433d1d . enableFileSharing ) return void _0x326931 . shareFile ( _0x5ba79e , _0x17c086 ) ;
'string' != typeof _0x5ba79e && ( _0x5ba79e = JSON . stringify ( _0x5ba79e ) ) ;
}
if ( 'text' === _0x5ba79e . type || _0x5ba79e instanceof ArrayBuffer || _0x5ba79e instanceof DataView ) {
if ( 'text' === _0x5ba79e . type && ( _0x5ba79e = JSON . stringify ( _0x5ba79e ) ) , _0x17c086 ) {
var _0x53f36f = _0x433d1d . peers [ _0x17c086 ] ;
if ( _0x53f36f ) return _0x53f36f . channels . length ? void _0x53f36f . channels . forEach ( function ( _0x157888 ) {
_0x157888 . send ( _0x5ba79e ) ;
} ) : ( _0x433d1d . peers [ _0x17c086 ] . createDataChannel ( ) , _0x433d1d . renegotiate ( _0x17c086 ) , void setTimeout ( function ( ) {
_0x521a09 . send ( _0x5ba79e , _0x17c086 ) ;
} , 0xbb8 ) ) ;
}
this . getAllParticipants ( ) . forEach ( function ( _0x20abac ) {
if ( ! _0x521a09 [ _0x20abac ] . channels . length ) return _0x433d1d . peers [ _0x20abac ] . createDataChannel ( ) , _0x433d1d . renegotiate ( _0x20abac ) , void setTimeout ( function ( ) {
_0x521a09 [ _0x20abac ] . channels . forEach ( function ( _0x3e199c ) {
_0x3e199c . send ( _0x5ba79e ) ;
} ) ;
} , 0xbb8 ) ;
_0x521a09 [ _0x20abac ] . channels . forEach ( function ( _0x35ed8c ) {
_0x35ed8c . send ( _0x5ba79e ) ;
} ) ;
} ) ;
} else _0x21703b . send ( {
'text' : _0x5ba79e ,
'channel' : this ,
'connection' : _0x433d1d ,
'remoteUserId' : _0x17c086
} ) ;
}
} , this . uuid = _0x433d1d . userid , this . getLocalConfig = function ( _0x137423 , _0x261ef , _0x2d10e4 ) {
return _0x2d10e4 || ( _0x2d10e4 = { } ) , {
'streamsToShare' : _0x2d10e4 . streamsToShare || { } ,
'rtcMultiConnection' : _0x433d1d ,
'connectionDescription' : _0x2d10e4 . connectionDescription ,
'userid' : _0x261ef ,
'localPeerSdpConstraints' : _0x2d10e4 . localPeerSdpConstraints ,
'remotePeerSdpConstraints' : _0x2d10e4 . remotePeerSdpConstraints ,
'dontGetRemoteStream' : ! ! _0x2d10e4 . dontGetRemoteStream ,
'dontAttachLocalStream' : ! ! _0x2d10e4 . dontAttachLocalStream ,
'renegotiatingPeer' : ! ! _0x2d10e4 . renegotiatingPeer ,
'peerRef' : _0x2d10e4 . peerRef ,
'channels' : _0x2d10e4 . channels || [ ] ,
'onLocalSdp' : function ( _0x44a3ae ) {
_0x326931 . onNegotiationNeeded ( _0x44a3ae , _0x261ef ) ;
} ,
'onLocalCandidate' : function ( _0x405c4b ) {
( _0x405c4b = _0x2b9f47 . processCandidates ( _0x433d1d , _0x405c4b ) ) && _0x326931 . onNegotiationNeeded ( _0x405c4b , _0x261ef ) ;
} ,
'remoteSdp' : _0x137423 ,
'onDataChannelMessage' : function ( _0x149155 ) {
if ( ! _0x433d1d . fbr && _0x433d1d . enableFileSharing && _0x2aa4ee ( ) , 'string' != typeof _0x149155 && _0x433d1d . enableFileSharing ) {
var _0x2d10e4 = this ;
_0x149155 instanceof ArrayBuffer || _0x149155 instanceof DataView ? _0x433d1d . fbr . convertToObject ( _0x149155 , function ( _0x2664a9 ) {
_0x2d10e4 . onDataChannelMessage ( _0x2664a9 ) ;
} ) : _0x149155 . readyForNextChunk ? _0x433d1d . fbr . getNextChunk ( _0x149155 , function ( _0x1453bf , _0x8de0f1 ) {
_0x433d1d . peers [ _0x261ef ] . channels . forEach ( function ( _0x5f29e7 ) {
_0x5f29e7 . send ( _0x1453bf ) ;
} ) ;
} , _0x261ef ) : _0x149155 . chunkMissing ? _0x433d1d . fbr . chunkMissing ( _0x149155 ) : _0x433d1d . fbr . addChunk ( _0x149155 , function ( _0x8e01c9 ) {
_0x433d1d . peers [ _0x261ef ] . peer . channel . send ( _0x8e01c9 ) ;
} ) ;
} else _0x326931 . onDataChannelMessage ( _0x149155 , _0x261ef ) ;
} ,
'onDataChannelError' : function ( _0x300f94 ) {
_0x326931 . onDataChannelError ( _0x300f94 , _0x261ef ) ;
} ,
'onDataChannelOpened' : function ( _0x5919e5 ) {
_0x326931 . onDataChannelOpened ( _0x5919e5 , _0x261ef ) ;
} ,
'onDataChannelClosed' : function ( _0x37c3b1 ) {
_0x326931 . onDataChannelClosed ( _0x37c3b1 , _0x261ef ) ;
} ,
'onRemoteStream' : function ( _0x44e333 ) {
_0x433d1d . peers [ _0x261ef ] && _0x433d1d . peers [ _0x261ef ] . streams . push ( _0x44e333 ) , _0x326931 . onGettingRemoteMedia ( _0x44e333 , _0x261ef ) ;
} ,
'onRemoteStreamRemoved' : function ( _0x1e2862 ) {
_0x326931 . onRemovingRemoteMedia ( _0x1e2862 , _0x261ef ) ;
} ,
'onPeerStateChanged' : function ( _0x483374 ) {
_0x326931 . onPeerStateChanged ( _0x483374 ) , 'new' === _0x483374 . iceConnectionState && _0x326931 . onNegotiationStarted ( _0x261ef , _0x483374 ) , 'connected' === _0x483374 . iceConnectionState && _0x326931 . onNegotiationCompleted ( _0x261ef , _0x483374 ) , - 0x1 !== _0x483374 . iceConnectionState . search ( /closed|failed/gi ) && ( _0x326931 . onUserLeft ( _0x261ef ) , _0x326931 . disconnectWith ( _0x261ef ) ) ;
}
} ;
} , this . createNewPeer = function ( _0x4f4c1b , _0x54114b ) {
if ( ! ( _0x433d1d . maxParticipantsAllowed <= _0x433d1d . getAllParticipants ( ) . length ) ) {
if ( _0x54114b = _0x54114b || { } , _0x433d1d . isInitiator && _0x433d1d . session . audio && 'two-way' === _0x433d1d . session . audio && ! _0x54114b . streamsToShare && ( _0x54114b . isOneWay = ! 0x1 , _0x54114b . isDataOnly = ! 0x1 , _0x54114b . session = _0x433d1d . session ) , ! _0x54114b . isOneWay && ! _0x54114b . isDataOnly ) return _0x54114b . isOneWay = true , void this . onNegotiationNeeded ( {
'enableMedia' : true ,
'userPreferences' : _0x54114b
} , _0x4f4c1b ) ;
_0x54114b = _0x433d1d . setUserPreferences ( _0x54114b , _0x4f4c1b ) ;
var _0x2aa4ee = this . getLocalConfig ( null , _0x4f4c1b , _0x54114b ) ;
_0x433d1d . peers [ _0x4f4c1b ] = new _0x4c6fdb ( _0x2aa4ee ) ;
}
} , this . createAnsweringPeer = function ( _0x432071 , _0x5d1056 , _0x4e2b15 ) {
_0x4e2b15 = _0x433d1d . setUserPreferences ( _0x4e2b15 || { } , _0x5d1056 ) ;
var _0x521a09 = this . getLocalConfig ( _0x432071 , _0x5d1056 , _0x4e2b15 ) ;
_0x433d1d . peers [ _0x5d1056 ] = new _0x4c6fdb ( _0x521a09 ) ;
} , this . renegotiatePeer = function ( _0xf6c803 , _0x597405 , _0x29d9b2 ) {
if ( _0x433d1d . peers [ _0xf6c803 ] ) {
_0x597405 || ( _0x597405 = { } ) , _0x597405 . renegotiatingPeer = true , _0x597405 . peerRef = _0x433d1d . peers [ _0xf6c803 ] . peer , _0x597405 . channels = _0x433d1d . peers [ _0xf6c803 ] . channels ;
var _0x521a09 = this . getLocalConfig ( _0x29d9b2 , _0xf6c803 , _0x597405 ) ;
_0x433d1d . peers [ _0xf6c803 ] = new _0x4c6fdb ( _0x521a09 ) ;
} else _0x433d1d . enableLogs && console . error ( 'Peer (' + _0xf6c803 + ') does not exist. Renegotiation skipped.' ) ;
} , this . replaceTrack = function ( _0x110184 , _0x52c3ce , _0x25f6eb ) {
if ( ! _0x433d1d . peers [ _0x52c3ce ] ) throw 'This peer (' + _0x52c3ce + ') does not exist.' ;
var _0x521a09 = _0x433d1d . peers [ _0x52c3ce ] . peer ;
_0x521a09 . getSenders && 'function' == typeof _0x521a09 . getSenders && _0x521a09 . getSenders ( ) . length ? _0x521a09 . getSenders ( ) . forEach ( function ( _0x96ed5f ) {
_0x25f6eb && 'video' === _0x96ed5f . track . kind && ( _0x433d1d . peers [ _0x52c3ce ] . peer . lastVideoTrack = _0x96ed5f . track , _0x96ed5f . replaceTrack ( _0x110184 ) ) , _0x25f6eb || 'audio' !== _0x96ed5f . track . kind || ( _0x433d1d . peers [ _0x52c3ce ] . peer . lastAudioTrack = _0x96ed5f . track , _0x96ed5f . replaceTrack ( _0x110184 ) ) ;
} ) : ( console . warn ( 'RTPSender.replaceTrack is NOT supported.' ) , this . renegotiatePeer ( _0x52c3ce ) ) ;
} , this . onNegotiationNeeded = function ( _0x33db7a , _0x5f4a7c ) { } , this . addNegotiatedMessage = function ( _0x1d484a , _0x448bd9 ) {
if ( _0x1d484a . type && _0x1d484a . sdp ) return 'answer' == _0x1d484a . type && _0x433d1d . peers [ _0x448bd9 ] && _0x433d1d . peers [ _0x448bd9 ] . addRemoteSdp ( _0x1d484a ) , 'offer' == _0x1d484a . type && ( _0x1d484a . renegotiatingPeer ? this . renegotiatePeer ( _0x448bd9 , null , _0x1d484a ) : this . createAnsweringPeer ( _0x1d484a , _0x448bd9 ) ) , void ( _0x433d1d . enableLogs && console . log ( 'Remote peer\x27s sdp:' , _0x1d484a . sdp ) ) ;
if ( _0x1d484a . candidate ) return _0x433d1d . peers [ _0x448bd9 ] && _0x433d1d . peers [ _0x448bd9 ] . addRemoteCandidate ( _0x1d484a ) , void ( _0x433d1d . enableLogs && console . log ( 'Remote peer\'s candidate pairs:' , _0x1d484a . candidate ) ) ;
if ( _0x1d484a . enableMedia ) {
_0x433d1d . session = _0x1d484a . userPreferences . session || _0x433d1d . session , _0x433d1d . session . oneway && _0x433d1d . attachStreams . length && ( _0x433d1d . attachStreams = [ ] ) , _0x1d484a . userPreferences . isDataOnly && _0x433d1d . attachStreams . length && ( _0x433d1d . attachStreams . length = [ ] ) ;
var _0x521a09 = { } ;
_0x433d1d . attachStreams . forEach ( function ( _0x549219 ) {
_0x521a09 [ _0x549219 . streamid ] = {
'isAudio' : ! ! _0x549219 . isAudio ,
'isVideo' : ! ! _0x549219 . isVideo ,
'isScreen' : ! ! _0x549219 . isScreen
} ;
} ) , _0x1d484a . userPreferences . streamsToShare = _0x521a09 , _0x326931 . onNegotiationNeeded ( {
'readyForOffer' : true ,
'userPreferences' : _0x1d484a . userPreferences
} , _0x448bd9 ) ;
}
_0x1d484a . readyForOffer && _0x433d1d . onReadyForOffer ( _0x448bd9 , _0x1d484a . userPreferences ) ;
} , this . onGettingRemoteMedia = function ( _0x1d2a39 , _0x50fcf9 ) { } , this . onRemovingRemoteMedia = function ( _0x2c048b , _0x238637 ) { } , this . onGettingLocalMedia = function ( _0x10860a ) { } , this . onLocalMediaError = function ( _0x33725e , _0x45b7ee ) {
_0x433d1d . onMediaError ( _0x33725e , _0x45b7ee ) ;
} , this . shareFile = function ( _0x458906 , _0x775c6c ) {
_0x2aa4ee ( ) , _0x433d1d . fbr . readAsArrayBuffer ( _0x458906 , function ( _0x2c744c ) {
var _0x2aa4ee = _0x433d1d . getAllParticipants ( ) ;
_0x775c6c && ( _0x2aa4ee = [ _0x775c6c ] ) , _0x2aa4ee . forEach ( function ( _0x3a9de3 ) {
_0x433d1d . fbr . getNextChunk ( _0x2c744c , function ( _0x2b3a4a ) {
_0x433d1d . peers [ _0x3a9de3 ] . channels . forEach ( function ( _0x2356aa ) {
_0x2356aa . send ( _0x2b3a4a ) ;
} ) ;
} , _0x3a9de3 ) ;
} ) ;
} , {
'userid' : _0x433d1d . userid ,
'chunkSize' : 'Firefox' === DetectRTC . browser . name ? 0x3a98 : _0x433d1d . chunkSize || 0x0
} ) ;
} ;
var _0x521a09 = new _0x342039 ( _0x433d1d ) ;
this . onDataChannelMessage = function ( _0x5f266f , _0x384695 ) {
_0x521a09 . receive ( JSON . parse ( _0x5f266f ) , _0x384695 , _0x433d1d . peers [ _0x384695 ] ? _0x433d1d . peers [ _0x384695 ] . extra : { } ) ;
} , this . onDataChannelClosed = function ( _0x5448c4 , _0x5c5d37 ) {
_0x5448c4 . userid = _0x5c5d37 , _0x5448c4 . extra = _0x433d1d . peers [ _0x5c5d37 ] ? _0x433d1d . peers [ _0x5c5d37 ] . extra : { } , _0x433d1d . onclose ( _0x5448c4 ) ;
} , this . onDataChannelError = function ( _0x2a9d6 , _0x55de25 ) {
_0x2a9d6 . userid = _0x55de25 , event . extra = _0x433d1d . peers [ _0x55de25 ] ? _0x433d1d . peers [ _0x55de25 ] . extra : { } , _0x433d1d . onerror ( _0x2a9d6 ) ;
} , this . onDataChannelOpened = function ( _0x5d5514 , _0x255c92 ) {
_0x433d1d . peers [ _0x255c92 ] . channels . length ? _0x433d1d . peers [ _0x255c92 ] . channels = [ _0x5d5514 ] : ( _0x433d1d . peers [ _0x255c92 ] . channels . push ( _0x5d5514 ) , _0x433d1d . onopen ( {
'userid' : _0x255c92 ,
'extra' : _0x433d1d . peers [ _0x255c92 ] ? _0x433d1d . peers [ _0x255c92 ] . extra : { } ,
'channel' : _0x5d5514
} ) ) ;
} , this . onPeerStateChanged = function ( _0x463911 ) {
_0x433d1d . onPeerStateChanged ( _0x463911 ) ;
} , this . onNegotiationStarted = function ( _0x134c39 , _0x554768 ) { } , this . onNegotiationCompleted = function ( _0x40ab4e , _0x24f174 ) { } , this . getRemoteStreams = function ( _0x196151 ) {
return _0x196151 = _0x196151 || _0x433d1d . peers . getAllParticipants ( ) [ 0x0 ] , _0x433d1d . peers [ _0x196151 ] ? _0x433d1d . peers [ _0x196151 ] . streams : [ ] ;
} ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
function _0x121233 ( _0x421b61 , _0x4c65b9 , _0x1382be ) {
if ( 'undefined' != typeof CustomEvent ) {
var _0x21b268 = new CustomEvent ( _0x4c65b9 , {
'arguments' : _0x1382be ,
'__exposedProps__' : _0x1382be
} ) ;
_0x421b61 . dispatchEvent ( _0x21b268 ) ;
}
}
function _0x57b754 ( _0x51d3ee , _0x17d2b8 ) {
_0x17d2b8 . stream && _0x17d2b8 . stream && _0x17d2b8 . stream . addEventListener && ( _0x17d2b8 . stream . addEventListener ( 'mute' , function ( _0x20fbf4 ) {
( _0x20fbf4 = _0x51d3ee . streamEvents [ _0x17d2b8 . streamid ] ) . session = {
'audio' : 'audio' === _0x20fbf4 . muteType ,
'video' : 'video' === _0x20fbf4 . muteType
} , _0x51d3ee . onmute ( _0x20fbf4 ) ;
} , ! 0x1 ) , _0x17d2b8 . stream . addEventListener ( 'unmute' , function ( _0x5b824c ) {
( _0x5b824c = _0x51d3ee . streamEvents [ _0x17d2b8 . streamid ] ) . session = {
'audio' : 'audio' === _0x5b824c . unmuteType ,
'video' : 'video' === _0x5b824c . unmuteType
} , _0x51d3ee . onunmute ( _0x5b824c ) ;
} , ! 0x1 ) ) ;
}
function _0x5b8d5d ( ) {
if ( window . crypto && window . crypto . getRandomValues && - 0x1 === navigator . userAgent . indexOf ( 'Safari' ) ) {
for ( var _0x1056a5 = window . crypto . getRandomValues ( new Uint32Array ( 0x3 ) ) , _0x326931 = '' , _0x2fa590 = 0x0 , _0x21b268 = _0x1056a5 . length ; _0x2fa590 < _0x21b268 ; _0x2fa590 ++ ) _0x326931 += _0x1056a5 [ _0x2fa590 ] . toString ( 0x24 ) ;
return _0x326931 ;
}
return ( Math . random ( ) * new Date ( ) . getTime ( ) ) . toString ( 0x24 ) . replace ( /\./g , '' ) ;
}
function _0x412d65 ( _0x385896 , _0x40a9c8 , _0x449aca ) {
if ( _0x449aca . autoCreateMediaElement ) {
var _0x21b268 = ! 0x1 ;
_0x2cbba5 ( _0x385896 , 'video' ) . length || _0x385896 . isVideo || _0x385896 . isScreen || ( _0x21b268 = true ) , 'Firefox' === DetectRTC . browser . name && ( _0x449aca . session . video || _0x449aca . session . screen ) && ( _0x21b268 = ! 0x1 ) ;
var _0x521a09 = document . createElement ( _0x21b268 ? 'audio' : 'video' ) ;
_0x521a09 . srcObject = _0x385896 ;
try {
_0x521a09 . setAttributeNode ( document . createAttribute ( 'autoplay' ) ) , _0x521a09 . setAttributeNode ( document . createAttribute ( 'playsinline' ) ) , _0x521a09 . setAttributeNode ( document . createAttribute ( 'controls' ) ) ;
} catch ( _0x1440db ) {
_0x521a09 . setAttribute ( 'autoplay' , true ) , _0x521a09 . setAttribute ( 'playsinline' , true ) , _0x521a09 . setAttribute ( 'controls' , true ) ;
}
if ( 'Firefox' === DetectRTC . browser . name ) {
var _0x5e279f = 'ended' ;
'oninactive' in _0x521a09 && ( _0x5e279f = 'inactive' ) , _0x521a09 . addEventListener ( _0x5e279f , function ( ) {
if ( currentUserMediaRequest . remove ( _0x385896 . idInstance ) , 'local' === _0x385896 . type ) {
_0x5e279f = 'ended' , 'oninactive' in _0x385896 && ( _0x5e279f = 'inactive' ) , _0x25e82e . onSyncNeeded ( _0x385896 . streamid , _0x5e279f ) , _0x449aca . attachStreams . forEach ( function ( _0x30209b , _0x17c711 ) {
_0x385896 . streamid === _0x30209b . streamid && delete _0x449aca . attachStreams [ _0x17c711 ] ;
} ) ;
var _0x40a9c8 = [ ] ;
_0x449aca . attachStreams . forEach ( function ( _0x2dbc3e ) {
_0x2dbc3e && _0x40a9c8 . push ( _0x2dbc3e ) ;
} ) , _0x449aca . attachStreams = _0x40a9c8 ;
var _0x21b268 = _0x449aca . streamEvents [ _0x385896 . streamid ] ;
if ( _0x21b268 ) return void _0x449aca . onstreamended ( _0x21b268 ) ;
this . parentNode && this . parentNode . removeChild ( this ) ;
}
} , ! 0x1 ) ;
}
var _0x2b737d = _0x521a09 . play ( ) ;
if ( void 0x0 !== _0x2b737d ) {
var _0x1e20a0 = ! 0x1 ;
setTimeout ( function ( ) {
_0x1e20a0 || ( _0x1e20a0 = true , _0x40a9c8 ( _0x521a09 ) ) ;
} , 0x3e8 ) , _0x2b737d . then ( function ( ) {
_0x1e20a0 || ( _0x1e20a0 = true , _0x40a9c8 ( _0x521a09 ) ) ;
} ) . catch ( function ( _0x336a06 ) {
_0x1e20a0 || ( _0x1e20a0 = true , _0x40a9c8 ( _0x521a09 ) ) ;
} ) ;
} else _0x40a9c8 ( _0x521a09 ) ;
} else _0x40a9c8 ( { } ) ;
}
function _0x1cbceb ( _0x84132f , _0xd43fb8 ) {
window . removeEventListener ( _0x84132f , _0xd43fb8 ) , window . addEventListener ( _0x84132f , _0xd43fb8 , ! 0x1 ) ;
}
function _0xf3acd ( _0x3d2706 ) {
var _0x326931 = [ ] ;
return _0x3d2706 . forEach ( function ( _0x1e0ee0 ) {
_0x1e0ee0 && _0x326931 . push ( _0x1e0ee0 ) ;
} ) , _0x326931 ;
}
function _0x5deab2 ( _0x58c43e ) {
return ! _0x58c43e . audio && ! _0x58c43e . video && ! _0x58c43e . screen && _0x58c43e . data ;
}
function _0x3b94ab ( _0x3fc589 ) {
return void 0x0 === _0x3fc589 ;
} ( _0x3a9045 = void 0x0 !== _0x21b268 ? _0x21b268 : null ) && 'undefined' == typeof window && void 0x0 !== _0x21b268 && ( _0x21b268 . navigator = {
'userAgent' : 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45' ,
'getUserMedia' : function ( ) { }
} , _0x21b268 . console || ( _0x21b268 . console = { } ) , void 0x0 === _0x21b268 . console . debug && ( _0x21b268 . console . debug = _0x21b268 . console . info = _0x21b268 . console . error = _0x21b268 . console . log = _0x21b268 . console . log || function ( ) {
console . log ( arguments ) ;
} ) , 'undefined' == typeof document && ( _0x3a9045 . document = { } , document . createElement = document . captureStream = document . mozCaptureStream = function ( ) {
var _0x1056a5 = {
'getContext' : function ( ) {
return _0x1056a5 ;
} ,
'play' : function ( ) { } ,
'pause' : function ( ) { } ,
'drawImage' : function ( ) { } ,
'toDataURL' : function ( ) {
return '' ;
}
} ;
return _0x1056a5 ;
} , document . addEventListener = document . removeEventListener = _0x3a9045 . addEventListener = _0x3a9045 . removeEventListener = function ( ) { } , _0x3a9045 . HTMLVideoElement = _0x3a9045 . HTMLMediaElement = function ( ) { } ) , void 0x0 === 'undefined' == typeof location && ( _0x3a9045 . location = {
'protocol' : 'file:' ,
'href' : '' ,
'hash' : '' ,
'origin' : 'self'
} ) , 'undefined' == typeof screen && ( _0x3a9045 . screen = {
'width' : 0x0 ,
'height' : 0x0
} ) , 'undefined' == typeof URL && ( _0x3a9045 . URL = {
'createObjectURL' : function ( ) {
return '' ;
} ,
'revokeObjectURL' : function ( ) {
return '' ;
}
} ) , _0x3a9045 . window = _0x21b268 ) ,
function ( ) {
var _0x1056a5 = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45' ;
if ( _0x3f6d71 = 'object' === ( void 0x0 === _0x521a09 ? 'undefined' : _0x4ffbab ( _0x521a09 ) ) && 'object' === _0x4ffbab ( _0x521a09 . versions ) && _0x521a09 . versions . node && ! _0x521a09 . browser ) {
var _0x326931 = _0x521a09 . versions . node . toString ( ) . replace ( 'v' , '' ) ;
_0x1056a5 = 'Nodejs/' + _0x326931 + ' (NodeOS) AppleWebKit/' + _0x326931 + ' (KHTML, like Gecko) Nodejs/' + _0x326931 + ' Nodejs/' + _0x326931 ;
} ! function ( _0x3f410a ) {
'undefined' == typeof window && ( 'undefined' == typeof window && void 0x0 !== _0x21b268 && ( _0x21b268 . navigator = {
'userAgent' : _0x1056a5 ,
'getUserMedia' : function ( ) { }
} , _0x3f410a . window = _0x21b268 ) , 'undefined' == typeof location && ( _0x3f410a . location = {
'protocol' : 'file:' ,
'href' : '' ,
'hash' : ''
} ) , 'undefined' == typeof screen && ( _0x3f410a . screen = {
'width' : 0x0 ,
'height' : 0x0
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} ) ) ;
2022-11-28 01:35:30 +00:00
} ( void 0x0 !== _0x21b268 ? _0x21b268 : window ) ;
var _0xd38ed = window . navigator ;
void 0x0 !== _0xd38ed ? ( void 0x0 !== _0xd38ed . webkitGetUserMedia && ( _0xd38ed . getUserMedia = _0xd38ed . webkitGetUserMedia ) , void 0x0 !== _0xd38ed . mozGetUserMedia && ( _0xd38ed . getUserMedia = _0xd38ed . mozGetUserMedia ) ) : _0xd38ed = {
'getUserMedia' : function ( ) { } ,
'userAgent' : _0x1056a5
} ;
var _0x4aed46 = ! ! /Android|webOS|iPhone|iPad|iPod|BB10|BlackBerry|IEMobile|Opera Mini|Mobile|mobile/i . test ( _0xd38ed . userAgent || '' ) ,
_0x4ba312 = ! ( - 0x1 === _0xd38ed . userAgent . indexOf ( 'Edge' ) || ! _0xd38ed . msSaveOrOpenBlob && ! _0xd38ed . msSaveBlob ) ,
_0xa57f33 = ! ! window . opera || _0xd38ed . userAgent . indexOf ( ' OPR/' ) >= 0x0 ,
_0x111853 = void 0x0 !== window . InstallTrigger ,
_0x2920ae = /^((?!chrome|android).)*safari/i . test ( _0xd38ed . userAgent ) ,
_0x5e24f4 = ! ! window . chrome && ! _0xa57f33 ,
_0x566860 = 'undefined' != typeof document && ! ! document . documentMode && ! _0x4ba312 ;
function _0x8a78df ( _0x409296 , _0x319fb9 ) {
var _0x2fa590 = 0x0 ,
_0x21b268 = ! 0x1 ,
_0x521a09 = window . setInterval ( function ( ) {
_0x409296 ( ) && ( window . clearInterval ( _0x521a09 ) , _0x319fb9 ( _0x21b268 ) ) , _0x2fa590 ++ > 0x32 && ( window . clearInterval ( _0x521a09 ) , _0x319fb9 ( _0x21b268 = true ) ) ;
} , 0xa ) ;
}
var _0x25725b = {
'Android' : function ( ) {
return _0xd38ed . userAgent . match ( /Android/i ) ;
} ,
'BlackBerry' : function ( ) {
return _0xd38ed . userAgent . match ( /BlackBerry|BB10/i ) ;
} ,
'iOS' : function ( ) {
return _0xd38ed . userAgent . match ( /iPhone|iPad|iPod/i ) ;
} ,
'Opera' : function ( ) {
return _0xd38ed . userAgent . match ( /Opera Mini/i ) ;
} ,
'Windows' : function ( ) {
return _0xd38ed . userAgent . match ( /IEMobile/i ) ;
} ,
'any' : function ( ) {
return _0x25725b . Android ( ) || _0x25725b . BlackBerry ( ) || _0x25725b . iOS ( ) || _0x25725b . Opera ( ) || _0x25725b . Windows ( ) ;
} ,
'getOsName' : function ( ) {
var _0x1056a5 = 'Unknown OS' ;
return _0x25725b . Android ( ) && ( _0x1056a5 = 'Android' ) , _0x25725b . BlackBerry ( ) && ( _0x1056a5 = 'BlackBerry' ) , _0x25725b . iOS ( ) && ( _0x1056a5 = 'iOS' ) , _0x25725b . Opera ( ) && ( _0x1056a5 = 'Opera Mini' ) , _0x25725b . Windows ( ) && ( _0x1056a5 = 'Windows' ) , _0x1056a5 ;
}
} ;
var _0xfabbbb = 'Unknown OS' ,
_0x533b2e = 'Unknown OS Version' ;
var _0x373254 , _0x3c966e , _0x47d25f = function ( ) {
for ( var _0x1056a5 , _0x326931 = _0xd38ed . appVersion , _0x2fa590 = _0xd38ed . userAgent , _0x21b268 = '-' , _0x521a09 = [ {
's' : 'Windows 10' ,
'r' : /(Windows 10.0|Windows NT 10.0)/
} , {
's' : 'Windows 8.1' ,
'r' : /(Windows 8.1|Windows NT 6.3)/
} , {
's' : 'Windows 8' ,
'r' : /(Windows 8|Windows NT 6.2)/
} , {
's' : 'Windows 7' ,
'r' : /(Windows 7|Windows NT 6.1)/
} , {
's' : 'Windows Vista' ,
'r' : /Windows NT 6.0/
} , {
's' : 'Windows Server 2003' ,
'r' : /Windows NT 5.2/
} , {
's' : 'Windows XP' ,
'r' : /(Windows NT 5.1|Windows XP)/
} , {
's' : 'Windows 2000' ,
'r' : /(Windows NT 5.0|Windows 2000)/
} , {
's' : 'Windows ME' ,
'r' : /(Win 9x 4.90|Windows ME)/
} , {
's' : 'Windows 98' ,
'r' : /(Windows 98|Win98)/
} , {
's' : 'Windows 95' ,
'r' : /(Windows 95|Win95|Windows_95)/
} , {
's' : 'Windows NT 4.0' ,
'r' : /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/
} , {
's' : 'Windows CE' ,
'r' : /Windows CE/
} , {
's' : 'Windows 3.11' ,
'r' : /Win16/
} , {
's' : 'Android' ,
'r' : /Android/
} , {
's' : 'Open BSD' ,
'r' : /OpenBSD/
} , {
's' : 'Sun OS' ,
'r' : /SunOS/
} , {
's' : 'Linux' ,
'r' : /(Linux|X11)/
} , {
's' : 'iOS' ,
'r' : /(iPhone|iPad|iPod)/
} , {
's' : 'Mac OS X' ,
'r' : /Mac OS X/
} , {
's' : 'Mac OS' ,
'r' : /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/
} , {
's' : 'QNX' ,
'r' : /QNX/
} , {
's' : 'UNIX' ,
'r' : /UNIX/
} , {
's' : 'BeOS' ,
'r' : /BeOS/
} , {
's' : 'OS/2' ,
'r' : /OS\/2/
} , {
's' : 'Search Bot' ,
'r' : /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/
} ] , _0x443861 = 0x0 ; _0x1056a5 = _0x521a09 [ _0x443861 ] ; _0x443861 ++ )
if ( _0x1056a5 . r . test ( _0x2fa590 ) ) {
_0x21b268 = _0x1056a5 . s ;
break ;
}
var _0x434d96 = '-' ;
switch ( /Windows/ . test ( _0x21b268 ) && ( /Windows (.*)/ . test ( _0x21b268 ) && ( _0x434d96 = /Windows (.*)/ . exec ( _0x21b268 ) [ 0x1 ] ) , _0x21b268 = 'Windows' ) , _0x21b268 ) {
case 'Mac OS X' :
/Mac OS X (10[\.\_\d]+)/ . test ( _0x2fa590 ) && ( _0x434d96 = /Mac OS X (10[\.\_\d]+)/ . exec ( _0x2fa590 ) [ 0x1 ] ) ;
break ;
case 'Android' :
/Android ([\.\_\d]+)/ . test ( _0x2fa590 ) && ( _0x434d96 = /Android ([\.\_\d]+)/ . exec ( _0x2fa590 ) [ 0x1 ] ) ;
break ;
case 'iOS' :
/OS (\d+)_(\d+)_?(\d+)?/ . test ( _0x2fa590 ) && ( _0x434d96 = ( _0x434d96 = /OS (\d+)_(\d+)_?(\d+)?/ . exec ( _0x326931 ) ) [ 0x1 ] + '.' + _0x434d96 [ 0x2 ] + '.' + ( 0x0 | _0x434d96 [ 0x3 ] ) ) ;
}
return {
'osName' : _0x21b268 ,
'osVersion' : _0x434d96
} ;
} ( ) ;
_0x47d25f && _0x47d25f . osName && '-' != _0x47d25f . osName ? ( _0xfabbbb = _0x47d25f . osName , _0x533b2e = _0x47d25f . osVersion ) : _0x25725b . any ( ) && 'Android' == ( _0xfabbbb = _0x25725b . getOsName ( ) ) && ( _0x533b2e = ! ! ( _0x3c966e = ( _0x373254 = ( _0x373254 || _0xd38ed . userAgent ) . toLowerCase ( ) ) . match ( /android\s([0-9\.]*)/ ) ) && _0x3c966e [ 0x1 ] ) ;
var _0x3f6d71 = 'object' === ( void 0x0 === _0x521a09 ? 'undefined' : _0x4ffbab ( _0x521a09 ) ) && 'object' === _0x4ffbab ( _0x521a09 . versions ) && _0x521a09 . versions . node ;
'Unknown OS' === _0xfabbbb && _0x3f6d71 && ( _0xfabbbb = 'Nodejs' , _0x533b2e = _0x521a09 . versions . node . toString ( ) . replace ( 'v' , '' ) ) ;
var _0x233149 = ! 0x1 ,
_0x467217 = ! 0x1 ;
[ 'captureStream' , 'mozCaptureStream' , 'webkitCaptureStream' ] . forEach ( function ( _0x2dba73 ) {
'undefined' != typeof document && 'function' == typeof document . createElement && ( ! _0x233149 && _0x2dba73 in document . createElement ( 'canvas' ) && ( _0x233149 = true ) , ! _0x467217 && _0x2dba73 in document . createElement ( 'video' ) && ( _0x467217 = true ) ) ;
} ) ;
var _0x327730 = /^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/ ,
_0x39bfae = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ ,
_0xe1f7d = /[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}/ ;
var _0x37c2dd = [ ] ,
_0x47e1c4 = [ ] ,
_0x1e709a = [ ] ,
_0x536d10 = [ ] ;
_0xd38ed . mediaDevices && _0xd38ed . mediaDevices . enumerateDevices && ( _0xd38ed . enumerateDevices = function ( _0x101328 ) {
var _0x326931 = _0xd38ed . mediaDevices . enumerateDevices ( ) ;
_0x326931 && _0x326931 . then ? _0xd38ed . mediaDevices . enumerateDevices ( ) . then ( _0x101328 ) . catch ( function ( ) {
_0x101328 ( [ ] ) ;
} ) : _0x101328 ( [ ] ) ;
} ) ;
var _0x1ec78f = ! 0x1 ;
void 0x0 !== _0x1d01b4 && 'getSources' in _0x1d01b4 ? _0x1ec78f = true : _0xd38ed . mediaDevices && _0xd38ed . mediaDevices . enumerateDevices && ( _0x1ec78f = true ) ;
var _0x1e6405 = ! 0x1 ,
_0x20f7ce = ! 0x1 ,
_0x528a8d = ! 0x1 ,
_0x242003 = ! 0x1 ,
_0x1583d5 = ! 0x1 ;
function _0x5a290a ( _0x5b8353 ) {
if ( _0x1ec78f )
if ( ! _0xd38ed . enumerateDevices && window . MediaStreamTrack && window . MediaStreamTrack . getSources && ( _0xd38ed . enumerateDevices = window . MediaStreamTrack . getSources . bind ( window . MediaStreamTrack ) ) , ! _0xd38ed . enumerateDevices && _0xd38ed . enumerateDevices && ( _0xd38ed . enumerateDevices = _0xd38ed . enumerateDevices . bind ( _0xd38ed ) ) , _0xd38ed . enumerateDevices ) {
_0x37c2dd = [ ] , _0x47e1c4 = [ ] , _0x1e709a = [ ] , _0x536d10 = [ ] , _0x1e6405 = ! 0x1 , _0x20f7ce = ! 0x1 , _0x528a8d = ! 0x1 , _0x242003 = ! 0x1 , _0x1583d5 = ! 0x1 ;
var _0x326931 = { } ;
_0xd38ed . enumerateDevices ( function ( _0x11a0f9 ) {
_0x11a0f9 . forEach ( function ( _0x210fa4 ) {
var _0x11a0f9 = { } ;
for ( var _0x21b268 in _0x210fa4 ) try {
'function' != typeof _0x210fa4 [ _0x21b268 ] && ( _0x11a0f9 [ _0x21b268 ] = _0x210fa4 [ _0x21b268 ] ) ;
} catch ( _0x1914ff ) { }
_0x326931 [ _0x11a0f9 . deviceId + _0x11a0f9 . label + _0x11a0f9 . kind ] || ( 'audio' === _0x11a0f9 . kind && ( _0x11a0f9 . kind = 'audioinput' ) , 'video' === _0x11a0f9 . kind && ( _0x11a0f9 . kind = 'videoinput' ) , _0x11a0f9 . deviceId || ( _0x11a0f9 . deviceId = _0x11a0f9 . id ) , _0x11a0f9 . id || ( _0x11a0f9 . id = _0x11a0f9 . deviceId ) , _0x11a0f9 . label ? ( 'videoinput' !== _0x11a0f9 . kind || _0x1583d5 || ( _0x1583d5 = true ) , 'audioinput' !== _0x11a0f9 . kind || _0x242003 || ( _0x242003 = true ) ) : ( _0x11a0f9 . isCustomLabel = true , 'videoinput' === _0x11a0f9 . kind ? _0x11a0f9 . label = 'Camera ' + ( _0x536d10 . length + 0x1 ) : 'audioinput' === _0x11a0f9 . kind ? _0x11a0f9 . label = 'Microphone ' + ( _0x47e1c4 . length + 0x1 ) : 'audiooutput' === _0x11a0f9 . kind ? _0x11a0f9 . label = 'Speaker ' + ( _0x1e709a . length + 0x1 ) : _0x11a0f9 . label = 'Please invoke getUserMedia once.' , void 0x0 !== _0x444319 && _0x444319 . browser . isChrome && _0x444319 . browser . version >= 0x2e && ! /^(https:|chrome-extension:)$/g . test ( location . protocol || '' ) && 'undefined' != typeof document && 'string' == typeof document . domain && document . domain . search && - 0x1 === document . domain . search ( /localhost|127.0./g ) && ( _0x11a0f9 . label = 'HTTPs is required to get label of this ' + _0x11a0f9 . kind + ' device.' ) ) , 'audioinput' === _0x11a0f9 . kind && ( _0x1e6405 = true , - 0x1 === _0x47e1c4 . indexOf ( _0x11a0f9 ) && _0x47e1c4 . push ( _0x11a0f9 ) ) , 'audiooutput' === _0x11a0f9 . kind && ( _0x20f7ce = true , - 0x1 === _0x1e709a . indexOf ( _0x11a0f9 ) && _0x1e709a . push ( _0x11a0f9 ) ) , 'videoinput' === _0x11a0f9 . kind && ( _0x528a8d = true , - 0x1 === _0x536d10 . indexOf ( _0x11a0f9 ) && _0x536d10 . push ( _0x11a0f9 ) ) , _0x37c2dd . push ( _0x11a0f9 ) , _0x326931 [ _0x11a0f9 . deviceId + _0x11a0f9 . label + _0x11a0f9 . kind ] = _0x11a0f9 ) ;
} ) , void 0x0 !== _0x444319 && ( _0x444319 . MediaDevices = _0x37c2dd , _0x444319 . hasMicrophone = _0x1e6405 , _0x444319 . hasSpeakers = _0x20f7ce , _0x444319 . hasWebcam = _0x528a8d , _0x444319 . isWebsiteHasWebcamPermissions = _0x1583d5 , _0x444319 . isWebsiteHasMicrophonePermissions = _0x242003 , _0x444319 . audioInputDevices = _0x47e1c4 , _0x444319 . audioOutputDevices = _0x1e709a , _0x444319 . videoInputDevices = _0x536d10 ) , _0x5b8353 && _0x5b8353 ( ) ;
} ) ;
} else _0x5b8353 && _0x5b8353 ( ) ;
else _0x5b8353 && _0x5b8353 ( ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
var _0x444319 = window . DetectRTC || { } ;
_0x444319 . browser = function ( ) {
_0xd38ed . appVersion ;
var _0x1056a5 , _0x326931 , _0x2fa590 , _0x21b268 = _0xd38ed . userAgent ,
_0x521a09 = _0xd38ed . appName ,
_0x441e45 = '' + parseFloat ( _0xd38ed . appVersion ) ,
_0x174a5c = parseInt ( _0xd38ed . appVersion , 0xa ) ;
if ( _0x2920ae && ! _0x5e24f4 && - 0x1 !== _0x21b268 . indexOf ( 'CriOS' ) && ( _0x2920ae = ! 0x1 , _0x5e24f4 = true ) , _0xa57f33 ) {
_0x521a09 = 'Opera' ;
try {
_0x174a5c = ( _0x441e45 = _0xd38ed . userAgent . split ( 'OPR/' ) [ 0x1 ] . split ( ' ' ) [ 0x0 ] ) . split ( '.' ) [ 0x0 ] ;
} catch ( _0xbb1615 ) {
_0x441e45 = '0.0.0.0' , _0x174a5c = 0x0 ;
}
} else _0x566860 ? ( ( _0x326931 = _0x21b268 . indexOf ( 'rv:' ) ) > 0x0 ? _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x3 ) : ( _0x326931 = _0x21b268 . indexOf ( 'MSIE' ) , _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x5 ) ) , _0x521a09 = 'IE' ) : _0x5e24f4 ? ( _0x326931 = _0x21b268 . indexOf ( 'Chrome' ) , _0x521a09 = 'Chrome' , _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x7 ) ) : _0x2920ae ? ( _0x326931 = _0x21b268 . indexOf ( 'Safari' ) , _0x521a09 = 'Safari' , _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x7 ) , - 0x1 !== ( _0x326931 = _0x21b268 . indexOf ( 'Version' ) ) && ( _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x8 ) ) , - 0x1 !== _0xd38ed . userAgent . indexOf ( 'Version/' ) && ( _0x441e45 = _0xd38ed . userAgent . split ( 'Version/' ) [ 0x1 ] . split ( ' ' ) [ 0x0 ] ) ) : _0x111853 ? ( _0x326931 = _0x21b268 . indexOf ( 'Firefox' ) , _0x521a09 = 'Firefox' , _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x8 ) ) : ( _0x1056a5 = _0x21b268 . lastIndexOf ( ' ' ) + 0x1 ) < ( _0x326931 = _0x21b268 . lastIndexOf ( '/' ) ) && ( _0x521a09 = _0x21b268 . substring ( _0x1056a5 , _0x326931 ) , _0x441e45 = _0x21b268 . substring ( _0x326931 + 0x1 ) , _0x521a09 . toLowerCase ( ) === _0x521a09 . toUpperCase ( ) && ( _0x521a09 = _0xd38ed . appName ) ) ;
return _0x4ba312 && ( _0x521a09 = 'Edge' , _0x441e45 = _0xd38ed . userAgent . split ( 'Edge/' ) [ 0x1 ] ) , - 0x1 !== ( _0x2fa590 = _0x441e45 . search ( /[; \)]/ ) ) && ( _0x441e45 = _0x441e45 . substring ( 0x0 , _0x2fa590 ) ) , _0x174a5c = parseInt ( '' + _0x441e45 , 0xa ) , isNaN ( _0x174a5c ) && ( _0x441e45 = '' + parseFloat ( _0xd38ed . appVersion ) , _0x174a5c = parseInt ( _0xd38ed . appVersion , 0xa ) ) , {
'fullVersion' : _0x441e45 ,
'version' : _0x174a5c ,
'name' : _0x521a09 ,
'isPrivateBrowsing' : ! 0x1
} ;
} ( ) ,
function ( _0xbf5986 ) {
var _0x326931 ;
try {
if ( window . webkitRequestFileSystem ) window . webkitRequestFileSystem ( window . TEMPORARY , 0x1 , function ( ) {
_0x326931 = ! 0x1 ;
} , function ( _0x57feb9 ) {
_0x326931 = true ;
} ) ;
else if ( window . indexedDB && /Firefox/ . test ( window . navigator . userAgent ) ) {
var _0x2fa590 ;
try {
( _0x2fa590 = window . indexedDB . open ( 'test' ) ) . onerror = function ( ) {
return true ;
} ;
} catch ( _0xe0bac4 ) {
_0x326931 = true ;
}
void 0x0 === _0x326931 && _0x8a78df ( function ( ) {
return 'done' === _0x2fa590 . readyState ;
} , function ( _0x236923 ) {
_0x236923 || ( _0x326931 = ! _0x2fa590 . result ) ;
} ) ;
} else if ( function ( _0x8e13f ) {
var _0x326931 = _0x8e13f . toLowerCase ( ) ;
if ( 0x0 === _0x326931 . indexOf ( 'msie' ) && 0x0 === _0x326931 . indexOf ( 'trident' ) ) return ! 0x1 ;
var _0x2fa590 = /(?:msie|rv:)\s?([\d\.]+)/ . exec ( _0x326931 ) ;
return ! ! ( _0x2fa590 && parseInt ( _0x2fa590 [ 0x1 ] , 0xa ) >= 0xa ) ;
} ( window . navigator . userAgent ) ) {
_0x326931 = ! 0x1 ;
try {
window . indexedDB || ( _0x326931 = true ) ;
} catch ( _0x4d0f1c ) {
_0x326931 = true ;
}
} else if ( window . localStorage && /Safari/ . test ( window . navigator . userAgent ) ) {
try {
window . localStorage . setItem ( 'test' , 0x1 ) ;
} catch ( _0x217100 ) {
_0x326931 = true ;
}
void 0x0 === _0x326931 && ( _0x326931 = ! 0x1 , window . localStorage . removeItem ( 'test' ) ) ;
}
} catch ( _0x54458d ) {
_0x326931 = ! 0x1 ;
}
_0x8a78df ( function ( ) {
return void 0x0 !== _0x326931 ;
} , function ( _0x139aa5 ) {
_0xbf5986 ( _0x326931 ) ;
} ) ;
} ( function ( _0x82ccf2 ) {
_0x444319 . browser . isPrivateBrowsing = ! ! _0x82ccf2 ;
} ) , _0x444319 . browser [ 'is' + _0x444319 . browser . name ] = true , _0x444319 . osName = _0xfabbbb , _0x444319 . osVersion = _0x533b2e ;
'object' === ( void 0x0 === _0x521a09 ? 'undefined' : _0x4ffbab ( _0x521a09 ) ) && 'object' === _0x4ffbab ( _0x521a09 . versions ) && _0x521a09 . versions [ 'node-webkit' ] ;
var _0xb774b1 = ! 0x1 ;
[ 'RTCPeerConnection' , 'webkitRTCPeerConnection' , 'mozRTCPeerConnection' , 'RTCIceGatherer' ] . forEach ( function ( _0x1a220e ) {
_0xb774b1 || _0x1a220e in window && ( _0xb774b1 = true ) ;
} ) , _0x444319 . isWebRTCSupported = _0xb774b1 , _0x444319 . isORTCSupported = 'undefined' != typeof RTCIceGatherer ;
var _0x20eef3 = ! 0x1 ;
( _0x444319 . browser . isChrome && _0x444319 . browser . version >= 0x23 ? _0x20eef3 = true : _0x444319 . browser . isFirefox && _0x444319 . browser . version >= 0x22 ? _0x20eef3 = true : _0x444319 . browser . isEdge && _0x444319 . browser . version >= 0x11 ? _0x20eef3 = true : 'Android' === _0x444319 . osName && _0x444319 . browser . isChrome && ( _0x20eef3 = true ) , /^(https:|chrome-extension:)$/g . test ( location . protocol || '' ) ) || ( 'undefined' != typeof document && 'string' == typeof document . domain && document . domain . search && - 0x1 === document . domain . search ( /localhost|127.0./g ) && ( _0x444319 . browser . isChrome || _0x444319 . browser . isEdge || _0x444319 . browser . isOpera ) ? _0x20eef3 = ! 0x1 : _0x444319 . browser . isFirefox && ( _0x20eef3 = ! 0x1 ) ) ;
_0x444319 . isScreenCapturingSupported = _0x20eef3 ;
var _0x41f5bd = {
'isSupported' : ! 0x1 ,
'isCreateMediaStreamSourceSupported' : ! 0x1
} ;
[ 'AudioContext' , 'webkitAudioContext' , 'mozAudioContext' , 'msAudioContext' ] . forEach ( function ( _0x6f8ee8 ) {
_0x41f5bd . isSupported || _0x6f8ee8 in window && ( _0x41f5bd . isSupported = true , window [ _0x6f8ee8 ] && 'createMediaStreamSource' in window [ _0x6f8ee8 ] . prototype && ( _0x41f5bd . isCreateMediaStreamSourceSupported = true ) ) ;
} ) , _0x444319 . isAudioContextSupported = _0x41f5bd . isSupported , _0x444319 . isCreateMediaStreamSourceSupported = _0x41f5bd . isCreateMediaStreamSourceSupported ;
var _0x3c8f54 = ! 0x1 ;
_0x444319 . browser . isChrome && _0x444319 . browser . version > 0x1f && ( _0x3c8f54 = true ) , _0x444319 . isRtpDataChannelsSupported = _0x3c8f54 ;
var _0x4e0543 = ! 0x1 ;
_0x444319 . browser . isFirefox && _0x444319 . browser . version > 0x1c ? _0x4e0543 = true : _0x444319 . browser . isChrome && _0x444319 . browser . version > 0x19 ? _0x4e0543 = true : _0x444319 . browser . isOpera && _0x444319 . browser . version >= 0xb && ( _0x4e0543 = true ) , _0x444319 . isSctpDataChannelsSupported = _0x4e0543 , _0x444319 . isMobileDevice = _0x4aed46 ;
var _0x27c37d = ! 0x1 ;
_0xd38ed . getUserMedia ? _0x27c37d = true : _0xd38ed . mediaDevices && _0xd38ed . mediaDevices . getUserMedia && ( _0x27c37d = true ) , _0x444319 . browser . isChrome && _0x444319 . browser . version >= 0x2e && ! /^(https:|chrome-extension:)$/g . test ( location . protocol || '' ) && 'undefined' != typeof document && 'string' == typeof document . domain && document . domain . search && - 0x1 === document . domain . search ( /localhost|127.0./g ) && ( _0x27c37d = 'Requires HTTPs' ) , 'Nodejs' === _0x444319 . osName && ( _0x27c37d = ! 0x1 ) , _0x444319 . isGetUserMediaSupported = _0x27c37d ;
var _0x5d3017 , _0x4c1193 , _0x5997d1 , _0x4bd937 = '' ;
screen . width && ( _0x4bd937 += ( screen . width ? screen . width : '' ) + ' x ' + ( screen . height ? screen . height : '' ) ) ;
_0x444319 . displayResolution = _0x4bd937 , _0x444319 . displayAspectRatio = ( _0x5d3017 = screen . width , _0x4c1193 = screen . height , _0x5997d1 = function _0x1056a5 ( _0x9f77a2 , _0x157ff4 ) {
return 0x0 == _0x157ff4 ? _0x9f77a2 : _0x1056a5 ( _0x157ff4 , _0x9f77a2 % _0x157ff4 ) ;
} ( _0x5d3017 , _0x4c1193 ) , _0x5d3017 / _0x5997d1 / ( _0x4c1193 / _0x5997d1 ) ) . toFixed ( 0x2 ) , _0x444319 . isCanvasSupportsStreamCapturing = _0x233149 , _0x444319 . isVideoSupportsStreamCapturing = _0x467217 , 'Chrome' == _0x444319 . browser . name && _0x444319 . browser . version >= 0x35 && ( _0x444319 . isCanvasSupportsStreamCapturing || ( _0x444319 . isCanvasSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features' ) , _0x444319 . isVideoSupportsStreamCapturing || ( _0x444319 . isVideoSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features' ) ) , _0x444319 . DetectLocalIPAddress = function ( _0x527d6a , _0x3e6338 ) {
if ( _0x444319 . isWebRTCSupported ) {
var _0x2fa590 = true ,
_0x21b268 = true ;
! function ( _0x169ed4 , _0x457465 ) {
if ( 'undefined' == typeof document || 'function' != typeof document . getElementById ) return ;
var _0x2fa590 = { } ,
_0x21b268 = window . RTCPeerConnection || window . mozRTCPeerConnection || window . webkitRTCPeerConnection ;
if ( ! _0x21b268 ) {
var _0x521a09 = document . getElementById ( 'iframe' ) ;
if ( ! _0x521a09 ) return ;
var _0x57dce2 = _0x521a09 . contentWindow ;
_0x21b268 = _0x57dce2 . RTCPeerConnection || _0x57dce2 . mozRTCPeerConnection || _0x57dce2 . webkitRTCPeerConnection ;
}
if ( ! _0x21b268 ) return ;
var _0x1ebe24 = null ;
'Chrome' === _0x444319 . browser && _0x444319 . browser . version < 0x3a && ( _0x1ebe24 = {
'optional' : [ {
'RtpDataChannels' : true
} ]
} ) ;
var _0x355289 = new _0x21b268 ( {
'iceServers' : [ {
'urls' : 'stun:stun.l.google.com:19302'
} ]
} , _0x1ebe24 ) ;
_0x457465 && ( _0x355289 . addStream ? _0x355289 . addStream ( _0x457465 ) : _0x355289 . addTrack && _0x457465 . getTracks ( ) [ 0x0 ] && _0x355289 . addTrack ( _0x457465 . getTracks ( ) [ 0x0 ] , _0x457465 ) ) ;
function _0x367cf9 ( _0x23abd1 ) {
var _0x21b268 = _0x39bfae . exec ( _0x23abd1 ) ;
if ( _0x21b268 ) {
var _0x521a09 = _0x21b268 [ 0x1 ] ,
_0x2faf0b = _0x23abd1 . match ( _0x327730 ) ;
void 0x0 === _0x2fa590 [ _0x521a09 ] && _0x169ed4 ( _0x521a09 , _0x2faf0b , true ) , _0x2fa590 [ _0x521a09 ] = true ;
}
}
if ( _0x355289 . onicecandidate = function ( _0xd7031e ) {
_0xd7031e . candidate && _0x367cf9 ( _0xd7031e . candidate . candidate ) ;
} , ! _0x457465 ) try {
_0x355289 . createDataChannel ( 'sctp' , { } ) ;
} catch ( _0x1edf47 ) { }
_0x444319 . isPromisesSupported ? _0x355289 . createOffer ( ) . then ( function ( _0xedec09 ) {
_0x355289 . setLocalDescription ( _0xedec09 ) . then ( _0x45699b ) ;
} ) : _0x355289 . createOffer ( function ( _0xf8592b ) {
_0x355289 . setLocalDescription ( _0xf8592b , _0x45699b , function ( ) { } ) ;
} , function ( ) { } ) ;
function _0x45699b ( ) {
_0x355289 . localDescription . sdp . split ( '\n' ) . forEach ( function ( _0x4e78ca ) {
0x0 === _0x4e78ca . indexOf ( 'a=candidate:' ) && _0x367cf9 ( _0x4e78ca ) ;
} ) ;
}
} ( function ( _0x2a2630 ) {
_0x2a2630 . match ( _0x327730 ) ? _0x527d6a ( 'Local: ' + _0x2a2630 , _0x2fa590 = ! 0x1 , _0x21b268 ) : _0x2a2630 . match ( _0xe1f7d ) ? _0x527d6a ( 'Public: ' + _0x2a2630 , _0x2fa590 , _0x21b268 = ! 0x1 ) : _0x527d6a ( 'Public: ' + _0x2a2630 , _0x2fa590 , _0x21b268 ) ;
} , _0x3e6338 ) ;
}
} , _0x444319 . isWebSocketsSupported = 'WebSocket' in window && 0x2 === window . WebSocket . CLOSING , _0x444319 . isWebSocketsBlocked = ! _0x444319 . isWebSocketsSupported , 'Nodejs' === _0x444319 . osName && ( _0x444319 . isWebSocketsSupported = true , _0x444319 . isWebSocketsBlocked = ! 0x1 ) , _0x444319 . checkWebSocketsSupport = function ( _0x1102a1 ) {
_0x1102a1 = _0x1102a1 || function ( ) { } ;
try {
var _0x326931 , _0x2fa590 = new WebSocket ( 'wss://echo.websocket.org:443/' ) ;
_0x2fa590 . onopen = function ( ) {
_0x444319 . isWebSocketsBlocked = ! 0x1 , _0x326931 = new Date ( ) . getTime ( ) , _0x2fa590 . send ( 'ping' ) ;
} , _0x2fa590 . onmessage = function ( ) {
_0x444319 . WebsocketLatency = new Date ( ) . getTime ( ) - _0x326931 + 'ms' , _0x1102a1 ( ) , _0x2fa590 . close ( ) , _0x2fa590 = null ;
} , _0x2fa590 . onerror = function ( ) {
_0x444319 . isWebSocketsBlocked = true , _0x1102a1 ( ) ;
} ;
} catch ( _0x11ac18 ) {
_0x444319 . isWebSocketsBlocked = true , _0x1102a1 ( ) ;
}
} , _0x444319 . load = function ( _0x83e5e9 ) {
_0x5a290a ( _0x83e5e9 = _0x83e5e9 || function ( ) { } ) ;
} , _0x444319 . MediaDevices = void 0x0 !== _0x37c2dd ? _0x37c2dd : [ ] , _0x444319 . hasMicrophone = _0x1e6405 , _0x444319 . hasSpeakers = _0x20f7ce , _0x444319 . hasWebcam = _0x528a8d , _0x444319 . isWebsiteHasWebcamPermissions = _0x1583d5 , _0x444319 . isWebsiteHasMicrophonePermissions = _0x242003 , _0x444319 . audioInputDevices = _0x47e1c4 , _0x444319 . audioOutputDevices = _0x1e709a , _0x444319 . videoInputDevices = _0x536d10 ;
var _0x5da020 = ! 0x1 ;
'undefined' != typeof document && 'function' == typeof document . createElement && 'setSinkId' in document . createElement ( 'video' ) && ( _0x5da020 = true ) , _0x444319 . isSetSinkIdSupported = _0x5da020 ;
var _0x1b0b81 = ! 0x1 ;
_0x444319 . browser . isFirefox && 'undefined' != typeof mozRTCPeerConnection ? 'getSenders' in mozRTCPeerConnection . prototype && ( _0x1b0b81 = true ) : _0x444319 . browser . isChrome && 'undefined' != typeof webkitRTCPeerConnection && 'getSenders' in webkitRTCPeerConnection . prototype && ( _0x1b0b81 = true ) , _0x444319 . isRTPSenderReplaceTracksSupported = _0x1b0b81 ;
var _0x83ded = ! 0x1 ;
_0x444319 . browser . isFirefox && _0x444319 . browser . version > 0x26 && ( _0x83ded = true ) , _0x444319 . isRemoteStreamProcessingSupported = _0x83ded ;
var _0x51520c = ! 0x1 ;
void 0x0 !== _0x1d01b4 && 'applyConstraints' in _0x1d01b4 . prototype && ( _0x51520c = true ) , _0x444319 . isApplyConstraintsSupported = _0x51520c ;
var _0x298a09 = ! 0x1 ;
_0x444319 . browser . isFirefox && _0x444319 . browser . version >= 0x2b && ( _0x298a09 = true ) , _0x444319 . isMultiMonitorScreenCapturingSupported = _0x298a09 , _0x444319 . isPromisesSupported = ! ! ( 'Promise' in window ) , _0x444319 . version = '1.3.7' , void 0x0 === _0x444319 && ( window . DetectRTC = { } ) ;
var _0x187d8a = window . MediaStream ;
void 0x0 === _0x187d8a && 'undefined' != typeof webkitMediaStream && ( _0x187d8a = webkitMediaStream ) , _0x444319 . MediaStream = void 0x0 !== _0x187d8a && 'function' == typeof _0x187d8a && Object . keys ( _0x187d8a . prototype ) , _0x444319 . MediaStreamTrack = void 0x0 !== _0x1d01b4 && Object . keys ( _0x1d01b4 . prototype ) ;
var _0x5898a3 = window . RTCPeerConnection || window . mozRTCPeerConnection || window . webkitRTCPeerConnection ;
_0x444319 . RTCPeerConnection = void 0x0 !== _0x5898a3 && Object . keys ( _0x5898a3 . prototype ) , window . DetectRTC = _0x444319 , 'function' == typeof define && _0x2fa590 ( 0x90 ) && define ( 'DetectRTC' , [ ] , function ( ) {
return _0x444319 ;
} ) ;
} ( ) , 'undefined' != typeof cordova && ( DetectRTC . isMobileDevice = true , DetectRTC . browser . name = 'Chrome' ) , navigator && navigator . userAgent && - 0x1 !== navigator . userAgent . indexOf ( 'Crosswalk' ) && ( DetectRTC . isMobileDevice = true , DetectRTC . browser . name = 'Chrome' ) , window . addEventListener || ( window . addEventListener = function ( _0x1e341e , _0x410d8a , _0x164ba3 ) {
_0x1e341e . attachEvent && _0x1e341e . attachEvent ( 'on' + _0x410d8a , _0x164ba3 ) ;
} ) , window . attachEventListener = function ( _0x28f783 , _0xf32336 , _0x5ddd69 , _0x1e62b3 ) {
_0x28f783 . addEventListener ( _0xf32336 , _0x5ddd69 , _0x1e62b3 ) ;
} ;
var _0x1d809b = window . MediaStream ;
function _0x93df62 ( _0x128905 , _0x2d6fa0 ) {
return ( ! _0x128905 . session . audio || 'two-way' !== _0x128905 . session . audio ) && ( 'Firefox' === DetectRTC . browser . name && ! 0x1 !== _0x2d6fa0 || ! ( 'Chrome' !== DetectRTC . browser . name || DetectRTC . browser . version < 0x32 ) && ( true === typeof _0x2d6fa0 || ! ( void 0x0 !== _0x2d6fa0 || ! _0x128905 . session . audio || ! _0x128905 . session . screen || _0x128905 . session . video ) && ( _0x2d6fa0 = true , true ) ) ) ;
}
function _0x405170 ( _0x53fd0a ) {
return 'Firefox' === DetectRTC . browser . name || 'Chrome' === DetectRTC . browser . name && {
'mandatory' : {
'chromeMediaSource' : _0x53fd0a . mandatory . chromeMediaSource ,
'chromeMediaSourceId' : _0x53fd0a . mandatory . chromeMediaSourceId
}
} ;
}
function _0x2cbba5 ( _0x5f06c5 , _0x3f8518 ) {
return _0x5f06c5 && _0x5f06c5 . getTracks ? _0x5f06c5 . getTracks ( ) . filter ( function ( _0x12aae8 ) {
return _0x12aae8 . kind === ( _0x3f8518 || 'audio' ) ;
} ) : [ ] ;
}
function _0x5407aa ( ) {
var _0x1056a5 = ! 0x1 ;
try {
if ( 'undefined' == typeof RTCRtpTransceiver ) return ! 0x1 ;
if ( ! ( 'currentDirection' in RTCRtpTransceiver . prototype ) ) return ! 0x1 ;
var _0x326931 = new _0x2a4be1 ( ) ;
try {
_0x326931 . addTransceiver ( 'audio' ) , _0x1056a5 = true ;
} catch ( _0x365290 ) { }
_0x326931 . close ( ) ;
} catch ( _0x4e12a1 ) {
_0x1056a5 = ! 0x1 ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
2022-11-28 01:35:30 +00:00
return _0x1056a5 && function ( ) {
var _0x1056a5 = ! 0x1 ;
try {
var _0x326931 = new _0x2a4be1 ( {
'sdpSemantics' : 'unified-plan'
} ) ;
try {
var _0x2fa590 = _0x326931 . getConfiguration ( ) ;
_0x1056a5 = 'unified-plan' == _0x2fa590 . sdpSemantics || ( _0x2fa590 . sdpSemantics , ! 0x1 ) ;
} catch ( _0x1ddaa9 ) {
_0x1056a5 = ! 0x1 ;
}
} catch ( _0x30213a ) {
_0x1056a5 = ! 0x1 ;
}
return _0x1056a5 ;
} ( ) ;
}
function _0x2eda5b ( ) {
if ( 'undefined' != typeof cordova && void 0x0 !== cordova . plugins && void 0x0 !== cordova . plugins . iosrtc ) {
var _0x1056a5 = cordova . plugins . iosrtc ;
window . webkitRTCPeerConnection = _0x1056a5 . RTCPeerConnection , window . RTCSessionDescription = _0x1056a5 . RTCSessionDescription , window . RTCIceCandidate = _0x1056a5 . RTCIceCandidate , window . MediaStream = _0x1056a5 . MediaStream , window . MediaStreamTrack = _0x1056a5 . MediaStreamTrack , navigator . getUserMedia = navigator . webkitGetUserMedia = _0x1056a5 . getUserMedia , _0x1056a5 . debug . enable ( 'iosrtc*' ) , 'function' == typeof _0x1056a5 . selectAudioOutput && _0x1056a5 . selectAudioOutput ( window . iOSDefaultAudioOutputDevice || 'speaker' ) , _0x1056a5 . registerGlobals ( ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
}
}
2022-11-28 01:35:30 +00:00
void 0x0 === _0x1d809b && 'undefined' != typeof webkitMediaStream && ( _0x1d809b = webkitMediaStream ) , void 0x0 !== _0x1d809b && ( 'stop' in _0x1d809b . prototype || ( _0x1d809b . prototype . stop = function ( ) {
this . getTracks ( ) . forEach ( function ( _0x484c2d ) {
_0x484c2d . stop ( ) ;
} ) ;
} ) ) , window . iOSDefaultAudioOutputDevice = window . iOSDefaultAudioOutputDevice || 'speaker' , document . addEventListener ( 'deviceready' , _0x2eda5b , ! 0x1 ) , _0x2eda5b ( ) ;
var _0x2a4be1 , _0x394dad = { } ;
function _0xe7bfb2 ( _0x5b2014 ) {
return {
'OfferToReceiveAudio' : ! ! _0x5b2014 . OfferToReceiveAudio ,
'OfferToReceiveVideo' : ! ! _0x5b2014 . OfferToReceiveVideo
} ;
}
void 0x0 !== window . RTCPeerConnection ? _0x2a4be1 = window . RTCPeerConnection : 'undefined' != typeof mozRTCPeerConnection ? _0x2a4be1 = mozRTCPeerConnection : 'undefined' != typeof webkitRTCPeerConnection && ( _0x2a4be1 = webkitRTCPeerConnection ) ;
var _0x28d3c1 = window . RTCSessionDescription || window . mozRTCSessionDescription ,
_0x437c06 = window . RTCIceCandidate || window . mozRTCIceCandidate ,
_0x1d01b4 = window . MediaStreamTrack ;
function _0x4c6fdb ( _0xeb3993 ) {
if ( void 0x0 !== window . RTCPeerConnection ? _0x2a4be1 = window . RTCPeerConnection : 'undefined' != typeof mozRTCPeerConnection ? _0x2a4be1 = mozRTCPeerConnection : 'undefined' != typeof webkitRTCPeerConnection && ( _0x2a4be1 = webkitRTCPeerConnection ) , _0x28d3c1 = window . RTCSessionDescription || window . mozRTCSessionDescription , _0x437c06 = window . RTCIceCandidate || window . mozRTCIceCandidate , _0x1d01b4 = window . MediaStreamTrack , ! _0x2a4be1 ) throw 'WebRTC 1.0 (RTCPeerConnection) API are NOT available in this browser.' ;
var _0x326931 = _0xeb3993 . rtcMultiConnection ;
this . extra = _0xeb3993 . remoteSdp ? _0xeb3993 . remoteSdp . extra : _0x326931 . extra , this . userid = _0xeb3993 . userid , this . streams = [ ] , this . channels = _0xeb3993 . channels || [ ] , this . connectionDescription = _0xeb3993 . connectionDescription , this . addStream = function ( _0x500ec1 ) {
_0x326931 . addStream ( _0x500ec1 , _0x2fa590 . userid ) ;
} , this . removeStream = function ( _0x1bebfb ) {
_0x326931 . removeStream ( _0x1bebfb , _0x2fa590 . userid ) ;
} ;
var _0x2fa590 = this ;
_0xeb3993 . remoteSdp && ( this . connectionDescription = _0xeb3993 . remoteSdp . connectionDescription ) ;
var _0x21b268 , _0x521a09 = { } ;
_0x394dad . sdpConstraints = _0xe7bfb2 ( {
'OfferToReceiveAudio' : true ,
'OfferToReceiveVideo' : true
} ) ;
var _0x53652f = ! ! _0xeb3993 . renegotiatingPeer ;
_0xeb3993 . remoteSdp && ( _0x53652f = ! ! _0xeb3993 . remoteSdp . renegotiatingPeer ) ;
var _0x5aa3f5 = [ ] ;
if ( _0x326931 . attachStreams . forEach ( function ( _0x37ab43 ) {
_0x37ab43 && _0x5aa3f5 . push ( _0x37ab43 ) ;
} ) , _0x53652f ) _0x21b268 = _0xeb3993 . peerRef ;
else {
var _0x3802e4 = 'all' ;
( _0x326931 . candidates . turn || _0x326931 . candidates . relay ) && ( _0x326931 . candidates . stun || _0x326931 . candidates . reflexive || _0x326931 . candidates . host || ( _0x3802e4 = 'relay' ) ) ;
try {
var _0xa206a4 = {
'iceServers' : _0x326931 . iceServers ,
'iceTransportPolicy' : _0x326931 . iceTransportPolicy || _0x3802e4
} ;
void 0x0 !== _0x326931 . iceCandidatePoolSize && ( _0xa206a4 . iceCandidatePoolSize = _0x326931 . iceCandidatePoolSize ) , void 0x0 !== _0x326931 . bundlePolicy && ( _0xa206a4 . bundlePolicy = _0x326931 . bundlePolicy ) , void 0x0 !== _0x326931 . rtcpMuxPolicy && ( _0xa206a4 . rtcpMuxPolicy = _0x326931 . rtcpMuxPolicy ) , 'Chrome' === DetectRTC . browser . name && ( _0xa206a4 . sdpSemantics = _0x326931 . sdpSemantics || 'unified-plan' ) , _0x326931 . iceServers && _0x326931 . iceServers . length || ( _0xa206a4 = null , _0x326931 . optionalArgument = null ) , _0x21b268 = new _0x2a4be1 ( _0xa206a4 , _0x326931 . optionalArgument ) ;
} catch ( _0x2cdc2c ) {
try {
_0xa206a4 = {
'iceServers' : _0x326931 . iceServers
} ;
_0x21b268 = new _0x2a4be1 ( _0xa206a4 ) ;
} catch ( _0x1cd6f4 ) {
_0x21b268 = new _0x2a4be1 ( ) ;
}
}
} ! _0x21b268 . getRemoteStreams && _0x21b268 . getReceivers && ( _0x21b268 . getRemoteStreams = function ( ) {
var _0xeb3993 = new _0x1d809b ( ) ;
return _0x21b268 . getReceivers ( ) . forEach ( function ( _0x210865 ) {
_0xeb3993 . addTrack ( _0x210865 . track ) ;
} ) , [ _0xeb3993 ] ;
} ) , ! _0x21b268 . getLocalStreams && _0x21b268 . getSenders && ( _0x21b268 . getLocalStreams = function ( ) {
var _0xeb3993 = new _0x1d809b ( ) ;
return _0x21b268 . getSenders ( ) . forEach ( function ( _0x4bc1bd ) {
_0xeb3993 . addTrack ( _0x4bc1bd . track ) ;
} ) , [ _0xeb3993 ] ;
} ) , _0x21b268 . onicecandidate = function ( _0x345d0e ) {
if ( _0x345d0e . candidate ) _0x326931 . trickleIce && _0xeb3993 . onLocalCandidate ( {
'candidate' : _0x345d0e . candidate . candidate ,
'sdpMid' : _0x345d0e . candidate . sdpMid ,
'sdpMLineIndex' : _0x345d0e . candidate . sdpMLineIndex
} ) ;
else if ( ! _0x326931 . trickleIce ) {
var _0x5cad6b = _0x21b268 . localDescription ;
_0xeb3993 . onLocalSdp ( {
'type' : _0x5cad6b . type ,
'sdp' : _0x5cad6b . sdp ,
'remotePeerSdpConstraints' : _0xeb3993 . remotePeerSdpConstraints || ! 0x1 ,
'renegotiatingPeer' : ! ! _0xeb3993 . renegotiatingPeer || ! 0x1 ,
'connectionDescription' : _0x2fa590 . connectionDescription ,
'dontGetRemoteStream' : ! ! _0xeb3993 . dontGetRemoteStream ,
'extra' : _0x326931 ? _0x326931 . extra : { } ,
'streamsToShare' : _0x5ed0e1
} ) ;
}
} , _0x5aa3f5 . forEach ( function ( _0x20e839 ) {
_0xeb3993 . remoteSdp && _0xeb3993 . remoteSdp . remotePeerSdpConstraints && _0xeb3993 . remoteSdp . remotePeerSdpConstraints . dontGetRemoteStream || _0xeb3993 . dontAttachLocalStream || ( _0x20e839 = _0x326931 . beforeAddingStream ( _0x20e839 , _0x2fa590 ) ) && ( _0x21b268 . getLocalStreams ( ) . forEach ( function ( _0x37c67d ) {
_0x20e839 && _0x37c67d . id == _0x20e839 . id && ( _0x20e839 = null ) ;
} ) , _0x20e839 && _0x20e839 . getTracks && _0x20e839 . getTracks ( ) . forEach ( function ( _0x891f5b ) {
try {
_0x21b268 . addTrack ( _0x891f5b , _0x20e839 ) ;
} catch ( _0x13e107 ) { }
} ) ) ;
} ) , _0x21b268 . oniceconnectionstatechange = _0x21b268 . onsignalingstatechange = function ( ) {
var _0x521a09 = _0x2fa590 . extra ;
_0x326931 . peers [ _0x2fa590 . userid ] && ( _0x521a09 = _0x326931 . peers [ _0x2fa590 . userid ] . extra || _0x521a09 ) , _0x21b268 && ( _0xeb3993 . onPeerStateChanged ( {
'iceConnectionState' : _0x21b268 . iceConnectionState ,
'iceGatheringState' : _0x21b268 . iceGatheringState ,
'signalingState' : _0x21b268 . signalingState ,
'extra' : _0x521a09 ,
'userid' : _0x2fa590 . userid
} ) , _0x21b268 && _0x21b268 . iceConnectionState && - 0x1 !== _0x21b268 . iceConnectionState . search ( /closed|failed/gi ) && _0x2fa590 . streams instanceof Array && _0x2fa590 . streams . forEach ( function ( _0x5d55e7 ) {
var _0x2fa590 = _0x326931 . streamEvents [ _0x5d55e7 . id ] || {
'streamid' : _0x5d55e7 . id ,
'stream' : _0x5d55e7 ,
'type' : 'remote'
} ;
_0x326931 . onstreamended ( _0x2fa590 ) ;
} ) ) ;
} ;
var _0x57365f = {
'OfferToReceiveAudio' : ! ! _0x5aa3f5 . length ,
'OfferToReceiveVideo' : ! ! _0x5aa3f5 . length
} ;
_0xeb3993 . localPeerSdpConstraints && ( _0x57365f = _0xeb3993 . localPeerSdpConstraints ) , _0x394dad . sdpConstraints = _0xe7bfb2 ( _0x57365f ) ;
var _0x7e19c5 = { } ;
_0x21b268 . ontrack = function ( _0x5f3745 ) {
if ( _0x5f3745 && 'track' === _0x5f3745 . type )
if ( _0x5f3745 . stream = _0x5f3745 . streams [ _0x5f3745 . streams . length - 0x1 ] , _0x5f3745 . stream . id || ( _0x5f3745 . stream . id = _0x5f3745 . track . id ) , _0x7e19c5 [ _0x5f3745 . stream . id ] && 'Safari' !== DetectRTC . browser . name ) _0x5f3745 . track && ( _0x5f3745 . track . onended = function ( ) {
_0x21b268 . onremovestream ( _0x5f3745 ) ;
} ) ;
else {
_0x7e19c5 [ _0x5f3745 . stream . id ] = _0x5f3745 . stream . id ;
var _0x2fa590 = { } ;
_0xeb3993 . remoteSdp && _0xeb3993 . remoteSdp . streamsToShare ? _0x2fa590 = _0xeb3993 . remoteSdp . streamsToShare : _0xeb3993 . streamsToShare && ( _0x2fa590 = _0xeb3993 . streamsToShare ) ;
var _0x3dbe04 = _0x2fa590 [ _0x5f3745 . stream . id ] ;
_0x3dbe04 ? ( _0x5f3745 . stream . isAudio = _0x3dbe04 . isAudio , _0x5f3745 . stream . isVideo = _0x3dbe04 . isVideo , _0x5f3745 . stream . isScreen = _0x3dbe04 . isScreen ) : ( _0x5f3745 . stream . isVideo = ! ! _0x2cbba5 ( _0x5f3745 . stream , 'video' ) . length , _0x5f3745 . stream . isAudio = ! _0x5f3745 . stream . isVideo , _0x5f3745 . stream . isScreen = ! 0x1 ) , _0x5f3745 . stream . streamid = _0x5f3745 . stream . id , _0x521a09 [ _0x5f3745 . stream . id ] = _0x5f3745 . stream , _0xeb3993 . onRemoteStream ( _0x5f3745 . stream ) , _0x5f3745 . stream . getTracks ( ) . forEach ( function ( _0x4eaf37 ) {
_0x4eaf37 . onended = function ( ) {
_0x21b268 . onremovestream ( _0x5f3745 ) ;
} ;
} ) , _0x5f3745 . stream . onremovetrack = function ( ) {
_0x21b268 . onremovestream ( _0x5f3745 ) ;
} ;
}
} , _0x21b268 . onremovestream = function ( _0x5131d7 ) {
_0x5131d7 . stream . streamid = _0x5131d7 . stream . id , _0x521a09 [ _0x5131d7 . stream . id ] && delete _0x521a09 [ _0x5131d7 . stream . id ] , _0xeb3993 . onRemoteStreamRemoved ( _0x5131d7 . stream ) ;
} , 'function' != typeof _0x21b268 . removeStream && ( _0x21b268 . removeStream = function ( _0x659c28 ) {
_0x659c28 . getTracks ( ) . forEach ( function ( _0x592b51 ) {
_0x21b268 . removeTrack ( _0x592b51 , _0x659c28 ) ;
} ) ;
} ) , this . addRemoteCandidate = function ( _0x3baf5e ) {
_0x21b268 . addIceCandidate ( new _0x437c06 ( _0x3baf5e ) ) ;
} , this . addRemoteSdp = function ( _0x5132c2 , _0x2483a6 ) {
_0x2483a6 = _0x2483a6 || function ( ) { } , 'Safari' !== DetectRTC . browser . name && ( _0x5132c2 . sdp = _0x326931 . processSdp ( _0x5132c2 . sdp ) ) , _0x21b268 . setRemoteDescription ( new _0x28d3c1 ( _0x5132c2 ) ) . then ( _0x2483a6 , function ( _0xe5feda ) {
_0x326931 . enableLogs && console . error ( 'setRemoteDescription failed' , '\n' , _0xe5feda , '\n' , _0x5132c2 . sdp ) , _0x2483a6 ( ) ;
} ) . catch ( function ( _0x3f508b ) {
_0x326931 . enableLogs && console . error ( 'setRemoteDescription failed' , '\n' , _0x3f508b , '\n' , _0x5132c2 . sdp ) , _0x2483a6 ( ) ;
} ) ;
} ;
var _0x2c7e5e = true ;
function _0x2e887d ( _0xfe9b95 ) {
_0xfe9b95 . binaryType = 'arraybuffer' , _0xfe9b95 . onmessage = function ( _0x4397bd ) {
_0xeb3993 . onDataChannelMessage ( _0x4397bd . data ) ;
} , _0xfe9b95 . onopen = function ( ) {
_0xeb3993 . onDataChannelOpened ( _0xfe9b95 ) ;
} , _0xfe9b95 . onerror = function ( _0xa12ba0 ) {
_0xeb3993 . onDataChannelError ( _0xa12ba0 ) ;
} , _0xfe9b95 . onclose = function ( _0x30e29d ) {
_0xeb3993 . onDataChannelClosed ( _0x30e29d ) ;
} , _0xfe9b95 . internalSend = _0xfe9b95 . send , _0xfe9b95 . send = function ( _0x2c62da ) {
'open' === _0xfe9b95 . readyState && _0xfe9b95 . internalSend ( _0x2c62da ) ;
} , _0x21b268 . channel = _0xfe9b95 ;
}
_0xeb3993 . remoteSdp && ( _0x2c7e5e = ! 0x1 ) , this . createDataChannel = function ( ) {
_0x2e887d ( _0x21b268 . createDataChannel ( 'sctp' , { } ) ) ;
} , true !== _0x326931 . session . data || _0x53652f || ( _0x2c7e5e ? this . createDataChannel ( ) : _0x21b268 . ondatachannel = function ( _0x4c5e51 ) {
_0x2e887d ( _0x4c5e51 . channel ) ;
} ) , this . enableDisableVideoEncoding = function ( _0x3d2379 ) {
var _0x326931 ;
if ( _0x21b268 . getSenders ( ) . forEach ( function ( _0x4212ea ) {
_0x326931 || 'video' !== _0x4212ea . track . kind || ( _0x326931 = _0x4212ea ) ;
} ) , _0x326931 && _0x326931 . getParameters ) {
var _0x2fa590 = _0x326931 . getParameters ( ) ;
_0x2fa590 . encodings [ 0x1 ] && ( _0x2fa590 . encodings [ 0x1 ] . active = ! ! _0x3d2379 ) , _0x2fa590 . encodings [ 0x2 ] && ( _0x2fa590 . encodings [ 0x2 ] . active = ! ! _0x3d2379 ) , _0x326931 . setParameters ( _0x2fa590 ) ;
}
} , _0xeb3993 . remoteSdp && ( _0xeb3993 . remoteSdp . remotePeerSdpConstraints && ( _0x57365f = _0xeb3993 . remoteSdp . remotePeerSdpConstraints ) , _0x394dad . sdpConstraints = _0xe7bfb2 ( _0x57365f ) , this . addRemoteSdp ( _0xeb3993 . remoteSdp , function ( ) {
_0x308f2d ( 'createAnswer' ) ;
} ) ) , 'two-way' != _0x326931 . session . audio && 'two-way' != _0x326931 . session . video && 'two-way' != _0x326931 . session . screen || ( _0x394dad . sdpConstraints = _0xe7bfb2 ( {
'OfferToReceiveAudio' : 'two-way' == _0x326931 . session . audio || _0xeb3993 . remoteSdp && _0xeb3993 . remoteSdp . remotePeerSdpConstraints && _0xeb3993 . remoteSdp . remotePeerSdpConstraints . OfferToReceiveAudio ,
'OfferToReceiveVideo' : 'two-way' == _0x326931 . session . video || 'two-way' == _0x326931 . session . screen || _0xeb3993 . remoteSdp && _0xeb3993 . remoteSdp . remotePeerSdpConstraints && _0xeb3993 . remoteSdp . remotePeerSdpConstraints . OfferToReceiveAudio
2022-11-03 23:53:19 +00:00
} ) ) ;
2022-11-28 01:35:30 +00:00
var _0x5ed0e1 = { } ;
function _0x308f2d ( _0x41a457 ) {
_0x21b268 [ _0x41a457 ] ( _0x394dad . sdpConstraints ) . then ( function ( _0x2f9b8b ) {
'Safari' !== DetectRTC . browser . name && ( _0x2f9b8b . sdp = _0x326931 . processSdp ( _0x2f9b8b . sdp ) ) , _0x21b268 . setLocalDescription ( _0x2f9b8b ) . then ( function ( ) {
_0x326931 . trickleIce && ( _0xeb3993 . onLocalSdp ( {
'type' : _0x2f9b8b . type ,
'sdp' : _0x2f9b8b . sdp ,
'remotePeerSdpConstraints' : _0xeb3993 . remotePeerSdpConstraints || ! 0x1 ,
'renegotiatingPeer' : ! ! _0xeb3993 . renegotiatingPeer || ! 0x1 ,
'connectionDescription' : _0x2fa590 . connectionDescription ,
'dontGetRemoteStream' : ! ! _0xeb3993 . dontGetRemoteStream ,
'extra' : _0x326931 ? _0x326931 . extra : { } ,
'streamsToShare' : _0x5ed0e1
} ) , _0x326931 . onSettingLocalDescription ( _0x2fa590 ) ) ;
} , function ( _0x41064c ) {
_0x326931 . enableLogs && console . error ( 'setLocalDescription error' , _0x41064c ) ;
} ) ;
} , function ( _0x31a9a8 ) {
_0x326931 . enableLogs && console . error ( 'sdp-error' , _0x31a9a8 ) ;
} ) ;
}
_0x21b268 . getLocalStreams ( ) . forEach ( function ( _0x4ee107 ) {
_0x5ed0e1 [ _0x4ee107 . streamid ] = {
'isAudio' : ! ! _0x4ee107 . isAudio ,
'isVideo' : ! ! _0x4ee107 . isVideo ,
'isScreen' : ! ! _0x4ee107 . isScreen
} ;
} ) , _0x2c7e5e && _0x308f2d ( 'createOffer' ) , _0x21b268 . nativeClose = _0x21b268 . close , _0x21b268 . close = function ( ) {
if ( _0x21b268 ) {
try {
_0x21b268 . nativeClose !== _0x21b268 . close && _0x21b268 . nativeClose ( ) ;
} catch ( _0x3c28da ) { }
_0x21b268 = null , _0x2fa590 . peer = null ;
}
} , this . peer = _0x21b268 ;
}
var _0x42fdaa = function ( ) {
function _0x572b26 ( _0x16547c , _0x12b3cb ) {
var _0x3623e4 = _0x5c82c5 ( _0x16547c ) ;
return _0x3623e4 . videoCodecNumbers ? 'vp8' === _0x12b3cb && _0x3623e4 . vp8LineNumber === _0x3623e4 . videoCodecNumbers [ 0x0 ] ? _0x16547c : 'vp9' === _0x12b3cb && _0x3623e4 . vp9LineNumber === _0x3623e4 . videoCodecNumbers [ 0x0 ] ? _0x16547c : 'h264' === _0x12b3cb && _0x3623e4 . h264LineNumber === _0x3623e4 . videoCodecNumbers [ 0x0 ] ? _0x16547c : _0x16547c = _0x249ace ( _0x16547c , _0x12b3cb , _0x3623e4 ) : _0x16547c ;
}
function _0x249ace ( _0x536ba9 , _0x3e10ca , _0x141d2f , _0x1f707f ) {
var _0x3623e4 = '' ;
if ( 'vp8' === _0x3e10ca ) {
if ( ! _0x141d2f . vp8LineNumber ) return _0x536ba9 ;
_0x3623e4 = _0x141d2f . vp8LineNumber ;
}
if ( 'vp9' === _0x3e10ca ) {
if ( ! _0x141d2f . vp9LineNumber ) return _0x536ba9 ;
_0x3623e4 = _0x141d2f . vp9LineNumber ;
}
if ( 'h264' === _0x3e10ca ) {
if ( ! _0x141d2f . h264LineNumber ) return _0x536ba9 ;
_0x3623e4 = _0x141d2f . h264LineNumber ;
}
var _0x314bfa = _0x141d2f . videoCodecNumbersOriginal . split ( 'SAVPF' ) [ 0x0 ] + 'SAVPF ' ,
_0x52ac96 = [ _0x3623e4 ] ;
return _0x1f707f && ( _0x52ac96 = [ ] ) , _0x141d2f . videoCodecNumbers . forEach ( function ( _0x43af74 ) {
_0x43af74 !== _0x3623e4 && _0x52ac96 . push ( _0x43af74 ) ;
} ) , _0x314bfa += _0x52ac96 . join ( ' ' ) , _0x536ba9 = _0x536ba9 . replace ( _0x141d2f . videoCodecNumbersOriginal , _0x314bfa ) ;
}
function _0x5c82c5 ( _0x370eaf ) {
var _0x249ace = { } ;
return _0x370eaf . split ( '\n' ) . forEach ( function ( _0x42cf6b ) {
0x0 === _0x42cf6b . indexOf ( 'm=video' ) && ( _0x249ace . videoCodecNumbers = [ ] , _0x42cf6b . split ( 'SAVPF' ) [ 0x1 ] . split ( ' ' ) . forEach ( function ( _0x340dfa ) {
( _0x340dfa = _0x340dfa . trim ( ) ) && _0x340dfa . length && ( _0x249ace . videoCodecNumbers . push ( _0x340dfa ) , _0x249ace . videoCodecNumbersOriginal = _0x42cf6b ) ;
} ) ) , - 0x1 === _0x42cf6b . indexOf ( 'VP8/90000' ) || _0x249ace . vp8LineNumber || ( _0x249ace . vp8LineNumber = _0x42cf6b . replace ( 'a=rtpmap:' , '' ) . split ( ' ' ) [ 0x0 ] ) , - 0x1 === _0x42cf6b . indexOf ( 'VP9/90000' ) || _0x249ace . vp9LineNumber || ( _0x249ace . vp9LineNumber = _0x42cf6b . replace ( 'a=rtpmap:' , '' ) . split ( ' ' ) [ 0x0 ] ) , - 0x1 === _0x42cf6b . indexOf ( 'H264/90000' ) || _0x249ace . h264LineNumber || ( _0x249ace . h264LineNumber = _0x42cf6b . replace ( 'a=rtpmap:' , '' ) . split ( ' ' ) [ 0x0 ] ) ;
} ) , _0x249ace ;
}
function _0x4526d0 ( _0x39207b , _0x23a46a , _0x1ebb9d ) {
return function ( _0x20ed55 , _0x5132ac , _0xcecfcd , _0x8459a8 , _0x27ad22 ) {
for ( var _0x2dbfb3 = - 0x1 !== _0xcecfcd ? _0xcecfcd : _0x20ed55 . length , _0x160b11 = _0x5132ac ; _0x160b11 < _0x2dbfb3 ; ++ _0x160b11 )
if ( 0x0 === _0x20ed55 [ _0x160b11 ] . indexOf ( _0x8459a8 ) && ( ! _0x27ad22 || - 0x1 !== _0x20ed55 [ _0x160b11 ] . toLowerCase ( ) . indexOf ( _0x27ad22 . toLowerCase ( ) ) ) ) return _0x160b11 ;
return null ;
} ( _0x39207b , 0x0 , - 0x1 , _0x23a46a , _0x1ebb9d ) ;
}
function _0x3623e4 ( _0x46fa44 ) {
var _0x249ace = new RegExp ( 'a=rtpmap:(\d+) \w+\/\d+' ) ,
_0x5c82c5 = _0x46fa44 . match ( _0x249ace ) ;
return _0x5c82c5 && 0x2 === _0x5c82c5 . length ? _0x5c82c5 [ 0x1 ] : null ;
}
return {
'removeVPX' : function ( _0x59de0e ) {
var _0x4526d0 = _0x5c82c5 ( _0x59de0e ) ;
return _0x59de0e = _0x249ace ( _0x59de0e , 'vp9' , _0x4526d0 , true ) , _0x59de0e = _0x249ace ( _0x59de0e , 'vp8' , _0x4526d0 , true ) ;
} ,
'disableNACK' : function ( _0x376b0e ) {
if ( ! _0x376b0e || 'string' != typeof _0x376b0e ) throw 'Invalid arguments.' ;
return _0x376b0e = ( _0x376b0e = ( _0x376b0e = ( _0x376b0e = _0x376b0e . replace ( 'a=rtcp-fb:126 nack\r\n' , '' ) ) . replace ( 'a=rtcp-fb:126 nack pli\x0d\n' , 'a=rtcp-fb:126 pli\x0d\n' ) ) . replace ( 'a=rtcp-fb:97 nack\r\n' , '' ) ) . replace ( 'a=rtcp-fb:97 nack pli\r\n' , 'a=rtcp-fb:97 pli\r\n' ) ;
} ,
'prioritize' : function ( _0x238652 , _0x23ac58 ) {
if ( _0x23ac58 && _0x23ac58 . getSenders && _0x23ac58 . getSenders ( ) . length ) {
if ( ! _0x238652 || 'string' != typeof _0x238652 ) throw 'Invalid arguments.' ;
_0x23ac58 . getSenders ( ) . forEach ( function ( _0x4c4f96 ) {
for ( var _0x5c82c5 = _0x4c4f96 . getParameters ( ) , _0x4526d0 = 0x0 ; _0x4526d0 < _0x5c82c5 . codecs . length ; _0x4526d0 ++ )
if ( _0x5c82c5 . codecs [ _0x4526d0 ] . mimeType == _0x238652 ) {
_0x5c82c5 . codecs . unshift ( _0x5c82c5 . codecs . splice ( _0x4526d0 , 0x1 ) ) ;
break ;
}
_0x4c4f96 . setParameters ( _0x5c82c5 ) ;
} ) ;
}
} ,
'removeNonG722' : function ( _0x49005b ) {
return _0x49005b . replace ( /m=audio ([0-9]+) RTP\/SAVPF ([0-9 ]*)/g , 'm=audio $1 RTP/SAVPF 9' ) ;
} ,
'setApplicationSpecificBandwidth' : function ( _0xa77e44 , _0x517ea3 , _0x4de140 ) {
return function ( _0x58398a , _0x84509d , _0x378779 ) {
return _0x84509d ? void 0x0 !== _0x5c498f && _0x5c498f ? _0x58398a : ( _0x378779 && ( _0x84509d . screen ? _0x84509d . screen < 0x12c && console . warn ( 'It seems that you are using wrong bandwidth value for screen. Screen sharing is expected to fail.' ) : console . warn ( 'It seems that you are not using bandwidth for screen. Screen sharing is expected to fail.' ) ) , _0x84509d . screen && _0x378779 && ( _0x58398a = ( _0x58398a = _0x58398a . replace ( /b=AS([^\r\n]+\r\n)/g , '' ) ) . replace ( /a=mid:video\r\n/g , 'a=mid:video\r\nb=AS:' + _0x84509d . screen + '\x0d\n' ) ) , ( _0x84509d . audio || _0x84509d . video ) && ( _0x58398a = _0x58398a . replace ( /b=AS([^\r\n]+\r\n)/g , '' ) ) , _0x84509d . audio && ( _0x58398a = _0x58398a . replace ( /a=mid:audio\r\n/g , 'a=mid:audio\r\nb=AS:' + _0x84509d . audio + '\x0d\n' ) ) , _0x84509d . screen ? _0x58398a = _0x58398a . replace ( /a=mid:video\r\n/g , 'a=mid:video\r\nb=AS:' + _0x84509d . screen + '\x0d\n' ) : _0x84509d . video && ( _0x58398a = _0x58398a . replace ( /a=mid:video\r\n/g , 'a=mid:video\r\nb=AS:' + _0x84509d . video + '\x0d\n' ) ) , _0x58398a ) : _0x58398a ;
} ( _0xa77e44 , _0x517ea3 , _0x4de140 ) ;
} ,
'setVideoBitrates' : function ( _0x6898ff , _0xf38daa ) {
return function ( _0x4260bb , _0x46dc63 ) {
var _0x5c82c5 , _0xcddf99 = ( _0x46dc63 = _0x46dc63 || { } ) . min ,
_0x4d9e07 = _0x46dc63 . max ,
_0x1e0ad5 = _0x4260bb . split ( '\x0d\n' ) ,
_0x4e244d = _0x4526d0 ( _0x1e0ad5 , 'a=rtpmap' , 'VP8/90000' ) ;
if ( _0x4e244d && ( _0x5c82c5 = _0x3623e4 ( _0x1e0ad5 [ _0x4e244d ] ) ) , ! _0x5c82c5 ) return _0x4260bb ;
var _0x4a75e7 , _0x5d5b05 = _0x4526d0 ( _0x1e0ad5 , 'a=rtpmap' , 'rtx/90000' ) ;
if ( _0x5d5b05 && ( _0x4a75e7 = _0x3623e4 ( _0x1e0ad5 [ _0x5d5b05 ] ) ) , ! _0x5d5b05 ) return _0x4260bb ;
var _0x56e025 = _0x4526d0 ( _0x1e0ad5 , 'a=fmtp:' + _0x4a75e7 . toString ( ) ) ;
if ( null !== _0x56e025 ) {
var _0x30c498 = '\x0d\n' ;
_0x30c498 += 'a=fmtp:' + _0x5c82c5 + ' x-google-min-bitrate=' + ( _0xcddf99 || '228' ) + '; x-google-max-bitrate=' + ( _0x4d9e07 || '228' ) , _0x1e0ad5 [ _0x56e025 ] = _0x1e0ad5 [ _0x56e025 ] . concat ( _0x30c498 ) , _0x4260bb = _0x1e0ad5 . join ( '\x0d\n' ) ;
}
return _0x4260bb ;
} ( _0x6898ff , _0xf38daa ) ;
} ,
'setOpusAttributes' : function ( _0x553630 , _0x553bce ) {
return function ( _0x48ec07 , _0x1e35c6 ) {
_0x1e35c6 = _0x1e35c6 || { } ;
var _0x5c82c5 , _0x1be3e1 = _0x48ec07 . split ( '\x0d\n' ) ,
_0x456381 = _0x4526d0 ( _0x1be3e1 , 'a=rtpmap' , 'opus/48000' ) ;
if ( _0x456381 && ( _0x5c82c5 = _0x3623e4 ( _0x1be3e1 [ _0x456381 ] ) ) , ! _0x5c82c5 ) return _0x48ec07 ;
var _0x2d8ac5 = _0x4526d0 ( _0x1be3e1 , 'a=fmtp:' + _0x5c82c5 . toString ( ) ) ;
if ( null === _0x2d8ac5 ) return _0x48ec07 ;
var _0x8350e7 = '' ;
return _0x8350e7 += '; stereo=' + ( void 0x0 !== _0x1e35c6 . stereo ? _0x1e35c6 . stereo : '1' ) , _0x8350e7 += '; sprop-stereo=' + ( void 0x0 !== _0x1e35c6 [ 'sprop-stereo' ] ? _0x1e35c6 [ 'sprop-stereo' ] : '1' ) , void 0x0 !== _0x1e35c6 . maxaveragebitrate && ( _0x8350e7 += '; maxaveragebitrate=' + ( _0x1e35c6 . maxaveragebitrate || 0x100000 ) ) , void 0x0 !== _0x1e35c6 . maxplaybackrate && ( _0x8350e7 += '; maxplaybackrate=' + ( _0x1e35c6 . maxplaybackrate || 0x100000 ) ) , void 0x0 !== _0x1e35c6 . cbr && ( _0x8350e7 += '; cbr=' + ( void 0x0 !== _0x1e35c6 . cbr ? _0x1e35c6 . cbr : '1' ) ) , void 0x0 !== _0x1e35c6 . useinbandfec && ( _0x8350e7 += '; useinbandfec=' + _0x1e35c6 . useinbandfec ) , void 0x0 !== _0x1e35c6 . usedtx && ( _0x8350e7 += '; usedtx=' + _0x1e35c6 . usedtx ) , void 0x0 !== _0x1e35c6 . maxptime && ( _0x8350e7 += '\x0d\na=maxptime:' + _0x1e35c6 . maxptime ) , _0x1be3e1 [ _0x2d8ac5 ] = _0x1be3e1 [ _0x2d8ac5 ] . concat ( _0x8350e7 ) , _0x48ec07 = _0x1be3e1 . join ( '\x0d\n' ) ;
} ( _0x553630 , _0x553bce ) ;
} ,
'preferVP9' : function ( _0x18deb7 ) {
return _0x572b26 ( _0x18deb7 , 'vp9' ) ;
} ,
'preferCodec' : _0x572b26 ,
'forceStereoAudio' : function ( _0x14ddc9 ) {
for ( var _0x249ace = _0x14ddc9 . split ( '\x0d\n' ) , _0x5c82c5 = null , _0x4526d0 = 0x0 ; _0x4526d0 < _0x249ace . length ; _0x4526d0 ++ )
if ( - 0x1 !== _0x249ace [ _0x4526d0 ] . search ( 'opus/48000' ) ) {
var _0x3623e4 = extractSdp ( _0x249ace [ _0x4526d0 ] , /:(\d+) opus\/48000/i ) ;
break ;
}
for ( _0x4526d0 = 0x0 ; _0x4526d0 < _0x249ace . length ; _0x4526d0 ++ ) {
if ( - 0x1 !== _0x249ace [ _0x4526d0 ] . search ( 'a=fmtp' ) )
if ( extractSdp ( _0x249ace [ _0x4526d0 ] , /a=fmtp:(\d+)/ ) === _0x3623e4 ) {
_0x5c82c5 = _0x4526d0 ;
break ;
}
}
return null === _0x5c82c5 ? _0x14ddc9 : ( _0x249ace [ _0x5c82c5 ] = _0x249ace [ _0x5c82c5 ] . concat ( '; stereo=1; sprop-stereo=1' ) , _0x14ddc9 = _0x249ace . join ( '\x0d\n' ) ) ;
}
} ;
} ( ) ;
window . BandwidthHandler = _0x42fdaa ;
var _0x2b9f47 = {
'processCandidates' : function ( _0x3bf1a2 , _0x390036 ) {
var _0x2fa590 = _0x390036 . candidate ,
_0x21b268 = _0x3bf1a2 . candidates ,
_0x521a09 = _0x21b268 . stun ,
_0x3e00fc = _0x21b268 . turn ;
if ( _0x3b94ab ( _0x21b268 . reflexive ) || ( _0x521a09 = _0x21b268 . reflexive ) , _0x3b94ab ( _0x21b268 . relay ) || ( _0x3e00fc = _0x21b268 . relay ) , ( _0x21b268 . host || ! _0x2fa590 . match ( /typ host/g ) ) && ( _0x3e00fc || ! _0x2fa590 . match ( /typ relay/g ) ) && ( _0x521a09 || ! _0x2fa590 . match ( /typ srflx/g ) ) ) {
var _0x2b6e29 = _0x3bf1a2 . iceProtocols ;
if ( ( _0x2b6e29 . udp || ! _0x2fa590 . match ( / udp /g ) ) && ( _0x2b6e29 . tcp || ! _0x2fa590 . match ( / tcp /g ) ) ) return _0x3bf1a2 . enableLogs && console . debug ( 'Your candidate pairs:' , _0x2fa590 ) , {
'candidate' : _0x2fa590 ,
'sdpMid' : _0x390036 . sdpMid ,
'sdpMLineIndex' : _0x390036 . sdpMLineIndex
} ;
}
}
} ,
_0x3b9609 = {
'getIceServers' : function ( _0x488e7f ) {
2022-11-30 17:15:01 +00:00
return window . EJS _TURN _URLS ;
2022-11-28 01:35:30 +00:00
}
} ;
function _0x5adfda ( _0x283137 ) {
if ( true !== currentUserMediaRequest . mutex ) {
currentUserMediaRequest . mutex = true ;
var _0x326931 = JSON . stringify ( _0x283137 . localMediaConstraints ) ;
if ( currentUserMediaRequest . streams [ _0x326931 ] ) _0x196d8c ( currentUserMediaRequest . streams [ _0x326931 ] . stream , true ) ;
else {
if ( ! ! /BB10|BlackBerry/i . test ( navigator . userAgent || '' ) || void 0x0 === navigator . mediaDevices || 'function' != typeof navigator . mediaDevices . getUserMedia ) return navigator . getUserMedia = navigator . getUserMedia || navigator . webkitGetUserMedia || navigator . mozGetUserMedia , void navigator . getUserMedia ( _0x283137 . localMediaConstraints , function ( _0x470b2a ) {
_0x470b2a . streamid = _0x470b2a . streamid || _0x470b2a . id || _0x5b8d5d ( ) , _0x470b2a . idInstance = _0x326931 , _0x196d8c ( _0x470b2a ) ;
} , function ( _0x3fd14c ) {
_0x283137 . onLocalMediaError ( _0x3fd14c , _0x283137 . localMediaConstraints ) ;
} ) ;
if ( void 0x0 === navigator . mediaDevices ) {
navigator . getUserMedia = navigator . getUserMedia || navigator . webkitGetUserMedia || navigator . mozGetUserMedia ;
var _0x2fa590 , _0x21b268 , _0x521a09 = function ( ) { } ;
navigator . mediaDevices = {
'getUserMedia' : function ( _0x1ddd61 ) {
return navigator . getUserMedia ( _0x1ddd61 , function ( _0x4a0936 ) {
_0x4a0936 ( stream ) , _0x2fa590 = stream ;
} , function ( _0x15c59c ) {
_0x521a09 ( _0x15c59c ) , _0x21b268 = _0x15c59c ;
} ) , {
'then' : function ( _0x3e20ef ) {
if ( ! _0x2fa590 ) return _0x3e20ef , {
'then' : function ( _0x444f48 ) {
_0x21b268 ? _0x444f48 ( _0x21b268 ) : _0x521a09 = _0x444f48 ;
}
} ;
_0x3e20ef ( _0x2fa590 ) ;
}
} ;
}
} ;
}
navigator . mediaDevices . getUserMedia ( _0x283137 . localMediaConstraints ) . then ( function ( _0x5a25ab ) {
_0x5a25ab . streamid = _0x5a25ab . streamid || _0x5a25ab . id || _0x5b8d5d ( ) , _0x5a25ab . idInstance = _0x326931 , _0x196d8c ( _0x5a25ab ) ;
} ) . catch ( function ( _0x5f1ad4 ) {
_0x283137 . onLocalMediaError ( _0x5f1ad4 , _0x283137 . localMediaConstraints ) ;
} ) ;
}
} else currentUserMediaRequest . queueRequests . push ( _0x283137 ) ;
function _0x196d8c ( _0x1f527b , _0x58cd7c ) {
! function ( _0x3b5a94 , _0x299595 ) {
_0x3b5a94 . mandatory && _0x3b5a94 . mandatory . chromeMediaSource ? _0x299595 . isScreen = true : _0x3b5a94 . mozMediaSource || _0x3b5a94 . mediaSource ? _0x299595 . isScreen = true : _0x3b5a94 . video ? _0x299595 . isVideo = true : _0x3b5a94 . audio && ( _0x299595 . isAudio = true ) ;
} ( _0x283137 . localMediaConstraints , _0x1f527b ) ;
var _0x521a09 = 'ended' ;
'oninactive' in _0x1f527b && ( _0x521a09 = 'inactive' ) , _0x1f527b . addEventListener ( _0x521a09 , function ( ) {
delete currentUserMediaRequest . streams [ _0x326931 ] , currentUserMediaRequest . mutex = ! 0x1 , currentUserMediaRequest . queueRequests . indexOf ( _0x283137 ) && ( delete currentUserMediaRequest . queueRequests [ currentUserMediaRequest . queueRequests . indexOf ( _0x283137 ) ] , currentUserMediaRequest . queueRequests = _0xf3acd ( currentUserMediaRequest . queueRequests ) ) ;
} , ! 0x1 ) , currentUserMediaRequest . streams [ _0x326931 ] = {
'stream' : _0x1f527b
} , currentUserMediaRequest . mutex = ! 0x1 , currentUserMediaRequest . queueRequests . length && _0x5adfda ( currentUserMediaRequest . queueRequests . shift ( ) ) , _0x283137 . onGettingLocalMedia ( _0x1f527b , _0x58cd7c ) ;
}
}
window . currentUserMediaRequest = {
'streams' : [ ] ,
'mutex' : ! 0x1 ,
'queueRequests' : [ ] ,
'remove' : function ( _0x1b91c8 ) {
this . mutex = ! 0x1 ;
var _0x326931 = this . streams [ _0x1b91c8 ] ;
if ( _0x326931 ) {
var _0x2fa590 = ( _0x326931 = _0x326931 . stream ) . currentUserMediaRequestOptions ;
this . queueRequests . indexOf ( _0x2fa590 ) && ( delete this . queueRequests [ this . queueRequests . indexOf ( _0x2fa590 ) ] , this . queueRequests = _0xf3acd ( this . queueRequests ) ) , this . streams [ _0x1b91c8 ] . stream = null , delete this . streams [ _0x1b91c8 ] ;
}
}
} ;
var _0x25e82e = function ( ) {
function _0xc80ee1 ( _0x19f0b1 ) {
if ( _0x19f0b1 ) return 'string' == typeof _0x19f0b1 || void 0x0 === _0x19f0b1 ? _0x19f0b1 : _0x19f0b1 . audio && _0x19f0b1 . video ? null : _0x19f0b1 . audio ? 'audio' : _0x19f0b1 . video ? 'video' : void 0x0 ;
}
return {
'setHandlers' : function ( _0x3d58a4 , _0x57b7e9 , _0x2faad3 ) {
if ( _0x3d58a4 && _0x3d58a4 . addEventListener ) {
if ( void 0x0 === _0x57b7e9 || 0x1 == _0x57b7e9 ) {
var _0x521a09 = 'ended' ;
'oninactive' in _0x3d58a4 && ( _0x521a09 = 'inactive' ) , _0x3d58a4 . addEventListener ( _0x521a09 , function ( ) {
_0x25e82e . onSyncNeeded ( this . streamid , _0x521a09 ) ;
} , ! 0x1 ) ;
}
_0x3d58a4 . mute = function ( _0x393c28 , _0xb2bd8c ) {
_0x393c28 = _0xc80ee1 ( _0x393c28 ) , void 0x0 !== _0xb2bd8c && ( _0x57b7e9 = _0xb2bd8c ) , void 0x0 !== _0x393c28 && 'audio' != _0x393c28 || _0x2cbba5 ( _0x3d58a4 , 'audio' ) . forEach ( function ( _0x3bbe2d ) {
_0x3bbe2d . enabled = ! 0x1 , _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . isAudioMuted = true ;
} ) , void 0x0 !== _0x393c28 && 'video' != _0x393c28 || _0x2cbba5 ( _0x3d58a4 , 'video' ) . forEach ( function ( _0x2ba091 ) {
_0x2ba091 . enabled = ! 0x1 ;
} ) , void 0x0 !== _0x57b7e9 && 0x1 != _0x57b7e9 || _0x25e82e . onSyncNeeded ( _0x3d58a4 . streamid , 'mute' , _0x393c28 ) , _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . muteType = _0x393c28 || 'both' , _0x121233 ( _0x3d58a4 , 'mute' , _0x393c28 ) ;
} , _0x3d58a4 . unmute = function ( _0x557e65 , _0x2dc6b7 ) {
_0x557e65 = _0xc80ee1 ( _0x557e65 ) , void 0x0 !== _0x2dc6b7 && ( _0x57b7e9 = _0x2dc6b7 ) ,
function ( ) {
if ( ! _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . mediaElement ) return ;
var _0xc80ee1 = _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . mediaElement ;
_0xc80ee1 . volume = 0x0 ,
function _0xc80ee1 ( _0x537992 , _0x12ab30 , _0x212c93 , _0x44a2b5 ) {
_0x44a2b5 = ( _0x44a2b5 || 0x0 ) + 0x1 ;
if ( _0x44a2b5 >= _0x12ab30 ) return ;
setTimeout ( function ( ) {
_0x212c93 ( ) , _0xc80ee1 ( _0x537992 , _0x12ab30 , _0x212c93 , _0x44a2b5 ) ;
} , _0x537992 ) ;
} ( 0xc8 , 0x5 , function ( ) {
try {
_0xc80ee1 . volume += 0.2 ;
} catch ( _0x111824 ) {
_0xc80ee1 . volume = 0x1 ;
}
} ) ;
} ( ) , void 0x0 !== _0x557e65 && 'audio' != _0x557e65 || _0x2cbba5 ( _0x3d58a4 , 'audio' ) . forEach ( function ( _0x39cdcf ) {
_0x39cdcf . enabled = true , _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . isAudioMuted = ! 0x1 ;
} ) , void 0x0 !== _0x557e65 && 'video' != _0x557e65 || ( _0x2cbba5 ( _0x3d58a4 , 'video' ) . forEach ( function ( _0x1bc1ac ) {
_0x1bc1ac . enabled = true ;
} ) , void 0x0 !== _0x557e65 && 'video' == _0x557e65 && _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . isAudioMuted && function _0xc80ee1 ( _0x2a12fa ) {
_0x2a12fa || ( _0x2a12fa = 0x0 ) , ++ _0x2a12fa < 0x64 && _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . isAudioMuted && ( _0x3d58a4 . mute ( 'audio' ) , setTimeout ( function ( ) {
_0xc80ee1 ( _0x2a12fa ) ;
} , 0x32 ) ) ;
} ( ) ) , void 0x0 !== _0x57b7e9 && 0x1 != _0x57b7e9 || _0x25e82e . onSyncNeeded ( _0x3d58a4 . streamid , 'unmute' , _0x557e65 ) , _0x2faad3 . streamEvents [ _0x3d58a4 . streamid ] . unmuteType = _0x557e65 || 'both' , _0x121233 ( _0x3d58a4 , 'unmute' , _0x557e65 ) ;
} ;
}
} ,
'onSyncNeeded' : function ( _0x1963f6 , _0x4e7716 , _0x3963b ) { }
} ;
} ( ) ;
window . addEventListener ( 'message' , function ( _0x48b05c ) {
_0x48b05c . origin == window . location . origin && function ( _0x53ae17 ) {
if ( 'PermissionDeniedError' == _0x53ae17 ) {
if ( _0x301abf = 'PermissionDeniedError' , _0x467e9d ) return _0x467e9d ( 'PermissionDeniedError' ) ;
throw new Error ( 'PermissionDeniedError' ) ;
}
'rtcmulticonnection-extension-loaded' == _0x53ae17 && ( _0x301abf = 'desktop' ) ;
_0x53ae17 . sourceId && _0x467e9d && _0x467e9d ( _0x427b66 = _0x53ae17 . sourceId , true === _0x53ae17 . canRequestAudioTrack ) ;
} ( _0x48b05c . data ) ;
} ) ;
var _0x427b66 , _0x467e9d , _0x301abf = 'screen' ;
function _0x53da88 ( _0x14f9e0 ) {
if ( _0x14f9e0 ) {
if ( 'desktop' == _0x301abf ) return _0x14f9e0 ( true ) ;
window . postMessage ( 'are-you-there' , '*' ) , setTimeout ( function ( ) {
_0x14f9e0 ( 'screen' != _0x301abf ) ;
} , 0x7d0 ) ;
}
}
var _0x5c498f = void 0x0 !== window . InstallTrigger ,
_0x1ea249 = ! ! window . opera || navigator . userAgent . indexOf ( ' OPR/' ) >= 0x0 ;
window . chrome ;
function _0x1f670d ( _0x4bd5c8 , _0x3b2cbe ) {
if ( _0x5c498f ) return _0x3b2cbe ( 'not-chrome' ) ;
0x2 != arguments . length && ( _0x3b2cbe = _0x4bd5c8 , _0x4bd5c8 = 'ajhifddimkapgcifgcodmmfdlknahffk' ) ;
var _0x2fa590 = document . createElement ( 'img' ) ;
_0x2fa590 . src = 'chrome-extension://' + _0x4bd5c8 + '/icon.png' , _0x2fa590 . onload = function ( ) {
_0x301abf = 'screen' , window . postMessage ( 'are-you-there' , '*' ) , setTimeout ( function ( ) {
_0x3b2cbe ( 'screen' == _0x301abf ? 'installed-disabled' : 'installed-enabled' ) ;
} , 0x7d0 ) ;
} , _0x2fa590 . onerror = function ( ) {
_0x3b2cbe ( 'not-installed' ) ;
} ;
}
function _0x1c050b ( _0xe24308 , _0x3ebcd4 ) {
if ( _0x5c498f ) return _0xe24308 ( null , {
'mozMediaSource' : 'window' ,
'mediaSource' : 'window'
} ) ;
var _0x2fa590 = {
'mandatory' : {
'chromeMediaSource' : _0x301abf ,
'maxWidth' : screen . width > 0x780 ? screen . width : 0x780 ,
'maxHeight' : screen . height > 0x438 ? screen . height : 0x438
} ,
'optional' : [ ]
} ;
'desktop' != _0x301abf || _0x427b66 ? ( 'desktop' == _0x301abf && ( _0x2fa590 . mandatory . chromeMediaSourceId = _0x427b66 ) , _0xe24308 ( null , _0x2fa590 ) ) : _0x3ebcd4 ? function ( _0x16e1da ) {
if ( ! _0x16e1da ) throw '"callback" parameter is mandatory.' ;
if ( _0x427b66 ) return _0x16e1da ( _0x427b66 ) ;
_0x467e9d = _0x16e1da , window . postMessage ( 'audio-plus-tab' , '*' ) ;
} ( function ( _0x240030 , _0x41af1b ) {
_0x2fa590 . mandatory . chromeMediaSourceId = _0x240030 , _0x41af1b && ( _0x2fa590 . canRequestAudioTrack = true ) , _0xe24308 ( 'PermissionDeniedError' == _0x240030 ? _0x240030 : null , _0x2fa590 ) ;
} ) : function ( _0x465509 ) {
if ( ! _0x465509 ) throw '"callback" parameter is mandatory.' ;
if ( _0x427b66 ) return _0x465509 ( _0x427b66 ) ;
_0x467e9d = _0x465509 , window . postMessage ( 'get-sourceId' , '*' ) ;
} ( function ( _0x13bb7e ) {
_0x2fa590 . mandatory . chromeMediaSourceId = _0x13bb7e , _0xe24308 ( 'PermissionDeniedError' == _0x13bb7e ? _0x13bb7e : null , _0x2fa590 ) ;
} ) ;
}
function _0x342039 ( _0x4dbb06 ) {
var _0x326931 = { } ;
return {
'receive' : function ( _0x5d1473 , _0x43133d , _0x584294 ) {
var _0x547cf6 = _0x5d1473 . uuid ;
if ( _0x326931 [ _0x547cf6 ] || ( _0x326931 [ _0x547cf6 ] = [ ] ) , _0x326931 [ _0x547cf6 ] . push ( _0x5d1473 . message ) , _0x5d1473 . last ) {
var _0x967e71 = _0x326931 [ _0x547cf6 ] . join ( '' ) ;
_0x5d1473 . isobject && ( _0x967e71 = JSON . parse ( _0x967e71 ) ) ;
var _0x33399d = {
'data' : _0x967e71 ,
'userid' : _0x43133d ,
'extra' : _0x584294 ,
'latency' : new Date ( ) . getTime ( ) - _0x5d1473 . sendingTime
} ;
_0x4dbb06 . autoTranslateText ? ( _0x33399d . original = _0x33399d . data , _0x4dbb06 . Translator . TranslateText ( _0x33399d . data , function ( _0x420bda ) {
_0x33399d . data = _0x420bda , _0x4dbb06 . onmessage ( _0x33399d ) ;
} ) ) : _0x4dbb06 . onmessage ( _0x33399d ) , delete _0x326931 [ _0x547cf6 ] ;
}
}
} ;
}
var _0x21703b = {
'send' : function ( _0x3eb04b ) {
var _0x326931 = _0x3eb04b . connection ,
_0x2fa590 = _0x3eb04b . channel ,
_0x21b268 = _0x3eb04b . remoteUserId ,
_0x521a09 = _0x3eb04b . text ,
_0x477fc1 = _0x326931 . chunkSize || 0x3e8 ,
_0x2406ca = '' ,
_0x2b3340 = ! 0x1 ;
'string' != typeof _0x521a09 && ( _0x2b3340 = true , _0x521a09 = JSON . stringify ( _0x521a09 ) ) ;
var _0x5093c5 = _0x5b8d5d ( ) ,
_0x53bd37 = new Date ( ) . getTime ( ) ;
! function _0x3eb04b ( _0x452fc6 , _0x2486ef ) {
var _0x4068b1 = {
'type' : 'text' ,
'uuid' : _0x5093c5 ,
'sendingTime' : _0x53bd37
} ;
_0x452fc6 && ( _0x2486ef = _0x452fc6 , _0x4068b1 . packets = parseInt ( _0x2486ef . length / _0x477fc1 ) ) ;
_0x2486ef . length > _0x477fc1 ? _0x4068b1 . message = _0x2486ef . slice ( 0x0 , _0x477fc1 ) : ( _0x4068b1 . message = _0x2486ef , _0x4068b1 . last = true , _0x4068b1 . isobject = _0x2b3340 ) ;
_0x2fa590 . send ( _0x4068b1 , _0x21b268 ) ;
_0x2406ca = _0x2486ef . slice ( _0x4068b1 . message . length ) ;
_0x2406ca . length && setTimeout ( function ( ) {
_0x3eb04b ( null , _0x2406ca ) ;
} , _0x326931 . chunkInterval || 0x64 ) ;
} ( _0x521a09 ) ;
}
} ,
_0x2cf1f3 = {
'handle' : function ( _0x519a30 ) {
var _0x326931 = { } ;
_0x519a30 . onFileStart = function ( _0x2a3aa7 ) {
var _0x21b268 = document . createElement ( 'div' ) ;
if ( _0x21b268 . title = _0x2a3aa7 . name , _0x21b268 . innerHTML = '<label>0%</label> <progress></progress>' , _0x2a3aa7 . remoteUserId && ( _0x21b268 . innerHTML += ' (Sharing with:' + _0x2a3aa7 . remoteUserId + ')' ) , _0x519a30 . filesContainer || ( _0x519a30 . filesContainer = document . body || document . documentElement ) , _0x519a30 . filesContainer . insertBefore ( _0x21b268 , _0x519a30 . filesContainer . firstChild ) , ! _0x2a3aa7 . remoteUserId ) return _0x326931 [ _0x2a3aa7 . uuid ] = {
'div' : _0x21b268 ,
'progress' : _0x21b268 . querySelector ( 'progress' ) ,
'label' : _0x21b268 . querySelector ( 'label' )
} , void ( _0x326931 [ _0x2a3aa7 . uuid ] . progress . max = _0x2a3aa7 . maxChunks ) ;
_0x326931 [ _0x2a3aa7 . uuid ] || ( _0x326931 [ _0x2a3aa7 . uuid ] = { } ) , _0x326931 [ _0x2a3aa7 . uuid ] [ _0x2a3aa7 . remoteUserId ] = {
'div' : _0x21b268 ,
'progress' : _0x21b268 . querySelector ( 'progress' ) ,
'label' : _0x21b268 . querySelector ( 'label' )
} , _0x326931 [ _0x2a3aa7 . uuid ] [ _0x2a3aa7 . remoteUserId ] . progress . max = _0x2a3aa7 . maxChunks ;
} , _0x519a30 . onFileProgress = function ( _0x4330ac ) {
var _0x2fa590 = _0x326931 [ _0x4330ac . uuid ] ;
_0x2fa590 && ( _0x4330ac . remoteUserId && ! ( _0x2fa590 = _0x326931 [ _0x4330ac . uuid ] [ _0x4330ac . remoteUserId ] ) || ( _0x2fa590 . progress . value = _0x4330ac . currentPosition || _0x4330ac . maxChunks || _0x2fa590 . progress . max , function ( _0x5df338 , _0x284eff ) {
if ( - 0x1 !== _0x5df338 . position ) {
var _0x2fa590 = + _0x5df338 . position . toFixed ( 0x2 ) . split ( '.' ) [ 0x1 ] || 0x64 ;
_0x284eff . innerHTML = _0x2fa590 + '%' ;
}
} ( _0x2fa590 . progress , _0x2fa590 . label ) ) ) ;
} , _0x519a30 . onFileEnd = function ( _0x60ee3b ) {
var _0x2fa590 = _0x326931 [ _0x60ee3b . uuid ] ;
if ( _0x2fa590 ) {
if ( ! _0x60ee3b . remoteUserId || ( _0x2fa590 = _0x326931 [ _0x60ee3b . uuid ] [ _0x60ee3b . remoteUserId ] ) ) {
var _0x21b268 = _0x2fa590 . div ; - 0x1 != _0x60ee3b . type . indexOf ( 'image' ) ? _0x21b268 . innerHTML = '<a href="' + _0x60ee3b . url + '" download="' + _0x60ee3b . name + '">Download <strong style="color:red;">' + _0x60ee3b . name + '</strong> </a><br /><img src="' + _0x60ee3b . url + '" title="' + _0x60ee3b . name + '" style="max-width: 80%;">' : _0x21b268 . innerHTML = '<a href="' + _0x60ee3b . url + '" download="' + _0x60ee3b . name + '">Download <strong style="color:red;">' + _0x60ee3b . name + '</strong> </a><br /><iframe src="' + _0x60ee3b . url + '" title="' + _0x60ee3b . name + '" style="width: 80%;border: 0;height: inherit;margin-top:1em;"></iframe>' ;
}
} else console . error ( 'No such progress-helper element exist.' , _0x60ee3b ) ;
} ;
}
} ,
_0x400337 = {
'handle' : function ( _0x386b1a ) {
_0x386b1a . autoTranslateText = ! 0x1 , _0x386b1a . language = 'en' , _0x386b1a . googKey = 'AIzaSyCgB5hmFY74WYB-EoWkhr9cAGr6TiTHrEE' , _0x386b1a . Translator = {
'TranslateText' : function ( _0x211215 , _0x254987 ) {
var _0x21b268 = document . createElement ( 'script' ) ;
_0x21b268 . type = 'text/javascript' ;
var _0x521a09 = encodeURIComponent ( _0x211215 ) ,
_0x4a4191 = 'method' + _0x386b1a . token ( ) ;
window [ _0x4a4191 ] = function ( _0x9cc9a ) {
_0x9cc9a . data && _0x9cc9a . data . translations [ 0x0 ] && _0x254987 ? _0x254987 ( _0x9cc9a . data . translations [ 0x0 ] . translatedText ) : _0x9cc9a . error && 'Daily Limit Exceeded' === _0x9cc9a . error . message ? console . error ( 'Text translation failed. Error message: "Daily Limit Exceeded."' ) : _0x9cc9a . error ? console . error ( _0x9cc9a . error . message ) : console . error ( _0x9cc9a ) ;
} ;
var _0xfca442 = 'https://www.googleapis.com/language/translate/v2?key=' + _0x386b1a . googKey + '&target=' + ( _0x386b1a . language || 'en-US' ) + '&callback=window.' + _0x4a4191 + '&q=' + _0x521a09 ;
_0x21b268 . src = _0xfca442 , document . getElementsByTagName ( 'head' ) [ 0x0 ] . appendChild ( _0x21b268 ) ;
} ,
'getListOfLanguages' : function ( _0x36cf7f ) {
var _0x2fa590 = new XMLHttpRequest ( ) ;
_0x2fa590 . onreadystatechange = function ( ) {
if ( _0x2fa590 . readyState == XMLHttpRequest . DONE ) {
var _0x386b1a = JSON . parse ( _0x2fa590 . responseText ) ;
if ( _0x386b1a && _0x386b1a . data && _0x386b1a . data . languages ) return void _0x36cf7f ( _0x386b1a . data . languages ) ;
if ( _0x386b1a . error && 'Daily Limit Exceeded' === _0x386b1a . error . message ) return void console . error ( 'Text translation failed. Error message: "Daily Limit Exceeded."' ) ;
if ( _0x386b1a . error ) return void console . error ( _0x386b1a . error . message ) ;
console . error ( _0x386b1a ) ;
}
} ;
var _0x21b268 = 'https://www.googleapis.com/language/translate/v2/languages?key=' + _0x386b1a . googKey + '&target=en' ;
_0x2fa590 . open ( 'GET' , _0x21b268 , true ) , _0x2fa590 . send ( null ) ;
}
} ;
}
} ;
! function ( _0x51c1c9 ) {
_0x326931 = _0x326931 || {
'useDefaultDevices' : true
} , _0x51c1c9 . channel = _0x51c1c9 . sessionid = ( _0x1056a5 || location . href . replace ( /\/|:|#|\?|\$|\^|%|\.|`|~|!|\+|@|\[|\||]|\|*. /g , '' ) . split ( '\n' ) . join ( '' ) . split ( '\x0d' ) . join ( '' ) ) + '' ;
var _0x21b268 = new _0x11ea4f ( _0x51c1c9 ) ,
_0x521a09 = { } ;
function _0x2db9d8 ( _0x3112a3 ) {
if ( _0x51c1c9 . socketAutoReConnect = true , _0x51c1c9 . socket ) _0x3112a3 && _0x3112a3 ( _0x51c1c9 . socket ) ;
else {
if ( void 0x0 === _0x45c30f )
if ( 'undefined' != typeof FirebaseConnection ) window . SocketConnection = FirebaseConnection ;
else {
if ( 'undefined' == typeof PubNubConnection ) throw 'SocketConnection.js seems missed.' ;
window . SocketConnection = PubNubConnection ;
}
new _0x45c30f ( _0x51c1c9 , function ( _0xbc287b ) {
_0x3112a3 && _0x3112a3 ( _0x51c1c9 . socket ) ;
} ) ;
}
}
function _0x6a70ac ( _0x2eb7ca , _0x54a40d ) {
_0x51c1c9 . socket . emit ( 'join-room' , {
'sessionid' : _0x51c1c9 . sessionid ,
'session' : _0x51c1c9 . session ,
'mediaConstraints' : _0x51c1c9 . mediaConstraints ,
'sdpConstraints' : _0x51c1c9 . sdpConstraints ,
'streams' : _0x3121c9 ( ) ,
'extra' : _0x51c1c9 . extra ,
'password' : void 0x0 !== _0x51c1c9 . password && 'object' !== _0x4ffbab ( _0x51c1c9 . password ) ? _0x51c1c9 . password : ''
} , function ( _0x35f814 , _0x1c1c0b ) {
if ( true === _0x35f814 ) {
if ( _0x51c1c9 . enableLogs && console . log ( 'isRoomJoined: ' , _0x35f814 , ' roomid: ' , _0x51c1c9 . sessionid ) , _0x51c1c9 . peers [ _0x51c1c9 . sessionid ] ) return ;
_0x21b268 . onNegotiationNeeded ( _0x2eb7ca ) ;
} ! 0x1 === _0x35f814 && _0x51c1c9 . enableLogs && console . warn ( 'isRoomJoined: ' , _0x1c1c0b , ' roomid: ' , _0x51c1c9 . sessionid ) , _0x54a40d ( _0x35f814 , _0x51c1c9 . sessionid , _0x1c1c0b ) ;
} ) ;
}
function _0x484896 ( _0xaeb629 ) {
_0x51c1c9 . enableLogs && console . log ( 'Sending open-room signal to socket.io' ) , _0x51c1c9 . waitingForLocalMedia = ! 0x1 , _0x51c1c9 . socket . emit ( 'open-room' , {
'sessionid' : _0x51c1c9 . sessionid ,
'session' : _0x51c1c9 . session ,
'mediaConstraints' : _0x51c1c9 . mediaConstraints ,
'sdpConstraints' : _0x51c1c9 . sdpConstraints ,
'streams' : _0x3121c9 ( ) ,
'extra' : _0x51c1c9 . extra ,
'identifier' : _0x51c1c9 . publicRoomIdentifier ,
'password' : void 0x0 !== _0x51c1c9 . password && 'object' !== _0x4ffbab ( _0x51c1c9 . password ) ? _0x51c1c9 . password : ''
} , function ( _0x5de645 , _0x24b2b1 ) {
true === _0x5de645 && ( _0x51c1c9 . enableLogs && console . log ( 'isRoomOpened: ' , _0x5de645 , ' roomid: ' , _0x51c1c9 . sessionid ) , _0xaeb629 ( _0x5de645 , _0x51c1c9 . sessionid ) ) , ! 0x1 === _0x5de645 && ( _0x51c1c9 . enableLogs && console . warn ( 'isRoomOpened: ' , _0x24b2b1 , ' roomid: ' , _0x51c1c9 . sessionid ) , _0xaeb629 ( _0x5de645 , _0x51c1c9 . sessionid , _0x24b2b1 ) ) ;
} ) ;
}
function _0x3121c9 ( ) {
try {
return _0x51c1c9 . streamEvents . selectAll ( 'local' ) . map ( function ( _0x4301e9 ) {
return {
'streamid' : _0x4301e9 . streamid ,
'tracks' : _0x4301e9 . stream . getTracks ( ) . length
} ;
} ) ;
} catch ( _0x64ac4b ) {
return [ ] ;
}
}
function _0x373dce ( _0x510ce7 , _0xd10b33 ) {
if ( _0x51c1c9 . dontCaptureUserMedia || _0x510ce7 . isDataOnly ) _0xd10b33 ( ) ;
else {
var _0x521a09 = { } ;
_0x510ce7 . localPeerSdpConstraints . OfferToReceiveAudio && ( _0x521a09 . audio = _0x51c1c9 . mediaConstraints . audio ) , _0x510ce7 . localPeerSdpConstraints . OfferToReceiveVideo && ( _0x521a09 . video = _0x51c1c9 . mediaConstraints . video ) ;
var _0x27fd08 = _0x510ce7 . session || _0x51c1c9 . session ;
_0x27fd08 . oneway && 'two-way' !== _0x27fd08 . audio && 'two-way' !== _0x27fd08 . video && 'two-way' !== _0x27fd08 . screen ? _0xd10b33 ( ) : ( _0x27fd08 . oneway && _0x27fd08 . audio && 'two-way' === _0x27fd08 . audio && ( _0x27fd08 = {
'audio' : true
} ) , ( _0x27fd08 . audio || _0x27fd08 . video || _0x27fd08 . screen ) && ( _0x27fd08 . screen ? 'Edge' === DetectRTC . browser . name ? navigator . getDisplayMedia ( {
'video' : true ,
'audio' : _0x93df62 ( _0x51c1c9 )
} ) . then ( function ( _0xceda9e ) {
_0xceda9e . isScreen = true , _0x21b268 . onGettingLocalMedia ( _0xceda9e ) , ! _0x27fd08 . audio && ! _0x27fd08 . video || _0x93df62 ( _0x51c1c9 ) ? _0xd10b33 ( _0xceda9e ) : _0x51c1c9 . invokeGetUserMedia ( null , _0xd10b33 ) ;
} , function ( _0x15d180 ) {
console . error ( 'Unable to capture screen on Edge. HTTPs and version 17+ is required.' ) ;
} ) : _0x51c1c9 . getScreenConstraints ( function ( _0x81d091 , _0x38bce3 ) {
_0x51c1c9 . invokeGetUserMedia ( {
'audio' : ! ! _0x93df62 ( _0x51c1c9 ) && _0x405170 ( _0x38bce3 ) ,
'video' : _0x38bce3 ,
'isScreen' : true
} , ! _0x27fd08 . audio && ! _0x27fd08 . video || _0x93df62 ( _0x51c1c9 ) ? _0xd10b33 : _0x51c1c9 . invokeGetUserMedia ( null , _0xd10b33 ) ) ;
} ) : ( _0x27fd08 . audio || _0x27fd08 . video ) && _0x51c1c9 . invokeGetUserMedia ( null , _0xd10b33 , _0x27fd08 ) ) ) ;
}
}
function _0x2559f7 ( _0x54aa63 , _0x15ef31 ) {
_0x54aa63 ? ( _0x15ef31 . audio && _0x2cbba5 ( _0x54aa63 , 'audio' ) . forEach ( function ( _0x3eb0f7 ) {
_0x3eb0f7 . applyConstraints ( _0x15ef31 . audio ) ;
} ) , _0x15ef31 . video && _0x2cbba5 ( _0x54aa63 , 'video' ) . forEach ( function ( _0x404e22 ) {
_0x404e22 . applyConstraints ( _0x15ef31 . video ) ;
} ) ) : _0x51c1c9 . enableLogs && console . error ( 'No stream to applyConstraints.' ) ;
}
function _0x44cd42 ( _0xa4ae78 , _0xd64125 , _0x3b5c67 ) {
_0xd64125 ? _0x21b268 . replaceTrack ( _0xa4ae78 , _0xd64125 , _0x3b5c67 ) : _0x51c1c9 . peers . getAllParticipants ( ) . forEach ( function ( _0x67f7c1 ) {
_0x21b268 . replaceTrack ( _0xa4ae78 , _0x67f7c1 , _0x3b5c67 ) ;
} ) ;
}
_0x21b268 . onGettingLocalMedia = function ( _0x399d43 , _0x84fca0 ) {
if ( _0x84fca0 = _0x84fca0 || function ( ) { } , _0x521a09 [ _0x399d43 . streamid ] ) _0x84fca0 ( ) ;
else {
_0x521a09 [ _0x399d43 . streamid ] = true ;
try {
_0x399d43 . type = 'local' ;
} catch ( _0x17f6f2 ) { }
_0x51c1c9 . setStreamEndHandler ( _0x399d43 ) , _0x412d65 ( _0x399d43 , function ( _0x2ad0da ) {
_0x2ad0da . id = _0x399d43 . streamid , _0x2ad0da . muted = true , _0x2ad0da . volume = 0x0 , - 0x1 === _0x51c1c9 . attachStreams . indexOf ( _0x399d43 ) && _0x51c1c9 . attachStreams . push ( _0x399d43 ) , void 0x0 !== _0x25e82e && _0x25e82e . setHandlers ( _0x399d43 , true , _0x51c1c9 ) , _0x51c1c9 . streamEvents [ _0x399d43 . streamid ] = {
'stream' : _0x399d43 ,
'type' : 'local' ,
'mediaElement' : _0x2ad0da ,
'userid' : _0x51c1c9 . userid ,
'extra' : _0x51c1c9 . extra ,
'streamid' : _0x399d43 . streamid ,
'isAudioMuted' : true
} ;
try {
! function ( _0x535d1c , _0x240dfe ) {
if ( _0x240dfe . stream && _0x2cbba5 ( _0x240dfe . stream , 'audio' ) . length ) {
if ( ! _0x535d1c || ! _0x240dfe ) throw 'Both arguments are required.' ;
if ( _0x535d1c . onspeaking && _0x535d1c . onsilence ) {
if ( 'undefined' == typeof hark ) throw 'hark.js not found.' ;
hark ( _0x240dfe . stream , {
'onspeaking' : function ( ) {
_0x535d1c . onspeaking ( _0x240dfe ) ;
} ,
'onsilence' : function ( ) {
_0x535d1c . onsilence ( _0x240dfe ) ;
} ,
'onvolumechange' : function ( _0x114490 , _0x4f35b0 ) {
_0x535d1c . onvolumechange && _0x535d1c . onvolumechange ( _0x1e6a28 ( {
'volume' : _0x114490 ,
'threshold' : _0x4f35b0
} , _0x240dfe ) ) ;
}
} ) ;
}
}
} ( _0x51c1c9 , _0x51c1c9 . streamEvents [ _0x399d43 . streamid ] ) , _0x57b754 ( _0x51c1c9 , _0x51c1c9 . streamEvents [ _0x399d43 . streamid ] ) , _0x51c1c9 . onstream ( _0x51c1c9 . streamEvents [ _0x399d43 . streamid ] ) ;
} catch ( _0x459936 ) { }
_0x84fca0 ( ) ;
} , _0x51c1c9 ) ;
}
} , _0x21b268 . onGettingRemoteMedia = function ( _0x54dff5 , _0x2bab67 ) {
try {
_0x54dff5 . type = 'remote' ;
} catch ( _0x2b68f0 ) { }
_0x51c1c9 . setStreamEndHandler ( _0x54dff5 , 'remote-stream' ) , _0x412d65 ( _0x54dff5 , function ( _0x291e4f ) {
_0x291e4f . id = _0x54dff5 . streamid , void 0x0 !== _0x25e82e && _0x25e82e . setHandlers ( _0x54dff5 , ! 0x1 , _0x51c1c9 ) , _0x51c1c9 . streamEvents [ _0x54dff5 . streamid ] = {
'stream' : _0x54dff5 ,
'type' : 'remote' ,
'userid' : _0x2bab67 ,
'extra' : _0x51c1c9 . peers [ _0x2bab67 ] ? _0x51c1c9 . peers [ _0x2bab67 ] . extra : { } ,
'mediaElement' : _0x291e4f ,
'streamid' : _0x54dff5 . streamid
} , _0x57b754 ( _0x51c1c9 , _0x51c1c9 . streamEvents [ _0x54dff5 . streamid ] ) , _0x51c1c9 . onstream ( _0x51c1c9 . streamEvents [ _0x54dff5 . streamid ] ) ;
} , _0x51c1c9 ) ;
} , _0x21b268 . onRemovingRemoteMedia = function ( _0x5e7396 , _0x1a735c ) {
var _0x21b268 = _0x51c1c9 . streamEvents [ _0x5e7396 . streamid ] ;
_0x21b268 || ( _0x21b268 = {
'stream' : _0x5e7396 ,
'type' : 'remote' ,
'userid' : _0x1a735c ,
'extra' : _0x51c1c9 . peers [ _0x1a735c ] ? _0x51c1c9 . peers [ _0x1a735c ] . extra : { } ,
'streamid' : _0x5e7396 . streamid ,
'mediaElement' : _0x51c1c9 . streamEvents [ _0x5e7396 . streamid ] ? _0x51c1c9 . streamEvents [ _0x5e7396 . streamid ] . mediaElement : null
} ) , _0x51c1c9 . peersBackup [ _0x21b268 . userid ] && ( _0x21b268 . extra = _0x51c1c9 . peersBackup [ _0x21b268 . userid ] . extra ) , _0x51c1c9 . onstreamended ( _0x21b268 ) , delete _0x51c1c9 . streamEvents [ _0x5e7396 . streamid ] ;
} , _0x21b268 . onNegotiationNeeded = function ( _0x2d936f , _0x4e2d94 , _0x5d7bb5 ) {
_0x5d7bb5 = _0x5d7bb5 || function ( ) { } ;
var _0x521a09 = {
'remoteUserId' : _0x4e2d94 = _0x4e2d94 || _0x2d936f . remoteUserId ,
'message' : _0x2d936f = _0x2d936f || '' ,
'sender' : _0x51c1c9 . userid
} ;
_0x2d936f . remoteUserId && _0x2d936f . message && _0x2d936f . sender && ( _0x521a09 = _0x2d936f ) , _0x2db9d8 ( function ( ) {
_0x51c1c9 . socket . emit ( _0x51c1c9 . socketMessageEvent , _0x521a09 , _0x5d7bb5 ) ;
} ) ;
} , _0x21b268 . onUserLeft = function ( _0x76e281 ) {
_0x51c1c9 . deletePeer ( _0x76e281 ) ;
} , _0x21b268 . disconnectWith = function ( _0x88879c , _0x323747 ) {
_0x51c1c9 . socket && _0x51c1c9 . socket . emit ( 'disconnect-with' , _0x88879c , _0x323747 || function ( ) { } ) , _0x51c1c9 . deletePeer ( _0x88879c ) ;
} , _0x51c1c9 . socketOptions = {
'transport' : 'polling'
} , _0x51c1c9 . openOrJoin = function ( _0x66fc69 , _0xba3fb1 ) {
_0xba3fb1 = _0xba3fb1 || function ( ) { } , _0x51c1c9 . checkPresence ( _0x66fc69 , function ( _0x1c5cec , _0x207cb3 ) {
if ( _0x1c5cec ) {
_0x51c1c9 . sessionid = _0x207cb3 ;
var _0x521a09 , _0x429662 , _0x22a5af = ! ! _0x51c1c9 . session . oneway ,
_0x5851c5 = _0x5deab2 ( _0x51c1c9 . session ) ;
_0x429662 = {
'OfferToReceiveAudio' : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveVideo
} , _0x521a09 = {
'OfferToReceiveAudio' : _0x22a5af ? ! ! _0x51c1c9 . session . audio : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0x22a5af ? ! ! _0x51c1c9 . session . video || ! ! _0x51c1c9 . session . screen : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveVideo
} ;
var _0x3fb79d = {
'remoteUserId' : _0x51c1c9 . sessionid ,
'message' : {
'newParticipationRequest' : true ,
'isOneWay' : _0x22a5af ,
'isDataOnly' : _0x5851c5 ,
'localPeerSdpConstraints' : _0x521a09 ,
'remotePeerSdpConstraints' : _0x429662
} ,
'sender' : _0x51c1c9 . userid
} ;
_0x373dce ( _0x3fb79d . message , function ( ) {
_0x6a70ac ( _0x3fb79d , _0xba3fb1 ) ;
} ) ;
} else _0x51c1c9 . waitingForLocalMedia = true , _0x51c1c9 . isInitiator = true , _0x51c1c9 . sessionid = _0x207cb3 || _0x51c1c9 . sessionid , _0x5deab2 ( _0x51c1c9 . session ) ? _0x484896 ( _0xba3fb1 ) : _0x51c1c9 . captureUserMedia ( function ( ) {
_0x484896 ( _0xba3fb1 ) ;
} ) ;
} ) ;
} , _0x51c1c9 . waitingForLocalMedia = ! 0x1 , _0x51c1c9 . open = function ( _0x572e80 , _0x37b154 ) {
_0x37b154 = _0x37b154 || function ( ) { } , _0x51c1c9 . waitingForLocalMedia = true , _0x51c1c9 . isInitiator = true , _0x51c1c9 . sessionid = _0x572e80 || _0x51c1c9 . sessionid , _0x2db9d8 ( function ( ) {
_0x5deab2 ( _0x51c1c9 . session ) ? _0x484896 ( _0x37b154 ) : _0x51c1c9 . captureUserMedia ( function ( ) {
_0x484896 ( _0x37b154 ) ;
} ) ;
} ) ;
} , _0x51c1c9 . peersBackup = { } , _0x51c1c9 . deletePeer = function ( _0x31e4e4 ) {
if ( _0x31e4e4 && _0x51c1c9 . peers [ _0x31e4e4 ] ) {
var _0x326931 = {
'userid' : _0x31e4e4 ,
'extra' : _0x51c1c9 . peers [ _0x31e4e4 ] ? _0x51c1c9 . peers [ _0x31e4e4 ] . extra : { }
} ;
if ( _0x51c1c9 . peersBackup [ _0x326931 . userid ] && ( _0x326931 . extra = _0x51c1c9 . peersBackup [ _0x326931 . userid ] . extra ) , _0x51c1c9 . onleave ( _0x326931 ) , _0x51c1c9 . peers [ _0x31e4e4 ] ) {
_0x51c1c9 . peers [ _0x31e4e4 ] . streams . forEach ( function ( _0x424150 ) {
_0x424150 . stop ( ) ;
} ) ;
var _0x21b268 = _0x51c1c9 . peers [ _0x31e4e4 ] . peer ;
if ( _0x21b268 && 'closed' !== _0x21b268 . iceConnectionState ) try {
_0x21b268 . close ( ) ;
} catch ( _0x24b95f ) { }
_0x51c1c9 . peers [ _0x31e4e4 ] && ( _0x51c1c9 . peers [ _0x31e4e4 ] . peer = null , delete _0x51c1c9 . peers [ _0x31e4e4 ] ) ;
}
}
} , _0x51c1c9 . rejoin = function ( _0x22fd47 ) {
if ( ! _0x51c1c9 . isInitiator && _0x22fd47 && Object . keys ( _0x22fd47 ) . length ) {
var _0x326931 = { } ;
_0x51c1c9 . peers [ _0x22fd47 . remoteUserId ] && ( _0x326931 = _0x51c1c9 . peers [ _0x22fd47 . remoteUserId ] . extra , _0x51c1c9 . deletePeer ( _0x22fd47 . remoteUserId ) ) , _0x22fd47 && _0x22fd47 . remoteUserId && ( _0x51c1c9 . join ( _0x22fd47 . remoteUserId ) , _0x51c1c9 . onReConnecting ( {
'userid' : _0x22fd47 . remoteUserId ,
'extra' : _0x326931
} ) ) ;
}
} , _0x51c1c9 . join = function ( _0x4b656a , _0x35b82f ) {
_0x51c1c9 . sessionid = ! ! _0x4b656a && ( _0x4b656a . sessionid || _0x4b656a . remoteUserId || _0x4b656a ) || _0x51c1c9 . sessionid , _0x51c1c9 . sessionid += '' ;
var _0x21b268 = ! 0x1 ,
_0x521a09 = ! 0x1 ,
_0x20e7ef = ! 0x1 ,
_0x4b614d = ! 0x1 ;
if ( _0x4b656a && _0x4b656a . session || ! _0x4b656a || 'string' == typeof _0x4b656a ) {
var _0x447147 = _0x4b656a && _0x4b656a . session || _0x51c1c9 . session ;
_0x20e7ef = ! ! _0x447147 . oneway , _0x4b614d = _0x5deab2 ( _0x447147 ) , _0x521a09 = {
'OfferToReceiveAudio' : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveVideo
} , _0x21b268 = {
'OfferToReceiveAudio' : _0x20e7ef ? ! ! _0x51c1c9 . session . audio : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveAudio ,
'OfferToReceiveVideo' : _0x20e7ef ? ! ! _0x51c1c9 . session . video || ! ! _0x51c1c9 . session . screen : _0x51c1c9 . sdpConstraints . mandatory . OfferToReceiveVideo
} ;
}
var _0x13518b = function ( ) { } ;
'function' == typeof ( _0x35b82f = _0x35b82f || { } ) && ( _0x13518b = _0x35b82f , _0x35b82f = { } ) , void 0x0 !== _0x35b82f . localPeerSdpConstraints && ( _0x21b268 = _0x35b82f . localPeerSdpConstraints ) , void 0x0 !== _0x35b82f . remotePeerSdpConstraints && ( _0x521a09 = _0x35b82f . remotePeerSdpConstraints ) , void 0x0 !== _0x35b82f . isOneWay && ( _0x20e7ef = _0x35b82f . isOneWay ) , void 0x0 !== _0x35b82f . isDataOnly && ( _0x4b614d = _0x35b82f . isDataOnly ) ;
var _0xcceebc = {
'remoteUserId' : _0x51c1c9 . sessionid ,
'message' : {
'newParticipationRequest' : true ,
'isOneWay' : _0x20e7ef ,
'isDataOnly' : _0x4b614d ,
'localPeerSdpConstraints' : _0x21b268 ,
'remotePeerSdpConstraints' : _0x521a09
} ,
'sender' : _0x51c1c9 . userid
} ;
return _0x373dce ( _0xcceebc . message , function ( ) {
_0x2db9d8 ( function ( ) {
_0x6a70ac ( _0xcceebc , _0x13518b ) ;
} ) ;
} ) , _0xcceebc ;
} , _0x51c1c9 . publicRoomIdentifier = '' , _0x51c1c9 . getUserMedia = _0x51c1c9 . captureUserMedia = function ( _0x3ae868 , _0x4adbb1 ) {
_0x3ae868 = _0x3ae868 || function ( ) { } ;
var _0x521a09 = _0x4adbb1 || _0x51c1c9 . session ;
_0x51c1c9 . dontCaptureUserMedia || _0x5deab2 ( _0x521a09 ) ? _0x3ae868 ( ) : ( _0x521a09 . audio || _0x521a09 . video || _0x521a09 . screen ) && ( _0x521a09 . screen ? 'Edge' === DetectRTC . browser . name ? navigator . getDisplayMedia ( {
'video' : true ,
'audio' : _0x93df62 ( _0x51c1c9 )
} ) . then ( function ( _0x31597a ) {
if ( _0x31597a . isScreen = true , _0x21b268 . onGettingLocalMedia ( _0x31597a ) , ! _0x521a09 . audio && ! _0x521a09 . video || _0x93df62 ( _0x51c1c9 ) ) _0x3ae868 ( _0x31597a ) ;
else {
var _0x76c694 = { } ;
for ( var _0x1bab2d in _0x521a09 ) 'screen' !== _0x1bab2d && ( _0x76c694 [ _0x1bab2d ] = _0x521a09 [ _0x1bab2d ] ) ;
_0x51c1c9 . invokeGetUserMedia ( _0x4adbb1 , _0x3ae868 , _0x76c694 ) ;
}
} , function ( _0x286f92 ) {
console . error ( 'Unable to capture screen on Edge. HTTPs and version 17+ is required.' ) ;
} ) : _0x51c1c9 . getScreenConstraints ( function ( _0x33fd74 , _0x4af197 ) {
if ( _0x33fd74 ) throw _0x33fd74 ;
_0x51c1c9 . invokeGetUserMedia ( {
'audio' : ! ! _0x93df62 ( _0x51c1c9 ) && _0x405170 ( _0x4af197 ) ,
'video' : _0x4af197 ,
'isScreen' : true
} , function ( _0x295451 ) {
if ( ! _0x521a09 . audio && ! _0x521a09 . video || _0x93df62 ( _0x51c1c9 ) ) _0x3ae868 ( _0x295451 ) ;
else {
var _0x4af197 = { } ;
for ( var _0x3fbf75 in _0x521a09 ) 'screen' !== _0x3fbf75 && ( _0x4af197 [ _0x3fbf75 ] = _0x521a09 [ _0x3fbf75 ] ) ;
_0x51c1c9 . invokeGetUserMedia ( _0x4adbb1 , _0x3ae868 , _0x4af197 ) ;
}
} ) ;
} ) : ( _0x521a09 . audio || _0x521a09 . video ) && _0x51c1c9 . invokeGetUserMedia ( _0x4adbb1 , _0x3ae868 , _0x521a09 ) ) ;
} , _0x51c1c9 . onbeforeunload = function ( _0x403853 , _0xcfe5cf ) {
_0x51c1c9 . closeBeforeUnload && ( _0x51c1c9 . peers . getAllParticipants ( ) . forEach ( function ( _0x135225 ) {
_0x21b268 . onNegotiationNeeded ( {
'userLeft' : true
} , _0x135225 ) , _0x51c1c9 . peers [ _0x135225 ] && _0x51c1c9 . peers [ _0x135225 ] . peer && _0x51c1c9 . peers [ _0x135225 ] . peer . close ( ) , delete _0x51c1c9 . peers [ _0x135225 ] ;
} ) , _0xcfe5cf || _0x51c1c9 . closeSocket ( ) , _0x51c1c9 . isInitiator = ! 0x1 ) ;
} , window . ignoreBeforeUnload ? _0x51c1c9 . closeBeforeUnload = ! 0x1 : ( _0x51c1c9 . closeBeforeUnload = true , window . addEventListener ( 'beforeunload' , _0x51c1c9 . onbeforeunload , ! 0x1 ) ) , _0x51c1c9 . userid = _0x5b8d5d ( ) , _0x51c1c9 . changeUserId = function ( _0x305ce9 , _0x4c71e8 ) {
_0x4c71e8 = _0x4c71e8 || function ( ) { } , _0x51c1c9 . userid = _0x305ce9 || _0x5b8d5d ( ) , _0x51c1c9 . socket . emit ( 'changed-uuid' , _0x51c1c9 . userid , _0x4c71e8 ) ;
} , _0x51c1c9 . extra = { } , _0x51c1c9 . attachStreams = [ ] , _0x51c1c9 . session = {
'audio' : true ,
'video' : true
} , _0x51c1c9 . enableFileSharing = ! 0x1 , _0x51c1c9 . bandwidth = {
'screen' : ! 0x1 ,
'audio' : ! 0x1 ,
'video' : ! 0x1
} , _0x51c1c9 . codecs = {
'audio' : 'opus' ,
'video' : 'VP9'
} , _0x51c1c9 . processSdp = function ( _0xec5090 ) {
return _0x5407aa ( ) ? _0xec5090 : 'Safari' === DetectRTC . browser . name ? _0xec5090 : ( 'VP8' === _0x51c1c9 . codecs . video . toUpperCase ( ) && ( _0xec5090 = _0x42fdaa . preferCodec ( _0xec5090 , 'vp8' ) ) , 'VP9' === _0x51c1c9 . codecs . video . toUpperCase ( ) && ( _0xec5090 = _0x42fdaa . preferCodec ( _0xec5090 , 'vp9' ) ) , 'H264' === _0x51c1c9 . codecs . video . toUpperCase ( ) && ( _0xec5090 = _0x42fdaa . preferCodec ( _0xec5090 , 'h264' ) ) , 'G722' === _0x51c1c9 . codecs . audio && ( _0xec5090 = _0x42fdaa . removeNonG722 ( _0xec5090 ) ) , 'Firefox' === DetectRTC . browser . name ? _0xec5090 : ( ( _0x51c1c9 . bandwidth . video || _0x51c1c9 . bandwidth . screen ) && ( _0xec5090 = _0x42fdaa . setApplicationSpecificBandwidth ( _0xec5090 , _0x51c1c9 . bandwidth , ! ! _0x51c1c9 . session . screen ) ) , _0x51c1c9 . bandwidth . video && ( _0xec5090 = _0x42fdaa . setVideoBitrates ( _0xec5090 , {
'min' : 0x8 * _0x51c1c9 . bandwidth . video * 0x400 ,
'max' : 0x8 * _0x51c1c9 . bandwidth . video * 0x400
} ) ) , _0x51c1c9 . bandwidth . audio && ( _0xec5090 = _0x42fdaa . setOpusAttributes ( _0xec5090 , {
'maxaveragebitrate' : 0x8 * _0x51c1c9 . bandwidth . audio * 0x400 ,
'maxplaybackrate' : 0x8 * _0x51c1c9 . bandwidth . audio * 0x400 ,
'stereo' : 0x1 ,
'maxptime' : 0x3
} ) ) , _0xec5090 ) ) ;
} , void 0x0 !== _0x42fdaa && ( _0x51c1c9 . BandwidthHandler = _0x51c1c9 . CodecsHandler = _0x42fdaa ) , _0x51c1c9 . mediaConstraints = {
'audio' : {
'mandatory' : { } ,
'optional' : _0x51c1c9 . bandwidth . audio ? [ {
'bandwidth' : 0x8 * _0x51c1c9 . bandwidth . audio * 0x400 || 0x100000
} ] : [ ]
} ,
'video' : {
'mandatory' : { } ,
'optional' : _0x51c1c9 . bandwidth . video ? [ {
'bandwidth' : 0x8 * _0x51c1c9 . bandwidth . video * 0x400 || 0x100000
} , {
'facingMode' : 'user'
} ] : [ {
'facingMode' : 'user'
} ]
}
} , 'Firefox' === DetectRTC . browser . name && ( _0x51c1c9 . mediaConstraints = {
'audio' : true ,
'video' : true
} ) , _0x326931 . useDefaultDevices || DetectRTC . isMobileDevice || DetectRTC . load ( function ( ) {
var _0x1056a5 , _0x326931 ;
if ( DetectRTC . MediaDevices . forEach ( function ( _0x1e1549 ) {
'audioinput' === _0x1e1549 . kind && ! 0x1 !== _0x51c1c9 . mediaConstraints . audio && ( _0x1056a5 = _0x1e1549 ) , 'videoinput' === _0x1e1549 . kind && ! 0x1 !== _0x51c1c9 . mediaConstraints . video && ( _0x326931 = _0x1e1549 ) ;
} ) , _0x1056a5 ) {
if ( 'Firefox' === DetectRTC . browser . name ) return void ( true !== _0x51c1c9 . mediaConstraints . audio ? _0x51c1c9 . mediaConstraints . audio . deviceId = _0x1056a5 . id : _0x51c1c9 . mediaConstraints . audio = {
'deviceId' : _0x1056a5 . id
} ) ;
0x1 == _0x51c1c9 . mediaConstraints . audio && ( _0x51c1c9 . mediaConstraints . audio = {
'mandatory' : { } ,
'optional' : [ ]
} ) , _0x51c1c9 . mediaConstraints . audio . optional || ( _0x51c1c9 . mediaConstraints . audio . optional = [ ] ) ;
var _0x21b268 = [ {
'sourceId' : _0x1056a5 . id
} ] ;
_0x51c1c9 . mediaConstraints . audio . optional = _0x21b268 . concat ( _0x51c1c9 . mediaConstraints . audio . optional ) ;
}
if ( _0x326931 ) {
if ( 'Firefox' === DetectRTC . browser . name ) return void ( true !== _0x51c1c9 . mediaConstraints . video ? _0x51c1c9 . mediaConstraints . video . deviceId = _0x326931 . id : _0x51c1c9 . mediaConstraints . video = {
'deviceId' : _0x326931 . id
} ) ;
0x1 == _0x51c1c9 . mediaConstraints . video && ( _0x51c1c9 . mediaConstraints . video = {
'mandatory' : { } ,
'optional' : [ ]
} ) , _0x51c1c9 . mediaConstraints . video . optional || ( _0x51c1c9 . mediaConstraints . video . optional = [ ] ) ;
_0x21b268 = [ {
'sourceId' : _0x326931 . id
} ] ;
_0x51c1c9 . mediaConstraints . video . optional = _0x21b268 . concat ( _0x51c1c9 . mediaConstraints . video . optional ) ;
}
} ) , _0x51c1c9 . sdpConstraints = {
'mandatory' : {
'OfferToReceiveAudio' : true ,
'OfferToReceiveVideo' : true
} ,
'optional' : [ {
'VoiceActivityDetection' : ! 0x1
} ]
} , _0x51c1c9 . sdpSemantics = null , _0x51c1c9 . iceCandidatePoolSize = null , _0x51c1c9 . bundlePolicy = null , _0x51c1c9 . rtcpMuxPolicy = null , _0x51c1c9 . iceTransportPolicy = null , _0x51c1c9 . optionalArgument = {
'optional' : [ {
'DtlsSrtpKeyAgreement' : true
} , {
'googImprovedWifiBwe' : true
} , {
'googScreencastMinBitrate' : 0x12c
} , {
'googIPv6' : true
} , {
'googDscp' : true
} , {
'googCpuUnderuseThreshold' : 0x37
} , {
'googCpuOveruseThreshold' : 0x55
} , {
'googSuspendBelowMinBitrate' : true
} , {
'googCpuOveruseDetection' : true
} ] ,
'mandatory' : { }
} , _0x51c1c9 . iceServers = _0x3b9609 . getIceServers ( _0x51c1c9 ) , _0x51c1c9 . candidates = {
'host' : true ,
'stun' : true ,
'turn' : true
} , _0x51c1c9 . iceProtocols = {
'tcp' : true ,
'udp' : true
} , _0x51c1c9 . onopen = function ( _0x44d923 ) {
_0x51c1c9 . enableLogs && console . info ( 'Data connection has been opened between you & ' , _0x44d923 . userid ) ;
} , _0x51c1c9 . onclose = function ( _0x4bc33b ) {
_0x51c1c9 . enableLogs && console . warn ( 'Data connection has been closed between you & ' , _0x4bc33b . userid ) ;
} , _0x51c1c9 . onerror = function ( _0x119131 ) {
_0x51c1c9 . enableLogs && console . error ( _0x119131 . userid , 'data-error' , _0x119131 ) ;
} , _0x51c1c9 . onmessage = function ( _0x377929 ) {
_0x51c1c9 . enableLogs && console . debug ( 'data-message' , _0x377929 . userid , _0x377929 . data ) ;
} , _0x51c1c9 . send = function ( _0x21e29b , _0x2e0c9a ) {
_0x51c1c9 . peers . send ( _0x21e29b , _0x2e0c9a ) ;
} , _0x51c1c9 . close = _0x51c1c9 . disconnect = _0x51c1c9 . leave = function ( ) {
_0x51c1c9 . onbeforeunload ( ! 0x1 , true ) ;
} , _0x51c1c9 . closeEntireSession = function ( _0x5971f7 ) {
_0x5971f7 = _0x5971f7 || function ( ) { } , _0x51c1c9 . socket . emit ( 'close-entire-session' , function _0x326931 ( ) {
_0x51c1c9 . getAllParticipants ( ) . length ? setTimeout ( _0x326931 , 0x64 ) : ( _0x51c1c9 . onEntireSessionClosed ( {
'sessionid' : _0x51c1c9 . sessionid ,
'userid' : _0x51c1c9 . userid ,
'extra' : _0x51c1c9 . extra
} ) , _0x51c1c9 . changeUserId ( null , function ( ) {
_0x51c1c9 . close ( ) , _0x5971f7 ( ) ;
} ) ) ;
} ) ;
} , _0x51c1c9 . onEntireSessionClosed = function ( _0x308fc8 ) {
_0x51c1c9 . enableLogs && console . info ( 'Entire session is closed: ' , _0x308fc8 . sessionid , _0x308fc8 . extra ) ;
} , _0x51c1c9 . onstream = function ( _0x2795c9 ) {
var _0x326931 = _0x51c1c9 . videosContainer ;
_0x326931 . insertBefore ( _0x2795c9 . mediaElement , _0x326931 . firstChild ) ;
var _0x21b268 = _0x2795c9 . mediaElement . play ( ) ;
void 0x0 === _0x21b268 ? setTimeout ( function ( ) {
_0x2795c9 . mediaElement . play ( ) ;
} , 0x7d0 ) : _0x21b268 . catch ( function ( ) { } ) . then ( function ( ) {
setTimeout ( function ( ) {
_0x2795c9 . mediaElement . play ( ) ;
} , 0x7d0 ) ;
} ) ;
} , _0x51c1c9 . onstreamended = function ( _0x22b684 ) {
_0x22b684 . mediaElement || ( _0x22b684 . mediaElement = document . getElementById ( _0x22b684 . streamid ) ) , _0x22b684 . mediaElement && _0x22b684 . mediaElement . parentNode && _0x22b684 . mediaElement . parentNode . removeChild ( _0x22b684 . mediaElement ) ;
} , _0x51c1c9 . direction = 'many-to-many' , _0x51c1c9 . removeStream = function ( _0x5af7be , _0x17537a ) {
var _0x21b268 ;
_0x51c1c9 . attachStreams . forEach ( function ( _0xc4fbb0 ) {
_0xc4fbb0 . id === _0x5af7be && ( _0x21b268 = _0xc4fbb0 ) ;
} ) , _0x21b268 ? ( _0x51c1c9 . peers . getAllParticipants ( ) . forEach ( function ( _0x2bd479 ) {
if ( ! _0x17537a || _0x2bd479 === _0x17537a ) {
var _0x521a09 = _0x51c1c9 . peers [ _0x2bd479 ] ;
try {
_0x521a09 . peer . removeStream ( _0x21b268 ) ;
} catch ( _0x159ea4 ) { }
}
} ) , _0x51c1c9 . renegotiate ( ) ) : console . warn ( 'No such stream exist.' , _0x5af7be ) ;
} , _0x51c1c9 . addStream = function ( _0x44d589 , _0x5d1f28 ) {
if ( _0x44d589 . getTracks ) return - 0x1 === _0x51c1c9 . attachStreams . indexOf ( _0x44d589 ) && ( _0x44d589 . streamid || ( _0x44d589 . streamid = _0x44d589 . id ) , _0x51c1c9 . attachStreams . push ( _0x44d589 ) ) , void _0x51c1c9 . renegotiate ( _0x5d1f28 ) ;
function _0x5a47df ( _0x4cd18b ) {
_0x44d589 . streamCallback && _0x44d589 . streamCallback ( _0x4cd18b ) , _0x51c1c9 . renegotiate ( _0x5d1f28 ) ;
}
_0x5deab2 ( _0x44d589 ) ? _0x51c1c9 . renegotiate ( _0x5d1f28 ) : ( _0x44d589 . audio || _0x44d589 . video || _0x44d589 . screen ) && ( _0x44d589 . screen ? 'Edge' === DetectRTC . browser . name ? navigator . getDisplayMedia ( {
'video' : true ,
'audio' : _0x93df62 ( _0x51c1c9 )
} ) . then ( function ( _0x3bef4d ) {
_0x3bef4d . isScreen = true , _0x21b268 . onGettingLocalMedia ( _0x3bef4d ) , ! _0x44d589 . audio && ! _0x44d589 . video || _0x93df62 ( _0x51c1c9 ) ? _0x5a47df ( _0x3bef4d ) : _0x51c1c9 . invokeGetUserMedia ( null , function ( _0x108d5e ) {
_0x5a47df ( _0x108d5e ) ;
} ) ;
} , function ( _0x107d05 ) {
console . error ( 'Unable to capture screen on Edge. HTTPs and version 17+ is required.' ) ;
} ) : _0x51c1c9 . getScreenConstraints ( function ( _0x247e33 , _0x20dba5 ) {
if ( _0x247e33 ) return 'PermissionDeniedError' === _0x247e33 ? ( _0x44d589 . streamCallback && _0x44d589 . streamCallback ( null ) , void ( _0x51c1c9 . enableLogs && console . error ( 'User rejected to share his screen.' ) ) ) : alert ( _0x247e33 ) ;
_0x51c1c9 . invokeGetUserMedia ( {
'audio' : ! ! _0x93df62 ( _0x51c1c9 ) && _0x405170 ( _0x20dba5 ) ,
'video' : _0x20dba5 ,
'isScreen' : true
} , function ( _0x3558fb ) {
! _0x44d589 . audio && ! _0x44d589 . video || _0x93df62 ( _0x51c1c9 ) ? _0x5a47df ( _0x3558fb ) : _0x51c1c9 . invokeGetUserMedia ( null , function ( _0x301cff ) {
_0x5a47df ( _0x301cff ) ;
} ) ;
} ) ;
} ) : ( _0x44d589 . audio || _0x44d589 . video ) && _0x51c1c9 . invokeGetUserMedia ( null , _0x5a47df ) ) ;
} , _0x51c1c9 . invokeGetUserMedia = function ( _0x39db84 , _0x4c2007 , _0x587a84 ) {
_0x587a84 || ( _0x587a84 = _0x51c1c9 . session ) , _0x39db84 || ( _0x39db84 = _0x51c1c9 . mediaConstraints ) , _0x5adfda ( {
'onGettingLocalMedia' : function ( _0x4608af ) {
var _0x587a84 = _0x39db84 . video ;
_0x587a84 && ( _0x587a84 . mediaSource || _0x587a84 . mozMediaSource ? _0x4608af . isScreen = true : _0x587a84 . mandatory && _0x587a84 . mandatory . chromeMediaSource && ( _0x4608af . isScreen = true ) ) , _0x4608af . isScreen || ( _0x4608af . isVideo = ! ! _0x2cbba5 ( _0x4608af , 'video' ) . length , _0x4608af . isAudio = ! _0x4608af . isVideo && _0x2cbba5 ( _0x4608af , 'audio' ) . length ) , _0x21b268 . onGettingLocalMedia ( _0x4608af , function ( ) {
'function' == typeof _0x4c2007 && _0x4c2007 ( _0x4608af ) ;
} ) ;
} ,
'onLocalMediaError' : function ( _0x290ef1 , _0x3a75f5 ) {
_0x21b268 . onLocalMediaError ( _0x290ef1 , _0x3a75f5 ) ;
} ,
'localMediaConstraints' : _0x39db84 || {
'audio' : ! ! _0x587a84 . audio && _0x39db84 . audio ,
'video' : ! ! _0x587a84 . video && _0x39db84 . video
}
} ) ;
} , _0x51c1c9 . applyConstraints = function ( _0x314dfa , _0x295b4a ) {
if ( _0x1d01b4 && _0x1d01b4 . prototype . applyConstraints ) {
var _0x21b268 ;
if ( _0x295b4a ) return _0x51c1c9 . streamEvents [ _0x295b4a ] && ( _0x21b268 = _0x51c1c9 . streamEvents [ _0x295b4a ] . stream ) , void _0x2559f7 ( _0x21b268 , _0x314dfa ) ;
_0x51c1c9 . attachStreams . forEach ( function ( _0x4e7a56 ) {
_0x2559f7 ( _0x4e7a56 , _0x314dfa ) ;
} ) ;
} else alert ( 'track.applyConstraints is NOT supported in your browser.' ) ;
} , _0x51c1c9 . replaceTrack = function ( _0x3642cb , _0xd04c26 , _0x485038 ) {
if ( _0x3642cb = _0x3642cb || { } , _0x2a4be1 . prototype . getSenders )
if ( _0x3642cb instanceof _0x1d01b4 ) _0x44cd42 ( _0x3642cb , _0xd04c26 , _0x485038 ) ;
else {
if ( _0x3642cb instanceof _0x1d809b ) return _0x2cbba5 ( _0x3642cb , 'video' ) . length && _0x44cd42 ( _0x2cbba5 ( _0x3642cb , 'video' ) [ 0x0 ] , _0xd04c26 , true ) , void ( _0x2cbba5 ( _0x3642cb , 'audio' ) . length && _0x44cd42 ( _0x2cbba5 ( _0x3642cb , 'audio' ) [ 0x0 ] , _0xd04c26 , ! 0x1 ) ) ;
if ( _0x5deab2 ( _0x3642cb ) ) throw 'connection.replaceTrack requires audio and/or video and/or screen.' ;
( _0x3642cb . audio || _0x3642cb . video || _0x3642cb . screen ) && ( _0x3642cb . screen ? 'Edge' === DetectRTC . browser . name ? navigator . getDisplayMedia ( {
'video' : true ,
'audio' : _0x93df62 ( _0x51c1c9 )
} ) . then ( function ( _0x675faf ) {
_0x675faf . isScreen = true , _0x21b268 . onGettingLocalMedia ( _0x675faf ) , ! _0x3642cb . audio && ! _0x3642cb . video || _0x93df62 ( _0x51c1c9 ) ? _0x564a08 ( _0x675faf ) : _0x51c1c9 . invokeGetUserMedia ( null , _0x564a08 ) ;
} , function ( _0x4219c9 ) {
console . error ( 'Unable to capture screen on Edge. HTTPs and version 17+ is required.' ) ;
} ) : _0x51c1c9 . getScreenConstraints ( function ( _0x38cb24 , _0x2fa66e ) {
if ( _0x38cb24 ) return alert ( _0x38cb24 ) ;
_0x51c1c9 . invokeGetUserMedia ( {
'audio' : ! ! _0x93df62 ( _0x51c1c9 ) && _0x405170 ( _0x2fa66e ) ,
'video' : _0x2fa66e ,
'isScreen' : true
} , ! _0x3642cb . audio && ! _0x3642cb . video || _0x93df62 ( _0x51c1c9 ) ? _0x564a08 : _0x51c1c9 . invokeGetUserMedia ( null , _0x564a08 ) ) ;
} ) : ( _0x3642cb . audio || _0x3642cb . video ) && _0x51c1c9 . invokeGetUserMedia ( null , _0x564a08 ) ) ;
}
else _0x51c1c9 . addStream ( _0x3642cb ) ;
function _0x564a08 ( _0x547ff0 ) {
_0x51c1c9 . replaceTrack ( _0x547ff0 , _0xd04c26 , _0x485038 || _0x3642cb . video || _0x3642cb . screen ) ;
}
} , _0x51c1c9 . resetTrack = function ( _0x1215de , _0x3d0c09 ) {
_0x1215de || ( _0x1215de = _0x51c1c9 . getAllParticipants ( ) ) , 'string' == typeof _0x1215de && ( _0x1215de = [ _0x1215de ] ) , _0x1215de . forEach ( function ( _0x17e765 ) {
var _0x21b268 = _0x51c1c9 . peers [ _0x17e765 ] . peer ;
void 0x0 !== _0x3d0c09 && true !== _0x3d0c09 || ! _0x21b268 . lastVideoTrack || _0x51c1c9 . replaceTrack ( _0x21b268 . lastVideoTrack , _0x17e765 , true ) , void 0x0 !== _0x3d0c09 && ! 0x1 !== _0x3d0c09 || ! _0x21b268 . lastAudioTrack || _0x51c1c9 . replaceTrack ( _0x21b268 . lastAudioTrack , _0x17e765 , ! 0x1 ) ;
} ) ;
} , _0x51c1c9 . renegotiate = function ( _0x2ea770 ) {
_0x2ea770 ? _0x21b268 . renegotiatePeer ( _0x2ea770 ) : _0x51c1c9 . peers . getAllParticipants ( ) . forEach ( function ( _0x428915 ) {
_0x21b268 . renegotiatePeer ( _0x428915 ) ;
} ) ;
} , _0x51c1c9 . setStreamEndHandler = function ( _0x46fab4 , _0x3cea1b ) {
if ( _0x46fab4 && _0x46fab4 . addEventListener && ( _0x3cea1b = ! ! _0x3cea1b , ! _0x46fab4 . alreadySetEndHandler ) ) {
_0x46fab4 . alreadySetEndHandler = true ;
var _0x21b268 = 'ended' ;
'oninactive' in _0x46fab4 && ( _0x21b268 = 'inactive' ) , _0x46fab4 . addEventListener ( _0x21b268 , function ( ) {
if ( _0x46fab4 . idInstance && currentUserMediaRequest . remove ( _0x46fab4 . idInstance ) , ! _0x3cea1b ) {
var _0x21b268 = [ ] ;
_0x51c1c9 . attachStreams . forEach ( function ( _0x35d5da ) {
_0x35d5da . id != _0x46fab4 . id && _0x21b268 . push ( _0x35d5da ) ;
} ) , _0x51c1c9 . attachStreams = _0x21b268 ;
}
var _0x521a09 = _0x51c1c9 . streamEvents [ _0x46fab4 . streamid ] ;
if ( _0x521a09 || ( _0x521a09 = {
'stream' : _0x46fab4 ,
'streamid' : _0x46fab4 . streamid ,
'type' : _0x3cea1b ? 'remote' : 'local' ,
'userid' : _0x51c1c9 . userid ,
'extra' : _0x51c1c9 . extra ,
'mediaElement' : _0x51c1c9 . streamEvents [ _0x46fab4 . streamid ] ? _0x51c1c9 . streamEvents [ _0x46fab4 . streamid ] . mediaElement : null
} ) , _0x3cea1b && _0x51c1c9 . peers [ _0x521a09 . userid ] ) {
var _0x38a800 = _0x51c1c9 . peers [ _0x521a09 . userid ] . peer ;
_0x21b268 = [ ] ;
_0x38a800 . getRemoteStreams ( ) . forEach ( function ( _0x59d565 ) {
_0x59d565 . id != _0x46fab4 . id && _0x21b268 . push ( _0x59d565 ) ;
} ) , _0x51c1c9 . peers [ _0x521a09 . userid ] . streams = _0x21b268 ;
}
_0x521a09 . userid === _0x51c1c9 . userid && 'remote' === _0x521a09 . type || ( _0x51c1c9 . peersBackup [ _0x521a09 . userid ] && ( _0x521a09 . extra = _0x51c1c9 . peersBackup [ _0x521a09 . userid ] . extra ) , _0x51c1c9 . onstreamended ( _0x521a09 ) , delete _0x51c1c9 . streamEvents [ _0x46fab4 . streamid ] ) ;
} , ! 0x1 ) ;
}
} , _0x51c1c9 . onMediaError = function ( _0x77c67c , _0x3533b2 ) {
_0x51c1c9 . enableLogs && console . error ( _0x77c67c , _0x3533b2 ) ;
} , _0x51c1c9 . autoCloseEntireSession = ! 0x1 , _0x51c1c9 . filesContainer = _0x51c1c9 . videosContainer = document . body || document . documentElement , _0x51c1c9 . isInitiator = ! 0x1 , _0x51c1c9 . shareFile = _0x21b268 . shareFile , void 0x0 !== _0x2cf1f3 && _0x2cf1f3 . handle ( _0x51c1c9 ) , void 0x0 !== _0x400337 && _0x400337 . handle ( _0x51c1c9 ) , _0x51c1c9 . token = _0x5b8d5d , _0x51c1c9 . onNewParticipant = function ( _0xeb9f65 , _0xbff370 ) {
_0x51c1c9 . acceptParticipationRequest ( _0xeb9f65 , _0xbff370 ) ;
} , _0x51c1c9 . acceptParticipationRequest = function ( _0xdc5fa8 , _0x444726 ) {
_0x444726 . successCallback && ( _0x444726 . successCallback ( ) , delete _0x444726 . successCallback ) , _0x21b268 . createNewPeer ( _0xdc5fa8 , _0x444726 ) ;
} , void 0x0 !== _0x25e82e && ( _0x51c1c9 . StreamsHandler = _0x25e82e ) , _0x51c1c9 . onleave = function ( _0x256c0a ) { } , _0x51c1c9 . invokeSelectFileDialog = function ( _0x54e1d5 ) {
var _0x326931 = new _0x2e28ea ( ) ;
_0x326931 . accept = '*.*' , _0x326931 . selectSingleFile ( _0x54e1d5 ) ;
} , _0x51c1c9 . onmute = function ( _0x4cea9f ) {
if ( _0x4cea9f && _0x4cea9f . mediaElement )
if ( 'both' === _0x4cea9f . muteType || 'video' === _0x4cea9f . muteType ) {
_0x4cea9f . mediaElement . src = null ;
var _0x326931 = _0x4cea9f . mediaElement . pause ( ) ;
void 0x0 !== _0x326931 ? _0x326931 . then ( function ( ) {
_0x4cea9f . mediaElement . poster = _0x4cea9f . snapshot || 'https://cdn.webrtc-experiment.com/images/muted.png' ;
} ) : _0x4cea9f . mediaElement . poster = _0x4cea9f . snapshot || 'https://cdn.webrtc-experiment.com/images/muted.png' ;
} else 'audio' === _0x4cea9f . muteType && ( _0x4cea9f . mediaElement . muted = true ) ;
} , _0x51c1c9 . onunmute = function ( _0x59c1a4 ) {
_0x59c1a4 && _0x59c1a4 . mediaElement && _0x59c1a4 . stream && ( 'both' === _0x59c1a4 . unmuteType || 'video' === _0x59c1a4 . unmuteType ? ( _0x59c1a4 . mediaElement . poster = null , _0x59c1a4 . mediaElement . srcObject = _0x59c1a4 . stream , _0x59c1a4 . mediaElement . play ( ) ) : 'audio' === _0x59c1a4 . unmuteType && ( _0x59c1a4 . mediaElement . muted = ! 0x1 ) ) ;
} , _0x51c1c9 . onExtraDataUpdated = function ( _0x429b15 ) {
_0x429b15 . status = 'online' , _0x51c1c9 . onUserStatusChanged ( _0x429b15 , true ) ;
} , _0x51c1c9 . getAllParticipants = function ( _0x57626c ) {
return _0x51c1c9 . peers . getAllParticipants ( _0x57626c ) ;
} , void 0x0 !== _0x25e82e && ( _0x25e82e . onSyncNeeded = function ( _0x45be06 , _0x6b0c44 , _0xe6bdb1 ) {
_0x51c1c9 . peers . getAllParticipants ( ) . forEach ( function ( _0x26b256 ) {
_0x21b268 . onNegotiationNeeded ( {
'streamid' : _0x45be06 ,
'action' : _0x6b0c44 ,
'streamSyncNeeded' : true ,
'type' : _0xe6bdb1 || 'both'
} , _0x26b256 ) ;
} ) ;
} ) , _0x51c1c9 . connectSocket = function ( _0x5d44b4 ) {
_0x2db9d8 ( _0x5d44b4 ) ;
} , _0x51c1c9 . closeSocket = function ( ) {
try {
_0x31267b . a . sockets = { } ;
} catch ( _0x3aa9a3 ) { }
_0x51c1c9 . socket && ( 'function' == typeof _0x51c1c9 . socket . disconnect && _0x51c1c9 . socket . disconnect ( ) , 'function' == typeof _0x51c1c9 . socket . resetProps && _0x51c1c9 . socket . resetProps ( ) , _0x51c1c9 . socket = null ) ;
} , _0x51c1c9 . getSocket = function ( _0x456c98 ) {
return ! _0x456c98 && _0x51c1c9 . enableLogs && console . warn ( 'getSocket.callback paramter is required.' ) , _0x456c98 = _0x456c98 || function ( ) { } , _0x51c1c9 . socket ? _0x456c98 ( _0x51c1c9 . socket ) : _0x2db9d8 ( function ( ) {
_0x456c98 ( _0x51c1c9 . socket ) ;
} ) , _0x51c1c9 . socket ;
} , _0x51c1c9 . getRemoteStreams = _0x21b268 . getRemoteStreams ;
var _0x521c36 = [ 'selectFirst' , 'selectAll' , 'forEach' ] ;
if ( _0x51c1c9 . streamEvents = {
'selectFirst' : function ( _0x38ce07 ) {
return _0x51c1c9 . streamEvents . selectAll ( _0x38ce07 ) [ 0x0 ] ;
} ,
'selectAll' : function ( _0x4b13fa ) {
_0x4b13fa || ( _0x4b13fa = {
'local' : true ,
'remote' : true ,
'isScreen' : true ,
'isAudio' : true ,
'isVideo' : true
} ) , 'local' == _0x4b13fa && ( _0x4b13fa = {
'local' : true
} ) , 'remote' == _0x4b13fa && ( _0x4b13fa = {
'remote' : true
} ) , 'screen' == _0x4b13fa && ( _0x4b13fa = {
'isScreen' : true
} ) , 'audio' == _0x4b13fa && ( _0x4b13fa = {
'isAudio' : true
} ) , 'video' == _0x4b13fa && ( _0x4b13fa = {
'isVideo' : true
} ) ;
var _0x326931 = [ ] ;
return Object . keys ( _0x51c1c9 . streamEvents ) . forEach ( function ( _0x59aced ) {
var _0x521a09 = _0x51c1c9 . streamEvents [ _0x59aced ] ;
if ( - 0x1 === _0x521c36 . indexOf ( _0x59aced ) ) {
var _0x293b8c = true ;
_0x4b13fa . local && 'local' === _0x521a09 . type && ( _0x293b8c = ! 0x1 ) , _0x4b13fa . remote && 'remote' === _0x521a09 . type && ( _0x293b8c = ! 0x1 ) , _0x4b13fa . isScreen && _0x521a09 . stream . isScreen && ( _0x293b8c = ! 0x1 ) , _0x4b13fa . isVideo && _0x521a09 . stream . isVideo && ( _0x293b8c = ! 0x1 ) , _0x4b13fa . isAudio && _0x521a09 . stream . isAudio && ( _0x293b8c = ! 0x1 ) , _0x4b13fa . userid && _0x521a09 . userid === _0x4b13fa . userid && ( _0x293b8c = ! 0x1 ) , ! 0x1 === _0x293b8c && _0x326931 . push ( _0x521a09 ) ;
}
} ) , _0x326931 ;
}
} , _0x51c1c9 . socketURL = '/' , _0x51c1c9 . socketMessageEvent = 'RTCMultiConnection-Message' , _0x51c1c9 . socketCustomEvent = 'RTCMultiConnection-Custom-Message' , _0x51c1c9 . DetectRTC = DetectRTC , _0x51c1c9 . setCustomSocketEvent = function ( _0x1a650b ) {
_0x1a650b && ( _0x51c1c9 . socketCustomEvent = _0x1a650b ) , _0x51c1c9 . socket && _0x51c1c9 . socket . emit ( 'set-custom-socket-event-listener' , _0x51c1c9 . socketCustomEvent ) ;
} , _0x51c1c9 . getNumberOfBroadcastViewers = function ( _0x2acdba , _0x377d0c ) {
_0x51c1c9 . socket && _0x2acdba && _0x377d0c && _0x51c1c9 . socket . emit ( 'get-number-of-users-in-specific-broadcast' , _0x2acdba , _0x377d0c ) ;
} , _0x51c1c9 . onNumberOfBroadcastViewersUpdated = function ( _0x617e81 ) {
_0x51c1c9 . enableLogs && _0x51c1c9 . isInitiator && console . info ( 'Number of broadcast (' , _0x617e81 . broadcastId , ') viewers' , _0x617e81 . numberOfBroadcastViewers ) ;
} , _0x51c1c9 . onUserStatusChanged = function ( _0x49e25f , _0x405028 ) {
_0x51c1c9 . enableLogs && ! _0x405028 && console . info ( _0x49e25f . userid , _0x49e25f . status ) ;
} , _0x51c1c9 . getUserMediaHandler = _0x5adfda , _0x51c1c9 . multiPeersHandler = _0x21b268 , _0x51c1c9 . enableLogs = true , _0x51c1c9 . setCustomSocketHandler = function ( _0x5840b1 ) {
void 0x0 !== _0x45c30f && ( _0x45c30f = _0x5840b1 ) ;
} , _0x51c1c9 . chunkSize = 0x9c40 , _0x51c1c9 . maxParticipantsAllowed = 0x3e8 , _0x51c1c9 . disconnectWith = _0x21b268 . disconnectWith , _0x51c1c9 . checkPresence = function ( _0x2c66c1 , _0xdf4545 ) {
_0x2c66c1 = _0x2c66c1 || _0x51c1c9 . sessionid , 'SSEConnection' !== _0x45c30f . name ? _0x51c1c9 . socket ? _0x51c1c9 . socket . emit ( 'check-presence' , _0x2c66c1 + '' , function ( _0x4d585b , _0xfb6315 , _0x414b29 ) {
_0x51c1c9 . enableLogs && console . log ( 'checkPresence.isRoomExist: ' , _0x4d585b , ' roomid: ' , _0xfb6315 ) , _0xdf4545 ( _0x4d585b , _0xfb6315 , _0x414b29 ) ;
} ) : _0x51c1c9 . connectSocket ( function ( ) {
_0x51c1c9 . checkPresence ( _0x2c66c1 , _0xdf4545 ) ;
} ) : SSEConnection . checkPresence ( _0x2c66c1 , function ( _0x2d2553 , _0x169410 , _0x48e686 ) {
if ( ! _0x51c1c9 . socket ) return _0x2d2553 || ( _0x51c1c9 . userid = _0x169410 ) , void _0x51c1c9 . connectSocket ( function ( ) {
_0xdf4545 ( _0x2d2553 , _0x169410 , _0x48e686 ) ;
} ) ;
_0xdf4545 ( _0x2d2553 , _0x169410 ) ;
} ) ;
} , _0x51c1c9 . onReadyForOffer = function ( _0x3f207b , _0x32ccc2 ) {
_0x51c1c9 . multiPeersHandler . createNewPeer ( _0x3f207b , _0x32ccc2 ) ;
} , _0x51c1c9 . setUserPreferences = function ( _0x371937 ) {
return _0x51c1c9 . dontAttachStream && ( _0x371937 . dontAttachLocalStream = true ) , _0x51c1c9 . dontGetRemoteStream && ( _0x371937 . dontGetRemoteStream = true ) , _0x371937 ;
} , _0x51c1c9 . updateExtraData = function ( ) {
_0x51c1c9 . socket . emit ( 'extra-data-updated' , _0x51c1c9 . extra ) ;
} , _0x51c1c9 . enableScalableBroadcast = ! 0x1 , _0x51c1c9 . maxRelayLimitPerUser = 0x3 , _0x51c1c9 . dontCaptureUserMedia = ! 0x1 , _0x51c1c9 . dontAttachStream = ! 0x1 , _0x51c1c9 . dontGetRemoteStream = ! 0x1 , _0x51c1c9 . onReConnecting = function ( _0x4ffc93 ) {
_0x51c1c9 . enableLogs && console . info ( 'ReConnecting with' , _0x4ffc93 . userid , '...' ) ;
} , _0x51c1c9 . beforeAddingStream = function ( _0xdd57a4 ) {
return _0xdd57a4 ;
} , _0x51c1c9 . beforeRemovingStream = function ( _0x191d70 ) {
return _0x191d70 ;
} , _0x51c1c9 . checkIfChromeExtensionAvailable = _0x53da88 , 'undefined' != typeof isFirefoxExtensionAvailable && ( _0x51c1c9 . checkIfChromeExtensionAvailable = isFirefoxExtensionAvailable ) , _0x51c1c9 . getChromeExtensionStatus = _0x1f670d , _0x51c1c9 . getScreenConstraints = function ( _0x3b0f5e , _0x32535a ) {
_0x93df62 ( _0x51c1c9 , _0x32535a ) && ( _0x32535a = true ) , _0x1c050b ( function ( _0x19ad7c , _0x5c7f16 ) {
_0x19ad7c || ( _0x5c7f16 = _0x51c1c9 . modifyScreenConstraints ( _0x5c7f16 ) , _0x3b0f5e ( _0x19ad7c , _0x5c7f16 ) ) ;
} , _0x32535a ) ;
} , _0x51c1c9 . modifyScreenConstraints = function ( _0x13a10e ) {
return _0x13a10e ;
} , _0x51c1c9 . onPeerStateChanged = function ( _0x5d030a ) {
_0x51c1c9 . enableLogs && - 0x1 !== _0x5d030a . iceConnectionState . search ( /closed|failed/gi ) && console . error ( 'Peer connection is closed between you & ' , _0x5d030a . userid , _0x5d030a . extra , 'state:' , _0x5d030a . iceConnectionState ) ;
} , _0x51c1c9 . isOnline = true , _0x1cbceb ( 'online' , function ( ) {
_0x51c1c9 . isOnline = true ;
} ) , _0x1cbceb ( 'offline' , function ( ) {
_0x51c1c9 . isOnline = ! 0x1 ;
} ) , _0x51c1c9 . isLowBandwidth = ! 0x1 , navigator && navigator . connection && navigator . connection . type && ( _0x51c1c9 . isLowBandwidth = - 0x1 !== navigator . connection . type . toString ( ) . toLowerCase ( ) . search ( /wifi|cell/g ) , _0x51c1c9 . isLowBandwidth ) ) {
if ( _0x51c1c9 . bandwidth = {
'audio' : ! 0x1 ,
'video' : ! 0x1 ,
'screen' : ! 0x1
} , _0x51c1c9 . mediaConstraints . audio && _0x51c1c9 . mediaConstraints . audio . optional && _0x51c1c9 . mediaConstraints . audio . optional . length ) {
var _0x4c7586 = [ ] ;
_0x51c1c9 . mediaConstraints . audio . optional . forEach ( function ( _0x330c5b ) {
void 0x0 === _0x330c5b . bandwidth && _0x4c7586 . push ( _0x330c5b ) ;
} ) , _0x51c1c9 . mediaConstraints . audio . optional = _0x4c7586 ;
}
if ( _0x51c1c9 . mediaConstraints . video && _0x51c1c9 . mediaConstraints . video . optional && _0x51c1c9 . mediaConstraints . video . optional . length ) {
_0x4c7586 = [ ] ;
_0x51c1c9 . mediaConstraints . video . optional . forEach ( function ( _0x427f57 ) {
void 0x0 === _0x427f57 . bandwidth && _0x4c7586 . push ( _0x427f57 ) ;
} ) , _0x51c1c9 . mediaConstraints . video . optional = _0x4c7586 ;
}
}
_0x51c1c9 . getExtraData = function ( _0xeb7d85 , _0x11bbdf ) {
if ( ! _0xeb7d85 ) throw 'remoteUserId is required.' ;
if ( ! _0x11bbdf ) return _0x51c1c9 . peers [ _0xeb7d85 ] ? _0x51c1c9 . peers [ _0xeb7d85 ] . extra : _0x51c1c9 . peersBackup [ _0xeb7d85 ] ? _0x51c1c9 . peersBackup [ _0xeb7d85 ] . extra : { } ;
_0x51c1c9 . socket . emit ( 'get-remote-user-extra-data' , _0xeb7d85 , function ( _0x2b3ef8 , _0x272a14 , _0x50b4c5 ) {
_0x11bbdf ( _0x2b3ef8 , _0x272a14 , _0x50b4c5 ) ;
} ) ;
} , _0x326931 . autoOpenOrJoin && _0x51c1c9 . openOrJoin ( _0x51c1c9 . sessionid ) , _0x51c1c9 . onUserIdAlreadyTaken = function ( _0x375333 , _0x594a1c ) {
_0x51c1c9 . close ( ) , _0x51c1c9 . closeSocket ( ) , _0x51c1c9 . isInitiator = ! 0x1 , _0x51c1c9 . userid = _0x51c1c9 . token ( ) , _0x51c1c9 . join ( _0x51c1c9 . sessionid ) , _0x51c1c9 . enableLogs && console . warn ( 'Userid already taken.' , _0x375333 , 'Your new userid:' , _0x51c1c9 . userid ) ;
} , _0x51c1c9 . trickleIce = true , _0x51c1c9 . version = '3.6.5' , _0x51c1c9 . onSettingLocalDescription = function ( _0x5cd808 ) {
_0x51c1c9 . enableLogs && console . info ( 'Set local description for remote user' , _0x5cd808 . userid ) ;
} , _0x51c1c9 . resetScreen = function ( ) {
_0x427b66 = null , DetectRTC && DetectRTC . screen && delete DetectRTC . screen . sourceId , currentUserMediaRequest = {
'streams' : [ ] ,
'mutex' : ! 0x1 ,
'queueRequests' : [ ]
} ;
} , _0x51c1c9 . autoCreateMediaElement = true , _0x51c1c9 . password = null , _0x51c1c9 . setPassword = function ( _0x3fec38 , _0x196913 ) {
_0x196913 = _0x196913 || function ( ) { } , _0x51c1c9 . socket ? _0x51c1c9 . socket . emit ( 'set-password' , _0x3fec38 , _0x196913 ) : ( _0x51c1c9 . password = _0x3fec38 , _0x196913 ( true , _0x51c1c9 . sessionid , null ) ) ;
} , _0x51c1c9 . errors = {
'ROOM_NOT_AVAILABLE' : 'Room not available' ,
'INVALID_PASSWORD' : 'Invalid password' ,
'USERID_NOT_AVAILABLE' : 'User ID does not exist' ,
'ROOM_PERMISSION_DENIED' : 'Room permission denied' ,
'ROOM_FULL' : 'Room full' ,
'DID_NOT_JOIN_ANY_ROOM' : 'Did not join any room yet' ,
'INVALID_SOCKET' : 'Invalid socket' ,
'PUBLIC_IDENTIFIER_MISSING' : 'publicRoomIdentifier is required' ,
'INVALID_ADMIN_CREDENTIAL' : 'Invalid username or password attempted'
} ;
} ( this ) ;
} ;
} . call ( this , _0x2fa590 ( 0x49 ) . Buffer , _0x2fa590 ( 0x1f ) , _0x2fa590 ( 0x31 ) ) ) ;
Version 3.0.5 is finally here!
Changes:
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
- Updated repository docs
2022-09-24 17:50:44 +00:00
} , window . EJS _main ] ) . default ;