<!doctypehtml><html lang=ca dir=ltr xmlns=http://www.w3.org/1999/xhtml><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content="text/html; charset=utf-8"http-equiv=Content-Type><meta name=viewport content="user-scalable=1,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name=format-detection content="telephone=no"><meta name=robots content=noindex,nofollow><link rel=manifest href={{{domainurl}}}manifest.json><link rel="shortcut icon"href={{{domainurl}}}favicon.ico><link rel=icon type=image/png sizes=16x16 href={{{domainurl}}}favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href={{{domainurl}}}favicon-32x32.png><link rel=apple-touch-icon href=/favicon-303x303.png><link type=text/css href=styles/xterm.css media=screen rel=stylesheet title=CSS><body id=body onload='"undefined"!=typeof startup&&startup()'style="overflow-y:hidden;margin:0;padding:0;border:0;font-size:13px;font-family:\'Trebuchet MS\',Arial,Helvetica,sans-serif">{{{customCSSTags}}}<meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=#ffffff><meta name=apple-mobile-web-app-title content={{{title}}}><script src=scripts/common-0.0.1{{{min}}}.js></script><script src=scripts/meshcentral{{{min}}}.js></script><script src=scripts/agent-redir-ws-0.1.1{{{min}}}.js></script><script src=scripts/agent-desktop-0.0.2{{{min}}}.js></script><script src=scripts/amt-0.2.0{{{min}}}.js></script><script src=scripts/amt-redir-ws-0.1.0{{{min}}}.js></script><script src=scripts/amt-desktop-0.0.2{{{min}}}.js></script><script src=scripts/xterm{{{min}}}.js></script><script src=scripts/xterm-addon-fit{{{min}}}.js></script><script src=scripts/xterm-addon-image{{{min}}}.js></script><script src=scripts/zlib{{{min}}}.js></script><script src=scripts/zlib-inflate{{{min}}}.js></script><script src=scripts/zlib-adler32{{{min}}}.js></script><script src=scripts/zlib-crc32{{{min}}}.js></script><script keeplink=1 src=scripts/filesaver.min.js></script>{{{customJSTags}}}<meta name=msapplication-TileColor content=#00aba9><meta name=theme-color content=#ffffff><title>{{{title}}}</title><style>body{background-color:#fff}.night body{background-color:#000}#MxMESH{color:#000}.night #MxMESH{color:#d3d3d3}.textOverGray{color:#000}#dialog{z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:90px;width:300px}.night #dialog{color:#000;background-color:#aaa}:focus{outline:0}a{color:#036;text-decoration:underline}.night a{color:#99f}#footer a{color:#fff;text-decoration:underline}#footer a:hover{text-decoration:none}.night #footer{color:gray}.i1{background:url(../images/icons50.png) 0 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i2{background:url(../images/icons50.png) -50px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i3{background:url(../images/icons50.png) -100px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i4{background:url(../images/icons50.png) -150px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i5{background:url(../images/icons50.png) -200px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i6{background:url(../images/icons50.png) -250px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i7{background:url(../images/icons50.png) -300px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i8{background:url(../images/icons50.png) -350px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.m0{background:url(../images/images16.png) -32px 0;height:16px;width:16px;border:none;float:left}.m1{background:url(../images/images16.png) -16px 0;height:16px;width:16px;border:none;float:left}.m2{background:url(../images/images16.png) -96px 0;height:16px;width:16px;border:none;float:left}.m3{background:url(../images/images16.png) -112px 0;height:16px;width:16px;border:none;float:left}.m4{background:url(../images/images16.png) -128px 0;height:16px;width:16px;border:none;float:left}.NotifyIconSmall1{width:24px;height:24px;background:url(../images/notify24.png) 0 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall2{width:24px;height:24px;background:url(../images/notify24.png) -24px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall3{width:24px;height:24px;background:url(../images/notify24.png) -48px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall4{width:24px;height:24px;background:url(../images/notify24.png) -72px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall5{width:24px;height:24px;background:url(../images/notify24.png) -96px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall6{width:24px;height:24px;background:url(../images/notify24.png) -120px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall7{width:24px;height:24px;background:url(../images/notify24.png) -144px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall8{width:24px;height:24px;background:url(../images/notify24.png) -168px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall9{width:24px;height:24px;background:url(../images/notify24.png) -192px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.gray{filter:gray;-webkit-filter:grayscale(100%) opacity(60%)}.DevSt{padding-left:5px;border-bottom-style:solid;border-bottom-width:1px;border-bottom-color:#ddd}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fileIcon1{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb49Y2Sj9LT2f///yH5BAEAAAMALAAAAAAQABAAAAImnI+py+1vhJwyUYAzHTL4D3qdlJWaIFJqmKod607sDKIiDUP63hQAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon2{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAM2xV/Xur+XPgP///yH5BAEAAAMALAAAAAAQABAAAAJD3ISZIGHWUGihznesYDYATFVM+D2hJ4lgN1olxALAtAlmPCJvuMmJd6PJckDYwicrHhTD5o7plJmg0Uc0asNMkphHAQA7);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon3{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb19IGBgbq6uv///yH5BAEAAAMALAAAAAAQABAAAAIy3ISpxgcPH2ouQgFEw1YmxnUXKEaaEZZnVWZk66JwzKpvuwZzwOgwb/C1gIOA8Yg8DgoAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon4{background:url(../images/meshicon16.png);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.filelist{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;cursor:default;-khtml-user-drag:element;clear:both}.deviceNotifyDot{position:absolute;right:10px;top:0;height:16px}.deviceNotifyDotSub{text-align:center;color:#fff;width:16px;background-color:#00f;padding:2px;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:3px;float:left}.deviceNotifyDotSub:hover{background-color:#44f}.deviceNotifySmallDot{position:absolute;right:10px;top:0;height:10px}.deviceNotifySmallDotSub{text-align:center;color:#fff;width:10px;padding:2px;background-color:#00f;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:2px;float:left}.deviceNotifySmallDotSub:hover{background-color:#44f}.deviceNotifyLargeDot{position:absolute;right:10px;top:10px;height:40px}.deviceNotifyLargeDotSub{text-align:center;width:35px;height:35px;color:#fff;padding:2px;background-color:#00f;border-radius:20px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:4px;font-size:30px;float:left}.deviceNotifyLargeDotSub:hover{background-color:#44f}.style10{background-color:#c9c9c9;color:#000}.night .style10{background-color:#888}.deviceBatteryLarge{position:absolute;right:10px;top:0;width:28px;height:48px;border:none;box-shadow:none}.deviceBatteryLarge1{background:url(../images/batteries48.png) 0 0}.deviceBatteryLarge2{background:url(../images/batteries48.png) -28px 0}.deviceBatteryLarge3{background:url(../images/batteries48.png) -56px 0}.deviceBatteryLarge4{background:url(../images/batteries48.png) -84px 0}.deviceBatteryLarge5{background:url(../images/batteries48.png) -112px 0}.deviceBatteryLarge6{background:url(../images/batteries48.png) -140px 0}.deviceBatteryLarge7{background:url(../images/batteries48.png) -168px 0}.deviceBatteryLarge8{background:url(../images/batteries48.png) -196px 0}.deviceBatteryLarge9{background:url(../images/batteries48.png) -224px 0}.deviceBatteryLarge10{background:url(../images/batteries48.png) -252px 0}.deviceBatteryLarge11{background:url(../images/batteries48.png) -280px 0}.deviceBatterySmall{position:absolute;left:6px;top:22px;width:14px;height:24px;border:none;box-shadow:none}.deviceBatterySmall1{background:url(../images/batteries24.png) 0 0}.deviceBatterySmall2{background:url(../images/batteries24.png) -14px 0}.deviceBatterySmall3{background:url(../images/batteries24.png) -28px 0}.deviceBatterySmall4{background:url(../images/batteries24.png) -42px 0}.deviceBatterySmall5{background:url(../images/batteries24.png) -56px 0}.deviceBatterySmall6{background:url(../images/batteries24.png) -70px 0}.deviceBatterySmall7{background:url(../images/batteries24.png) -84px 0}.deviceBatterySmall8{background:url(../images/batteries24.png) -98px 0}.deviceBatterySmall9{background:url(../images/batteries24.png) -112px 0}.deviceBatterySmall10{background:url(../images/batteries24.png) -126px 0}.deviceBatterySmall11{background:url(../images/batteries24.png) -140px 0}.meshList{width:auto;height:40px;background-color:#d3d3d3;margin-top:5px;margin-bottom:5px;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .meshList{background-color:gray}.devList1{height:50px;cursor:pointer;position:relative;margin-top:5px;margin-bottom:5px}.devList2{float:left;margin-left:4px}.devList3{width:auto;height:40px;background-color:#d3d3d3;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .devList3{background-color:gray}.devList4{padding-left:12px;padding-top:2px;color:#000}.devList5{padding-left:12px;padding-top:3px;color:#444}.night .devList5{color:#000}.deskButton{box-shadow:0 0 10px #000;border-radius:20px;position:absolute;right:10px;top:10px;cursor:pointer;background-color:#aaa;z-index:1000}.menuButton{box-shadow:0 0 10px #000;border-radius:10px;display:inline-block;width:120px;background-color:#aaa;text-align:center;padding:8px;cursor:pointer;margin:10px;z-index:1000}#notificationCount{min-width:28px;font-size:20px;background-color:orange;text-align:center;cursor:pointer;color:#000}.notifiyBox{font-size:16px;position:absolute;z-index:1000;top:60px;right:76px;width:300px;text-align:left;background-color:#f0eccd;border:4px solid #666;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888;max-height:200px}.night .notifiyBox{color:#000}.notifiyBox:before{content:' ';position:absolute;width:0;height:0;right:5px;top:-30px;border:15px solid;border-color:transparent #666 #666 transparent}.notifiyBox:after{content:' ';position:absolute;width:0;height:0;right:7px;top:-24px;border:12px solid;border-color:transparent #f0eccd #f0eccd transparent}#p15statetext{padding:4px;height:15px}#p15agentConsole{background:#000;margin:0;padding:0;color:#d3d3d3;width:100%;position:relative}#p15coreName{padding:4px;display:inline-block}#p15agentConsoleText{position:absolute;margin:0;padding:0;top:0;bottom:0;left:0;right:0;overflow-y:scroll;overflow-x:auto}.areaHead{padding-top:2px;padding-bottom:2px;background:silver}.night .areaHead{color:#ccc;background:#333}.areaFoot{padding-top:2px;padding-bottom:2px;background:silver}.night .areaFoot{color:#ccc;background:#333}.toright2{float:right;text-align:right}#consoleTable{width:100%;height:100%;padding:0;margin-top:0}.night #consoleTable{color:#000}.menucurve{background-color:#fff;width:10px;height:10px;border-radius:10px 0 0 0;border-right:1px solid #fff;border-bottom:1px solid #fff}.night .menucurve{background-color:#000;border-right:1px solid #000;border-bottom:1px solid #000}#termTable{width:100%;padding:0;margin-top:0}.fulldesk #termTable{position:absolute;top:0;bottom:0;left:0;right:0}#termarea3x{background:#000;text-align:center;height:400px;position:relative}.viewSelector10{margin-left:2px;margin-top:2px;background:url(../images/views.png) -476px 0;height:28px;width:28px}.viewSelector11{margin-left:2px;margin-top:2px;background:url(../images/views.png) -504px 0;height:28px;width:28px}.tagSpan{background-color:#d3d3d3;padding:3px;border-radius:5px}.night .tagSpan{color:#000}#d2serveraction,#d3serveraction{width:100%;background-color:#d3d9d6;text-align:left;padding:3px}#d2serverfiles,#d3serverfiles{width:100%;height:150px;background-color:#fff;padding:2px;border:1px solid gray;overflow-y:scroll}</style><div id=container><div id=notifiyBox class=notifiyBox style=display:none></div><div id=mastheadx></div><div id=masthead style="background:url(logo.png) 0 0;background-size:341px 50px;background-color:#036;background-repeat:no-repeat;height:50px;width:100%;overflow:hidden"><div style="width:calc(100% - 50px);overflow:hidden"><div style=float:left;height:66px;color:#c8c8c8;padding-left:10px;padding-top:6px onclick=go(2)><strong><font style="font-size:36px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title1}}}</font></strong></div><div style=float:left;height:66px;color:#c8c8c8;padding-left:5px;padding-top:10px><strong><font style="font-size:12px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title2}}}</font></strong></div></div><div id=devViewPageState class=noselect style=position:absolute;right:160px;top:10px;height:30px;line-height:30px;color:#c8c8c8;font-size:16px;display:none></div><img id=devViewPageButton2 class=noselect style=position:absolute;right:130px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(2) src=/images/left-30.png width=20 height=30> <img id=devViewPageButton3 class=noselect style=position:absolute;right:100px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(3) src=/images/right-30.png width=20 height=30><div id=notificationCount onclick=clickNotificationIcon() class=unselectable style=position:absolute;right:50px;top:0;font-size:28px;width:50px;height:50px;cursor:pointer;display:none title="Feu clic per veure les notificacions actuals"><div id=notificationCount2 style=padding-top:8px>0</div></div><img id=topMenuIcon class=noselect style=position:absolute;right:0;top:10px;color:#c8c8c8;font-size:44px;margin-right:8px;cursor:pointer;display:none onclick=topMenu() src=/images/3bars-30.png width=30 height=30></div><div id=page_content style=position:absolute;bottom:32px;top:50px;width:100%><div id=column_l style=width:100%;padding:0;position:absolute;bottom:0;top:0><div id=p0 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p0message style=text-align:center;width:100%><span id=p0span>Servidor desconnectat</span>,<href onclick=reload() style=cursor:pointer><u>feu clic per tornar a connectar</u></href>.</div></div></div><div id=p1 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p1message style=text-align:center;width:100%></div></div></div><div id=p2 style=display:none;position:absolute;top:0;left:0;right:0;bottom:0><div id=xdevices style=position:absolute;overflow-y:auto;top:0;left:0;right:0;bottom:34px onscroll=onDevicesScroll() ontouchstart=onDeviceTouch(!0) ontouchend=onDeviceTouch(!1)></div><div id=xdevicesBar style=position:absolute;overflow-y:auto;height:34px;left:0;right:0;bottom:0;background-color:#aaa;color:#000><div style=margin:4px><span style=width:20px;display:inline-block;text-align:center;cursor:pointer;font-size:16px onclick=clearSearchInput()><b>X</b></span> <input id=SearchInput autocomplete=off type=search placeholder=Filtre onchange=onDeviceSearchChanged(event) onclick=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) style=padding:2px;margin:0;height:20px;background-color:#fff>&nbsp; <label class=noselect><input type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox()>Nom del sistema operatiu</label> <label class=noselect><input type=checkbox id=OnlineCheckBox onclick=onOnlineCheckBox(event)>En línia</label></div></div></div><div id=p3 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><div style=margin-left:5px><strong style=font-size:large><span id=p3userName></span></strong><br></div></table><div id=p3info style=overflow-y:auto;position:absolute;top:55px;bottom:0;width:100%><img id=p2AccountImage alt=""width=128 height=128 onclick=account_manageImage(0) src=images/user-256.png style="position:absolute;right:8px;top:7px;border-radius:8px;box-shadow:0 0 7px #000"><div style=margin-left:8px><div id=p3AccountActions><div id=p2AccountSecurity style=display:none><p><strong>Seguretat del compte</strong><div style=margin-left:9px;margin-bottom:8px><div id=managePhoneNumber1 style=margin-top:5px;display:none><a onclick=account_managePhone() style=cursor:pointer>Gestionar el número de telèfon</a> <span id=authPhoneNumberCheck><strong>✓</strong></span></div><div id=manageEmail2FA style=margin-top:5px;display:none><a onclick=account_manageAuthEmail() style=cursor:pointer>Gestioneu l'autenticació del correu electrònic</a> <span id=authEmailSetupCheck><strong>✓</strong></span></div><div style=margin-top:5px><a href=# onclick=account_showLocalizationSettings()>Configuració de localització</a></div><div id=manageAuthApp style=margin-top:5px;display:none><a onclick=account_manageAuthApp() style=cursor:pointer>Gestioneu l'aplicació d'autenticació</a> <span id=authAppSetupCheck><strong>✓</strong></span></div><div id=manageOtp style=margin-top:5px;display:none><a onclick=account_manageOtp(0) style=cursor:pointer>Gestioneu els codis de seguretat</a> <span id=authCodesSetupCheck><strong>✓</strong></span></div></div></div><div id=p2AccountActions style=display:none><p><strong>Accions del compte</strong><div style=margin-left:9px;margin-bottom:8px><div style=margin-top:5px><span id=viewPreviousLogins><a onclick="return account_viewPreviousLogins()"style=cursor:pointer>Veure els inicis de sessió anteriors</a></span></div><div style=margin-top:5px><span id=managePhoneNumber2 style=display:none><a onclick=account_managePhone() style=cursor:pointer>Gestionar el número de telèfon</a></span></div><div style=margin-top:5px><span id=verifyEmailId style=display:none><a onclick=account_showVerifyEmail() style=cursor:pointer>Verificar Correu</a></span></div><span id=p2AccountPassActions><div style=margin-top:5px><span id=changeEmailId style=display:none><a onclick=account_showChangeEmail() style=cursor:pointer>Canvia l'adreça de correu electrònic</a></span></div><div style=margin-top:5px><a onclick=account_showChangePassword() style=cursor:pointer>Canvia la contrasenya</a><span id=p2nextPasswordUpdateTime></span></div><div style=margin-top:5px><a onclick=account_showDeleteAccount() style=cursor:pointer>Esborrar compte</a></div></span><div style=margin-top:5px id=setDarkModeLink><a onclick=toggleNightMode() style=cursor:pointer>Estableix el mode fosc</a></div><div style=margin-top:5px><a onclick=showNotes(!1) style=cursor:pointer>Notes personals</a></div></div><br style=clear:both></div></div><strong>Grups de dispositius</strong> <span id=p3createMeshLink1>( <a onclick=account_createMesh() style=cursor:pointer><img src=images/icon-addnew.png width=12 height=12 border=0> Nou</a> )</span><br><br><div id=p3meshes></div><div id=p3noMeshFound style=margin-left:9px;display:none>No hi ha grups de dispositius.<span id=p3createMeshLink2> <a onclick=account_createMesh() style=cursor:pointer><strong>Comença aquí!</strong></a></span></div><br style=clear:both></div></div></div><div id=p5 style=display:none><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><img src=/images/user-50.png width=50 height=50><td><div style=margin-left:5px><strong style=font-size:large>Els meus fitxers</strong><br></div></table><div id=p5myfiles style=position:absolute;top:55px;bottom:0;width:100%><table id=p5toolbar style=width:100%;height:78px cellpadding=0 cellspacing=0><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5FolderUp disabled onclick=p5folderup() value=Amunt> <input type=button style="width:calc(100%/5 - 5px)"id=p5SelectAllButton disabled onclick=p5selectallfile() value="Seleccionar tot"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RenameFileButton disabled value="Canvia el nom"onclick=p5renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5DeleteFileButton disabled value=Suprimeix onclick=p5deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5NewFolderButton disabled value=Carpeta onclick=p5createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5UploadButton disabled value=Carrega onclick=p5uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CutButton disabled value=Tallar onclick=p5copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CopyButton disabled value=Còpia onclick=p5copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5PasteButton disabled value=Enganxa onclick=p5pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RefreshButton value=Actualització onclick=p5refreshFiles() onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p5currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p5sortdropdown onchange=updateFiles()><option value=1 selected>Ordena per nom<option value=2>Ordena per mida<option value=3>Ordena per data<option value=4>Baixar pel nom<option value=5>Baixar per mida<option value=6>Descens per data</select></table></table><div id=p5filetable style="width:100%;height:calc(100% - 102px);overflow:auto;-webkit-user-select:none"><span id=p5files></span></div><table id=p5toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0;background-color:#d3d9d6 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px>&nbsp;<span id=p5bottomstatus></span><td id=p5rightOfButtons style=text-align:right;padding:3px></table></div></div><div id=p10 style=display:none;position:absolute;bottom:0;top:0;width:100%;overflow:hidden><table id=p10deskTopTable cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><a id=MainComputerImage style=cursor:pointer onclick=p10showiconselector()></a><td><div style=margin-left:5px><strong><span id=p10deviceName></span></strong><br><span id=MainComputerState></span></div></table><div id=p10dialog style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:30px;width:300px;left:30px;display:none"><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div style=padding:5px>Personalització de dreceres de teclat</div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=p10dialog2 style=margin:auto;margin:3px></div></div><div style=width:100%;padding:2px;text-align:center><input type=button value="Restaura les dreceres de teclat predeterminades"onclick=restoreDeskCustomizeKey()></div><div style=padding:10px;margin-bottom:20px><input type=button value="D'acord"style=float:right;width:80px onclick=deskCustomizeKeysEx()></div></div><div id=p10general style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div class=deviceNotifyLargeDot><img id=p10deviceStar class=deviceNotifyLargeDotSub src=images/icon-star-notify-40.png width=35 height=35><div id=p10deviceMsg onclick=showDeviceMessages(null,null,event) class=deviceNotifyLargeDotSub></div><img id=p10deviceNotify onclick=showDeviceSessions() class=deviceNotifyLargeDotSub src=images/icon-relay-notify-40.png width=35 height=35> <img id=p10deviceHelp onclick=showDeviceHelpRequests(null,null,event) class=deviceNotifyLargeDotSub src=images/icon-help-notify-40.png width=35 height=35></div><div id=p10deviceBattery class="deviceBatteryLarge deviceBatteryLarge1"></div><div id=p10html style=margin-left:8px;margin-right:8px></div><div id=p10html2></div><div id=p10html3 style=margin-left:8px></div></div><img id=deskkeybutton1 src=images/mobile-desk-exit.png class=deskButton style=top:10px;display:none onclick=exitButton()> <img id=deskkeybutton3a src=images/mobile-desk-menu-open.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!1)> <img id=deskkeybutton3b src=images/mobile-desk-menu-close.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!0)> <img id=deskkeybutton4a src=images/mobile-desk-mouse-left.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(0)> <img id=deskkeybutton4b src=images/mobile-desk-mouse-right.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(1)> <img id=deskkeybutton5a src=images/mobile-desk-scale-out.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton5b src=images/mobile-desk-scale-in.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton2a src=images/mobile-desk-keyboard-open.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()> <img id=deskkeybutton2b src=images/mobile-desk-keyboard-close.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()><div style=position:absolute;top:0;left:0;z-index:200;opacity:0;width:1px;height:1px><input id=softKeyboard autocapitalize=off autocomplete=off inputmode=text spellcheck=false style=z-index:200;opacity:0;width:1px;height:1px onfocus=keyboardFocusChange() onblur=keyboardFocusChange()></div><div id=deskButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10desktop style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none><div id=deskarea1 style=position:absolute;top:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver;height:32px><div style=float:right;text-align:right><span id=p14power></span>&nbsp; <input type=button id=deskFullScreen value="Pantalla completa"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px></div><div style=margin-left:3px><input type=button id=connectbutton1 value="Connecta't"onclick=connectDesktop(event,3) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=connectbutton1h value="HW Connect"onclick=connectDesktop(event,2) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=disconnectbutton1 value=Desconnecta onclick=connectDesktop(event,0) onkeypress=return!1 onkeydown=return!1 style=height:28px> <span id=deskstatus style=color:#000>Desconnectat</span></div></div></div><div id=deskarea3 style="position:absolute;top:32px;width:100%;height:calc(100% - 64px);background-color:#000;text-align:center"><div id=DeskParent style=height:100%><canvas id=Desk width=640 height=200 style=width:100%;-ms-touch-action:none;margin-left:0 oncontextmenu=return!1 onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event) onmousewheel=dmousewheel(event)></canvas></div><div id=p11DeskConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:17px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px;text-align:left onclick=p11clearConsoleMsg()></div><div id=p11DeskSessionSelector style=display:none;position:absolute;left:30px;top:17px;right:30px;bottom:17px;overflow-y:auto></div></div><div id=deskarea4 style=position:absolute;bottom:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver><div style=float:right;text-align:right;padding-right:2px><span id=DeskLockButton><img src=images/icon-lock.png onclick=deviceLockFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span><span id=DeskChatButton><img src=images/icon-chat.png onclick=deviceChat(event) height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskToastButton><img src=images/icon-notify.png onclick=deviceToastFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskOpenWebButton><img src=images/icon-url2.png onclick=deviceUrlFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskRunButton><img src=images/icon-play.png onclick=runDeviceCmd() height=16 width=16 style=padding-top:5px;cursor:pointer></span></div><div><input id=deskActionsBtn type=button style=margin-left:3px;height:28px onkeypress=return!1 onkeydown=return!1 value=Accions onclick=deviceActionFunction()> <input type=button value=Configuració onkeypress=return!1 onkeydown=return!1 onclick=showDesktopSettings() style=height:28px> <input type=button onkeypress=return!1 onkeydown=return!1 value="Accions de poder..."onclick=showPowerActionDlg() style=display:none;height:28px> <input type=button id=DeskScreens value=Pantalles onkeypress=return!1 onkeydown=return!1 onclick=deskSelectScreens() style=display:none;height:28px> <label><span id=DeskControlSpan style=display:none><input id=DeskControl type=checkbox onkeypress=return!1 onkeydown=return!1>Entrada</span></label></div></div></div></div><div id=termButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10terminal style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none;background-color:#333><div id=termTable style=position:absolute;top:0;bottom:0;left:0;right:0><div id=termarea1><div class=areaHead style=line-height:24px><div class=toright2><input type=button id=termFullScreen value="Pantalla completa"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px><div id=terminalCustomUpperRight style=float:left;margin-right:6px></div></div><div><span id=connectbutton2span style=margin-left:3px><input type=button id=connectbutton2 value="Connecta't"style=height:28px onclick=connectTerminal(event,1) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=connectbutton2sspan style=margin-right:4px><input type=button id=connectbutton2s value="Connexió SSH"style=height:28px onclick=connectTerminal(event,3) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=disconnectbutton2span style=margin-left:3px><input type=button id=disconnectbutton2 value=Desconnecta style=height:28px onclick=connectTerminal(event,0) onkeypress=return!1 onkeydown=return!1></span><span id=termstatus style=line-height:22px>Desconnectat</span><span id=termtitle></span></div></div></div><div id=termarea3 style="width:100%;height:calc(100% - 60px)"cellpadding=0 cellspacing=0><div id=termarea3x style=width:100%;height:100%><div style=width:100%;height:100%;text-align:left id=termarea3xdiv></div></div></div><div id=termarea4 style=position:relative;height:32px><div class=areaFoot><div class=toright2></div><div style=height:28px><input id=termActionsBtn style=margin-left:3px;height:28px type=button title="Realitzeu accions d'alimentació al dispositiu"onkeypress=return!1 onkeydown=return!1 value=Accions onclick=deviceActionFunction()> <input id=ctrlcbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=Ctl-C onclick='termSendKey(3,"ctrlcbutton")'> <input id=ctrlxbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=Ctl-X onclick='termSendKey(24,"ctrlxbutton")'> <input id=escbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=ESC onclick='termSendKey(27,"escbutton")'></div></div></div><div id=p12TermConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p12clearConsoleMsg()></div></div></div><div id=p10files style=position:absolute;top:55px;bottom:0;width:100%;display:none><table id=p13toolbar style=width:100%;height:111px cellpadding=0 cellspacing=0><tr><td style="background-color:silver;border-bottom:2px solid #000;padding:2px;line-height:24px"><div style=float:right;text-align:right><input id=filesActionsBtn type=button onkeypress=return!1 onkeydown=return!1 value=Accions onclick=deviceActionFunction() style=margin-right:2px><div id=filesCustomUpperRight style=float:left;margin-right:6px></div></div><div style=margin-left:2px><input id=p13AutoConnect value="Connexió automàtica"onclick=autoConnectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button style=display:none> <input id=p13Connect value="Connecta't"onclick=connectFiles(event,1) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Connects value="Connexió SFTP"onclick=connectFiles(event,2) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Disconnect value=Desconnecta onclick=connectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button> <span class=textOverGray id=p13Status>Desconnectat</span></div><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13FolderUp disabled onclick=p13folderup() value=Amunt> <input type=button style="width:calc(100%/5 - 5px)"id=p13SelectAllButton disabled onclick=p13selectallfile() value="Seleccionar tot"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RenameFileButton disabled value="Canvia el nom"onclick=p13renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13DeleteFileButton disabled value=Suprimeix onclick=p13deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13NewFolderButton disabled value=Carpeta onclick=p13createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13UploadButton disabled value=Carrega onclick=p13uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CutButton disabled value=Tallar onclick=p13copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CopyButton disabled value=Còpia onclick=p13copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13PasteButton disabled value=Enganxa onclick=p13pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RefreshButton disabled value=Actualització onclick=p13folderup(9999) onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p13currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p13sortdropdown onchange=p13updateFiles()><option value=1 selected>Ordena per nom<option value=2>Ordena per mida<option value=3>Ordena per data<option value=4>Baixar pel nom<option value=5>Baixar per mida<option value=6>Descens per data</select></table></table><div id=p13FilesConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:165px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p13clearConsoleMsg()></div><div id=p13filetable style="width:100%;height:calc(100% - 133px);overflow:auto;-webkit-user-select:none"><span id=p13files></span></div><table id=p13toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px;text-align:center;background-color:#d3d9d6;color:#000>&nbsp;<span id=p13bottomstatus></span></table></div><div id=p10details style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div id=p10detailshtml style=margin-left:-3px></div></div><div id=p10console style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%><table id=consoleTable cellpadding=0 cellspacing=0><tr style=height:28px><td class=areaHead><div class=toright2><div id=p15coreName></div><input type=button id=p15uploadCore value="Acció de l'agent"onclick=p15uploadCore(event)></div><div id=p15statetext></div><tr><td id=p15agentConsole style=position:relative><pre id=p15agentConsoleText></pre><tr style=height:28px><td class=areaFoot><table style=width:100%><tr><td style=width:99%><input id=p15consoleText style=width:100%;box-sizing:border-box onkeyup=p15consoleSend(event)><td id=p15outputselecttd><select id=p15outputselect onchange=setupConsole()><option id=p15outputselect1 value=1>Agent<option id=p15outputselect3 value=3>Empènyer<option id=p15outputselect2 value=2>MQTT</select><td style=width:1%><input id=id_p15consoleClear type=button class=bottombutton value=Clar onclick=p15consoleClear()></table></table></div></div><div id=p20 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td onclick=p20editmesh(1)><img src=/images/meshicon50.png width=50 height=50><td onclick=p20editmesh(1)><div style=margin-left:5px><strong style=font-size:large><span id=p20meshName></span></strong><br></div></table><div style=overflow-y:auto;position:absolute;top:55px;bottom:0;left:0;right:0><div id=p20info style=margin-left:8px;margin-right:8px></div></div></div></div></div><div id=footer style=height:32px;width:100%;text-align:center;background-color:#113962;position:absolute;bottom:0><table id=footerMenu cellpadding=0 cellspacing=0 style=height:32px;width:100%;color:#fff;cursor:pointer;table-layout:fixed></table></div></div><div id=dialog style=display:none><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div id=id_dialogclose style=float:right;padding:5px;cursor:pointer onclick=setDialogMode()><b>X</b></div><div id=id_dialogtitle style=padding:5px></div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=dialog1 style=margin:auto;text-align:center;margin:3px><div id=id_dialogMessage style=padding:10px></div></div><div id=dialog2 style=margin:auto;margin:3px><div id=id_dialogOptions></div></div><div id=dialog3 style=margin:auto;margin:3px><select id=deskkeys style=width:100%><option value=10>Ctrl+Alt+Supr<option value=11>Tab<option value=5>Guanyar<option value=0>Win+Down<option value=1>Guanyar+Amunt<option value=2>Guanya+L<option value=3>Guanya+M<option value=4>Maj+Win+M<option value=6>Guanya+R<option value=7>Alt-F4<option value=8>Ctrl-W<option value=9>Alt-Tab<option value=12>Maj-F10</select></div><div id=dialog4 style=margin:auto;margin:3px><div id=d3upload><div>Selecció de fitxers</div><select id=d3uploadMode onchange=d3modechange()><option value=1>Càrrega de fitxers locals<option value=2>Selecció de fitxers del servidor</select></div><div id=d3localmode style=display:none><div>Penja el document</div><form id=d3localmodeform method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input id=d3auth name=auth style=display:none> <input id=d3filter name=filter style=display:none> <input id=d3attrib name=attrib style=display:none> <input type=file id=d3localFile name=files onchange=d3setActions()> <input type=submit id=d3submit style=display:none></form></div><div id=d3servermode><div id=d3serveraction valign=bottom><input type=button id=p3FolderUp disabled onclick=d3folderup() value=Amunt>&nbsp;<span id=p3CurrentFolder></span></div><div id=d3serverfiles></div></div></div><div id=dialog7 style=margin:auto;margin:3px><div id=d7meshkvm><h4 style="width:100%;border-bottom:1px solid gray">Agent d'escriptori remot</h4><table style=width:100%><tr><td>Qualitat<td style=width:100px><select id=d7bitmapquality style=float:right;width:200px dir=rtl></select><tr><td>Escalat<td style=width:100px><select id=d7bitmapscaling style=float:right;width:200px dir=rtl><option selected value=1024>100%<option value=896>87,5%<option value=768>75%<option value=640>62,5%<option value=512>50%<option value=384>37,5%<option value=256>25%<option value=128>12,5%</select><tr><td>Taxa<td style=width:100px><select id=d7framelimiter style=float:right;width:200px dir=rtl><option selected value=50>Ràpid<option value=100>Mitjana<option value=400>Lent<option value=1000>Molt lent</select><tr><td>Codificació<td style=width:100px><select id=d7encoding style=float:right;width:200px dir=rtl><option value=1>JPEG<option value=2>PNG<option value=3>TIFF<option selected value=4>WEB</select><tr><td><td><label style=display:block id=d7deskAutoLockLabel><input type=checkbox id=d7deskAutoLock>Bloqueja a Desconnecta</label></table></div><div id=d7amtkvm><h4 style="width:100%;border-bottom:1px solid gray">KVM de maquinari Intel® AMT</h4><table style=width:100%><tr><td>Codificació<td style=width:100px><select id=d7desktopmode style=float:right;width:200px><option value=1>RLE8, el més ràpid<option value=2>RLE16, recomanat<option value=3>RAW8, Lent<option value=4>RAW16, molt lent</select></table></div></div></div><div id=idx_dlgButtonBar style=padding:10px;margin-bottom:20px><input id=idx_dlgCancelButton type=button value="Cancel · lar"style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value="D'acord"style=float:right;width:80px onclick=dialogclose(1)><div><input id=idx_dlgDeleteButton type=button value=Suprimeix style=display:none onclick=dialogclose(2)></div></div></div><div id=topMenu style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:0 0 5px 5px;position:fixed;top:50px;right:5px;width:170px;display:none"><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(2)>Els meus fitxers</div><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(1)>El meu compte</div><div id=logoutMenuOption><a id=logoutMenuOptionRef href=/logout><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer">Tancar sessió</div></a></div></div><audio id=chimes><source src=sounds/chimes.mp3 type=audio/mp3></audio><iframe name=fileUploadFrame style=display:none></iframe><script>"use strict";var random="{{{randomlength}}}",webState="{{{webstate}}}";for(var i in""!=webState&&(webState=JSON.parse(decodeURIComponent(webState))),webState)try{localStorage.setItem(i,webState[i])}catch(e){}if(webState&&!webState.loctag)try{localStorage.removeItem("loctag")}catch(e){}var urlargs=parseUriArgs();null!=urlargs.key&&(urlargs.key=""+urlargs.key),urlargs.key&&0==isAlphaNumeric(urlargs.key)&&delete urlargs.key,urlargs.locale&&0==isAlphaNumeric(urlargs.locale)&&delete urlargs.locale,delete urlargs.user,delete urlargs.pass,delete urlargs.viewmode,delete urlargs.gotonode,delete urlargs.gotodevicename,delete urlargs.gotodevicername,delete urlargs.gotodeviceip,delete urlargs.gotomesh,delete urlargs.panel;var args=parseUriArgs();args.key&&0==isAlphaNumeric(args.key)&&delete args.key,args.locale&&0==isAlphaNumeric(args.locale)&&delete args.locale;var debugLevel=parseInt("{{{debuglevel}}}"),features=parseInt("{{{features}}}"),features2=parseInt("{{{features2}}}"),features3=parseInt("{{{features3}}}"),sessionTime=parseInt("{{{sessiontime}}}"),sessionRefreshTimer=null,domain="{{{domain}}}",domainUrl="{{{domainurl}}}",authCookie="{{{authCookie}}}",authRelayCookie="{{{authRelayCookie}}}",logoutControls=JSON.parse(decodeURIComponent("{{{logoutControls}}}")),authCookieRenewTimer=null,webRelayPort=parseInt("{{{webRelayPort}}}"),hidePowerTimeline="{{{hidePowerTimeline}}}",webRelayDns="{{{webRelayDns}}}",meshserver=null,xdr=null,usergroups=null,stars={},serverinfo=null,nodes=[],meshes={},filetree={},userinfo=null,users=(serverinfo=null,null),nodeShortIdent=0,serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}",debugmode=!1,attemptWebRTC=!!(128&features),webrtcconfiguration="{{{webrtcconfig}}}";if(""==webrtcconfiguration)webrtcconfiguration=null;else try{webrtcconfiguration=JSON.parse(decodeURIComponent(webrtcconfiguration))}catch(e){console.log('Invalid WebRTC config: "'+webrtcconfiguration+'".'),webrtcconfiguration=null}var files,terminal,StatusStrs=["Desconnectat","Connectant...","Configuració...","Connectat","Intel&reg; AMT connectat"],agentsStr=["Desconegut","Consola Windows de 32 bits","Consola Windows de 64 bits","Servei Windows de 32 bits","Servei Windows de 64 bits","Linux de 32 bits","Linux de 64 bits","MIPS","XENx86","Android","Linux ARM","macOS x86-32bit","Android x86","PogoPlug ARM","Android","Linux Poky x86-32bit","macOS x86-64bit","ChromeOS","Linux Poky x86-64bit","Linux NoKVM x86-32bit","Linux NoKVM x86-64bit","Consola Windows MinCore","Servei Windows MinCore","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 de 64 bits","ARMv6l / ARMv7l / NoKVM","MIPS24KC (OpenWRT)","Apple Silicon","FreeBSD x86-64","Desconegut","Linux ARM de 64 bits","Alpine Linux x86 de 64 bits (MUSL)","Assistent (Windows)","Armada370 - ARM32/HF (libc/2.26)","OpenWRT x86-64","OpenBSD x86-64","Desconegut","Desconegut","MIPSEL24KC (OpenWRT)","ARMADA/CORTEX-A53/MUSL (OpenWRT)","Consola Windows ARM de 64 bits","Servei Windows ARM de 64 bits","ARMVIRT32 (OpenWRT)","RISC-V x86-64"],domainStates=["Cap","Azure AD","On-Premises AD","Hybrid AD","Microsoft Account"],passRequirements="{{{passRequirements}}}";""!=passRequirements&&(passRequirements=JSON.parse(decodeURIComponent(passRequirements)));var deskPinchZoom,sessionActivity=Date.now(),deskKeyboardShortcuts=[],nightMode=setNightMode(),xterm=null,xtermfit=null,xtermimage=null,xtermResizeTimer=null,devicePagingState=null,p11DeskConsoleMsgTimer=null,p12TermConsoleMsgTimer=null,p13FilesConsoleMsgTimer=null,webpSupport=!1;function startup(){if(!(32&features)){var e=null;try{e=top.location.toString().toLowerCase()}catch(e){}if(top!=self&&(null==e||0==top.active))return void(top.location=self.location)}if(!args.locale){var t=getstore("loctag",0);null!=t&&"*"!=t&&(args.locale=t)}window.onresize=center,center(),QV("changeEmailId",!(2097152&features)),QH("p1message","Connectant..."),go(1),document.onkeypress=ondeskkeypress,document.onkeydown=ondeskkeydown,document.onkeyup=ondeskkeyup,document.onclick=function(e){999==xxdialogMode&&"topMenuIcon"!=e.target.id&&(QV("topMenu",!1),xxdialogMode=0)},(meshserver=MeshServerCreateControl(domainUrl)).onStateChanged=onStateChanged,meshserver.onMessage=onMessage,meshserver.trace=args.trace,meshserver.Start();try{stars=JSON.parse(getstore("stars","{}"))}catch(e){}logoutControls&&logoutControls.logoutUrl&&(Q("logoutMenuOptionRef").href=logoutControls.logoutUrl);var n=localStorage.getItem("desktopsettings");null!=n&&(desktopsettings=JSON.parse(n)),applyDesktopSettings(),null!=args.webrtc&&(attemptWebRTC=1==args.webrtc),sessionTime>=10&&(sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))),QV("setDarkModeLink",!(3145728&features2)),deskKeyboardShortcuts=[];var o=getstore("deskKeyShortcuts","0x0A002E,0x100000,0x100028,0x100026,0x10004C,0x10004D,0x11004D,0x100052,0x020073,0x080057,0x020009,0x100025,0x100027").split(",");for(var i in o)deskKeyboardShortcuts.push(parseInt(o[i]));updateDeskShortcutKeys(),updateTermShortcutKeys()}function refreshCookieSession(){var e=null;try{e=new XDomainRequest}catch(e){}e||(e=new XMLHttpRequest),e.open("GET",window.location.origin+domainUrl+"refresh.ashx"),e.timeout=15e3,e.onload=function(){sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))},e.onerror=e.ontimeout=function(){sessionRefreshTimer=null},e.send()}function onStateChanged(e,t,n,o){if(0==t){if(setDialogMode(0),go(0),deleteAllNotifications(),"noauth"==o)return void QH("p0span","No es pot realitzar l'autenticació");2==n?setTimeout(serverPoll,5e3):QH("p0span","No es pot connectar el sòcol web"),null!=authCookieRenewTimer&&(clearInterval(authCookieRenewTimer),authCookieRenewTimer=null),devicePagingState=null,updateDevicePageState()}else 2==t&&(meshserver.send({action:"usergroups"}),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}),meshserver.send({action:"files"}),authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},18e5));QV("topMenuIcon",2==t)}function serverPoll(){xdr=null;try{xdr=new XDomainRequest}catch(e){}xdr||(xdr=new XMLHttpRequest),xdr.open("HEAD",window.location.href),xdr.timeout=15e3,xdr.onload=function(){xdr.status<500?reload():setTimeout(serverPoll,1e4)},xdr.onerror=xdr.ontimeout=function(){setTimeout(serverPoll,1e4)},xdr.send()}function updateSelf(){var e=!!(256&features2);if(userinfo&&(e=4294967295!=userinfo.siteadmin&&!!(1024&userinfo.siteadmin)||!!(256&features2)),QV("p3AccountActions",!(4&features)&&0==serverinfo.domainauth&&0==e),QV("logoutMenuOption",!(4&features)&&0==serverinfo.domainauth),QV("p2AccountSecurity",!(4&features||0!=serverinfo.domainauth||!(4096&features)||0!=e)),QV("p2AccountImage",!e),QV("verifyEmailId",!0!==userinfo.emailVerified&&null!=userinfo.email&&1==serverinfo.emailcheck),QV("manageAuthApp",1!=serverinfo.lock2factor&&4096&features&&(1==userinfo.otpsecret||!(131072&features2))),QV("manageOtp",1!=serverinfo.lock2factor&&!(262144&features2)&&4096&features&&(1==userinfo.otpsecret||userinfo.otphkeys>0)),QV("authPhoneNumberCheck",null!=userinfo.phone),QV("authEmailSetupCheck",1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified),QV("authAppSetupCheck",1==userinfo.otpsecret),QV("authCodesSetupCheck",userinfo.otpkeys>0),QV("p2AccountActions",!(4&features)&&0==serverinfo.domainauth&&null!=userinfo),QV("p2AccountPassActions",!(4&features)&&0==serverinfo.domainauth&&null!=userinfo&&0==userinfo._id.split("/")[2].startsWith("~")),QV("p3createMeshLink1",!1),QV("p3createMeshLink2",!1),null!=userinfo.flags&&1&userinfo.flags?(null==userinfo.accountImageRnd&&(userinfo.accountImageRnd=Math.floor(9999999999*Math.random())),Q("p2AccountImage").src="userimage.ashx?rnd="+userinfo.accountImageRnd):Q("p2AccountImage").src="images/user-256.png","number"==typeof userinfo.passchange)if(-1==userinfo.passchange)QH("p2nextPasswordUpdateTime"," - Restableix el següent inici de sessió.");else if(null!=passRequirements&&"number"==typeof passRequirements.reset){var t=userinfo.passchange+86400*passRequirements.reset-Math.floor(Date.now()/1e3);if(t<0)QH("p2nextPasswordUpdateTime"," - Restableix el següent inici de sessió.");else if(t<3600){var n=Math.floor(t/60);QH("p2nextPasswordUpdateTime",format(1==n?" - Restablir en 1 minut.":" - Restableix d'aquí a {0} minuts.",n))}else if(t<86400){var o=Math.floor(t/3600);QH("p2nextPasswordUpdateTime",format(1==o?" - Restablir en 1 hora.":" - Restableix d'aquí a {0} hores.",o))}else{var i=Math.floor(t/86400);QH("p2nextPasswordUpdateTime",format(1==o?" - Restablir en 1 dia.":" - Restableix d'aquí a {0} dies.",i))}}}function setSessionActivity(){sessionActivity=Date.now()}function checkIdleSessionTimeout(){Date.now()-sessionActivity>serverinfo.timeout&&(null!=desktop&&(desktop.Stop(),desktopNode=desktop=null),null!=terminal&&(terminal.Stop(),terminal=null),null!=files&&(files.Stop(),files=null),serverinfo.logoutonidlesessiontimeout&&(urlargs.key?window.location.href="logout?key="+urlargs.key:window.location.href="logout"))}function onMessage(e,t){switch(t.action){case"serverinfo":if((serverinfo=t.serverinfo).timeout&&(setInterval(checkIdleSessionTimeout,1e4),checkIdleSessionTimeout()),null!=userinfo&&updateSelf(),null!=serverinfo.certExpire){var n=Math.floor((serverinfo.certExpire-Date.now())/864e5);n>=0&&n<20&&addNotification({text:format("El certificat caduca d'aquí a {0} dies",n)})}QV("manageEmail2FA",8388608&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber1",33554432&features&&67108864&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber2",33554432&features&&!(67108864&features)&&1!=serverinfo.lock2factor);break;case"authcookie":authCookie=t.cookie,authRelayCookie=t.rcookie;break;case"userinfo":userinfo=t.userinfo,QH("p3userName",userinfo.name),null!=serverinfo&&updateSelf();break;case"users":for(var o in users={},t.users)users[t.users[o]._id]=t.users[o];null!=currentUser&&(currentUser=users[currentUser._id]),updateUsers();break;case"wssessioncount":wssessions=t.wssessions,updateUsers();break;case"meshes":for(var o in meshes={},t.meshes)meshes[t.meshes[o]._id]=t.meshes[o];null!=currentMesh&&(currentMesh=meshes[currentMesh._id]),updateMeshes(),mainUpdate(4);break;case"usergroups":var i=0;if(Array.isArray(t.ugroups)){for(var a in usergroups={},t.ugroups)i++,usergroups[t.ugroups[a]._id]=t.ugroups[a];0==i&&(usergroups=null)}else{for(var a in usergroups=t.ugroups,t.ugroups)i++;0==i&&(usergroups=null)}break;case"files":filetree=setupBackPointers(t.filetree),updateFiles();break;case"nodes":for(var o in nodes=[],t.nodes)for(var s in t.nodes[o])t.nodes[o][s].namel=t.nodes[o][s].name.toLowerCase(),t.nodes[o][s].rname?t.nodes[o][s].rnamel=t.nodes[o][s].rname.toLowerCase():t.nodes[o][s].rnamel=t.nodes[o][s].namel,t.nodes[o][s].meshnamel=meshes[o]?meshes[o].name.toLowerCase():"*",t.nodes[o][s].meshid=o,t.nodes[o][s].state=t.nodes[o][s].state?t.nodes[o][s].state:0,t.nodes[o][s].desc=t.nodes[o][s].desc,t.nodes[o][s].icon||(t.nodes[o][s].icon=1),t.nodes[o][s].ident=++nodeShortIdent,nodes.push(t.nodes[o][s]);null!=currentNode&&0==IsNodeViewable(currentNode)&&(currentNode=null,go(2)),null!=currentNode&&(null!=(currentNode=getNodeFromId(currentNode._id))?gotoDevice(currentNode._id,xxcurrentView,!0):go(2)),devicePagingState=null==t.totalcount?null:{total:t.totalcount,skip:t.skip,limit:t.limit},updateDevicePageState(),mainUpdate(4),0==xxcurrentView&&go(parseInt("{{viewmode}}")),gotoDevice("{{currentNode}}",parseInt("{{viewmode}}"));break;case"powertimeline":if(t.nodeid!=powerTimelineReq)break;for(var a in powerTimelineNode=t.nodeid,powerTimeline=t.timeline,powerTimelineUpdate=Date.now()+3e5,powerTimeline)a%2==1&&(powerTimeline[a]=1e3*powerTimeline[a]);currentNode._id==t.nodeid&&drawDeviceTimeline();break;case"getsysinfo":if(t.nodeid!=powerTimelineReq)break;!0===t.noinfo?updateDeviceDetails(getNodeFromId(t.nodeid)):(t.hardware.time=t.time,updateDeviceDetails(getNodeFromId(t.nodeid),t.hardware));break;case"lastconnect":null!=(b=getNodeFromId(t.nodeid))&&(b.lastconnect=t.time,b.lastaddr=t.addr);break;case"msg":if(null!=t.nodeid){var r=-1;if(null!=nodes)for(var a in nodes)if(nodes[a]._id==t.nodeid){r=a;break}if(-1!=r)if("console"==t.type)p15consoleReceive(nodes[r],t.value,t.source);else if("notify"==t.type){if(!(8&(s=getstore("notifications",0)))&&null!=t.amtMessage)break;s={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.nodeid&&(s.nodeid=t.nodeid),null!=t.tag&&(s.tag=t.tag),null!=t.url&&(s.url=t.url),null!=t.username&&(s.username=t.username),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s)}else if("userSessions"==t.type&&null!=currentNode&&currentNode._id==t.nodeid&&null==desktop){var l=[];if(null!=t.data)for(var a in t.data)"Active"!=t.data[a].State&&"Console"!=t.data[a].StationName&&3!=debugmode||l.push(t.data[a]);if(0==l.length)connectDesktop(null,1,null,t.tag);else if(1==l.length)connectDesktop(null,1,l[0].SessionId,t.tag);else{var d="",u="{{{userSessionsSort}}}";for(var a in l.sort(function(e,t){return e[u]?t[u]?e[u]<t[u]?-1:e[u]>t[u]?1:0:1:-1}),l)d+='<div style="text-align:left;cursor:pointer;background-color:gray;margin:5px;padding:5px;border-radius:5px" onclick=connectDesktop(event,1,'+l[a].SessionId+","+t.tag+")>"+l[a].State+", "+l[a].StationName,l[a].Username&&(l[a].Domain?d+=" - "+l[a].Domain+"/"+l[a].Username:d+=" - "+l[a].Username),d+="</div>";QH("p11DeskSessionSelector",d),QV("p11DeskSessionSelector",!0)}}}else if("notify"==t.type){s={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.tag&&(s.tag=t.tag),null!=t.url&&(s.url=t.url),null!=t.username&&(s.username=t.username),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s)}break;case"getnetworkinfo":if(currentNode._id!=t.nodeid)return;updateDeviceDetails(getNodeFromId(t.nodeid),null,t);break;case"getNotes":if((s=Q("d2devNotes"))&&t.id==decodeURIComponent(s.attributes.noteid.value))t.notes?QH("d2devNotes",decodeURIComponent(t.notes)):QH("d2devNotes",""),0==("true"==s.attributes.ro.value)&&(s.removeAttribute("readonly"),QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",!0),focusTextBox("d2devNotes"));break;case"otpauth-request":if(2==xxdialogMode&&"otpauth-request"==xxdialogTag)if(null!=t.err){var c=["","2FA està bloquejat","Els codis de seguretat estan bloquejats","Token d'inici de sessió en ús","OTP 2FA no permesa","El compte està bloquejat","No es pot carregar OTPLIB"];t.err>0&&t.err<c.length?QH("d2optinfo",c[t.err]):QH("d2optinfo",format("Error núm. {0}",t.err))}else{var p=t.secret;52==p.length?p=p.split(/(.............)/).filter(Boolean).join(" "):32==p.length&&(p=(p=p.split(/(....)/).filter(Boolean).join(" ")).substring(0,20)+"<br/>"+p.substring(20)),QH("d2optinfo",format('Instal·lar <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>Google Authenticator</a> o una aplicació compatible, utilitzeu <a href="{0}" rel="noreferrer noopener" target=_blank> aquest enllaç</a> o introduïu el secret següent. A continuació, introduïu el testimoni actual de 6 dígits per activar l\'inici de sessió en dos passos.',t.url)+'<br /><br /><div style=width:100%;text-align:center><tt id=d2optsecret secret="'+t.secret+'" style=font-size:15px>'+p+'</tt><br /><br />Token: <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></div>'),QV("idx_dlgOkButton",!0),QE("idx_dlgOkButton",!1),Q("d2otpauthinput").focus()}break;case"otpauth-setup":if(xxdialogMode)return;setDialogMode(2,"Aplicació d'autenticació",1,null,t.success?"<b style=color:green>S'ha activat correctament l'aplicació Authenticator.</b> Ara necessitareu un testimoni vàlid per tornar a iniciar sessió.":"<b style=color:red>L'activació de l'inici de sessió en dos passos ha fallat.</b> Esborra el secret de l'aplicació i torna-ho a provar. Només teniu uns minuts per introduir el codi adequat.");break;case"otpauth-clear":if(xxdialogMode)return;setDialogMode(2,"Aplicació d'autenticació",1,null,t.success?"<b>S'ha eliminat l'aplicació de l'autenticador.</b> Podeu reactivar aquesta funció en qualsevol moment.":"<b style=color:red>L'eliminació de l'activació de l'inici de sessió en dos passos ha fallat.</b> Torna-ho a provar.");break;case"otpauth-getpasswords":if(xxdialogMode)return;d="Les fitxes d'un sol cop es poden utilitzar com a autenticació secundària. Genereu un conjunt, imprimiu-los i guardeu-los en un lloc segur.";if(d+="<div style='border-radius:6px;border: 2px dashed #888;width:100%;margin-top:8px'><div style='padding:8px;font-family:Arial, Helvetica, sans-serif;font-size:20px;font-weight:bold'><table style=width:100%;text-align:center>",t.passwords){var m=0;for(var a in t.passwords){++m%2&&(d+="<tr>");for(var g=""+t.passwords[a].p;g.length<8;)g="0"+g;!0===t.passwords[a].u?d+="<td>"+g.substring(0,4)+"&nbsp;"+g.substring(4):d+="<td><strike style=color:#BBB>"+g.substring(0,4)+"&nbsp;"+g.substring(4)}}else d+="<tr><td>No hi ha fitxes actives";d+="</table></div></div><br />",d+="<div><input type=button value='Tanca' onclick=setDialogMode(0) style=float:right></input>",d+="<input type=button value='Noves fitxes' onclick='account_manageOtp(1);'></input>",null!=t.passwords&&(d+="<input type=button value='Clar' onclick='account_manageOtp(2);'></input>"),setDialogMode(2,"Gestionar codis de seguretat",8,null,d+="</div><br />","otpauth-manage");break;case"verifyPhone":if(xxdialogMode&&"verifyPhone"!=xxdialogTag)return;d='<table><tr><td><img src="images/phone80.png" style=padding:8px>';d+="<td>Check your phone and enter the verification code.",setDialogMode(2,"Notificacions telefòniques",3,account_managePhoneConfirm,d+='<br /><br /><div style=width:100%;text-align:center>Codi de verificació: <input type=tel pattern="[0-9]" inputmode="number" maxlength=6 id=d2phoneCodeInput onKeyUp=account_managePhoneCodeValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneCodeValidate(1)"></div></table>',t.cookie),Q("d2phoneCodeInput").focus(),account_managePhoneCodeValidate();break;case"previousLogins":if(2==xxdialogMode&&"previousLogins"==xxdialogTag){d="";var f="BBB";if(0==t.events.length)d+="No previous login.";else{for(var a in d+="<div style=max-height:260px;overflow-y:scroll;overflow-x:hidden>",t.events){107==(o=t.events[a].m)?(o="Inici de sessió vàlid",f="BBD1BB",""):108==o?(o="2FA no vàlid",f="DD9DC3","x"):109==o?(o="Compte bloquejat",f="E1BBBB","x"):110==o&&(o="Contrasenya invàlida",f="E1BBBB","x"),d+="<div style=width:260px;background-color:#"+f+";border-radius:6px;margin-bottom:4px;padding:4px><div><b>"+EscapeHtml(o)+"</b><br />"+printDateTime(new Date(t.events[a].t))+"</div><div style=font-size:x-small>"+EscapeHtml(t.events[a].a.join(", "))+"</div></div></tr>"}d+="</div>"}setDialogMode(2,"Inicis de sessió anteriors",1,null,d)}break;case"event":if(t.event.noact)break;switch(t.event.action){case"serverinfochange":null!=t.event.lock2factor&&(serverinfo.lock2factor=t.event.lock2factor,updateSelf());break;case"userWebState":if(null!=localStorage){var h=JSON.parse(t.event.state);for(var a in h)localStorage.setItem(a,h[a]);if(null!=h.stars&&(stars=JSON.parse(h.stars)),null!=h.loctag&&h.loctag!=oldLoctag?(null!=h.loctag?args.locale=h.loctag:delete args.locale,mainUpdate(132)):null!=h.stars&&(mainUpdate(4),"*"==Q("SearchInput").value&&onSearchInputChanged()),currentNode&&refreshDevice(currentNode._id),null!=h.deskKeyShortcuts){deskKeyboardShortcuts=[];var v=h.deskKeyShortcuts.split(",");for(var a in v)deskKeyboardShortcuts.push(parseInt(v[a]));updateDeskShortcutKeys()}}break;case"accountchange":if("object"!=typeof t.event.account||null==t.event.account)return void console.log(t.event);if(userinfo.name==t.event.account.name){t.event.account.siteadmin&&t.event.account.siteadmin,userinfo.siteadmin&&userinfo.siteadmin;(t.event.account.quota!=userinfo.quota||!(8&userinfo.siteadmin)&&8&t.event.account.siteadmin)&&meshserver.send({action:"files"}),userinfo=t.event.account,updateSelf(),t.event.nodeListChange==userinfo._id&&meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip})}break;case"createusergroup":case"usergroupchange":null==usergroups&&(usergroups={});var k=usergroups[t.event.ugrpid];null==k?usergroups[t.event.ugrpid]={_id:t.event.ugrpid,name:t.event.name,desc:t.event.desc,domain:t.event.domain,links:t.event.links}:(k.name=t.event.name,k.desc=t.event.desc,k.links=t.event.links,k.flags=t.event.flags),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip});break;case"deleteusergroup":if(null!=usergroups&&null!=usergroups[t.event.ugrpid]){delete usergroups[t.event.ugrpid];f=0;for(var a in usergroups)f++;0==f&&(usergroups=null)}break;case"createmesh":null!=meshes[t.event.meshid]||!userinfo.manageAllDeviceGroups&&null==t.event.mesh.links[userinfo._id]||(meshes[t.event.meshid]=t.event.mesh,mainUpdate(132),meshserver.send({action:"files"}));break;case"meshchange":if(null==meshes[t.event.meshid]){var y=!1;for(var a in null!=t.event.links[userinfo._id]&&(y=!0),null!=userinfo.links[t.event.meshid]&&(y=!0),userinfo.links)a.startsWith("ugrp/")&&null!=t.event.links[a]&&(y=!0);y&&(meshes[t.event.meshid]={_id:t.event.meshid,name:t.event.name,mtype:t.event.mtype,desc:t.event.desc,links:t.event.links,relayid:t.event.relayid},meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}))}else{if(meshes[t.event.meshid].name!=t.event.name)for(var a in meshes[t.event.meshid].name=t.event.name,nodes)nodes[a].meshid==t.event.meshid&&(nodes[a].meshnamel=t.event.name.toLowerCase());if(meshes[t.event.meshid].desc=t.event.desc,meshes[t.event.meshid].links=t.event.links,null!=t.event.relayid&&(meshes[t.event.meshid].relayid=t.event.relayid),0==IsMeshViewable(t.event.meshid)){20==xxcurrentView&&currentMesh==meshes[t.event.meshid]&&go(2),delete meshes[t.event.meshid];var x=[];for(var a in nodes)(nodes[a].meshid!=t.event.meshid||null!=userinfo.links&&null!=userinfo.links[nodes[a]._id])&&x.push(nodes[a]);nodes=x,xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null)}}mainUpdate(132),meshserver.send({action:"files"}),20==xxcurrentView&&currentMesh._id==t.event.meshid&&p20updateMesh();break;case"deletemesh":meshes[t.event.meshid]&&(delete meshes[t.event.meshid],updateMeshes(),meshserver.send({action:"files"}));x=[];for(var a in nodes)nodes[a].meshid!=t.event.meshid&&x.push(nodes[a]);nodes=x,mainUpdate(4),xxcurrentView>=20&&xxcurrentView<30&&currentMesh._id==t.event.meshid&&(setDialogMode(0),go(2)),xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2));break;case"addnode":var b=t.event.node;if(!meshes[b.meshid])break;if(null!=getNodeFromId(b._id))break;b.namel=b.name.toLowerCase(),b.rname?b.rnamel=b.rname.toLowerCase():b.rnamel=b.namel,b.meshnamel=meshes[b.meshid]?meshes[b.meshid].name.toLowerCase():"*",b.state=0,b.icon||(b.icon=1),b.ident=++nodeShortIdent,nodes.push(b),mainUpdate(4);break;case"removenode":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r){b=nodes[r];currentNode==b&&(xxcurrentView>=10&&xxcurrentView<20&&(setDialogMode(0),go(2)),currentNode=null),nodes.splice(r,1),mainUpdate(4)}break;case"changenode":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r)(b=nodes[r]).name=t.event.node.name,b.rname=t.event.node.rname,b.lusers=t.event.node.lusers,b.users=t.event.node.users,b.host=t.event.node.host,b.desc=t.event.node.desc,b.publicip=t.event.node.publicip,b.iploc=t.event.node.iploc,b.wifiloc=t.event.node.wifiloc,b.gpsloc=t.event.node.gpsloc,b.tags=t.event.node.tags,b.ssh=t.event.node.ssh,b.rdp=t.event.node.rdp,b.userloc=t.event.node.userloc,b.rdpport=t.event.node.rdpport,b.rfbport=t.event.node.rfbport,b.sshport=t.event.node.sshport,b.httpport=t.event.node.httpport,b.httpsport=t.event.node.httpsport,b.consent=t.event.node.consent,b.pmt=t.event.node.pmt,null!=t.event.node.agent&&(null==b.agent&&(b.agent={}),null!=t.event.node.agent.ver&&(b.agent.ver=t.event.node.agent.ver),null!=t.event.node.agent.id&&(b.agent.id=t.event.node.agent.id),null!=t.event.node.agent.caps&&(b.agent.caps=t.event.node.agent.caps),null!=t.event.node.agent.root&&(b.agent.root=t.event.node.agent.root),null!=t.event.node.agent.core?b.agent.core=t.event.node.agent.core:b.agent.core&&delete b.agent.core,b.agent.tag=t.event.node.agent.tag),null!=t.event.node.intelamt&&(null==b.intelamt&&(b.intelamt={}),null!=t.event.node.intelamt.state&&(b.intelamt.state=t.event.node.intelamt.state),null!=t.event.node.intelamt.host&&(b.intelamt.user=t.event.node.intelamt.host),null!=t.event.node.intelamt.user&&(b.intelamt.user=t.event.node.intelamt.user),null!=t.event.node.intelamt.tls&&(b.intelamt.tls=t.event.node.intelamt.tls),null!=t.event.node.intelamt.ver&&(b.intelamt.ver=t.event.node.intelamt.ver),null!=t.event.node.intelamt.tag&&(b.intelamt.tag=t.event.node.intelamt.tag),null!=t.event.node.intelamt.uuid&&(b.intelamt.uuid=t.event.node.intelamt.uuid),null!=t.event.node.intelamt.realm&&(b.intelamt.realm=t.event.node.intelamt.realm),null!=t.event.node.intelamt.flags&&(b.intelamt.flags=t.event.node.intelamt.flags),null!=t.event.node.intelamt.warn?b.intelamt.warn=t.event.node.intelamt.warn:delete b.intelamt.warn),null!=t.event.node.av&&(b.av=t.event.node.av),null!=t.event.node.wsc&&(b.wsc=t.event.node.wsc),null!=t.event.node.defender&&(b.defender=t.event.node.defender),b.namel=b.name.toLowerCase(),b.rname?b.rnamel=b.rname.toLowerCase():b.rnamel=b.namel,t.event.node.icon&&(b.icon=t.event.node.icon),null!=t.event.node.lastbootuptime&&(b.lastbootuptime=t.event.node.lastbootuptime),null!=t.event.node.idletime&&(b.idletime=t.event.node.idletime),refreshDevice(b._id),updateDeviceViewDevice(b),currentNode==b&&updateDeviceDetails();break;case"nodemeshchange":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r){b=nodes[r];null!=meshes[t.event.newMeshId]||null!=userinfo.links&&null!=userinfo.links[b._id]?(b.meshid=t.event.newMeshId,b.meshnamel=meshes[t.event.newMeshId]?meshes[t.event.newMeshId].name.toLowerCase():"*"):(xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null),nodes.splice(r,1)),mainUpdate(4),refreshDevice(t.event.nodeid)}else{b=t.event.node;if(!meshes[b.meshid])break;b.namel=b.name.toLowerCase(),b.rname?b.rnamel=b.rname.toLowerCase():b.rnamel=b.namel,b.meshnamel=meshes[b.meshid]?meshes[b.meshid].name.toLowerCase():"*",b.state=0,b.icon||(b.icon=1),b.ident=++nodeShortIdent,nodes.push(b),mainUpdate(4)}break;case"nodeconnect":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r)(b=nodes[r]).conn=t.event.conn,b.pwr=t.event.pwr,1&b.conn||delete b.sessions,refreshDevice(b._id),updateDeviceViewDevice(b);break;case"login":null!=users&&users["user/"+domain+"/"+t.event.username.toLowerCase()]&&(users["user/"+domain+"/"+t.event.username.toLowerCase()].login=t.event.time);break;case"notify":s={text:t.event.value,title:t.event.title,icon:t.event.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.event.tag&&(s.tag=t.event.tag),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s);break;case"sysinfohash":null!=currentNode&&t.event.nodeid==powerTimelineReq&&meshserver.send({action:"getsysinfo",nodeid:t.event.nodeid});break;case"ifchange":null!=currentNode&&currentNode._id==t.event.nodeid&&meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id});break;case"devicesessions":if(null==(b=getNodeFromId(t.event.nodeid)))break;if(b.sessions=t.event.sessions,null!=b.sessions){for(var a in b.sessions)0==Object.keys(b.sessions[a]).length&&delete b.sessions[a];0==Object.keys(b.sessions).length&&delete b.sessions}refreshDevice(t.event.nodeid),updateDeviceViewDevice(b),xxdialogTag=="SESSIONS-"+t.event.nodeid&&showDeviceSessions(t.event.nodeid,!0),xxdialogTag=="HELPREQ-"+t.event.nodeid&&showDeviceHelpRequests(t.event.nodeid,!0)}break;case"getcookie":if("novnc"==t.tag){var w=window.location.origin+domainUrl+"novnc/vnc.html?ws=wss%3A%2F%2F"+window.location.host+encodeURIComponentEx(domainUrl)+(t.localRelay?"local":"mesh")+"relay.ashx%3Fauth%3D"+t.cookie+"&show_dot=1"+(urlargs.key?"&key="+urlargs.key:"")+"&l={{{lang}}}";null!=(b=getNodeFromId(t.nodeid))&&(w+="&name="+encodeURIComponentEx(b.name)),safeNewWindow(w,"mcnovnc/"+t.nodeid)}else if("mstsc"==t.tag){var S=window.location.origin+domainUrl+"mstsc.html?ws="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");null!=(b=getNodeFromId(t.nodeid))&&(S+="&name="+encodeURIComponentEx(b.name)),t.localRelay&&(S+="&local=1"),safeNewWindow(S,"mcmstsc/"+t.nodeid)}else if("ssh"==t.tag){var D=window.location.origin+domainUrl+"ssh.html?ws="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");null!=(b=getNodeFromId(t.nodeid))&&(D+="&name="+encodeURIComponentEx(b.name)),t.localRelay&&(D+="&local=1"),safeNewWindow(D,"mcssh/"+t.nodeid)}}}check_webp_feature("lossy",function(e,t){webpSupport=t,t||(d7encoding.options[1].disabled=!0,d7encoding.value=1)});var updateNaggleTimer=null,updateNaggleFlags=0;function mainUpdate(e){updateNaggleFlags|=e,null==updateNaggleTimer&&(updateNaggleTimer=setTimeout(function(){1&updateNaggleFlags&&onSearchInputChanged(),4&updateNaggleFlags&&(updateDevices(),updateDeviceDetails()),128&updateNaggleFlags&&updateMeshes(),updateNaggleTimer=null,updateNaggleFlags=0,gotoStartViewPage()},150))}function gotoStartViewPage(){var e=parseInt("{{viewmode}}");if(!(xxcurrentView>1)){if(""!="{{currentNode}}".toLowerCase()){if(null==getNodeFromId("{{currentNode}}"))return;gotoDevice("{{currentNode}}",e)}else if(null!=args.gotonode){if(96==args.gotonode.length&&(args.gotonode=btoa(hex2rstr(args.gotonode)).split("+").join("@").split("/").join("$")),null==getNodeFromId("node/"+domain+"/"+args.gotonode))return;args.panel&&(currentDevicePanel=parseInt(args.panel)),gotoDevice("node/"+domain+"/"+args.gotonode,e)}else if(null!=args.gotodevicename){var t=null;if(null!=nodes)for(var n in nodes)nodes[n].name==args.gotodevicename&&(t=nodes[n]._id);t&&(gotoDevice(t,e),go(e))}else if(null!=args.gotodevicername){t=null;if(null!=nodes)for(var n in nodes)nodes[n].rname==args.gotodevicername&&(t=nodes[n]._id);t&&(gotoDevice(t,e),goBackStack.push(1))}else if(null!=args.gotodeviceip){t=null;if(null!=nodes)for(var n in nodes)nodes[n].ip==args.gotodeviceip&&(t=nodes[n]._id);t&&(gotoDevice(t,e),go(e))}else if(null!=args.gotomesh){if(null==meshes["mesh/"+domain+"/"+args.gotomesh])return;gotoMesh("mesh/"+domain+"/"+args.gotomesh),go(e)}else isNaN(e)?(setDialogMode(0),go(1)):go(e);delete args.gotonode,delete args.gotomesh,delete args.panel,xxcurrentView<2&&go(2)}}function topMenu(e){null!=xxdialogMode&&0!=xxdialogMode&&999!=xxdialogMode||(void 0===e?1==("none"==QS("topMenu").display)?0!=xxdialogMode&&null!=xxdialogMode||(QV("topMenu",!0),xxdialogMode=999):(QV("topMenu",!1),xxdialogMode=0):(QV("topMenu",!1),xxdialogMode=0,1==e&&3!=xxcurrentView&&goForward("account"),2==e&&5!=xxcurrentView&&goForward("files")))}var backStack=[];function goBack(){xxdialogMode||(backStack.length>0&&backStack.pop(),goStack())}function goForward(e){xxdialogMode||(backStack.push(e),goStack())}function goStack(){if(0!=backStack.length){var e=backStack[backStack.length-1],t=e.split("/")[0];if("node"==t&&(setupDeviceMenu(0),gotoDevice(e)),"mesh"==t&&gotoMesh(e),"account"==t&&go(3),"devices"==t&&go(2),"files"==t){if(262144&features&&!(1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey))return void setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a aquesta funció fins que s\'hagi activat l\'autenticació de dos factors. Això és necessari per a una seguretat addicional. Aneu a "El meu compte" i mireu la secció "Seguretat del compte".');go(5)}}else go(2)}function updateFooterMenu(e){for(;null!=e&&e.length<3;)e.push({n:""});var t="",n="";if(null!=e)for(var o in e)t+='<td style="cursor:pointer'+(""==n?"":";border-left:solid 1px white")+'" onclick="'+e[o].f+'">'+e[o].n,n=e[o].n;QH("footerMenu","<tr>"+t)}function account_viewPreviousLogins(){xxdialogMode||(setDialogMode(2,"Inicis de sessió anteriors",1,null,"Carregant...","previousLogins"),meshserver.send({action:"previousLogins"}))}function account_manageImage(e){if(!xxdialogMode){var t=0==e?userinfo:currentUser;setDialogMode(2,"Gestiona la imatge del compte",7,account_manageImageEx2,'<input id=p2file type=file style=width:100% accept="image/*" onchange=account_manageImageEx()><div style=width:100%><canvas id=p2canvas width=256 height=256 style="width:256px;height:256px;margin-left:12px;margin-top:8px;border-radius:16px;box-shadow: 0px 0px 15px #000" onclick=account_canvasClick() /></div>',t._id);var n=Q("p2canvas").getContext("2d");null==t.accountImageRnd&&(t.accountImageRnd=Math.floor(9999999999*Math.random()));var o="";1==e&&(o="&id="+t._id.split("/")[2]);var i=new Image;i.onload=function(){n.clearRect(0,0,256,256),n.drawImage(i,0,0)},i.src=null!=t.flags&&1&t.flags?"userimage.ashx?rnd="+t.accountImageRnd+o:"images/user-256.png",QE("idx_dlgDeleteButton",null!=t.flags&&1&t.flags),QE("idx_dlgOkButton",!1)}}function account_canvasClick(){Q("p2file").click()}function account_manageImageEx(){var e=Q("p2file").files[0],t=new Image;t.onload=function(){var e=0,n=0,o=Math.min(t.width,t.height);t.width>o&&(e=(t.width-o)/2),t.height>o&&(n=(t.height-o)/2);var i=Q("p2canvas").getContext("2d");i.imageSmoothingEnabled=!0,i.webkitImageSmoothingEnabled=!0,i.mozImageSmoothingEnabled=!0,i.clearRect(0,0,256,256),i.drawImage(t,e,n,o,o,0,0,256,256),QE("idx_dlgOkButton",!0)},t.src=URL.createObjectURL(e)}function account_manageImageEx2(e,t){meshserver.send({action:"updateUserImage",userid:t,image:2==e?0:Q("p2canvas").toDataURL("image/jpeg",.8)})}function toggleNightMode(){if(!xxdialogMode){var e=getstore("nightMode","0"),t="<input type=radio id=night0 name=nightmoderadio value=0 "+(0==e?"checked":"")+"><label for=night0>Navegador predeterminat</label><br>";t+="<input type=radio id=night2 name=nightmoderadio value=2 "+(2==e?"checked":"")+"><label for=night2>Mode de llum</label><br>",setDialogMode(2,"Mode nocturn",3,toggleNightModeEx,t+="<input type=radio id=night1 name=nightmoderadio value=1 "+(1==e?"checked":"")+"><label for=night1>Mode fosc</label><br>"),QV("uiMenu",!1)}}function toggleNightModeEx(){var e="0";Q("night1").checked&&(e="1"),Q("night2").checked&&(e="2"),putstore("nightMode",e),setNightMode()}function setNightMode(){var e=getstore("nightMode","0");return nightMode=!1,1048576&features2&&(e="1"),2097152&features2&&(e="2"),"1"==e?nightMode=!0:"0"==e&&window.matchMedia&&(nightMode=window.matchMedia("(prefers-color-scheme: dark)").matches),nightMode?(QC("body").add("night"),QS("body")["background-color"]="#000",QS("body").color="lightgray"):(QC("body").remove("night"),QS("body")["background-color"]="#FFF",QS("body").color="black"),nightMode}function account_managePhone(){var e;!xxdialogMode&&33554432&features&&(null!=userinfo.phone?(e='<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>',e+="<td style=text-align:center><div style=padding:6px>Número de telèfon verificat</div><div style=font-size:20px>"+userinfo.phone+"</div>",setDialogMode(2,"Notificacions telefòniques",3,account_managePhoneRemove,e+="<div style=margin:10px><label><input id=d2delPhone type=checkbox onclick=account_managePhoneRemoveValidate() />Elimina el número de telèfon</label></div>"),account_managePhoneRemoveValidate()):(e='<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>',e+="<td>Enter your SMS capable phone number. Once verified, the number may be used for login verification and other notifications.",setDialogMode(2,"Notificacions telefòniques",3,account_managePhoneAdd,e+='<br /><br /><div style=width:100%;text-align:center>Número de telèfon: <input type=tel pattern="[0-9]" autocomplete="tel" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=account_managePhoneValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneValidate(1)"></div></table>',"verifyPhone"),Q("d2phoneinput").focus(),account_managePhoneValidate()))}function isPhoneNumber(e){return e.match(/^\(?([0-9]{3,4})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/)}function account_managePhoneValidate(e){var t=isPhoneNumber(Q("d2phoneinput").value);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneCodeValidate(e){var t=6==Q("d2phoneCodeInput").value.length&&Q("d2phoneCodeInput").value.match(/[0-9]/);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneConfirm(e,t){meshserver.send({action:"confirmPhone",code:Q("d2phoneCodeInput").value,cookie:t})}function account_managePhoneAdd(){0!=isPhoneNumber(Q("d2phoneinput").value)&&(QE("d2phoneinput",!1),meshserver.send({action:"verifyPhone",phone:Q("d2phoneinput").value}))}function account_managePhoneRemove(){Q("d2delPhone").checked&&meshserver.send({action:"removePhone"})}function account_managePhoneRemoveValidate(){QE("idx_dlgOkButton",Q("d2delPhone").checked)}function account_manageAuthEmail(){if(!xxdialogMode&&8388608&features){var e=1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified;setDialogMode(2,"Autenticació de correu electrònic",1,function(){e!=Q("email2facheck").checked&&meshserver.send({action:"otpemail",enabled:Q("email2facheck").checked})},"Quan estigui activat, a cada inici de sessió, se us donarà l'opció de rebre un testimoni d'inici de sessió al vostre compte de correu electrònic per a més seguretat.<br /><br /><label><input id=email2facheck type=checkbox "+(e?"checked":"")+"/>Activa l'autenticació de dos factors de correu electrònic.</label>")}}var d3filetreelinkpath,loclist={af:"Afrikàans",sq:"albanès",ar:"Àrab (estàndard)","ar-dz":"Àrab (Algèria)","ar-bh":"Àrab (Bahrain)","ar-eg":"Àrab (Egipte)","ar-iq":"Àrab (Iraq)","ar-jo":"Àrab (Jordània)","ar-kw":"Àrab (Kuwait)","ar-lb":"Àrab (Líban)","ar-ly":"Àrab (Líbia)","ar-ma":"Àrab (Marroc)","ar-om":"Àrab (Oman)","ar-qa":"Àrab (Qatar)","ar-sa":"Àrab (Aràbia Saudita)","ar-sy":"Àrab (Síria)","ar-tn":"Àrab (Tunísia)","ar-ae":"Àrab (EAU)","ar-ye":"Àrab (Iemen)",an:"aragonès",hy:"armeni",as:"assameses",ast:"asturià",az:"azerbaidjana",eu:"basc",bg:"búlgar",be:"Bielorús",bn:"bengalí",bs:"bosnià",br:"bretó",my:"birmà",ca:"català",ch:"Chamorro",ce:"Txetxè",zh:"xinès","zh-hk":"Xinès (Hong Kong)","zh-cn":"Xinès (RPC)","zh-sg":"Xinès (Singapur)","zh-tw":"Xinès (Taiwan)",cv:"Txuvaix",co:"Cors",cr:"Cree",hr:"croat",cs:"txec",da:"danès",nl:"holandès (estàndard)","nl-be":"holandès (belga)",en:"Anglès","en-au":"Anglès (Austràlia)","en-bz":"Anglès (Belice)","en-ca":"Anglès (Canadà)","en-ie":"Anglès (Irlanda)","en-jm":"Anglès (Jamaica)","en-nz":"Anglès (Nova Zelanda)","en-ph":"Anglès (Filipines)","en-za":"Anglès (Sud-àfrica)","en-tt":"Anglès (Trinitat i Tobago)","en-gb":"Anglès (Regne Unit)","en-us":"Anglès (Estats Units)","en-zw":"Anglès (Zimbabwe)",eo:"esperanto",et:"estonià",fo:"feroès",fa:"Farsi (persa)",fj:"Fijians",fi:"finès",fr:"francès (estàndard)","fr-be":"francès (Bèlgica)","fr-ca":"francès (Canadà)","fr-fr":"francès (França)","fr-lu":"francès (Luxemburg)","fr-mc":"francès (Mònaco)","fr-ch":"francès (Suïssa)",fy:"frisó",fur:"friül",gd:"Gaèlic (escocès)","gd-ie":"Gaèlic (irlandès)",gl:"Galacià",ka:"georgiana",de:"alemany (estàndard)","de-at":"alemany (Àustria)","de-de":"alemany (Alemanya)","de-li":"alemany (Liechtenstein)","de-lu":"alemany (Luxemburg)","de-ch":"alemany (Suïssa)",el:"grec",gu:"Gujurati",ht:"haitià",he:"hebreu",hi:"hindi",hu:"hongarès",is:"islandès",id:"indonesi",iu:"Inuktitut",ga:"irlandès",it:"Italià (estàndard)","it-ch":"Italià (Suïssa)",ja:"japonès",kn:"Kannada",ks:"Caixmir",kk:"Kazakh",km:"Khmer",ky:"kirguiz",tlh:"Klingon",ko:"coreà","ko-kp":"coreà (Corea del Nord)","ko-kr":"coreà (Corea del Sud)",la:"llatí",lv:"letó",lt:"lituà",lb:"luxemburguesa",mk:"FYRO Macedoni",ms:"Malai",ml:"malayalam",mt:"maltès",mi:"Maori",mr:"Marathi",mo:"Moldàvia",nv:"Navajo",ng:"Ndonga",ne:"nepalí",no:"noruec",nb:"noruec (Bokmal)",nn:"noruec (Nynorsk)",oc:"occità",or:"Oriya",om:"Oromo","fa-ir":"Persa/Iran",pl:"polonès",pt:"portuguès","pt-br":"portuguès (Brasil)",pa:"panjabi","pa-in":"Panjabi (Índia)","pa-pk":"Panjabi (Pakistan)",qu:"Quechua",rm:"retoromànic",ro:"romanès","ro-mo":"romanès (Moldavia)",ru:"rus","ru-mo":"Rus (Moldvia)",sz:"Sami (lapons)",sg:"Sango",sa:"sànscrit",sc:"sard",sd:"Sindhi",si:"Singalès",sr:"serbi",sk:"eslovac",sl:"eslovè",so:"Somani",sb:"sòrab",es:"espanyol","es-ar":"espanyol (Argentina)","es-bo":"espanyol (Bolívia)","es-cl":"espanyol (Xile)","es-co":"espanyol (Colòmbia)","es-cr":"Espanyol (Costa Rica)","es-do":"Espanyol (República Dominicana)","es-ec":"espanyol (Equador)","es-sv":"espanyol (El Salvador)","es-gt":"espanyol (Guatemala)","es-hn":"espanyol (Hondures)","es-mx":"espanyol (Mèxic)","es-ni":"espanyol (Nicaragua)","es-pa":"espanyol (Panamà)","es-py":"espanyol (Paraguai)","es-pe":"espanyol (Perú)","es-pr":"Espanyol (Puerto Rico)","es-es":"espanyol (Espanya)","es-uy":"Espanyol (Uruguai)","es-ve":"espanyol (Veneçuela)",sx:"Sutu",sw:"suahili",sv:"suec","sv-fi":"Suec (Finlàndia)","sv-sv":"Suec (Suècia)",ta:"Tamil",tt:"Tàrtar",te:"Teluga",th:"tailandès",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"turc",tk:"turcomà",uk:"Ucraïnès",hsb:"alt sòrab",ur:"Urdú",ve:"Venda",vi:"vietnamita",vo:"Volapuk",wa:"Való",cy:"gal·lès",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"},loclistex={"zh-chs":"Xinès (simplificat)","zh-cht":"Xinès (tradicional)"};function account_showLocalizationSettings(){if(xxdialogMode)return!1;var e=getstore("loctag",0),t="",n='<select id=d2locselect style=width:180px><option value="*">Valor del navegador d\'usuari</option>';for(var o in loclist)n+='<option value="'+o+'"'+(e==o?" selected":"")+">"+o+" - "+loclist[o]+"</option>";if(n+="</select>",serverinfo.languages&&serverinfo.languages.length>0){t+="Canviar l'idioma requerirà una actualització de la pàgina.<br /><br />";var i='<select id=d2langselect style=width:180px><option value="*">Valor del navegador d\'usuari</option>';for(var o in serverinfo.languages){var a=serverinfo.languages[o];i+='<option value="'+a+'"'+(userinfo.lang==a?" selected":"")+">"+a+" - "+(loclist[a]?loclist[a]:loclistex[a])+"</option>"}t+=addHtmlValue("Llenguatge",i+="</select>")}return t+=addHtmlValue("Dates i hora",n),4294967295==userinfo.siteadmin&&""==domain&&(t+='<br /><a rel="noreferrer noopener" target="_blank" href="translator.htm">Ajuda a traduir MeshCentral</a>'),setDialogMode(2,"Configuració de localització",3,account_showLocalizationSettingsEx,t),!1}function account_showLocalizationSettingsEx(){var e=Q("d2langselect").value;"*"==e&&null==userinfo.lang&&(e=userinfo.lang),e!=userinfo.lang&&meshserver.send({action:"changelang",lang:e});var t=getstore("loctag",0),n=Q("d2locselect").value;t!=n&&("*"!=n?args.locale=n:delete args.locale,putstore("loctag",args.locale),mainUpdate(4294967295))}function account_manageAuthApp(){!xxdialogMode&&4096&features&&(1==userinfo.otpsecret?account_removeOtp():account_addOtp())}function account_addOtp(){!xxdialogMode&&1!=userinfo.otpsecret&&4096&features&&(setDialogMode(2,"Aplicació d'autenticació",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Carregant...</div>","otpauth-request"),meshserver.send({action:"otpauth-request"}))}function account_addOtpCheck(e){var t=6==Q("d2otpauthinput").value.length;QE("idx_dlgOkButton",t),e&&13==e.keyCode&&t&&dialogclose(1)}function account_removeOtp(){!xxdialogMode&&1==userinfo.otpsecret&&4096&features&&setDialogMode(2,"Aplicació d'autenticació",3,function(){meshserver.send({action:"otpauth-clear"})},"Confirmeu l'eliminació de l'inici de sessió en dos passos de l'aplicació d'autenticació?")}function account_manageOtp(e){2==xxdialogMode&&"otpauth-manage"==xxdialogTag&&dialogclose(0),xxdialogMode||!(4096&features)||1!=userinfo.otpsecret&&userinfo.otphkeys<1||meshserver.send({action:"otpauth-getpasswords",subaction:e})}function account_showVerifyEmail(){xxdialogMode||1==userinfo.emailVerified||1!=serverinfo.emailcheck||setDialogMode(2,"Verificació del correu electrònic",3,account_showVerifyEmailEx,"Feu clic a D'acord per enviar un correu de verificació a:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Espereu uns minuts per rebre la verificació.")}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){xxdialogMode||(setDialogMode(2,"Canvi d'adreça de correu electrònic",3,account_changeEmail,addHtmlValue("Correu electrònic","<input id=dp3email style=width:170px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />")),null!=userinfo.email&&(Q("dp3email").value=userinfo.email),account_validateEmail(),Q("dp3email").focus())}function account_validateEmail(e,t){QE("idx_dlgOkButton",validateEmail(Q("dp3email").value)&&Q("dp3email").value!=userinfo.email),null!=e&&13==e.keyCode&&dialogclose(1)}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp3email").value})}function account_showDeleteAccount(){if(!xxdialogMode){var e="<form method=post><table style=margin-left:10px><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><tr>";e+="<td align=right>Contrasenya:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr><tr><td align=right>Contrasenya:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr></table><div style=padding:10px;margin-bottom:4px>",e+='<input id=account_dlgCancelButton type=button value="Cancel · lar" style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>',e+='<input id=account_dlgOkButton type=submit value="D\'acord" style="float:right;width:80px" onclick=dialogclose(1)>',setDialogMode(2,"Esborrar compte",0,null,e+="</div><br /></form>"),account_validateDeleteAccount(),Q("apassword1").focus()}}function account_showChangePassword(){if(xxdialogMode)return!1;var e="<table style=margin-left:10px>";if(e+="<tr><td align=right>"+nobreak("Contrasenya antiga:")+"</td><td><input id=apassword0 type=password name=apassword0 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b></b></td></tr>",e+="<tr><td align=right>"+nobreak("Nova contrasenya:")+"</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b><span id=dxPassWarn></span></b></td></tr>",e+="<tr><td align=right>"+nobreak("Nova contrasenya:")+"</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>",65536&features&&(e+="<tr><td align=right>Pista de contrasenya:</td><td><input id=apasswordhint name=apasswordhint maxlength=250 type=text autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>"),e+="</table>",passRequirements){var t=[],n=0;for(var o in passRequirements)"reset"!=o&&"hint"!=o&&(t.push(o+":"+passRequirements[o]),n++);n>0&&(e+="<br /><span style=font-size:x-small>"+format("Requisits: {0}.",t.join(", "))+"</span>")}return setDialogMode(2,"Canvia la contrasenya",3,account_showChangePasswordEx,e+="<br />"),Q("apassword0").focus(),account_validateNewPassword(),!1}function account_showChangePasswordEx(){if(Q("apassword1").value==Q("apassword2").value){var e={action:"changepassword",oldpass:Q("apassword0").value,newpass:Q("apassword1").value};65536&features&&(e.hint=Q("apasswordhint").value),meshserver.send(e)}}function account_createMesh(){if(!xxdialogMode)if(4294967295!=userinfo.siteadmin&&64&userinfo.siteadmin)setDialogMode(2,"Nou grup de dispositius",1,null,"Aquest compte no té els drets per crear un grup de dispositius nou.");else if(!0===userinfo.emailVerified||1!=serverinfo.emailcheck||4294967295==userinfo.siteadmin)if(!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey){var e=addHtmlValue("Nom","<input id=dp3meshname style=width:170px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate() />");e+=addHtmlValue("Tipus","<div style=width:170px;margin:0;padding:0><select id=dp3meshtype style=width:100% onchange=account_validateMeshCreate() ><option value=2>Grup d'agents de programari</option><option value=1>Només Intel&reg; AMT</option></select></div>"),setDialogMode(2,"Crea un grup de dispositius",3,account_createMeshEx,e+=addHtmlValue("Descripció","<div style=width:170px;margin:0;padding:0><textarea id=dp3meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>")),account_validateMeshCreate(),Q("dp3meshname").focus()}else setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a un dispositiu fins que no s\'hagi activat l\'autenticació de dos factors. Això és necessari per a una seguretat addicional. Aneu a "El meu compte" i mireu la secció "Seguretat del compte".');else setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a un dispositiu fins que no es verifiqui una adreça de correu electrònic. Això és necessari per a la recuperació de la contrasenya. Aneu a "El meu compte" per canviar i verificar una adreça de correu electrònic.')}function account_validateMeshCreate(){QE("idx_dlgOkButton",Q("dp3meshname").value.length>0)}function account_createMeshEx(e,t){meshserver.send({action:"createmesh",meshname:Q("dp3meshname").value,meshtype:parseInt(Q("dp3meshtype").value),desc:Q("dp3meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",Q("apassword1").value.length>0&&Q("apassword1").value==Q("apassword2").value)}function account_validateNewPassword(){var e="",t=Q("apassword0").value.length>0&&Q("apassword1").value.length>0&&Q("apassword1").value==Q("apassword2").value&&Q("apassword0").value!=Q("apassword1").value;if(65536&features&&Q("apasswordhint").value==Q("apassword1").value&&(t=!1),""!=Q("apassword1").value)if(null==passRequirements||""==passRequirements){var n=checkPasswordStrength(Q("apassword1").value);e=n>=80?"<span style=color:green>Strong<span>":n>=60?"<span style=color:blue>&#9679;<span>":"<span style=color:red>&#9679;<span>"}else{0==checkPasswordRequirements(Q("apassword1").value,passRequirements)&&(t=!1,e="<span style=color:red>Política<span>")}QH("dxPassWarn",e),QE("idx_dlgOkButton",t)}function checkPasswordStrength(e){var t=0,n={},o=0,i={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e)return 0;for(var a=0;a<e.length;a++)n[e[a]]=(n[e[a]]||0)+1,t+=5/n[e[a]];for(var s in i)o+=1==i[s]?1:0;return parseInt(t+10*(o-1))}function checkPasswordRequirements(e,t){if(null==t||""==t||"object"!=typeof t)return!0;if(t.min&&e.length<t.min)return!1;if(t.max&&e.length>t.max)return!1;for(var n=0,o=0,i=0,a=0,s=0;s<e.length;s++)/\d/.test(e[s])&&n++,/[a-z]/.test(e[s])&&o++,/[A-Z]/.test(e[s])&&i++,/\W/.test(e[s])&&a++;return!(t.numeric&&n<t.numeric)&&(!(t.lower&&o<t.lower)&&(!(t.upper&&i<t.upper)&&!(t.nonalpha&&a<t.nonalpha)))}function updateMeshes(){var e="",t=0;for(i in meshes){t++;var n=GetMeshRights(meshes[i]),o="Drets Parcials";4294967295==n?o="Administrador total":0==n&&(o="Sense Drets"),e+="<div style=cursor:pointer onclick=goForward('"+i+"')>",e+='<div style="float:left;margin-left:4px"><img src="/images/meshicon50.png" width=50 height=50 /></div>',e+="<div class=meshList>",e+="<div><div style=color:black;padding-left:12px;padding-top:2px><b>"+EscapeHtml(meshes[i].name)+"</b></div><div style=padding-left:12px;padding-top:3px;color:black>"+o+"</div></div>",e+="</div></div>"}QH("p3meshes",e),QV("p3noMeshFound",0==t)}function gotoMesh(e){!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey?(null==(currentMesh=meshes[e])&&goBack(),p20updateMesh(),go(20)):setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a aquesta funció fins que s\'hagi activat l\'autenticació de dos factors. Això és necessari per a una seguretat addicional. Aneu a "El meu compte" i mireu la secció "Seguretat del compte".')}function d3init(){d3fileoptions={dialog:1,filter:"d3filter",files:"d3serverfiles",folderup:"p3FolderUp",currentFolder:"p3CurrentFolder",func:d3setActions},Q("d3localFile").value="",Q("d3localFile").accept=Q("d3filter").value,d3modechange()}function d3modechange(){var e=Q("d3uploadMode").value;QV("d3localmode",1==e),QV("d3servermode",2==e),1==e?d3setActions():d3updatefiles()}var filetreelinkpath,d3filetreelocation=[],d3fileoptions=null;function d3updatefiles(){if(null!=d3fileoptions&&("d3filter"!=d3fileoptions.filter||1!=Q("d3uploadMode").value)){for(var e="",t="",n=filetree,o=1,i="",a=[],s=[],r=document.getElementsByName("fc"),l=0;l<r.length;l++)r[l].checked&&s.push(r[l].value);for(var l in d3filetreelinkpath="",d3filetreelocation){if(null==n.f||null==n.f[d3filetreelocation[l]])break;if(a.push(d3filetreelocation[l]),1==o){var d=d3filetreelocation[l].split("/");window.location.origin+domainUrl+d[0]+"files/"+d[2],d3filetreelocation[l]===userinfo._id?d3filetreelinkpath+="self":d3filetreelinkpath+=d[0]+"/"+d[2]}else""!=d3filetreelinkpath&&(d3filetreelinkpath+="/"+d3filetreelocation[l],o>2&&"/"+d3filetreelocation[l]);i=(n=n.f[d3filetreelocation[l]]).n,o++}d3filetreelocation=a;var u=p5sort_files(n.f),c="";for(var l in d3fileoptions.filter&&(c=Q(d3fileoptions.filter).value),u){var p,m=u[l],g=m.n;if(3!=m.t||""==c||0!=m.nx.toLowerCase().endsWith(c)){p=EscapeHtml(g);var f="";null!=m.s&&(f=getFileSizeStr(m.s));var h="";if(3!=m.t){h='<div class=filelist file=999><span style=float:right title=""></span><span title="'+p+'"><div class=fileIcon'+m.t+' onclick=d3folderset("'+encodeURIComponentEx(m.nx)+'")></div>&nbsp;<a href=# style=cursor:pointer onclick=\'return d3folderset("'+encodeURIComponentEx(m.nx)+"\")'>"+p+"</a></span></div>"}else{var v=p;h='<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value="'+m.nx+'">&nbsp;<span style=float:right>'+EscapeHtml(f)+'</span><span title="'+p+'"><div class=fileIcon'+m.t+"></div>"+v+"</span></div>"}m.t<3?e+=h:t+=h}}d3fileoptions.currentFolder&&QH(d3fileoptions.currentFolder,i),QH(d3fileoptions.files,e+t),QE(d3fileoptions.folderup,d3filetreelocation.length>0),d3fileoptions.func&&d3fileoptions.func()}}function d3folderset(e){return d3filetreelocation.push(decodeURIComponent(e)),d3updatefiles(),!1}function d3folderup(e){if(null==e)d3filetreelocation.pop();else for(;d3filetreelocation.length>e;)d3filetreelocation.pop();d3updatefiles()}function d3getFileSel(){for(var e=[],t=document.getElementsByName("fcx"),n=0;n<t.length;n++)t[n].checked&&e.push(t[n].value);return e}function d3setActions(){1==d3fileoptions.dialog?1==Q("d3uploadMode").value?QE("idx_dlgOkButton",Q("d3localFile").value.length>0):QE("idx_dlgOkButton",1==d3getFileSel().length):2==d3fileoptions.dialog&&QE("idx_dlgOkButton",1==d3getFileSel().length)}var sortorder,filetreelocation=[];function p5refreshFiles(){meshserver.send({action:"files"})}function updateFiles(){if(QV("MainMenuMyFiles",!(8&features)),!(8&features)){for(var e,t="",n="",o="<a style=cursor:pointer;color:black onclick=p5folderup(0)>Arrel</a>",i="Root",a=filetree,s=1,r=[],l=filetreelinkpath,d=[],u=document.getElementsByName("fc"),c=0;c<u.length;c++)u[c].checked&&d.push(u[c].value);for(var c in filetreelinkpath="",filetreelocation){if(null==a.f||null==a.f[filetreelocation[c]])break;if(r.push(filetreelocation[c]),i+=" / "+filetreelocation[c],1==s){var p=filetreelocation[c].split("/");e=window.location.origin+domainUrl+p[0]+"files/"+p[2],filetreelinkpath+=filetreelocation[c]}else""!=filetreelinkpath&&(filetreelinkpath+="/"+filetreelocation[c],s>2&&(e+="/"+filetreelocation[c]));a=a.f[filetreelocation[c]],o+=" / <a style=cursor:pointer;color:black onclick=p5folderup("+s+")>"+EscapeHtml(null!=a.n?a.n:filetreelocation[c])+"</a>",s++}filetreelocation=r;var m=i.toLowerCase().startsWith("root / "+userinfo._id+" / public"),g=p5sort_files(a.f);for(var c in g){var f,h=g[c],v=h.n;f=EscapeHtml(v);var k="";null!=h.s&&(k=getFileSizeStr(h.s));var y="";if(h.t<3||4==h.t){var x=1==h.t||4==h.t?p5getQuotabar(h):"";y="<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+EscapeHtml(v)+"'>&nbsp;<span style=float:right;padding-right:4px>"+x+'</span><span title="'+f+'"><div class=fileIcon'+h.t+'></div><a style=cursor:pointer onclick=p5folderset("'+encodeURIComponent(h.nx)+'")>'+f+"</a></span></div>"}else{var b=f,w="";m&&(w=" (<a style=cursor:pointer onclick='p5showPublicLink(\""+e+"/"+h.nx+"\")'>Enllaç</a>)"),h.s>0&&(b='<a rel="noreferrer noopener" target="_blank" href="downloadfile.ashx?link='+encodeURIComponent(filetreelinkpath+"/"+h.nx)+'">'+f+"</a>"+w),y="<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+h.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+EscapeHtml(k)+'</span><span title="'+f+'"><div class=fileIcon'+h.t+"></div>"+b+"</span></div>"}h.t<3?t+=y:n+=y}if(QH("p5rightOfButtons",p5getQuotabar(a)),QH("p5files",t+n),QH("p5currentpath",o),QE("p5FolderUp",0!=filetreelocation.length),QV("p5PublicShare",m),l==filetreelinkpath){u=document.getElementsByName("fc");for(c=0;c<u.length;c++)u[c].checked=d.indexOf(u[c].value)>=0}p5setActions()}}function getNiceSize(e){return e<=0?"L'emmagatzematge supera":e<2048?format("{0}b a l'esquerra",e):e<2097152?format("Queden {0}k",Math.round(e/1024)):e<2147483648?format("Queden {0}m",Math.round(e/1024/1024)):format("Queden {0}g",Math.round(e/1024/1024/1024))}function getNetworkSpeed(e){return e<=0?"0 bps":e<1e3?format("{0} bps",e):e<1e6?format("{0} Kbps",Math.round(e/1e3)):e<1e9?format("{0} Mbps",Math.round(e/1e6)):format("{0} Gbps",(e/1e9).toFixed(1))}function p5getQuotabar(e){for(;e.t>1&&4!=e.t;)e=e.parent;return 1!=e.t&&4!=e.t||null==e.maxbytes?"":getNiceSize(e.maxbytes-e.s)+" <progress style=height:10px;width:100px value="+e.s+" max="+e.maxbytes+" />"}function p5showPublicLink(e){setDialogMode(2,"Enllaç públic",1,null,'<input type=text style=width:100% value="'+e+'" readonly />')}function p5sort_filename(e,t){return e.ln>t.ln?1*sortorder:e.ln<t.ln?-1*sortorder:0}function p5sort_timestamp(e,t){return e.d>t.d?1*sortorder:e.d<t.d?-1*sortorder:0}function p5sort_bysize(e,t){return e.s==t.s?p5sort_filename(e,t):(e.s-t.s)*sortorder}function p5sort_files(e){var t=[],n=Q("p5sortdropdown").value;for(var o in e)e[o].nx=o,null==e[o].n&&(e[o].n=o),e[o].ln=e[o].n.toLowerCase(),t.push(e[o]);return sortorder=1,n>3&&(sortorder=-1,n-=3),1==n?t.sort(p5sort_filename):2==n?t.sort(p5sort_bysize):3==n&&t.sort(p5sort_timestamp),t}function p5setActions(){var e=getFileSelCount(),t=getFileCount(),n=getFileSelCount(!1);QE("p5DeleteFileButton",e>0&&filetreelocation.length>0),QE("p5NewFolderButton",filetreelocation.length>0),QE("p5UploadButton",filetreelocation.length>0),QE("p5RenameFileButton",1==e&&filetreelocation.length>0),QE("p5SelectAllButton",t>0),Q("p5SelectAllButton").value=e>0?"Cap":"Tots",QE("p5CutButton",n>0&&e==n),QE("p5CopyButton",n>0&&e==n),QE("p5PasteButton",null!=p5clipboard&&p5clipboard.length>0&&filetreelocation.length>0)}function getFileSelCount(e){for(var t=0,n=document.getElementsByName("fc"),o=0;o<n.length;o++)!n[o].checked||0==e&&"3"!=n[o].attributes.file.value||t++;return t}function getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fc"),n=0;n<t.length;n++)t[n].checked&&"999"==t[n].attributes.file.value&&e++;return e}function getFileCount(){return document.getElementsByName("fc").length}function p5selectallfile(){for(var e=0==getFileSelCount(),t=document.getElementsByName("fc"),n=0;n<t.length;n++)t[n].checked=e;p5setActions()}function setupBackPointers(e){if(null!=e.f){var t=0,n=0;for(var o in e.f)setupBackPointers(e.f[o]),e.f[o].parent=e,e.f[o].s&&(t+=e.f[o].s),e.f[o].c&&(n+=e.f[o].c),3==e.f[o].t&&n++;e.s=t,e.c=n}return e}function getFileSizeStr(e){return 1==e?"1 byte":format("{0} bytes",e)}function p5folderup(e){if(null==e)filetreelocation.pop();else for(;filetreelocation.length>e;)filetreelocation.pop();return updateFiles(),!1}function p5folderset(e){return filetreelocation.push(decodeURIComponent(e)),updateFiles(),!1}function p5createfolder(){setDialogMode(2,"Carpeta nova",3,p5createfolderEx,"<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% />"),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5createfolderEx(){meshserver.send({action:"fileoperation",fileop:"createfolder",path:filetreelocation,newfolder:Q("p5renameinput").value})}function p5deletefile(){var e=getFileSelCount(),t=getFileSelDirCount()>0?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Eliminació recursiva</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Suprimeix",3,p5deletefileEx,e>1?format("Vols suprimir {0} elements seleccionats?",e)+t:"Vols suprimir l'element seleccionat?"+t)}function p5deletefileEx(){for(var e=[],t=document.getElementsByName("fc"),n=0;n<t.length;n++)t[n].checked&&e.push(t[n].value);meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:e,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){for(var e,t=document.getElementsByName("fc"),n=0;n<t.length;n++)t[n].checked&&(e=t[n].value);setDialogMode(2,"Canvia el nom",3,p5renamefileEx,'<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"fileoperation",fileop:"rename",path:filetreelocation,oldname:e}),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5renamefileEx(e,t){t.newname=Q("p5renameinput").value,meshserver.send(t)}function p5fileNameCheck(e){var t=isFilenameValid(Q("p5renameinput").value);QE("idx_dlgOkButton",t),1==t&&e&&13==e.keyCode&&dialogclose(1)}var isFilenameValid=function(){var e=/^[^\\/:\*\?"<>\|]+$/,t=/^\./,n=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(o){return e.test(o)&&!t.test(o)&&!n.test(o)&&"."!=o[0]}}();function p5uploadFile(){setDialogMode(2,"Penja el document",3,p5uploadFileEx,'<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="'+encodeURIComponent(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value='+authCookie+" /><input type=submit id=p5loginSubmit style=display:none /></form>"),updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(e){var t=document.getElementsByName("fc");p5clipboard=[],p5clipboardCut=e,p5clipboardFolder=Clone(filetreelocation);for(var n=0;n<t.length;n++)t[n].checked&&"3"==t[n].attributes.file.value&&p5clipboard.push(t[n].value);p5updateClipview()}function p5pasteFile(){var e="";null!=p5clipboard&&p5clipboard.length>0&&(e=format("Confirmeu {0} de {1} entrada{2} a aquesta ubicació?",0==p5clipboardCut?"copy":"move",p5clipboard.length,p5clipboard.length>1?"s":"")),setDialogMode(2,"Enganxa",3,p5pasteFileEx,e)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:0==p5clipboardCut?"copy":"move",scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard}),p5folderup(999),1==p5clipboardCut&&(p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0,p5updateClipview())}function p5updateClipview(){var e="";null!=p5clipboard&&p5clipboard.length>0&&(e=format("Mantingut {0} entrada{1} per a {2}",p5clipboard.length,p5clipboard.length>1?"s":"",0==p5clipboardCut?"còpia":"moure's")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Clar</a>.'),QH("p5bottomstatus",e),p5setActions()}function p5clearClip(){return p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0,p5updateClipview(),!1}function p5fileDragDrop(e){if(haltEvent(e),QV("bigfail",!1),QV("bigok",!1),null!=e.dataTransfer&&0!=e.dataTransfer.files.length&&0!=filetreelocation.length)for(var t=[],n=[],o=[],i=[],a=e.dataTransfer.files.length,s=0;s<e.dataTransfer.files.length;s++){var r=new FileReader,l=e.dataTransfer.files[s];t.push(l.name),n.push(l.size),o.push(l.type),r.onload=function(e){i.push(e.target.result),0==--a&&(Q("p5fileDragName").value=t.join("*"),Q("p5fileDragSize").value=n.join("*"),Q("p5fileDragType").value=o.join("*"),Q("p5fileDragData").value=i.join("*"),Q("p5fileDragLink").value=encodeURIComponent(filetreelinkpath),Q("p5loginSubmit2").click())},r.readAsDataURL(l)}}var p5dragtimer=null;function p5fileDragOver(e){haltEvent(e),null!=p5dragtimer&&(clearTimeout(p5dragtimer),p5dragtimer=null);var t=!0;0==filetreelocation.length&&(t=!1),QV("bigok",t),QV("bigfail",!t)}function p5fileDragLeave(e){haltEvent(e),"p5filetable"!=e.target.id?(QV("bigfail",!1),QV("bigok",!1)):p5dragtimer=setTimeout("QV('bigfail',false);QV('bigok',false);p5dragtimer=null;",200)}function onRealNameCheckBox(){putstore("showRealNames",(showRealNames=Q("RealNameCheckBox").checked)?1:0),mainUpdate(5)}function onOnlineCheckBox(e){putstore("onlineOnly",Q("OnlineCheckBox").checked?1:0),onSearchInputChanged()}function updateDevicePageState(){if(null==devicePagingState||devicePagingState.total<=devicePagingState.limit)QV("devViewPageState",!1),QV("devViewPageButton2",!1),QV("devViewPageButton3",!1);else{var e=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),t=Math.ceil(devicePagingState.total/devicePagingState.limit);QV("devViewPageState",!0),QV("devViewPageButton2",!0),QV("devViewPageButton3",!0),QH("devViewPageState",e+"/"+t)}}function onDeviceViewPageChange(e){if(null!=devicePagingState){var t=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),n=Math.ceil(devicePagingState.total/devicePagingState.limit);switch(e){case 2:t>1&&meshserver.send({action:"nodes",skip:(t-2)*devicePagingState.limit});break;case 3:t<n&&meshserver.send({action:"nodes",skip:t*devicePagingState.limit})}}}function onDeviceSearchChanged(e){setTimeout(function(){onSearchInputChanged()},10)}function clearSearchInput(){Q("SearchInput").value="",Q("OnlineCheckBox").checked=!1,onSearchInputChanged()}function onSearchInputChanged(){var e=Q("SearchInput").value.toLowerCase().trim();putstore("_search",Q("SearchInput").value),QS("SearchInput")["background-color"]=""==e?"#FFFFFF":"#FDFFBE";var t=e.startsWith("!");t&&(e=e.substring(1));var n=Q("SearchInput").value.trim();t&&(n=n.substring(1));var o=null,i=null,a=null,s=null,r=null,l=null,d=null,u=null;if(e.startsWith("user:".toLowerCase())?o=e.substring(5):e.startsWith("u:".toLowerCase())?o=e.substring(2):e.startsWith("ip:".toLowerCase())?i=e.substring(3):e.startsWith("group:".toLowerCase())?a=e.substring(6):e.startsWith("g:".toLowerCase())?a=e.substring(2):e.startsWith("tag:".toLowerCase())?s=n.substring(4):e.startsWith("t:".toLowerCase())?s=n.substring(2):e.startsWith("atag:".toLowerCase())?r=n.substring(5).toLowerCase():e.startsWith("a:".toLowerCase())?r=n.substring(2).toLowerCase():e.startsWith("os:".toLowerCase())?d=n.substring(3).toLowerCase():e.startsWith("amt:".toLowerCase())?u=n.substring(4).toLowerCase():"wsc:ok"==e?l=1:"wsc:noav"==e?l=2:"wsc:noupdate"==e?l=3:"wsc:nofirewall"==e?l=4:"wsc:any"==e&&(l=5),""==e)for(var c in nodes)nodes[c].v=!0;else if(null!=i)for(var c in nodes)nodes[c].v=null!=nodes[c].ip&&nodes[c].ip.indexOf(i)>=0;else if(null!=a)for(var c in nodes)nodes[c].v=meshes[nodes[c].meshid].name.toLowerCase().indexOf(a)>=0;else if(null!=s)for(var c in nodes)nodes[c].v=null==nodes[c].tags&&""==s||null!=nodes[c].tags&&nodes[c].tags.indexOf(s)>=0;else if(null!=r)for(var c in nodes)nodes[c].v=null!=nodes[c].agent&&null==nodes[c].agent.tag&&""==r||null!=nodes[c].agent&&null!=nodes[c].agent.tag&&nodes[c].agent.tag.toLowerCase().indexOf(r)>=0;else if(null!=o){for(var c in nodes)if(nodes[c].v=!1,nodes[c].users&&nodes[c].users.length>0)for(var p in nodes[c].users)nodes[c].users[p].toLowerCase().indexOf(o)>=0&&(nodes[c].v=!0)}else if(null!=d)for(var c in nodes)nodes[c].v=null!=nodes[c].osdesc&&nodes[c].osdesc.toLowerCase().indexOf(d)>=0;else if(null!=u)for(var c in nodes)nodes[c].v=null!=nodes[c].intelamt&&(""==u||nodes[c].intelamt.state==u);else if(null!=l)for(var c in nodes)nodes[c].v=!1,nodes[c].wsc&&(1==l&&"OK"==nodes[c].wsc.antiVirus&&"OK"==nodes[c].wsc.autoUpdate&&"OK"==nodes[c].wsc.firewall?nodes[c].v=!0:(2!=l&&5!=l||"OK"==nodes[c].wsc.antiVirus)&&(3!=l&&5!=l||"OK"==nodes[c].wsc.autoUpdate)&&(4!=l&&5!=l||"OK"==nodes[c].wsc.firewall)||(nodes[c].v=!0));else if("*"==e)for(var c in nodes)nodes[c].v=1==stars[nodes[c]._id];else try{var m=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),g=new RegExp(m);for(var c in nodes)nodes[c].v=32768&features2?268435456&features2?g.test(nodes[c].name.toLowerCase())||g.test(meshes[nodes[c].meshid].name.toLowerCase())||null!=nodes[c].rnamel&&g.test(nodes[c].rnamel.toLowerCase()):g.test(nodes[c].name.toLowerCase())||null!=nodes[c].rnamel&&g.test(nodes[c].rnamel.toLowerCase()):268435456&features2?showRealNames?null!=nodes[c].rnamel&&g.test(nodes[c].rnamel.toLowerCase())||g.test(meshes[nodes[c].meshid].name.toLowerCase()):g.test(nodes[c].name.toLowerCase())||g.test(meshes[nodes[c].meshid].name.toLowerCase()):showRealNames?null!=nodes[c].rnamel&&g.test(nodes[c].rnamel.toLowerCase()):g.test(nodes[c].name.toLowerCase())}catch(e){for(var c in nodes)nodes[c].v=!0}if(t)for(var c in nodes)nodes[c].v=!nodes[c].v;if(Q("OnlineCheckBox").checked)for(var c in nodes)null!=nodes[c].conn&&0!=nodes[c].conn||(nodes[c].v=!1);mainUpdate(4)}var gotKeyPressEvent=!1;function ondeskkeypress(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!0,Q("softKeyboard").value="",null!=currentNode){var n=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=n&&(!(8&n)||256&n)))return!1;if(1==!(4294967295==n||!(8&n)||256&n||!(4096&n))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}return desktop.m.handleKeys(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;gotKeyPressEvent=!0,Q("softKeyboard").value="";var o=0;return 0!=e.charCode?o=e.charCode:0!=e.keyCode&&(o=e.keyCode),0!=o&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(o)):terminal.sendText(String.fromCharCode(o))),!1}}function ondeskkeydown(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!1,Q("softKeyboard").value="",null!=currentNode){var n=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=n&&(!(8&n)||256&n)))return!1;if(1==!(4294967295==n||!(8&n)||256&n||!(4096&n))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}return desktop.m.handleKeyDown(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;Q("softKeyboard").value="",gotKeyPressEvent=!1;var o=0;0!=e.charCode?o=e.charCode:0!=e.keyCode&&(o=e.keyCode),8==o?"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(o)):terminal.sendText(String.fromCharCode(o)):e.ctrlKey&&o>=64&&o<=95&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(o-64)):terminal.sendText(String.fromCharCode(o-64)))}}function ondeskkeyup(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){var n=Q("softKeyboard").value;if(Q("softKeyboard").value="",null!=currentNode){var o=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=o&&(!(8&o)||256&o)))return!1;if(1==!(4294967295==o||!(8&o)||256&o||!(4096&o))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}if(!(0==gotKeyPressEvent&&n.length>0&&desktop.m.SendKeyUnicode))return desktop.m.handleKeyUp(e);var i=n[n.length-1].charCodeAt(0);desktop.m.SendKeyUnicode(desktop.m.KeyAction.DOWN,i),desktop.m.SendKeyUnicode(desktop.m.KeyAction.UP,i)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&0==gotKeyPressEvent&&1!==t){if(1==e.altKey)return!0;n=Q("softKeyboard").value;return Q("softKeyboard").value="","sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+n):n&&terminal.sendText(n),!1}}var deviceHeaderCount,sort=0,deviceHeaderId=0,deviceHeaders={},showRealNames=!1,deviceHeaderTotal=0,deviceHeadersTitles=(deviceHeaders={},{});function updateDevices(){var e="",t=0,n=null,o=0,i={};for(var a in deviceHeaderId=0,deviceHeaderCount={},deviceHeaderTotal=0,deviceHeaders={},deviceHeadersTitles={},0==sort?nodes.sort(meshSort):1==sort?nodes.sort(powerSort):2==sort&&(1==showRealNames?nodes.sort(deviceHostSort):nodes.sort(deviceSort)),nodes)if(0!=nodes[a].v){if(0==sort){if(nodes.sort(meshSort),(meshes[nodes[a].meshid]?nodes[a].meshid:"*")!=n){deviceHeaderSet();var s="";null!=meshes[nodes[a].meshid]&&1==meshes[nodes[a].meshid].mtype&&(s="<span style=color:lightgray>, només Intel&reg; AMT</span>"),null!=n&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),e+="<div class=DevSt style=padding-top:4px><span style=float:right>",meshes[nodes[a].meshid]?(e+='</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+nodes[a].meshid+'")>'+EscapeHtml(meshes[nodes[a].meshid].name)+"</span>"+s+"<span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",n=nodes[a].meshid):(e+="</span><span id=MxMESH><i>Dispositius individuals</i></span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",n="*"),i[n]=1,t=0}}else 1==sort?nodes[a].pwr!==n&&(deviceHeaderSet(),null!==n&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),e+="<div class=DevSt style=width:100%;padding-top:4px><span>"+PowerStateStr2(nodes[a].pwr)+"</span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",n=nodes[a].pwr,t=0):2==sort&&null==n&&(n="1");o++,e+="<div name=xxdevice onclick=goForward('"+nodes[a]._id+"') class=devList1 id='"+nodes[a]._id+"'></div>",deviceHeaderTotal++,void 0===deviceHeaderCount[nodes[a].state]?deviceHeaderCount[nodes[a].state]=1:deviceHeaderCount[nodes[a].state]++}if(""==e&&nodes.length>0&&""!=Q("SearchInput").value&&(e='<div style="margin:30px">No hi ha cap dispositiu que coincideixi amb aquesta cerca.</div>'),0==sort&&""==Q("SearchInput").value)for(var a in meshes){var r=meshes[a];null==i[r._id]&&IsMeshViewable(r)&&(""!=n&&""!=e&&(e+="</tr></table>"),e+="<div><div colspan=3 class=DevSt><span style=float:right>",e+='</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+r._id+'")>'+EscapeHtml(r.name)+"</span></div>",1==r.mtype&&(e+="<div style=padding:10px><i>No hi ha dispositius Intel&reg; AMT en aquest grup"),r.mtype>1&&(e+="<div style=padding:10px><i>No hi ha cap dispositiu en aquest grup"),e+=".</i></div></div>",n=r._id,o++)}for(var a in 0==o?""!=Q("SearchInput").value||Q("OnlineCheckBox").checked?QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Sense dispositius</span><br /><br />No hi ha cap dispositiu que coincideixi amb aquesta cerca. <a onclick=clearSearchInput() style=cursor:pointer>Esborra el filtre de cerca</a></div>'):QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Sense dispositius</span><br /><br />Utilitzeu la versió d\'escriptori d\'aquest lloc web per afegir dispositius.</div>'):QH("xdevices",e),deviceHeaderSet(),deviceHeaders)QH(a,deviceHeaders[a]);for(var a in deviceHeadersTitles)Q(a).title=deviceHeadersTitles[a];onDevicesScrollEx()}var onDevicesTouchActive=!1,onDevicesScrollnagleTimer=null;function onDevicesScroll(){null==onDevicesScrollnagleTimer&&(onDevicesScrollnagleTimer=setTimeout(onDevicesScrollEx,250))}function onDeviceTouch(e){onDevicesTouchActive!=e&&(onDevicesTouchActive=e,0==e&&onDevicesScrollEx())}function onDevicesScrollEx(){var e=document.getElementsByName("xxdevice");onDevicesScrollnagleTimer=null;for(var t=0;t<e.length;t++){var n=getNodeFromId(e[t].id);if(null==n)break;updateDeviceViewHtml(e[t],n)}}function updateDeviceViewDevice(e){if(null!=e){var t=Q(e._id);null!=t&&""!=t.innerHTML&&updateDeviceViewHtml(t,e)}}function updateDeviceViewHtml(e,t){var n=Q("xdevices").scrollTop-250,o=Q("xdevices").scrollTop+Q("xdevices").clientHeight+250;if(e.offsetTop>=n&&e.offsetTop<o){var i=EscapeHtml(t.name);0==i.length&&(i="<i>Cap</i>"),null!=t.rname&&t.rname.length>0&&(i+=" / "+EscapeHtml(t.rname));var a=EscapeHtml(t.name);1==showRealNames&&null!=t.rname&&(a=EscapeHtml(t.rname)),0==a.length&&(a="<i>Cap</i>");var s="",r="";if(1==stars[t._id]&&(r+="<img class=deviceNotifyDotSub src=images/icon-star-notify-16.png width=16 height=16>"),null!=t.sessions&&(null!=t.sessions.msg&&(r+='<div style="width:16;height:16" class=deviceNotifyDotSub>'+Object.keys(t.sessions.msg).length+"</div>"),null==t.sessions.kvm&&null==t.sessions.terminal&&null==t.sessions.files&&null==t.sessions.tcp&&null==t.sessions.udp||(r+="<img class=deviceNotifyDotSub src=images/icon-relay-notify.png width=16 height=16>"),null!=t.sessions.help&&(r+="<img class=deviceNotifyDotSub src=images/icon-help-notify-16.png width=16 height=16>"),null!=t.sessions.battery)){var l=t.sessions.battery,d="";"ac"==l.state?d="El dispositiu està connectat":"dc"==l.state&&(d="El dispositiu funciona amb bateria");var u="",c=-1;"number"==typeof l.level&&l.level>=0&&l.level<=100&&(u=l.level+"%",(c=Math.floor((l.level+10)/25)+1)>5&&(lvl=5),"ac"==l.state&&(100==l.level?c=11:c+=5)),c>0&&(s+='<div class="deviceBatterySmall deviceBatterySmall'+c+'" title="'+(null!=d?d+", "+u:u)+'"></div>')}""!=r&&(s+="<div class=deviceNotifyDot>"+r+"</div>");var p=t.icon,m=NodeStateStr(t);t.conn&&0!=t.conn||3==t.mtype||(p+=" gray"),e.innerHTML="<div>"+s+'<div class="i'+p+' devList2"></div><div class=devList3><div class=devList4><b>'+a+"</b></div><div class=devList5>"+m+"</div></div></div>"}else e.innerHTML=""}function showDeviceHelpRequests(e,t,n){if(n&&haltEvent(n),xxdialogMode&&!t)return!1;var o=null,i="";if(null==(o=null==e?currentNode:getNodeFromId(e))||null==o.sessions)return setDialogMode(0),!1;if(null!=o.sessions.help)for(var a in o.sessions.help)i+="<div style=margin-bottom:6px><b>"+EscapeHtml(a)+"</b></div><div style=margin-bottom:6px>"+EscapeHtml(o.sessions.help[a])+"</div>";return""!=i?setDialogMode(2,"Sol·licituds d'ajuda - "+EscapeHtml(o.name),1,null,i,"HELPREQ-"+o._id):setDialogMode(0),!1}function showDeviceSessions(e,t,n){if(!(!0!==t&&xxdialogMode||null==currentNode)){var o=currentNode,i="";for(var a in o.sessions)if("kvm"==a&&null==o.sessions.multidesk)for(var s in i+="<u>Escriptori remot</u>",o.sessions.kvm)if(s.startsWith("user/")){var r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("kvm", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.kvm[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.kvm[s])))+r)}else"busy"==s&&(i+=addHtmlValue2("El dispositiu està ocupat",1==o.sessions.kvm[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.kvm[s]))));else if("multidesk"==a)for(var s in i+="<u>Escriptori remot</u>",o.sessions.multidesk){r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("multidesk", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.multidesk[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.multidesk[s])))+r)}else if("terminal"==a)for(var s in i+="<u>Terminal</u>",o.sessions.terminal){r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("terminal", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.terminal[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.terminal[s])))+r)}else if("files"==a)for(var s in i+="<u>Fitxers</u>",o.sessions.files){r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("files", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.files[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.files[s])))+r)}else if("tcp"==a)for(var s in i+="<u>Enrutament TCP</u>",o.sessions.tcp){r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("tcp", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.tcp[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.tcp[s])))+r)}else if("udp"==a)for(var s in i+="<u>Encaminament UDP</u>",o.sessions.udp){r="";s!=userinfo._id&&4294967295!=GetNodeRights(o)||(r=' <a href=# onclick=\'return endDeviceSession("udp", "'+encodeURIComponentEx(o._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconnecteu aquesta sessió" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==o.sessions.udp[s]?"1 sessió":nobreak(format("{0} sessions",o.sessions.udp[s])))+r)}""!=i?setDialogMode(2,"Sessions - "+EscapeHtml(o.name),1,null,i,"SESSIONS-"+o._id):setDialogMode(0)}}function endDeviceSession(e,t,n){var o=decodeURIComponent(n).split("/"),i=o[0]+"/"+o[1]+"/"+o[2],a=null;4==o.length&&o[3].startsWith("guest:")&&(a=atob(o[3].substring(6))),"multidesk"==e?meshserver.send({action:"endDesktopMultiplex",nodeid:decodeURIComponent(t),xuserid:i,guestname:a,guestname:a}):meshserver.send({action:"msg",type:"endtunnel",nodeid:decodeURIComponent(t),xuserid:i,guestname:a,guestname:a,protocol:e})}function showDeviceMessages(e,t,n){if(n&&haltEvent(n),xxdialogMode&&!t)return!1;var o=null,i="<div style=max-height:200px;width:100%;overflow-y:auto;overflow-x:hidden>",a=0;if(null==(o=null==e?currentNode:getNodeFromId(e))||null==o.sessions||null==o.sessions.msg)return setDialogMode(0),!1;for(var s in o.sessions.msg){var r=s,l=5;"string"==typeof o.sessions.msg[s].msg&&(r=o.sessions.msg[s].msg),"number"==typeof o.sessions.msg[s].icon&&(l=o.sessions.msg[s].icon),(l<1||l>9)&&(l=5),i+="<table style=width:100%><td style=width:24px><div class=NotifyIconSmall"+l+'></div><td><div style="border-radius:5px;background-color:#BBB;width:calc(100% - 18px);padding:8px">'+EscapeHtml(r)+"</div></table>",a++}return i+="</div>",a>0&&setDialogMode(2,"Missatges de l'agent - "+EscapeHtml(o.name),1,null,i,"MESSAGES-"+o._id),!1}var powerStatetable=["","Alimentat","Dormir","Dormir","Dormir","Hibernant","Apagar","Present","Apagat"],powerStateStrings=["","Alimentat","Dorment","Dorment","El somni profund","Hibernant","Soft-Off","Present","Apagat"],powerStateStrings2=["","El dispositiu està alimentat","El dispositiu està en estat de repòs (S1)","El dispositiu està en estat de repòs (S2)","El dispositiu està en estat de repòs profund (S3)","El dispositiu està hibernant (S4)","El dispositiu està en estat d'apagat suau (S5)","El dispositiu està present, però no es pot determinar l'estat d'alimentació","El dispositiu està apagat"],powerColorTable=["#00000000","black","blue","blue","lightblue","blueviolet","darkgreen","lightseagreen","lightseagreen"];function NodeStateStr(e){var t=[];return e.state>0&&e.state<powerStatetable.length&&state.push(powerStatetable[e.state]),e.conn&&(1&e.conn&&t.push("<span>"+(4==e.mtype?"PDU"==e.porttype?"Interruptor":"IP-KVM":"Agent")+"</span>"),2&e.conn?t.push("<span>CIRA</span>"):4&e.conn&&t.push("<span>Intel&reg; AMT</span>"),8&e.conn&&t.push("<span>Relleu</span>"),16&e.conn&&t.push("<span>MQTT</span>")),null!=e.pwr&&0!=e.pwr&&t.push(powerStateStrings[e.pwr]),t.join(", ")}function PowerStateStr(e){return e<powerStatetable.length?powerStatetable[e]:""}function PowerStateStr2(e){return 0!=e&&e<powerStatetable.length?powerStatetable[e]:"Desconegut"}function onSortSelectChange(e){sort=document.getElementById("sortselect").selectedIndex,e||putstore("sort",sort),mainUpdate(4)}function deviceHeaderSet(){if(0!=deviceHeaderId){deviceHeaders["DevxHeader"+deviceHeaderId]=", "+deviceHeaderTotal+(1==deviceHeaderTotal?" node":" nodes");var e="";for(var t in deviceHeaderCount)e.length>0&&(e+=", "),e+=deviceHeaderCount[t]+" "+PowerStateStr2(t);deviceHeadersTitles["DevxHeader"+deviceHeaderId]=e,deviceHeaderId++,deviceHeaderCount={},deviceHeaderTotal=0}else deviceHeaderId=1}var sortCollator=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function meshSort(e,t){var n=sortCollator.compare(e.meshnamel,t.meshnamel);return 0!=n||0!=(n=sortCollator.compare(e.meshid,t.meshid))?n:1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel)}function powerSort(e,t){var n=e.pwr?e.pwr:0,o=t.pwr?t.pwr:0;return n>o?-1:n<o?1:n==o?1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel):void 0}function deviceSort(e,t){return sortCollator.compare(e.namel,t.namel)}function deviceHostSort(e,t){return sortCollator.compare(e.rnamel,t.rnamel)}function refreshDevice(e){currentNode&&currentNode._id==e&&gotoDevice(e,xxcurrentView,!0)}var currentNode,currentDevicePanel=0,powerTimelineNode=null,powerTimelineReq=null,powerTimelineUpdate=null,powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(e,t,n){if(!0===userinfo.emailVerified||1!=serverinfo.emailcheck||4294967295==userinfo.siteadmin)if(!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey){var o=getNodeFromId(e);if(null!=o){var i=meshes[o.meshid],a=GetNodeRights(o),s=null==currentNode||currentNode._id!=e;if(!currentNode||currentNode._id!=o._id||1==n){if(currentNode=o,QV("p10deviceNotify",null!=currentNode.sessions&&(null!=o.sessions.kvm||null!=o.sessions.terminal||null!=o.sessions.files||null!=o.sessions.tcp||null!=o.sessions.udp)),QV("p10deviceStar",1==stars[currentNode._id]),QV("p10deviceHelp",null!=currentNode.sessions&&null!=currentNode.sessions.help),null!=currentNode.sessions&&null!=currentNode.sessions.msg?(QV("p10deviceMsg",!0),QH("p10deviceMsg",Object.keys(currentNode.sessions.msg).length)):QV("p10deviceMsg",!1),QV("p10deviceBattery",!1),null!=currentNode.sessions&&null!=currentNode.sessions.battery){var r=currentNode.sessions.battery,l="";"ac"==r.state&&(l="El dispositiu està connectat"),"dc"==r.state&&(l="El dispositiu funciona amb bateria");var d="",u=-1;"number"==typeof r.level&&r.level>=0&&r.level<=100&&(d=r.level+"%",(u=Math.floor((r.level+10)/25)+1)>5&&(lvl=5),"ac"==r.state&&(100==r.level?u=11:u+=5)),u>0&&(Q("p10deviceBattery").title=null!=l?l+", "+d:d,QV("p10deviceBattery",!0),Q("p10deviceBattery").className="deviceBatteryLarge deviceBatteryLarge"+u)}else QV("p10deviceBattery",!1);var c=EscapeHtml(o.name);0==c.length&&(c="<i>Cap</i>"),4&a&&(c="<span onclick=showEditNodeValueDialog(0) style=cursor:pointer>"+c+"</span>"),QH("p10deviceName",c);var p="<table style=width:100%>";i&&(p+=addDeviceAttribute("<span>Grup</span>",'<a onclick=goForward("'+o.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[o.meshid].name)+"</a>")),null!=o.rname&&(p+=addDeviceAttribute("<span>Nom</span>","<span>"+EscapeHtml(o.rname)+"</span>")),(1&features||4==o.mtype)&&3!=o.mtype||(4&a?o.host?p+=addDeviceAttribute("Nom d'amfitrió","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+EscapeHtml(o.host)+"</span>"):p+=addDeviceAttribute("Nom d'amfitrió","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer><i>Cap</i></span>"):p+=addDeviceAttribute("Nom d'amfitrió",EscapeHtml(o.host)));var m=o.desc?EscapeHtml(o.desc):"<i>Cap</i>";if(p+=addDeviceAttribute("Descripció",4&a?"<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+m+"</span>":m),4==o.mtype&&(null!=o.portnum&&(p+=addDeviceAttribute("Número de port",o.portnum)),null!=o.porttype&&(p+=addDeviceAttribute("Tipus de port",o.porttype))),null!=o.agent&&null!=o.agent.id&&3==o.mtype)4==o.agent.id&&(p+=addDeviceAttribute("Tipus de dispositiu","Windows")),6==o.agent.id&&(p+=addDeviceAttribute("Tipus de dispositiu","Linux")),29==o.agent.id&&(p+=addDeviceAttribute("Tipus de dispositiu","macOS"));else if(null!=o.agent&&null!=o.agent.id&&null!=o.agent.ver){var g="";g=o.agent.id<=agentsStr.length?agentsStr[o.agent.id]:agentsStr[0],0!=o.agent.ver&&(g+=" v"+o.agent.ver),14==o.agent.id&&(g=o.agent.core),!1===o.agent.root&&1&o.conn&&(g+=", Restringit"),p+=addDeviceAttribute("Agent de malla",g)}if(null!=o.intelamt){g="";var f={0:nobreak("No activat (previ)"),1:nobreak("No activat (Entrada)"),2:nobreak("Activat")};if(null!=o.intelamt.ver&&null==o.intelamt.state?g+="<i>"+nobreak("Estat desconegut")+"</i>, v"+EscapeHtml(o.intelamt.ver):null==o.intelamt.ver&&2==o.intelamt.state?g+="<i>Activat</i>":null==o.intelamt.ver||null==o.intelamt.state?g+="<i>Versió i estat desconeguts</i>":(g+=f[o.intelamt.state],o.intelamt.flags&&(2&o.intelamt.flags?g=" <span>CCM</span>":4&o.intelamt.flags&&(g=" <span>ACM</span>")),g+=", v"+EscapeHtml(o.intelamt.ver)),2==o.intelamt.state){1==o.intelamt.tls&&(g+=', <span title="Intel&reg; AMT està configurat amb seguretat de xarxa TLS">TLS</span>');var h=!1;if(null==o.intelamt.user||""==o.intelamt.user)4&a?(g+=', <i style=color:#FF0000;cursor:pointer title="Editeu les credencials d\'Intel&reg; AMT" onclick=editDeviceAmtSettings("'+o._id+'")>Sense credencials</i>',h=!0):g+=", <i style=color:#FF0000>Sense credencials</i>";else if(1&features2&&null!=o.intelamt.warn){var v=null;1&o.intelamt.warn&&(v="Credencials no vàlides"),8&o.intelamt.warn&&(v="Prova de credencials"),null!=v&&(4&a?(g+=', <i style=color:#FF0000;cursor:pointer title="Editeu les credencials d\'Intel&reg; AMT" onclick=editDeviceAmtSettings("'+o._id+'")>'+v+"</i>",h=!0):g+=", <i style=color:#FF0000>"+v+"</i>")}4&a&&!(1&features2)&&(h=!0),g+=" ",h&&(g+='<img src=images/link4.png height=10 width=10 title="Editeu les credencials d\'Intel&reg; AMT" style=cursor:pointer onclick=editDeviceAmtSettings("'+o._id+'")>')}var k="Intel&reg; ME";"number"==typeof o.intelamt.sku&&(8&o.intelamt.sku?k="Intel&reg; AMT":16&o.intelamt.sku&&(k="Intel&reg; SM")),p+=addDeviceAttribute(k,g)}if(null!=o.agent&&null!=o.agent.tag&&"mailto:"!=o.agent.tag){var y=EscapeHtml(o.agent.tag);y.startsWith("mailto:")&&(y='<a href="'+y+'">'+y.substring(7)+"</a>"),p+=addDeviceAttribute("Etiqueta d'agent",y)}var x=o.conn;if(x&&x>1){var b=[];1&o.conn&&b.push("<span>"+(4==o.mtype?"PDU"==o.porttype?"Interruptor":"IP-KVM":"Agent")+"</span>"),2&o.conn?b.push("<span>Intel&reg; AMT CIRA</span>"):4&o.conn&&b.push("<span>Intel&reg; AMT</span>"),8&o.conn&&b.push("<span>Agent de relleu</span>"),16&o.conn&&b.push("<span>MQTT</span>"),p+=addDeviceAttribute("Connectivitat",b.join(", "))}var w="<i>Cap</i>";if(null!=o.tags)for(var S in w="",o.tags)w+="<span class=tagSpan>"+EscapeHtml(o.tags[S])+"</span> ";if(p+=addDeviceAttribute("Etiquetes",4&a?"<span onclick=showEditNodeValueDialog(3) style=cursor:pointer;color:black>"+w+"</span>":"<span style=line-height:26px;color:black>"+w+"</span>"),null!=o.ssh||null!=o.rdp){var D=[];4&a?(null!=o.ssh&&D.push("<span onclick=showClearSshDialog(3) style=cursor:pointer>"+(1==o.ssh?"SSH-Usuari+Passa":2==o.ssh?"SSH-Usuari+Clau+Passa":"SSH-Usuari+Clau")+' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>'),null!=o.rdp&&D.push('<span onclick=showClearRdpDialog(3) style=cursor:pointer>RDP <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>')):(null!=o.ssh&&D.push(1==o.ssh?"SSH-Usuari+Passa":2==o.ssh?"SSH-Usuari+Clau+Passa":"SSH-Usuari+Clau"),null!=o.rdp&&D.push("RDP")),p+=addDeviceAttribute("Credencials",D.join(", "))}p+="</table><br />",262220&a&&o.mtype<3&&(p+='<input type=button value="Accions" onclick=deviceActionFunction() />'),p+='<input type=button value="Notes" onclick=showNotes('+!(128&a)+',"'+encodeURIComponent(o._id)+'") />',4==o.mtype&&1&x&&("PDU"==o.porttype?1==o.pwr?262144&a&&(p+='<input type=button value="Tanca" title="Tanca" onclick=setIpPduState(0) />'):8==o.pwr&&64&a&&(p+='<input type=button value="Encendre" title="Encendre" onclick=setIpPduState(1) />'):8&a&&(p+='<input type=button value="Control remot" title="Control remot" onclick=openIpKvmRemoteControl("'+encodeURIComponentEx(o._id)+'") />')),QH("p10html",p),3==o.mtype&&null!=o.agent&&o.agent.id>4&&512&features2&&(o.agent.caps=6),setupTerminal(),setupFiles(),16&a&&setupConsole(),p="<div style=float:right;font-size:x-small;margin-right:10px>",32768&a&&(p+='<a style=cursor:pointer onclick=p10showDeleteNodeDialog("'+o._id+'")>Suprimeix el dispositiu</a>'),p+="</div><div style=font-size:x-small>",0!=webRelayPort&&(p+='<a onclick=p10WebRouter("'+o._id+'",1,'+(o.httpport?o.httpport:80)+")>HTTP"+(o.httpport&&80!=o.httpport?"/"+o.httpport:"")+"</a>&nbsp;",p+='<a onclick=p10WebRouter("'+o._id+'",2,'+(o.httpsport?o.httpsport:443)+")>HTTPS"+(o.httpsport&&443!=o.httpsport?"/"+o.httpsport:"")+"</a>&nbsp;"),(1&x||3==o.mtype)&&o.agent&&8&a&&!(536870912&features)&&(p+='<a id=rfbLink onclick=p10rfb("'+o._id+'")>Web-VNC</a>&nbsp;'),(1&x||3==o.mtype)&&o.agent&&8&a&&!(1073741824&features)&&(p+='<a id=mstscLink onclick=p10mstsc("'+o._id+'")>Web-RDP</a>&nbsp;'),512&features2&&(1&x||3==o.mtype)&&o.agent&&8&a&&(p+='<a id=sshLink onclick=p10ssh("'+o._id+'")>Web-SSH</a>&nbsp;'),p+="</div><br>",QH("p10html3",p);var C=PowerStateStr(o.state);1&x&&(C.length>0&&(C+=", "),C+=4==o.mtype?"PDU"==o.porttype?"Interruptor":"IP-KVM":"Agent de malla"),2&x?(C.length>0&&(C+=", "),C+="Intel&reg; AMT connectat"):4&x&&(C.length>0&&(C+=", "),C+="Intel&reg; AMT detectat"),16&x&&(C.length>0&&(C+=", "),C+="Canal MQTT connectat"),("PDU"==o.porttype||o.pwr>1&&7!=o.pwr)&&(C.length>0&&(C+=", "),C+=powerStateStrings[o.pwr]),QH("MainComputerState","<span style=font-size:12px>"+C+"</span>");var M=o.icon;o.conn&&0!=o.conn||3==o.mtype||(M+=" gray"),QH("MainComputerImage",'<div class="i'+M+'"></div>'),powerTimelineNode!=currentNode._id&&powerTimelineReq!=currentNode._id&&(QH("p10html2",""),powerTimelineReq=currentNode._id,meshserver.send({action:"powertimeline",nodeid:currentNode._id}),meshserver.send({action:"lastconnect",nodeid:currentNode._id}),meshserver.send({action:"getsysinfo",nodeid:currentNode._id}),meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id}),QH("p10detailshtml","")),s&&(p11clearConsoleMsg(),p13clearConsoleMsg()),QV("p11DeskSessionSelector",!1),QH("p11DeskSessionSelector","")}setupDesktop(),t||(t=10),go(t),10==xxcurrentView&&setupDeviceMenu()}else goBack()}else setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a un dispositiu fins que no s\'hagi activat l\'autenticació de dos factors. Això és necessari per a una seguretat addicional. Aneu a "El meu compte" i mireu la secció "Seguretat del compte".');else setDialogMode(2,"Seguretat del compte",1,null,'No es pot accedir a un dispositiu fins que no es verifiqui una adreça de correu electrònic. Això és necessari per a la recuperació de la contrasenya. Aneu a "El meu compte" per canviar i verificar una adreça de correu electrònic.')}function setIpPduState(e){0==e?setDialogMode(2,"Funcionament elèctric",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:2})},"Fer l'apagat?"):setDialogMode(2,"Funcionament elèctric",3,function(){meshserver.send({action:"wakedevices",nodeids:[currentNode._id]})},"Fer encès?")}function openIpKvmRemoteControl(e){if(!xxdialogMode){var t=decodeURIComponent(e).split("/")[2];safeNewWindow("/ipkvm.ashx/"+t+"/","ipkvm:"+t)}}function deviceToastFunction(){xxdialogMode||setDialogMode(2,"Torrada del dispositiu",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>")}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"MeshCentral",msg:Q("d2devToast").value})}function setupDeviceMenu(e,t){var n=GetNodeRights(currentNode);null!=e&&(currentDevicePanel=e),QV("p10general",0==currentDevicePanel),QV("p10desktop",1==currentDevicePanel),QV("p10files",2==currentDevicePanel),QV("p10details",3==currentDevicePanel),QV("p10console",4==currentDevicePanel),QV("p10terminal",5==currentDevicePanel);var o=[];0!=currentDevicePanel&&o.push({n:"General",f:"setupDeviceMenu(0)"}),1==currentDevicePanel||null==currentNode||!(8&n||256&n)||4294967295!=n&&65536&n||!(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||8&currentNode.intelamt.sku)||currentNode.agent&&1&currentNode.agent.caps)||o.push({n:"Escriptori",f:"setupDeviceMenu(1)"}),5==currentDevicePanel||null==currentNode||!(8&n||256&n)||4294967295!=n&&512&n||!(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||8&currentNode.intelamt.sku)||currentNode.agent&&2&currentNode.agent.caps)||o.push({n:"Terminal",f:"setupDeviceMenu(5)"}),2!=currentDevicePanel&&null!=currentNode&&8&n&&(4294967295==n||!(1024&n))&&1!=currentNode.mtype&&currentNode.agent&&4&currentNode.agent.caps&&o.push({n:"Fitxers",f:"setupDeviceMenu(2)"}),3!=currentDevicePanel&&null!=currentNode&&currentNode.mtype<3&&1048576&n&&o.push({n:"Detalls",f:"setupDeviceMenu(3)"}),4!=currentDevicePanel&&null!=currentNode&&16&n&&2==currentNode.mtype&&o.push({n:"Consola",f:"setupDeviceMenu(4)"}),updateFooterMenu(o),updateCurrentUrl(),1==currentDevicePanel&&deskAdjust()}function deviceActionFunction(){if(!xxdialogMode){var e=GetNodeRights(currentNode),t=0,n="Seleccioneu una operació per realitzar en aquest dispositiu.<br /><br />",o="<select id=d2deviceop style=float:right;width:170px onchange=deviceActionFunctionValidate()>",i="";null!=currentNode.agent&&14==currentNode.agent.id?1&currentNode.conn&&8&e&&(t++,o+="<option value=400>Flash</option>",o+="<option value=401>Vibrar</option>",i+="<div id=d2devicetimediv>"+addHtmlValue("Temps","<select id=d2devicetime style=float:right;width:170px><option value=1000>1 segon</option><option value=5000>5 segons</option><option value=10000>10 segons</option></select>")+"</div>"):(64&e&&(t++,o+="<option value=100>Desperta</option>"),0!=currentNode.conn&&262144&e&&(t++,o+="<option value=4>Dormir</option><option value=3>Restableix</option><option value=2>Apagar</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&6&currentNode.conn&&262144&e&&(t++,o+="<option value=310>Restabliment Intel&reg; AMT</option>",o+="<option value=308>Intel&reg; AMT Apagat</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&6&currentNode.conn&&64&e&&(t++,o+="<option value=302>Encès Intel&reg; AMT</option>")),n+=addHtmlValue("Funcionament",o+="</select>"),0==t&&(n="Actualment no hi ha cap acció disponible per a aquest dispositiu."),setDialogMode(2,"Acció del dispositiu",0==t?2:3,deviceActionFunctionEx,n+i),t>0&&deviceActionFunctionValidate()}}function deviceActionFunctionValidate(){var e=Q("d2deviceop").value;try{QV("d2devicetimediv",400==e||401==e)}catch(e){}}function deviceActionFunctionEx(){var e=Q("d2deviceop").value;100==e?meshserver.send({action:"wakedevices",nodeids:[currentNode._id]}):103==e||104==e||106==e||107==e||(302==e?setDialogMode(2,"Funcionament d'energia Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Engegueu Intel&reg; AMT?"):308==e?setDialogMode(2,"Funcionament d'energia Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Vols apagar Intel&reg; AMT?<br><br><b>NOTA: si hi ha una sessió AMT activa, l'ordre d'apagada serà rebutjada, de manera que primer has de desconnectar-te de la sessió AMT!</b>"):310==e?setDialogMode(2,"Funcionament d'energia Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Vols fer el restabliment d'Intel&reg; AMT?"):400==e||401==e?meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e),time:parseInt(Q("d2devicetime").value)}):meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)}))}function showNotes(e,t){if(!xxdialogMode){null==t&&(t=encodeURIComponentEx("p"+userinfo._id));var n="<textarea id=d2devNotes ro="+e+" noteid="+t+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea>";t.startsWith("node%2F%2F")&&(n+="<span style=font-size:10px>Altres administradors de grups de dispositius poden veure i canviar les notes del grup de dispositius.<span>"),setDialogMode(2,"Notes",3,showNotesEx,n,t),meshserver.send({action:"getNotes",id:decodeURIComponent(t)})}}function showNotesEx(e,t){meshserver.send({action:"setNotes",id:decodeURIComponent(t),notes:encodeURIComponentEx(Q("d2devNotes").value)})}function deviceLockFunction(){null==xxdialogMode&&0!=xxdialogMode||null==desktop||1!=desktop.contype||setDialogMode(2,"Bloqueja l'escriptori",3,function(){null!=desktop&&1==desktop.contype&&desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"lock"}')},"Bloquejar l'escriptori de l'usuari?")}function deviceChat(e){xxdialogMode||setDialogMode(2,"Acció del dispositiu",3,function(){var t="/messenger?id=meshmessenger/"+encodeURIComponentEx(currentNode._id)+"/"+encodeURIComponentEx(userinfo._id)+"&title="+currentNode.name;""!=serverinfo.domainsuffix&&(t="/"+serverinfo.domainsuffix+t),null!=authCookie&&""!=authCookie&&(t+="&auth="+authCookie),e&&1==e.shiftKey?safeNewWindow(t,"meshmessenger:"+currentNode._id):safeNewWindow(t,"meshmessenger:"+currentNode._id,"directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=560"),meshserver.send({action:"meshmessenger",nodeid:decodeURIComponent(currentNode._id)})},"Començar la sessió de xat?")}function deviceUrlFunction(){xxdialogMode||(setDialogMode(2,"Obriu la pàgina al dispositiu",3,deviceUrlFunctionEx,'<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll onkeyup=deviceUrlFunctionValidate() onchange=deviceUrlFunctionValidate()></input>'),Q("d2devurl").focus(),deviceUrlFunctionValidate())}function deviceUrlFunctionValidate(){var e=Q("d2devurl").value.toLowerCase();QE("idx_dlgOkButton",e.startsWith("http://")&&e.length>7||e.startsWith("https://")&&e.length>8)}function deviceUrlFunctionEx(){meshserver.send({action:"msg",type:"openUrl",nodeid:currentNode._id,url:Q("d2devurl").value})}function runDeviceCmd(e){xxdialogMode||d2runCommandDialog({nodeids:[e?decodeURIComponent(e):currentNode._id]})}function d2runCommandDialog(e){var t=!1,n=!1,o=!1;for(var i in e.nodeids){var a=getNodeFromId(e.nodeids[i]);a.agent&&(24&~GetNodeRights(a)||(o=!0),isWindowsNode(a)?t=!0:n=!0)}if(1==t||1==n||1==o){var s={type:1,runAs:0,source:1,cmd:""};try{s=JSON.parse(getstore("runopt",s))}catch(e){}if(e.selectedFile){var r=e.selectedFile.name.toLowerCase();console.log("filename",r),r.endsWith(".bat")&&(s.type=1),r.endsWith(".ps1")&&(s.type=2),r.endsWith(".sh")&&(s.type=3),r.endsWith(".agentconsole")&&(s.type=4)}var l="";e.title&&(l+=e.title+"<br />"),l+="<select id=d2cmdtype onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px;margin-top:4px>",1==t&&(l+="<option value=1"+(1==s.type?" selected":"")+">Símbol del sistema de comandes de Windows</option><option value=2"+(2==s.type?" selected":"")+">Windows PowerShell</option>"),1==n&&(l+="<option value=3"+(3==s.type?" selected":"")+">Linux/BSD/macOS Command Shell</option>"),1==o&&(l+="<option value=4"+(4==s.type?" selected":"")+">Consola de l'agent</option>"),l+="</select>",l+="<select id=d2cmduser style=width:100%;margin-bottom:4px><option value=0"+(0==s.runAs?" selected":"")+">Executar com a agent</option><option value=1"+(1==s.runAs?" selected":"")+">Executeu com a usuari, agent si no hi ha usuari</option><option value=2"+(2==s.runAs?" selected":"")+">S'ha d'executar com a usuari</option></select>",null==e.selectedFile&&(l+="<select id=d2cmdsource onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px><option value=0"+(0==s.source?" selected":"")+">Ordres del quadre de text</option><option value=1"+(1==s.source?" selected":"")+">Ordres del fitxer</option>",8&userinfo.siteadmin&&(l+="<option value=2"+(2==s.source?" selected":"")+">Ordres del fitxer al servidor</option>"),l+="</select><textarea id=d2runcmd onkeyup=d2runCommandValidate() style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll>"+(s.cmd?EscapeHtml(decodeURIComponent(s.cmd)):"")+"</textarea>",l+="<div id=d2runfile style=display:none><input id=d2runfileex type=file onchange=d2runCommandValidate() id=d2localFile name=files onchange=d2runCommandValidate() /></div>",8&userinfo.siteadmin&&(l+='<div id=d2runsfile style=display:none><div id=d2serveraction valign=bottom><input type=button id=p2FolderUp disabled="disabled" onclick=d3folderup() value="Up" />&nbsp;<span id=p2CurrentFolder></span></div><div id=d2serverfiles></div></div>')),setDialogMode(2,"Executeu ordres",3,d2groupActionFunctionRunCommands,l,e),null==e.selectedFile&&(Q("d2runcmd").focus(),8&userinfo.siteadmin&&(d3fileoptions={dialog:2,files:"d2serverfiles",folderup:"p2FolderUp",currentFolder:"p2CurrentFolder",func:null},d3updatefiles())),d2runCommandValidate()}}function d2runCommandValidate(){if(QV("d2cmduser",Q("d2cmdtype").value<4),null==xxdialogTag.selectedFile){QV("d2runcmd",0==Q("d2cmdsource").value),QV("d2runfile",1==Q("d2cmdsource").value),QV("d2runsfile",2==Q("d2cmdsource").value);var e=!1;0==Q("d2cmdsource").value&&Q("d2runcmd").value.length>0&&(e=!0),1==Q("d2cmdsource").value&&1==Q("d2runfileex").files.length&&(e=!0),2==Q("d2cmdsource").value&&(e=!1),QE("idx_dlgOkButton",e)}else QE("idx_dlgOkButton",!0)}function d2groupActionFunctionRunCommands(e,t){var n=3;try{n=parseInt(Q("d2cmdtype").value)}catch(e){}null==t.selectedFile&&putstore("runopt",JSON.stringify({type:n,runAs:parseInt(Q("d2cmduser").value),source:parseInt(Q("d2cmdsource").value),cmd:encodeURIComponent(Q("d2runcmd").value)}));var o={action:"runcommands",nodeids:t.nodeids,type:n,runAsUser:parseInt(Q("d2cmduser").value)};if(t.selectedFile)(i=new FileReader).onload=function(e){o.cmds=e.target.result,meshserver.send(o),t.func&&t.func()},i.readAsText(t.selectedFile);else if(0==Q("d2cmdsource").value)o.cmds=Q("d2runcmd").value,meshserver.send(o),t.func&&t.func();else if(1==Q("d2cmdsource").value){var i;(i=new FileReader).onload=function(e){o.cmds=e.target.result,meshserver.send(o),t.func&&t.func()},i.readAsText(Q("d2runfileex").files[0])}else if(2==Q("d2cmdsource").value){var a=d3getFileSel();if(1!=a.length)return;o.cmdpath=d3filetreelocation.join("/")+"/"+a[0],meshserver.send(o),t.func&&t.func()}}function updateDeviceTimeline(){2==meshserver.State&&null!=powerTimelineNode&&null!=powerTimelineUpdate&&null!=currentNode&&3!=currentNode.mtype&&powerTimelineNode==powerTimelineReq&&currentNode._id==powerTimelineNode&&powerTimelineUpdate<Date.now()&&(powerTimelineUpdate=null,meshserver.send({action:"powertimeline",nodeid:currentNode._id}))}function drawDeviceTimeline(){if(3!=currentNode.mtype&&"true"!==hidePowerTimeline){var e=null,t=Date.now();currentNode._id==powerTimelineNode&&(e=powerTimeline);var n=new Date;n.setHours(0,0,0,0);(n=new Date(n.getTime()-5184e5)).getTime();var o=[];if(null!=e&&e.length>1){o.push([0,e[1],e[0]]);for(var i=e[1],a=2;a<e.length;a+=2){var s=e[a],r=t;e.length>a+1&&(r=e[a+1]),o.push([i,i+r,s]),i+=r}}var l="",d=1,u=new Date,c=Q("masthead").offsetWidth-122;u.setHours(0,0,0,0);for(a=0;a<7;a++){var p="",m=u.getTime(),g=m+864e5;for(var f in o){var h=o[f];if(1==isTimeBlockInside(m,g,h[0],h[1])){var v=Math.max(m,h[0]),k=Math.min(Math.min(g,h[1]),t),y=Math.round((k-v)*c/864e5);y>0&&(p+="<div style=display:table-cell;width:"+y+"px;background-color:"+powerColor(h[2])+";height:16px></div>")}}l+="<tr style="+(d%2==0?"background-color:#DDD":"")+"><td><div>&nbsp;"+printDate(u)+"<div></div></div></td><td><div>"+p+"</div></td></tr>",++d,u=new Date(u.getFullYear(),u.getMonth(),u.getDate()-1)}QH("p10html2",'<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse;width:calc(100% - 18px);margin:9px" border=0 cellpadding=2 cellspacing=0><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:90px>Dia</th><th scope=col style=text-align:center>Estat de poder</th></tr>'+l+"</tbody></table>")}else QH("p10html2","<br />")}function powerColor(e){return e<powerColorTable.length?powerColorTable[e]:"yellow"}function isTimeBlockInside(e,t,n,o){return n<e&&o>t||(n>e&&n<t||o>e&&o<t)}function addDeviceAttribute(e,t){return"<tr><td style=width:100px;color:gray>"+e+"</td><td style=overflow:hidden>"+t+"</td></tr>"}function editDeviceAmtSettings(e,t){if(!xxdialogMode){var n="",o=getNodeFromId(e),i=3;4&GetNodeRights(o)&&(n+=addHtmlValue("Nom d'usuari",'<input id=dp10username style=width:170px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />'),n+=addHtmlValue("Contrasenya","<input id=dp10password type=password style=width:170px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />"),1&features2||(n+=addHtmlValue("Seguretat","<select id=dp10tls style=width:176px><option value=0>Sense seguretat TLS</option><option value=1>Es requereix seguretat TLS</option></select>")),null!=o.intelamt.user&&""!=o.intelamt.user&&(i=7),setDialogMode(2,"Editeu les credencials d'Intel&reg; AMT",i,editDeviceAmtSettingsEx,n,{node:o,func:t}),null!=o.intelamt.user&&""!=o.intelamt.user?Q("dp10username").value=o.intelamt.user:Q("dp10username").value="admin",1&features2||(Q("dp10tls").value=o.intelamt.tls),validateDeviceAmtSettings())}}function validateDeviceAmtSettings(){QE("idx_dlgOkButton",passwordcheck(Q("dp10password").value))}function editDeviceAmtSettingsEx(e,t){if(2==e)meshserver.send({action:"changedevice",nodeid:t.node._id,intelamt:{user:"",pass:""}});else{var n=Q("dp10username").value;""==n&&(n="admin");var o=Q("dp10password").value;""==o&&(n="");var i={action:"changedevice",nodeid:t.node._id,intelamt:{user:n,pass:o}};1&features2||(i.intelamt.tls=parseInt(Q("dp10tls").value)),meshserver.send(i),t.func&&setTimeout(t.func,1e3)}}function p10showDeleteNodeDialog(e){xxdialogMode||(setDialogMode(2,"Suprimeix el node",3,p10showDeleteNodeDialogEx,format("Vols suprimir {0}?",EscapeHtml(currentNode.name))+"<br /><br /><label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirmeu</label>",e),p10validateDeleteNodeDialog())}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(e,t){meshserver.send({action:"removedevices",nodeids:[t]})}function p10WebRouter(e,t,n,o){var i=null,a=getNodeFromId(e);if(3==a.mtype){var s=meshes[a.meshid];s&&s.relayid&&(i=s.relayid,o=a.host)}var r=serverinfo.name;(-1==r.indexOf(".")||2&features)&&(r=window.location.hostname),""!=webRelayDns&&(r=webRelayDns);var l="https://"+r+":"+webRelayPort+"/control-redirect.ashx?n="+e+"&p="+n+"&appid="+t+"&c="+authRelayCookie;return null!=o&&(l+="&addr="+o),null!=i&&(l+="&relayid="+i),safeNewWindow(l,"WebRelay"),!1}function p10rfb(e,t){var n=getNodeFromId(e),o=null,i=meshes[n.meshid];null==t&&(t=null!=n.rfbport?n.rfbport:5900),3==n.mtype&&i&&i.relayid&&(e=i.relayid,o=n.host),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tcpaddr:o,tag:"novnc",name:i?i.name:null})}function p10mstsc(e,t){var n=getNodeFromId(e),o=meshes[n.meshid];null==t&&(t=null!=n.rdpport?n.rdpport:3389),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"mstsc",name:o?o.name:null})}function p10ssh(e,t){var n=getNodeFromId(e),o=meshes[n.meshid];null==t&&(t=null!=n.sshport?n.sshport:22),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"ssh",name:o?o.name:null})}function p10showiconselector(){if(!xxdialogMode&&4&GetNodeRights(currentNode)){setDialogMode(2,"Selecció d'icones",0,null,"<table align=center><td style=text-align:center><div style=display:inline-block class=i1 onclick=p10setIcon(1)></div><div style=display:inline-block class=i2 onclick=p10setIcon(2)></div><div style=display:inline-block class=i3 onclick=p10setIcon(3)></div><div style=display:inline-block class=i4 onclick=p10setIcon(4)></div><br /><div style=display:inline-block class=i5 onclick=p10setIcon(5)></div><div style=display:inline-block class=i6 onclick=p10setIcon(6)></div><div style=display:inline-block class=i7 onclick=p10setIcon(7)></div><div style=display:inline-block class=i8 onclick=p10setIcon(8)></div></table>"),QV("id_dialogclose",!0)}}function p10setIcon(e){setDialogMode(0),meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:e})}function showClearSshDialog(){setDialogMode(2,"Edita el dispositiu",3,showClearSshDialogEx,"Esborrar les credencials SSH?")}function showClearSshDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,ssh:0})}function showClearRdpDialog(){setDialogMode(2,"Edita el dispositiu",3,showClearRdpDialogEx,"Esborrar les credencials RDP?")}function showClearRdpDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,rdp:0})}var desktop,desktopNode,showEditNodeValueDialog_modes=["Nom del dispositiu","Nom d'amfitrió","Descripció","Etiquetes"],showEditNodeValueDialog_modes2=["name","host","desc","tags"],showEditNodeValueDialog_modes3=["","","","Grup 1, Grup 2, Grup 3"];function showEditNodeValueDialog(e){if(!xxdialogMode){var t=addHtmlValue(showEditNodeValueDialog_modes[e],'<input id=dp10devicevalue style=width:170px maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[e]+'" onchange=p10editdevicevalueValidate('+e+",event) onkeyup=p10editdevicevalueValidate("+e+",event) />");if(3==e){var n=[],o="";for(var i in nodes)if(nodes[i].tags)for(var a in nodes[i].tags)-1==n.indexOf(nodes[i].tags[a])&&n.push(nodes[i].tags[a]);if(n.length>0){for(var i in n.sort(),n)o+='<span style=padding:4px;background-color:#BBB;border-radius:3px;cursor:pointer onclick=showEditNodeValueDialogAddTag("'+encodeURIComponentEx(n[i])+'")>'+EscapeHtml(n[i])+"</span> ";t+="<div style=margin-top:8px;width:280px;line-height:26px;max-height:160px;overflow-y:auto>"+o+"</div>"}}setDialogMode(2,"Edita el dispositiu",3,showEditNodeValueDialogEx,t,e);var s=currentNode[showEditNodeValueDialog_modes2[e]];null==s&&(s=""),Array.isArray(s)&&(s=s.join(", ")),Q("dp10devicevalue").value=s,p10editdevicevalueValidate(),Q("dp10devicevalue").focus()}}function showEditNodeValueDialogAddTag(e){var t=Q("dp10devicevalue").value.split(","),n=[];for(var o in t)n.push(t[o].trim());n.indexOf(e)>=0||(Q("dp10devicevalue").value+=(0==Q("dp10devicevalue").value.length?"":", ")+decodeURIComponent(e),setTimeout(function(){Q("dp10devicevalue").selectionStart=Q("dp10devicevalue").selectionEnd=9e4},0),p10editdevicevalueValidate())}function showEditNodeValueDialogEx(e,t){var n={action:"changedevice",nodeid:currentNode._id};n[showEditNodeValueDialog_modes2[t]]=Q("dp10devicevalue").value,meshserver.send(n)}function p10editdevicevalueValidate(e,t){var n=e>1||Q("dp10devicevalue").value.length>0;QE("idx_dlgOkButton",n),null!=t&&1==n&&13==t.keyCode&&dialogclose(1)}var desktopsettings={encoding:2,showfocus:!1,showmouse:!0,showcad:!0,quality:40,scaling:1024,framerate:50,autolock:!1,agentencoding:4};function setupDesktop(){desktopNode!=currentNode&&null!=desktop&&(desktop.Stop(),desktopNode=null,desktop=null),desktopNode==currentNode&&null!=desktop||(desktopNode=currentNode,Q("Desk").addEventListener("DOMMouseScroll",function(e){return dmousewheel(e)}),Q("Desk").addEventListener("mousewheel",function(e){return dmousewheel(e)})),desktopNode=currentNode,updateDesktopButtons(),Q("Desk").toBlob||QV("deskSaveBtn",!1)}function updateDesktopButtons(){meshes[currentNode.meshid];var e=0;null!=desktop&&(e=desktop.State);var t=GetNodeRights(currentNode);QV("disconnectbutton1",0!=e),QE("deskFullScreen",0!=e),QV("connectbutton1",0==e&&(8&t||256&t)&&null!=currentNode.agent&&1&currentNode.agent.caps),QV("connectbutton1h",0==e&&8&t&&null!=currentNode.intelamt&&2==currentNode.intelamt.state&&null!=currentNode.intelamt.ver&&(null==currentNode.intelamt.sku||"number"==typeof currentNode.intelamt.sku&&!!(8&currentNode.intelamt.sku))),QV("d7amtkvm",!(null==currentNode.intelamt||"number"==typeof currentNode.intelamt.sku&&16&currentNode.intelamt.sku||null==currentNode.intelamt.ver&&null!=currentNode.agent||0!=e&&2!=desktop.contype)),QV("d7meshkvm",null!=currentNode.agent&&1&currentNode.agent.caps&&(0==e||1==desktop.contype));var n=!!(1&currentNode.conn);QE("connectbutton1",n);var o=!!(6&currentNode.conn);QE("connectbutton1h",o),QV("DeskToastButton",!!(16384&t)&&currentNode.agent&&currentNode.agent.id<5&&8&t),QV("deskActionsBtn",8&t),Q("DeskControl").checked=!!(8&t),0==n&&QV("DeskTools",!1)}var agentConsoleMessages=["","S'està esperant que l'usuari concedeixi l'accés...","Negat","No s'ha pogut iniciar la sessió del terminal remot, {0} ({1})","Temps mort","S'han rebut dades de xarxa no vàlides"];function formatAgentConsoleMessage(e,t,n){for(null==n&&(n=[]);n.length<3;)n.push("");return(t&&t<agentConsoleMessages.length?EscapeHtml(format(agentConsoleMessages[t],n[0],n[1],n[2])):EscapeHtml(e)).split("\n").join("<br />")+"<br /><br />"}function connectDesktop(e,t,n,o){if(setSessionActivity(),QV("p11DeskSessionSelector",!1),p11clearConsoleMsg(),null==desktop)if(desktopNode=currentNode,2==t){if(null==desktopNode.intelamt.user||""==desktopNode.intelamt.user)return void editDeviceAmtSettings(desktopNode._id,connectDesktop);(desktop=CreateAmtRedirect(CreateAmtRemoteDesktop("Desk"),authCookie)).debugmode=debugmode,desktop.onStateChanged=onDesktopStateChange,desktop.m.bpp=1==desktopsettings.encoding||3==desktopsettings.encoding?1:2,desktop.m.useZRLE=desktopsettings.encoding<3,desktop.m.showmouse=!0,desktop.m.onScreenSizeChange=function(e,t,n){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=n*fullscreenzoom+"px"),deskAdjust()},4==desktopNode.conn&&null!=desktopNode.intelamt&&1==desktopNode.intelamt.tls?desktop.Start(desktopNode._id,16995,"*","*",1):desktop.Start(desktopNode._id,16994,"*","*",0),desktop.contype=2}else null==t||1==t||3==t&&currentNode.agent.id>4?((desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).debugmode=debugmode,desktop.m.debugmode=debugmode,desktop.attemptWebRTC=attemptWebRTC,desktop.webrtcconfig=webrtcconfiguration,desktop.options={},null!=n&&(desktop.options.tsid=n),null!=o&&(desktop.options.consent=o),1==desktopsettings.autolock&&(desktop.options.autolock=!0),desktop.onStateChanged=onDesktopStateChange,8192&features2&&(desktop.m.stopInput=!0),desktop.onConsoleMessageChange=function(){desktop.consoleMessage?(Q("p11DeskConsoleMsg").innerHTML+=formatAgentConsoleMessage(desktop.consoleMessage,desktop.consoleMessageId,desktop.consoleMessageArgs),QV("p11DeskConsoleMsg",!0),null!=p11DeskConsoleMsgTimer&&clearTimeout(p11DeskConsoleMsgTimer),desktop.consoleMessageTimeout&&(p11DeskConsoleMsgTimer=setTimeout(p11clearConsoleMsg,1e3*desktop.consoleMessageTimeout))):p11clearConsoleMsg()},desktop.m.ImageType=desktopsettings.agentencoding,desktop.m.CompressionLevel=desktopsettings.quality,desktop.m.ScalingLevel=desktopsettings.scaling,desktop.m.FrameRateTimer=desktopsettings.framerate,desktop.m.onDisplayinfo=deskDisplayInfo,desktop.m.onScreenSizeChange=function(e,t,n){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=n*fullscreenzoom+"px"),deskAdjust()},desktop.Start(desktopNode._id),desktop.contype=1):3==t&&meshserver.send({action:"msg",type:"userSessions",nodeid:currentNode._id,tag:o});else desktop.Stop(),desktopNode=desktop=null}function p11clearConsoleMsg(){QH("p11DeskConsoleMsg",""),QV("p11DeskConsoleMsg",!1),p11DeskConsoleMsgTimer&&(clearTimeout(p11DeskConsoleMsgTimer),p11DeskConsoleMsgTimer=null)}function p12clearConsoleMsg(){QH("p12TermConsoleMsg",""),QV("p12TermConsoleMsg",!1),p12TermConsoleMsgTimer&&(clearTimeout(p12TermConsoleMsgTimer),p12TermConsoleMsgTimer=null)}function p13clearConsoleMsg(){QH("p13FilesConsoleMsg",""),QV("p13FilesConsoleMsg",!1),p13FilesConsoleMsgTimer&&(clearTimeout(p13FilesConsoleMsgTimer),p13FilesConsoleMsgTimer=null)}function p12setConsoleMsg(e,t){e?(Q("p12TermConsoleMsg").innerHTML+=e,QV("p12TermConsoleMsg",!0),null!=p12TermConsoleMsgTimer&&clearTimeout(p12TermConsoleMsgTimer),t&&(p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,t))):p12clearConsoleMsg()}function p13setConsoleMsg(e,t){e?(Q("p13FilesConsoleMsg").innerHTML+=e,QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),t&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,t))):p13clearConsoleMsg()}function onDesktopStateChange(e,t){var n=t;3==n&&2==e.contype&&n++;var o=StatusStrs[n];if(null!=desktop&&1==desktop.webRtcActive&&(o+=", WebRTC"),QH("deskstatus",o),0===t)desktop.Stop(),desktopNode=desktop=null,QV("DeskScreens",!1),1==fullscreen&&deskToggleFull();updateDesktopButtons(),deskAdjust(),setTimeout(deskAdjust,50)}function showDesktopSettings(){xxdialogMode||(applyDesktopSettings(),updateDesktopButtons(),setDialogMode(7,"Configuració de l'escriptori remot",3,showDesktopSettingsChanged))}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value,desktopsettings.quality=d7bitmapquality.value,desktopsettings.scaling=d7bitmapscaling.value,desktopsettings.framerate=d7framelimiter.value,desktopsettings.autolock=d7deskAutoLock.checked,desktopsettings.agentencoding=d7encoding.value,localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings)),applyDesktopSettings(),desktop&&(1==desktop.contype&&(0!=desktop.State&&desktop.m.SendCompressionLevel(desktopsettings.agentencoding,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate),desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"autolock","value":'+desktopsettings.autolock+"}"),desktop.m.SendRefresh()),2==desktop.contype&&0!=desktop.State&&(desktop.Stop(),setTimeout(function(){connectDesktop(null,2)},50)))}function applyDesktopSettings(){var e="",t=512&features?[100,90,70,50,40,30,20,10,5,1]:[50,40,30,20,10,5,1];for(var n in t)e+="<option value="+t[n]+">"+t[n]+"%</option>";QH("d7bitmapquality",e),d7desktopmode.value=desktopsettings.encoding,d7bitmapquality.value=40,desktopsettings.agentencoding?d7encoding.value=desktopsettings.agentencoding:desktopsettings.agentencoding=4,t.indexOf(parseInt(desktopsettings.quality))>=0&&(d7bitmapquality.value=desktopsettings.quality),d7bitmapscaling.value=desktopsettings.scaling,desktopsettings.framerate&&(d7framelimiter.value=desktopsettings.framerate),null!=desktopsettings.autolock&&(d7deskAutoLock.checked=desktopsettings.autolock)}var keyboardShown=!1,keyboardShownTimer=null,fullScreenMode=!1;function toggleKeyboard(){xxdialogMode||(null!=keyboardShownTimer&&clearTimeout(keyboardShownTimer),keyboardShown?(Q("softKeyboard").blur(),keyboardShown=!1):(Q("softKeyboard").focus(),keyboardShown=!0),QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown))}function keyboardFocusChange(){keyboardShownTimer=setTimeout(function(){keyboardShownTimer=null,keyboardShown=Q("softKeyboard")==document.activeElement,QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown)},10)}function exitButton(){xxdialogMode||(QV("deskButtonMenu",!1),QV("termButtonMenu",!1),deskToggleFull())}function deskMenuButton(e){toggleMenu(!0),deskSendKeys(e)}function updateDeskShortcutKeys(){var e='<div class="menuButton" onclick="deskMenuButton(-1)">Personalitza</div>';for(var t in deskKeyboardShortcuts)e+='<div class="menuButton" onclick="deskMenuButton('+deskKeyboardShortcuts[t]+')">'+keyShortcutTotext(deskKeyboardShortcuts[t])+"</div>";QH("deskButtonMenu",e)}var keyStrings={8:"Espai enrere",9:"Tab",13:"Entra",27:"escapar",32:"Espai",44:"Imprimir pantalla",45:"Insereix",46:"Del",36:"a casa",35:"Final",32:"Espai",33:"Amunt pàgina",34:"Avançar pagina",37:"Esquerra",38:"Amunt",39:"Dret",40:"Avall",0:"Cap"};function keyShortcutTotext(e){var t=[];return 65536&e&&t.push("Canvi"),131072&e&&t.push("Alt"),524288&e&&t.push("Ctrl"),1048576&e&&t.push("Guanyar"),(e&=65535)>=112&&e<=123?t.push("F"+(e-111)):0!=e&&keyStrings[e]?t.push(keyStrings[e]):0!=e&&t.push(String.fromCharCode(e)),t.join(" + ")}function deskCustomizeKeys(){if(!xxdialogMode){var e='<div id=d2shortcuts style="width:100%;height:180px;padding:4px;overflow-y:auto;border:1px solid gray"></div><div style=width:100%;padding:5px>';for(var t in e+="<label><input id=d1kshift type=checkbox /> Canvi</label><label> <input id=d1kalt type=checkbox /> Alt</label><label> <input id=d1kctrl type=checkbox /> Ctrl</label> <input id=d1kwin type=checkbox /> Guanyar</label>",e+=" <select id=d2keySelect>",keyStrings)e+="<option value="+t+">"+keyStrings[t]+"</option>";for(t=1;t<=12;t++)e+="<option value="+(t+111)+">F"+t+"</option>";for(t=0;t<10;t++)e+="<option value="+(t+48)+">"+t+"</option>";for(t=0;t<26;t++)e+="<option value="+(t+65)+">"+String.fromCharCode(t+65)+"</option>";e+="</select> <input type=button value=Afegeix onclick=addDeskCustomizeKey() /></div>",QH("p10dialog2",e),xxdialogMode=2,QV("p10dialog",!0),deskUpdateShortcutList()}}function deskCustomizeKeysEx(){QV("p10dialog",!1),xxdialogMode=0,putstore("deskKeyShortcuts",deskKeyboardShortcuts.join(",")),updateDeskShortcutKeys()}function restoreDeskCustomizeKey(){deskKeyboardShortcuts=[],putstore("deskKeyShortcuts",null);var e=getstore("deskKeyShortcuts","0x0A002E,0x100000,0x100028,0x100026,0x10004C,0x10004D,0x11004D,0x100052,0x020073,0x080057,0x020009,0x100025,0x100027").split(",");for(var t in e)""!=e[t]&&deskKeyboardShortcuts.push(parseInt(e[t]));updateDeskShortcutKeys(),deskUpdateShortcutList()}function deskUpdateShortcutList(){var e="";for(var t in deskKeyboardShortcuts){var n=keyShortcutTotext(deskKeyboardShortcuts[t]),o="";t!=deskKeyboardShortcuts.length-1&&(o+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c2.png" onclick=deskCustomizeKeyDown('+deskKeyboardShortcuts[t]+")>"),0!=t&&(o+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c3.png" onclick=deskCustomizeKeyUp('+deskKeyboardShortcuts[t]+")>"),e+='<div style="width:100%;background-color:#AAA;border-radius:4px;margin-bottom:4px;padding:4px;text-align:left;box-sizing:border-box" value='+deskKeyboardShortcuts[t]+">"+n+'<img width=10 height=10 style=float:right;cursor:pointer;padding:2px;margin-left:8px src="images/trash.png" onclick=removeDeskCustomizeKey('+deskKeyboardShortcuts[t]+")>"+o+"</div>"}""==e&&(e="<i>No s'han definit dreceres de teclat</i>"),QH("d2shortcuts",e)}function deskCustomizeKeyDown(e){var t=deskKeyboardShortcuts.indexOf(e),n=deskKeyboardShortcuts[t+1];deskKeyboardShortcuts[t+1]=deskKeyboardShortcuts[t],deskKeyboardShortcuts[t]=n,deskUpdateShortcutList()}function deskCustomizeKeyUp(e){var t=deskKeyboardShortcuts.indexOf(e),n=deskKeyboardShortcuts[t];deskKeyboardShortcuts[t]=deskKeyboardShortcuts[t-1],deskKeyboardShortcuts[t-1]=n,deskUpdateShortcutList()}function removeDeskCustomizeKey(e){var t=[];for(var n in deskKeyboardShortcuts)deskKeyboardShortcuts[n]!=e&&t.push(deskKeyboardShortcuts[n]);deskKeyboardShortcuts=t,deskUpdateShortcutList()}function addDeskCustomizeKey(){var e=parseInt(Q("d2keySelect").value);Q("d1kshift").checked&&(e|=65536),Q("d1kalt").checked&&(e|=131072),Q("d1kctrl").checked&&(e|=524288),Q("d1kwin").checked&&(e|=1048576),e>0&&-1==deskKeyboardShortcuts.indexOf(e)&&(deskKeyboardShortcuts.push(e),deskUpdateShortcutList())}function deskSendKeys(e){if(!xxdialogMode&&null!=desktop&&3==desktop.State)if(-1!=e)if(655406!=e){var t=(16711680&e)>>16,n=65535&e,o=[],i=[],a={8:65288,9:65289,13:65293,27:65307,45:65379,46:65535,36:65360,35:65367,33:65365,34:65366,37:65361,38:65362,39:65363,40:65364,112:65470,113:65471,114:65472,115:65473,116:65474,117:65475,118:65476,119:65477,120:65478,121:65479,122:65480,123:65481};if(2==desktop.contype){1&t&&(o.push([65505,1]),i.push([65505,0])),2&t&&(o.push([65513,1]),i.push([65513,0])),8&t&&(o.push([65507,1]),i.push([65507,0])),16&t&&(o.push([65511,1]),i.push([65511,0])),a[n]&&(n=a[n]),n>=65&&n<=90&&(n+=32),0!=n&&(o.push([n,1]),i.push([n,0])),i.reverse();for(var s=0;s<i.length;s++)o.push(i[s]);desktop.m.sendkey(o)}else{1&t&&(o.push([desktop.m.KeyAction.DOWN,16]),i.push([desktop.m.KeyAction.UP,16])),2&t&&(o.push([desktop.m.KeyAction.EXDOWN,18]),i.push([desktop.m.KeyAction.EXUP,18])),8&t&&(o.push([desktop.m.KeyAction.EXDOWN,17]),i.push([desktop.m.KeyAction.EXUP,17])),16&t&&(o.push([desktop.m.KeyAction.EXDOWN,91]),i.push([desktop.m.KeyAction.EXUP,91])),0!=n&&(o.push([desktop.m.KeyAction.DOWN,n]),i.push([desktop.m.KeyAction.UP,n])),i.reverse();for(s=0;s<i.length;s++)o.push(i[s]);desktop.m.SendKeyMsgKC(o)}}else desktop.m.sendcad();else deskCustomizeKeys()}function toggleMenu(e){xxdialogMode||(QV("deskButtonMenu",fullscreen&&!e&&1==currentDevicePanel),QV("termButtonMenu",fullscreen&&!e&&5==currentDevicePanel),QV("deskkeybutton3a",fullscreen&&e),QV("deskkeybutton3b",fullscreen&&!e))}function deskChangeMouseButton(e){xxdialogMode||null!=desktop&&(desktop.m.SwapMouse=!desktop.m.SwapMouse,QV("deskkeybutton4a",fullscreen&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&desktop.m.SwapMouse))}function deskChangeFullscreenZoom(){if(!xxdialogMode){if(1==currentDevicePanel){if(null==desktop)return;fullscreenzoom=1==fullscreenzoom?.5:1,QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom),QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",deskAdjust()}if(5==currentDevicePanel){if(null==terminal)return;xterm.setOption("fontSize",15==xterm.getOption("fontSize")?10:15)}}}var terminalNode,filesNode,fullscreen=!1,fullscreenzoom=1;function deskToggleFull(){fullscreen=!fullscreen,QV("mastheadx",!fullscreen),QV("masthead",!fullscreen),QV("topbar",!fullscreen),QV("p11deviceNameHeader",!fullscreen),QV("footer",!fullscreen),QV("column_l_bottomgap",!fullscreen),QV("idx_deskFullBtn2",fullscreen),QV("deskFullBtn",!fullscreen),QV("p10deskTopTable",!fullscreen),QV("deskarea1",!fullscreen),QV("deskarea4",!fullscreen),QV("termarea1",!fullscreen),QV("termarea4",!fullscreen);var e=GetNodeRights(currentNode),t=!(8192&features2||14==currentNode.agent.id||4294967295!=e&&(!(8&e)||256&e||4096&e));QV("deskkeybutton1",fullscreen),1==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="210px",QS("deskkeybutton5a").top=QS("deskkeybutton5b").top=t?"160px":"60px",QV("deskkeybutton2a",fullscreen&&t),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen&&t),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",fullscreen&&t&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&t&&desktop.m.SwapMouse),QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom)),5==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="110px",QV("deskkeybutton2a",fullscreen),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",!1),QV("deskkeybutton4b",!1),QV("deskkeybutton5a",!1),QV("deskkeybutton5a",!1)),fullscreen?(QS("DeskParent").height=null,QS("page_content").top="0px",QS("page_content").bottom="0px",1==currentDevicePanel&&(QS("p10desktop").top="0px",QS("p10desktop").overflow="scroll",QS("deskarea3").top="0px",QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",QS("deskarea3")["padding-right"]="55px"),5==currentDevicePanel&&(QS("p10terminal").top="0px",QS("p10terminal").overflow="scroll",QS("termarea3").top="0px",QS("termarea3").bottom=null,QS("termarea3").right=null,QS("termarea3")["padding-right"]="55px",QS("termarea3").height="100%"),QS("body")["background-color"]="#000",QS("p10")["background-color"]="#000"):(QS("DeskParent").height="100%",QS("page_content").top="50px",QS("page_content").bottom="32px",1==currentDevicePanel&&(QS("p10desktop").top="55px",QS("p10desktop").overflow="hidden",QS("deskarea3").top="32px",QS("deskarea3").left=null,QS("deskarea3").width="100%",QS("deskarea3").height="calc(100% - 64px)",QS("deskarea3")["padding-right"]="",QS("DeskParent")["margin-top"]=null,QS("DeskParent")["margin-left"]=null),5==currentDevicePanel&&(QS("p10terminal").top="55px",QS("p10terminal").overflow="hidden",Q("p10terminal").scrollTop=0,Q("p10terminal").scrollLeft=0,QS("termarea3").top="32px",QS("termarea3").bottom="32px",QS("termarea3")["padding-right"]=null,QS("termarea3").height="calc(100% - 60px)"),QS("body")["background-color"]=nightMode?"#000":"#FFF",QS("p10")["background-color"]=null),1==currentDevicePanel&&deskAdjust()}function deskAdjust(){if(1==currentDevicePanel)if(fullscreen){QS("Desk")["margin-top"]=null,QS("Desk")["margin-bottom"]=null,QS("Desk").width="100%",QS("Desk").height="100%";var e=Q("p10desktop").clientHeight,t=Q("p10desktop").clientWidth,n=Q("deskarea3").clientHeight,o=Q("deskarea3").clientWidth-55;QS("deskarea3").top=e>n?(e-n)/2+"px":null,QS("deskarea3").left=t>o?(t-o)/2+"px":null}else{if((e=Q("DeskParent").clientHeight)/(t=Q("DeskParent").clientWidth)>(n=Q("Desk").height)/(o=Q("Desk").width)){var i=n*t/o+"px";QS("Desk").height=i,QS("Desk").width="100%"}else{var a=o*e/n+"px";QS("Desk").width=a,QS("Desk").height="100%"}QS("DeskParent").overflow="hidden";var s=(Q("DeskParent").clientHeight-Q("Desk").clientHeight)/2;QS("Desk")["margin-top"]=s+"px",QS("Desk")["margin-bottom"]=s+"px"}}function sendSpecialKeys(){xxdialogMode||null==desktop||3!=desktop.State||setDialogMode(3,"Claus especials",3,deskSendKeys)}function deskSaveImage(){if(setSessionActivity(),!xxdialogMode&&null!=desktop&&3==desktop.State){var e=new Date,t="Desktop-"+currentNode.name+"-"+e.getFullYear()+"-"+("0"+(e.getMonth()+1)).slice(-2)+"-"+("0"+e.getDate()).slice(-2)+"-"+("0"+e.getHours()).slice(-2)+"-"+("0"+e.getMinutes()).slice(-2);Q("Desk").toBlob(function(e){saveAs(e,t+".png")})}}function deskSelectScreens(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){var e="",t=desktop.m.displays;for(var n in t)e+="<option value="+n+" "+(desktop.m.selectedDisplay==n?" selected":"")+">"+t[n]+"</option>";setDialogMode(2,"Selecció de pantalla",3,deskSelectScreensEx,e=addHtmlValue4("Pantalla","<select style=width:100% id=deskdisplays>"+e+"</select>"))}}function deskSelectScreensEx(){null!=desktop&&3==desktop.State&&desktop.m.SetDisplay(parseInt(Q("deskdisplays").value))}function deskDisplayInfo(e,t,n,o){var i=0;for(var a in t)i++;QV("DeskScreens",i>1)}function dmousedown(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousedown(e))}function dmouseup(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mouseup(e))}function dmousemove(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousemove(e))}function dmousewheel(e){return setSessionActivity(),!(xxdialogMode||null==desktop||!desktop.m.mousewheel)&&(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousewheel(e),haltEvent(e),!0)}function drotate(e){xxdialogMode||null==desktop||(desktop.m.setRotation(desktop.m.rotation+e),deskAdjust())}function setupTerminal(){terminalNode!=currentNode&&null!=terminal&&(terminal.Stop(),terminal=null),terminalNode=currentNode,updateTerminalButtons()}function updateTerminalButtons(){currentNode.agent;var e=null!=terminal&&0!=terminal.state;QE("termFullScreen",0!=e),3==terminalNode.mtype&&null!=terminalNode.agent&&terminalNode.agent.id>4&&512&features2&&(terminalNode.agent.caps=6),QV("disconnectbutton2span",1==e),QV("connectbutton2span",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.mtype),QV("connectbutton2sspan",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.agent.id);var t=!!(1&terminalNode.conn)||3==terminalNode.mtype;QE("connectbutton2",t),QE("connectbutton2s",t),QV("termActionsBtn",3!=terminalNode.mtype),QE("ctrlcbutton",e),QE("ctrlxbutton",e),QE("escbutton",e),1==e&&3!=terminal.contype||null==terminalNode.agent||3==terminalNode.agent.id||4==terminalNode.agent.id?QH("terminalCustomUpperRight",""):QH("terminalCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Port SSH {0}",terminalNode.sshport?terminalNode.sshport:22)+"</a>")}function cmsshportaction(e){if(!xxdialogMode){setDialogMode(2,"Connexió SSH",3,function(){var e=Q("d10sshport").value.length>0?parseInt(Q("d10sshport").value):22;meshserver.send({action:"changedevice",nodeid:currentNode._id,sshport:e})},'Port de connexió remota SSH:<br /><br /><input type=text placeholder="22" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10sshport type=text>',currentNode),Q("d10sshport").focus(),null!=currentNode.sshport&&(Q("d10sshport").value=currentNode.sshport)}}function onTerminalStateChange(e,t){var n=t;3==n&&2==e.contype&&n++;var o=StatusStrs[n];switch(1==terminal.webRtcActive&&(o+=", WebRTC"),QH("termstatus",o),t){case 0:xterm.dispose(),xterm=xtermfit=xtermimage=null,null!=terminal&&(terminal.Stop(),terminal=null);break;case 3:xterm.focus()}updateTerminalButtons()}function CreateRemoteTunnel(e,t){var n={protocol:1};return null!=t&&"number"==typeof t.protocol&&(n.protocol=t.protocol),n.onTunnelUpdate=e,n.xxStateChange=function(e){},n.ProcessBinaryData=function(e){n.onTunnelUpdate(e)},n.ProcessData=function(e){n.onTunnelUpdate(e)},n.terminalEmulation=1,n.fxEmulation=0,n.lineFeed="\r\n",n}function tunnelUpdate(e){null!=xterm&&(xterm.writeUtf8?"string"==typeof e?xterm.writeUtf8(e):xterm.writeUtf8(new Uint8Array(e)):"string"==typeof e?xterm.write(e):xterm.write(new Uint8Array(e)))}function sshTunnelAuthDialog(e,t){var n="";e.askkeypass?n+=addHtmlValue("Autenticació","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=3 selected>Clau emmagatzemada</option><option value=1>Usuari contrasenya</option><option value=2>Nom d'usuari i clau</option></select>"):n+=addHtmlValue("Autenticació","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=1 selected>Usuari contrasenya</option><option value=2>Nom d'usuari i clau</option></select>"),n+="<div id=d2userauth style=display:none>",n+=addHtmlValue("Nom d'usuari","<input id=dp2user style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),n+="</div>",n+="<div id=d2passauth style=display:none>",n+=addHtmlValue("Contrasenya","<input type=password id=dp2pass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),4194304&features2||(n+="<label><input id=dp2keep type=checkbox>Recordeu les credencials</label>"),n+="</div><div id=d2keyauth style=display:none>",n+=addHtmlValue("Fitxer de claus","<input type=file id=dp2key style=width:150px maxlength=64 autocomplete=off onchange=sshAuthUpdate(event) /><div id=d2badkey style=font-size:x-small>El fitxer de clau ha d'estar en format OpenSSH.</div>"),n+=addHtmlValue("Contrasenya clau","<input type=password id=dp2keypass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),4194304&features2||(n+="<label><input id=dp2keep1 type=checkbox onchange=sshAuthUpdate(event)>Recorda l'usuari i la clau</label><br/>",n+="<label><input id=dp2keep2 type=checkbox>Recordar contrasenya</label>"),n+="</div>",e.askkeypass&&(n+="<div id=d2keyauth2 style=display:none>",n+=addHtmlValue("Contrasenya","<input type=password id=dp2keypass2 style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),n+="</div>"),setDialogMode(2,"Autenticació",11,t,n,"ssh"),Q("dp2user").focus(),sshAuthUpdate(),setTimeout(sshAuthUpdate,50)}function sshTunnelUpdate(e){if("string"==typeof e)if("{"==e[0]){var t=JSON.parse(e);switch(t.action){case"sshauth":sshTunnelAuthDialog(t,sshConnectEx);break;case"sshautoauth":terminal.socket.send(JSON.stringify({action:"sshautoauth",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));break;case"autherror":p12setConsoleMsg("Error d'autenticació",5e3);break;case"sessionerror":p12setConsoleMsg("Sessió expirada",5e3);break;case"sessiontimeout":p12setConsoleMsg("Temps d'espera de la sessió",5e3)}}else"~"==e[0]&&(xterm.writeUtf8?xterm.writeUtf8(e.substring(1)):xterm.write(e.substring(1)))}function sshAuthUpdate(e){if(QV("d2userauth",3!=Q("dp2authmethod").value),QV("d2passauth",1==Q("dp2authmethod").value),QV("d2keyauth",2==Q("dp2authmethod").value),QV("d2keyauth2",3==Q("dp2authmethod").value),1==Q("dp2authmethod").value)QE("idx_dlgOkButton",Q("dp2user").value.length>0&&Q("dp2pass").value.length>0);else if(3==Q("dp2authmethod").value)QE("idx_dlgOkButton",Q("dp2keypass2").value.length>0);else{if(QE("idx_dlgOkButton",!1),4194304&features2||QE("dp2keep2",Q("dp2keep1").checked),1==(Q("dp2user").value.length>0&&null!=Q("dp2key").files&&1==Q("dp2key").files.length&&Q("dp2key").files[0].size<8e3)){var t=new FileReader;t.onload=function(e){var t=e.target.result.indexOf("-----BEGIN OPENSSH PRIVATE KEY-----")>=0&&e.target.result.indexOf("-----END OPENSSH PRIVATE KEY-----")>=0||e.target.result.indexOf("-----BEGIN RSA PRIVATE KEY-----")>=0&&e.target.result.indexOf("-----END RSA PRIVATE KEY-----")>=0;QE("idx_dlgOkButton",t),QS("d2badkey").color=t?"#000":"#F00"},t.readAsText(Q("dp2key").files[0])}}e&&13==e.keyCode&&e.target&&1==Q("dp2authmethod").value&&("dp2user"==e.target.id&&Q("dp2pass").focus(),"dp2pass"==e.target.id&&dialogclose(1))}function sshConnectEx(e){if(0==e)null!=terminal&&connectTerminal();else{var t=0;if(1==Q("dp2authmethod").value)4194304&features2||(t=Q("dp2keep").checked?1:0),terminal.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));else if(3==Q("dp2authmethod").value)terminal.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));else{4194304&features2||1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0);var n=new FileReader,o=Q("dp2user").value,i=Q("dp2keypass").value;n.onload=function(e){terminal.socket.send(JSON.stringify({action:"sshauth",username:o,keypass:i,key:e.target.result,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}))},n.readAsText(Q("dp2key").files[0])}}}function xTermSendResize(){xtermResizeTimer=null,null!=xterm&&null!=terminal&&null!=terminal.sendCtrlMsg&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send(JSON.stringify({action:"resize",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight})):terminal.sendCtrlMsg(JSON.stringify({ctrlChannel:"102938",type:"termsize",cols:xterm.cols,rows:xterm.rows})))}function connectTerminal(e,t,n){if(p12clearConsoleMsg(),terminal)terminal.Stop(),terminal=null,fullscreen&&deskToggleFull();else{var o={protocol:null!=n&&"number"==typeof n.protocol?n.protocol:1};n&&n.requireLogin&&(o.requireLogin=!0),null!=serverinfo.linuxshell&&currentNode.agent.id>4&&("root"==serverinfo.linuxshell&&(o.protocol=1,delete o.requireLogin),"user"==serverinfo.linuxshell&&(o.protocol=8,delete o.requireLogin),"login"==serverinfo.linuxshell&&(o.protocol=1,o.requireLogin=!0)),QV("termarea3xdiv",!0),null!=xterm&&xterm.dispose(),xterm=new Terminal({allowProposedApi:!0}),xtermfit=new FitAddon.FitAddon,xtermimage=new ImageAddon.ImageAddon,xtermfit&&xterm.loadAddon(xtermfit),xterm.loadAddon(xtermimage),xterm.open(Q("termarea3xdiv")),xterm.onData(function(e){"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+e):terminal.sendText(e)}),xtermfit&&xtermfit.fit(),xterm.onResize(function(e){xtermResizeTimer&&clearTimeout(xtermResizeTimer),xtermResizeTimer=setTimeout(xTermSendResize,200)}),document.getElementsByClassName("xterm-helper-textarea")[0].onfocus=()=>{xterm.blur(),fullscreen||toggleKeyboard()},document.getElementsByClassName("xterm-viewport")[0].style.overflow="hidden",terminal=CreateAgentRedirect(meshserver,CreateRemoteTunnel(3==t?sshTunnelUpdate:tunnelUpdate,o),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),3==t&&(terminal.urlname="sshterminalrelay.ashx"),terminal.debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.options=o,terminal.options={cols:xterm.cols,rows:xterm.rows},o.requireLogin&&(terminal.options.requireLogin=!0),terminal.Start(terminalNode._id),terminal.onStateChanged=onTerminalStateChange,terminal.contype=t,terminal.attemptWebRTC=!1,terminal.onConsoleMessageChange=function(){p12setConsoleMsg(terminal.consoleMessage?formatAgentConsoleMessage(terminal.consoleMessage,terminal.consoleMessageId,terminal.consoleMessageArgs):null,terminal.consoleMessageTimeout)}}Q("connectbutton2").blur()}function termSendKey(e,t){terminal&&!xxdialogMode&&(null!=xterm?("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(e)):terminal.sendText?terminal.sendText(String.fromCharCode(e)):terminal.send(String.fromCharCode(e)),xterm.focus()):null!=terminal&&(terminal.m.TermSendKey(e),Q(t).blur()))}function updateTermShortcutKeys(){for(var e="",t=64;t<=95;t++)e+='<div class="menuButton" style="width:70px" onclick="termMenuButton('+t+')">Ctrl +'+String.fromCharCode(t)+"</div>";QH("termButtonMenu",e)}function termMenuButton(e){toggleMenu(!0),"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(e-64)):terminal.sendText(String.fromCharCode(e-64))}function setupFiles(){var e=filesNode==currentNode,t=!!(1&(filesNode=currentNode).conn)||3==filesNode.mtype;QE("p13Connect",t),QE("p13Connects",t),QV("p13Connect",null==files&&2==filesNode.mtype),QV("p13Connects",null==files&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",null!=files),0!=e&&0!=t||!files||(files.Stop(),files=null),p13setActions()}function onFilesStateChange(e,t){setSessionActivity(),QV("p13Connect",0==t&&2==filesNode.mtype),QV("p13Connects",0==t&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",0!=t);var n=StatusStrs[t];switch(3==t&&(2==files.contype&&(n+=", SFTP"),1==files.webRtcActive&&(n+=", WebRTC")),Q("p13Status").textContent=n,t){case 0:QH("p13files",""),p13filetree=null,p13filetreelocation=[],QH("p13currentpath",""),QE("p13FolderUp",!1),p13setActions(),null!=files&&(files.Stop(),files=null),null!=uploadFile&&(p13uploadFileTransferDone(),uploadFile=null);break;case 3:if(p13filetreelocation=[],p13targetpath="",files){var o=[];try{o=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var i=0;i<o.length;i++)o[i].n==currentNode._id&&(p13targetpath=o[i].p);p13filetreelocation=p13targetpath.split("/"),files.sendText({action:"ls",reqid:1,path:p13targetpath})}}}function CreateRemoteFiles(e){var t={protocol:5};return t.onFileUpdate=e,t.xxStateChange=function(e){},t.ProcessData=function(e){t.onFileUpdate(e)},t}var autoConnectFilesTimer=null;function autoConnectFiles(e){null==autoConnectFilesTimer?autoConnectFilesTimer=setInterval(connectFiles,100):(clearInterval(autoConnectFilesTimer),autoConnectFilesTimer=null)}function connectFiles(e,t){p13clearConsoleMsg(),files?(files.Stop(),files=null):(files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),2==t&&(files.urlname="sshfilesrelay.ashx"),files.contype=t,files.attemptWebRTC=attemptWebRTC,files.webrtcconfig=webrtcconfiguration,files.onStateChanged=onFilesStateChange,files.onConsoleMessageChange=function(){files.consoleMessage?(Q("p13FilesConsoleMsg").innerHTML+=formatAgentConsoleMessage(files.consoleMessage,files.consoleMessageId,files.consoleMessageArgs),QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),files.consoleMessageTimeout&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,1e3*files.consoleMessageTimeout))):p13clearConsoleMsg()},files.Start(filesNode._id)),p13clipboard=p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview()}var p13sortorder,p13filetree=null,p13targetpath=null,p13filetreelocation=[];function p13gotFiles(e){if(e.length>0&&123!=e.charCodeAt(0))p13gotDownloadBinaryData(e);else{try{e=JSON.parse(decode_utf8(e))}catch(t){e=JSON.parse(e)}if("download"!=e.action){switch(e.action){case"sshauth":sshTunnelAuthDialog(e,p13sshConnectEx);break;case"autherror":return void p13setConsoleMsg("Error d'autenticació",5e3);case"connectionerror":return void p13setConsoleMsg("Error de connexió",5e3);case"sessionerror":return void p13setConsoleMsg("Sessió expirada",5e3);case"sessiontimeout":return void p13setConsoleMsg("Temps d'espera de la sessió",5e3)}if(null!=e.action&&e.action.startsWith("upload"))p13gotUploadData(e);else if(null!=e.path)if(null==e.dir)""!=p13targetpath&&p13folderup();else if(e.path=e.path.replace(/\//g,"\\"),null!=p13filetree&&e.path==p13filetree.path){var t=p13getCheckedNames();p13filetree=e,p13updateFiles(t)}else{for(var n=e.path.replace(/\//g,"\\"),o=p13targetpath.replace(/\//g,"\\");n.length>0&&"\\"==n[0];)n=n.substring(1);for(;o.length>0&&"\\"==o[0];)o=o.substring(1);(n==o||"\\"==e.path&&""==p13targetpath)&&(p13filetree=e,p13updateFiles())}}else p13gotDownloadCommand(e)}}function p13sshConnectEx(e){if(0==e)null!=files&&connectFiles();else{var t=0;if(1==Q("dp2authmethod").value)4194304&features2||(t=Q("dp2keep").checked?1:0),files.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t}));else if(3==Q("dp2authmethod").value)files.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value}));else{4194304&features2||1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0);var n=new FileReader,o=Q("dp2user").value,i=Q("dp2keypass").value;n.onload=function(e){files.socket.send(JSON.stringify({action:"sshauth",username:o,keypass:i,key:e.target.result,keep:t}))},n.readAsText(Q("dp2key").files[0])}}}function p13getCheckedNames(){for(var e=[],t=document.getElementsByName("fd"),n=0;n<t.length;n++)t[n].checked&&e.push(p13filetree.dir[t[n].value].n);return e}function p13updateFiles(e){var t="",n="",o="<a style=cursor:pointer;color:black onclick=p13folderup(0)>Arrel</a>",i=p13filetree.path.split("\\");for(var a in p13filetreelocation=[],i)""!=i[a]&&p13filetreelocation.push(i[a]);for(var a in p13filetreelocation)o+=" / <a style=cursor:pointer;color:black onclick=p13folderup("+(parseInt(a)+1)+")>"+EscapeHtml(p13filetreelocation[a])+"</a>";var s=p13filetreelocation.join("/"),r=p13sort_files(p13filetree.dir);for(var a in r){var l,d=r[a],u=d.n;l=EscapeHtml(u);var c="";null!=d.s&&(c=getFileSizeStr(d.s));var p="";if(d.t<3){p="<div class=filelist file=999><input file=999 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'>&nbsp;<span style=float:right></span><span title=\""+l+'"><div class=fileIcon'+d.t+'></div><a style=cursor:pointer onclick=p13folderset("'+encodeURIComponent(d.nx)+'")>'+l+"</a></span></div>"}else{var m=l;d.s>0&&(m='<a rel="noreferrer noopener" target="_blank" style=cursor:pointer onclick="p13downloadfile(\''+encodeURIComponent(s+"/"+u)+"','"+encodeURIComponent(u)+"',"+d.s+')">'+l+"</a>"),p="<div class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+c+'</span><span title="'+l+'"><div class=fileIcon'+d.t+"></div>"+m+"</span></div>"}d.t<3?t+=p:n+=p}if(QH("p13files",t+n),QH("p13currentpath",o),QE("p13FolderUp",0!=p13filetreelocation.length),null!=e){var g=document.getElementsByName("fd");for(a=0;a<g.length;a++)e.indexOf(p13filetree.dir[g[a].value].n)>=0&&(g[a].checked=!0)}p13setActions()}function p13folderset(e){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[e].n).split("\\").join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13folderup(e){if(null==e)p13filetreelocation.pop();else for(;p13filetreelocation.length>e;)p13filetreelocation.pop();p13targetpath=p13filetreelocation.join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13storeCurrentPath(e){var t=[],n=-1;try{t=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var o=0;o<t.length;o++)t[o].n==currentNode._id&&(n=o);for(n>=0&&t.splice(n,1),t.push({n:currentNode._id,p:e});t.length>40;)t.shift();putstore("_devFilePaths",JSON.stringify(t))}function p13sort_filename(e,t){return e.ln>t.ln?1*p13sortorder:e.ln<t.ln?-1*p13sortorder:0}function p13sort_timestamp(e,t){return e.d>t.d?1*p13sortorder:e.d<t.d?-1*p13sortorder:0}function p13sort_bysize(e,t){return e.s==t.s?p13sort_filename(e,t):(e.s-t.s)*p13sortorder}function p13sort_files(e){var t=[],n=Q("p13sortdropdown").value;for(var o in e)e[o].nx=o,null==e[o].s&&(e[o].s=0),null==e[o].n&&(e[o].n=o),e[o].ln=e[o].n.toLowerCase(),t.push(e[o]);return p13sortorder=1,n>3&&(p13sortorder=-1,n-=3),1==n?t.sort(p13sort_filename):2==n?t.sort(p13sort_bysize):3==n&&t.sort(p13sort_timestamp),t}function p13setActions(){var e=currentNode.agent&&14!=currentNode.agent.id;if(null==p13filetree)QE("p13DeleteFileButton",!1),QE("p13NewFolderButton",!1),QE("p13UploadButton",!1),QE("p13RenameFileButton",!1),QE("p13SelectAllButton",!1),Q("p13SelectAllButton").value="Tots",QE("p13RefreshButton",!1),QE("p13CutButton",!1),QE("p13CopyButton",!1),QE("p13PasteButton",!1);else{var t=p13getFileSelCount(),n=p13getFileCount(),o=p13getFileSelCount(!1),i=isWindowsNode(currentNode);QE("p13DeleteFileButton",e&&t>0&&(p13filetreelocation.length>0||0==i)),QE("p13NewFolderButton",e&&(p13filetreelocation.length>0||0==i)),QE("p13UploadButton",e&&(p13filetreelocation.length>0||0==i)),QE("p13RenameFileButton",e&&1==t&&(p13filetreelocation.length>0||0==i)),QE("p13SelectAllButton",n>0),Q("p13SelectAllButton").value=t>0?"Cap":"Tots",QE("p13RefreshButton",!0),QE("p13CutButton",e&&t>0&&t==o&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)),QE("p13CopyButton",e&&t>0&&t==o&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)),QE("p13PasteButton",e&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)&&null!=p13clipboard&&p13clipboard.length>0)}1==(null!=files&&0!=files.state)&&2!=files.contype||null==filesNode.agent||3==filesNode.agent.id||4==filesNode.agent.id?QH("filesCustomUpperRight",""):QH("filesCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Port SSH {0}",filesNode.sshport?filesNode.sshport:22)+"</a>"),QV("filesActionsBtn",3!=filesNode.mtype)}function p13getFileSelCount(e){for(var t=0,n=document.getElementsByName("fd"),o=0;o<n.length;o++)!n[o].checked||0==e&&"3"!=n[o].attributes.file.value||t++;return t}function p13getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fd"),n=0;n<t.length;n++)t[n].checked&&"999"==t[n].attributes.file.value&&e++;return e}function p13getFileCount(){return document.getElementsByName("fd").length}function p13selectallfile(){for(var e=0==p13getFileSelCount(),t=document.getElementsByName("fd"),n=0;n<t.length;n++)t[n].checked=e;p13setActions()}function p13createfolder(){setDialogMode(2,"Carpeta nova",3,p13createfolderEx,"<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />"),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13createfolderEx(){files.sendText({action:"mkdir",reqid:1,path:p13filetreelocation.join("/")+"/"+Q("p13renameinput").value}),p13folderup(999)}function p13deletefile(){var e=p13getFileSelCount(),t=p13getFileSelDirCount()>0?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Eliminació recursiva</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Suprimeix",3,p13deletefileEx,e>1?format("Vols suprimir {0} elements seleccionats?",e)+t:"Vols suprimir l'element seleccionat?"+t)}function p13deletefileEx(){for(var e=[],t=document.getElementsByName("fd"),n=0;n<t.length;n++)t[n].checked&&e.push(p13filetree.dir[t[n].value].n);files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:e,rec:Q("p13recdeleteinput").checked}),p13folderup(999)}function p13renamefile(){for(var e,t=document.getElementsByName("fd"),n=0;n<t.length;n++)t[n].checked&&(e=p13filetree.dir[t[n].value].n);setDialogMode(2,"Canvia el nom",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:e}),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13renamefileEx(e,t){t.newname=Q("p13renameinput").value,files.sendText(t),p13folderup(999)}function p13fileNameCheck(e){var t=isFilenameValid(Q("p13renameinput").value);QE("idx_dlgOkButton",t),1==t&&null!=e&&13==e.keyCode&&dialogclose(1)}function p13uploadFile(){setDialogMode(2,"Penja el document",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />"),updateUploadDialogOk("p13uploadinput")}function p13uploadFileEx(){p13doUploadFiles(Q("p13uploadinput").files)}function p13viewfile(){for(var e=document.getElementsByName("fd"),t=0;t<e.length;t++)if(e[t].checked){p13filetree.dir[e[t].value].s<=204800?p13downloadfile(encodeURIComponent(p13filetreelocation.join("/")+"/"+p13filetree.dir[e[t].value].n),encodeURIComponent(p13filetree.dir[e[t].value].n),p13filetree.dir[e[t].value].s,"viewer"):messagebox("Editor de fitxers","Només es poden editar fitxers de menys de 200 k.");break}}var downloadFile,uploadFile,p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(e){var t=document.getElementsByName("fd");p13clipboard=[],p13clipboardCut=e,p13clipboardFolder=p13targetpath;for(var n=0;n<t.length;n++)t[n].checked&&"3"==t[n].attributes.file.value&&p13clipboard.push(p13filetree.dir[t[n].value].n);p13updateClipview()}function p13pasteFile(){var e="";null!=p13clipboard&&p13clipboard.length>0&&(e=0==p13clipboardCut?p13clipboard.length>1?format("Confirmeu la còpia de {0} entrades a aquesta ubicació?",p13clipboard.length):format("Vols confirmar la còpia d'1 entrada a aquesta ubicació?"):p13clipboard.length>1?format("Vols confirmar el moviment de {0} entrades a aquesta ubicació?",p13clipboard.length):format("Vols confirmar el moviment d'1 entrada a aquesta ubicació?")),setDialogMode(2,"Enganxa",3,p13pasteFileEx,e)}function p13pasteFileEx(){files.sendText({action:0==p13clipboardCut?"copy":"move",reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard}),p13folderup(999),1==p13clipboardCut&&(p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview())}function p13updateClipview(){var e="";null!=p13clipboard&&p13clipboard.length>0&&(e=0==p13clipboardCut?p13clipboard.length>1?format('Mantenint {0} entrades per copiar, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clar</a>.',p13clipboard.length):format('Conté 1 entrada per copiar, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clar</a>.'):p13clipboard.length>1?format('Mantingut {0} entrades per al moviment, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clar</a>.',p13clipboard.length):format('Mantenint 1 entrada per al moviment, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clar</a>.')),QH("p13bottomstatus",e),p13setActions()}function p13clearClip(){return p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview(),!1}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}function getFileSelCount(e){for(var t=0,n=document.getElementsByName("fc"),o=0;o<n.length;o++)!n[o].checked||0==e&&"3"!=n[o].attributes.file.value||t++;return t}function getFileCount(){return document.getElementsByName("fc").length}function p13downloadfile(e,t,n){xxdialogMode||downloadFile||!files||(downloadFile={path:decodeURIComponent(e),file:decodeURIComponent(t),size:n,tsize:0,data:"",state:0,id:Math.random()},files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path}),setDialogMode(2,"Descarrega l'arxiu",10,p13downloadFileCancel,"<div>"+EscapeHtml(downloadFile.file)+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+n+" />"))}function p13downloadFileCancel(){setDialogMode(0),files.sendText({action:"download",sub:"cancel",id:downloadFile.id}),downloadFile=null}function p13gotDownloadCommand(e){null!=downloadFile&&e.id==downloadFile.id&&("start"==e.sub?(downloadFile.state=1,files.sendText({action:"download",sub:"startack",id:downloadFile.id})):"cancel"==e.sub&&(downloadFile=null,setDialogMode(0)))}function p13gotDownloadBinaryData(e){downloadFile&&0!=downloadFile.state&&(e.length>4&&(downloadFile.tsize+=e.length-4,downloadFile.data+=e.substring(4),Q("d2progressBar").value=downloadFile.tsize),1&ReadInt(e,0)?(saveAs(data2blob(downloadFile.data),downloadFile.file),downloadFile=null,setDialogMode(0)):files.sendText({action:"download",sub:"ack",id:downloadFile.id}))}function p13doUploadFiles(e){if(!xxdialogMode){var t=isWindowsNode(currentNode),n=[],o=0;for(var i in p13filetree.dir)t?n.push(p13filetree.dir[i].n.toLowerCase()):n.push(p13filetree.dir[i].n);for(i=0;i<e.length;i++)t?n.indexOf(e[i].name.toLowerCase())>=0&&o++:n.indexOf(e[i].name)>=0&&o++;0==o?p13uploadFileContinue(1,e):setDialogMode(2,"Penja el document",3,p13uploadFileContinue,format(1==o?"La càrrega sobreescriurà 1 fitxer. Continuar?":"La càrrega sobreescriurà {0} fitxers. Continuar?",o),e)}}function p13uploadFileContinue(e,t){(uploadFile={}).xpath=p13filetreelocation.join("/"),uploadFile.xfiles=t,uploadFile.xfilePtr=-1,setDialogMode(2,"Penja el document",10,p13uploadFileCancel,"<div id=p13dfileName>Connectant...</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />"),p13uploadNextFile()}const byteToHex=[];for(var n=0;n<=255;++n){var hexOctet=n.toString(16).padStart(2,"0");byteToHex.push(hexOctet)}function arrayBufferToHex(e){return Array.prototype.map.call(new Uint8Array(e),e=>byteToHex[e]).join("")}function performHash(e,t){window.crypto.subtle.digest("SHA-384",e).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})}function performHashOnFile(e,t){var n=new FileReader;n.onerror=function(e){t(null)},n.onload=function(){window.crypto.subtle.digest("SHA-384",n.result).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})},n.readAsArrayBuffer(e)}function p13uploadNextFile(){if(uploadFile.xfilePtr++,uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var e=uploadFile.xfiles[uploadFile.xfilePtr];if(QH("p13dfileName",EscapeHtml(e.name)),Q("d2progressBar").max=e.size,Q("d2progressBar").value=0,null==e.xdata){uploadFile.xfile=e;var t=null;for(var n in p13filetree.dir)p13filetree.dir[n].n==e.name&&(t=p13filetree.dir[n]);null!=t&&t.s<=uploadFile.xfile.size?performHashOnFile(uploadFile.xfile,function(n){files.sendText(JSON.stringify({action:"uploadhash",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,tag:{h:n.toUpperCase(),s:t.s,skip:t.s==uploadFile.xfile.size}}))}):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xfile.size}))}else uploadFile.xdata=e.xdata,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xdata.byteLength}))}else p13uploadFileTransferDone()}function p13uploadFileCancel(e,t){null!=uploadFile&&(files.sendText(JSON.stringify({action:"uploadcancel",reqid:uploadFile.xfilePtr})),uploadFile=null),p13uploadFileTransferDone()}function p13uploadFileTransferDone(){uploadFile=null,setDialogMode(0),p13folderup(9999)}function p13gotUploadData(e){if(null!=uploadFile&&parseInt(uploadFile.xfilePtr)==parseInt(e.reqid))switch(e.action){case"uploadstart":uploadFile.xdataPriming=8,p13uploadNextPart(!1);break;case"uploadack":p13uploadNextPart(!1);break;case"uploaddone":uploadFile.xfiles.length>uploadFile.xfilePtr+1?p13uploadNextFile():p13uploadFileTransferDone();break;case"uploaderror":p13uploadFileCancel();break;case"uploadhash":var t=uploadFile.xfiles[uploadFile.xfilePtr];t&&(e.tag.h===e.hash?e.tag.skip?p13uploadNextFile():(uploadFile.xptr=e.tag.s,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!0}))):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!1})))}}function p13uploadNextPart(e){if(uploadFile.xdata){var t=uploadFile.xdata,n=uploadFile.xptr;if(n>=t.byteLength)files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr}));else{if((a=uploadFile.xptr+(attemptWebRTC?16384:65536))>t.byteLength){if(1==e)return;a=t.byteLength}var o=new Uint8Array(t.slice(n,a));if(123==o[0]||0==o[0]){var i=new Uint8Array(a-n+1);i.set(o,1),files.send(i)}else files.send(o);uploadFile.xptr=a,Q("d2progressBar").value=a}}else if(uploadFile.xfile){if(null!=uploadFile.xreader)return;if(uploadFile.xptr>=uploadFile.xfile.size)return;var a;if((a=uploadFile.xptr+(attemptWebRTC?16384:65536))>uploadFile.xfile.size){if(1==e)return;a=uploadFile.xfile.size}uploadFile.xreader=new FileReader,uploadFile.xreader.onerror=function(e){console.log(e)},uploadFile.xreader.onload=function(){var e=uploadFile.xreader.result;if(delete uploadFile.xreader,null!=e){var t=new Uint8Array(e);if(123==t[0]||0==t[0]){var n=new Uint8Array(e.byteLength+1);n.set(t,1),files.send(n)}else files.send(t);uploadFile.xptr=a,Q("d2progressBar").value=a,uploadFile.xptr>=uploadFile.xfile.size?files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr})):uploadFile.xdataPriming>0&&(uploadFile.xdataPriming--,p13uploadNextPart(!0))}},uploadFile.xreader.readAsArrayBuffer(uploadFile.xfile.slice(uploadFile.xptr,a))}}var consoleNode,DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=null;function updateDeviceDetails(e,t,n){if(null!=currentNode&&(null==e&&(e=currentNode),currentNode._id==e._id)){DeviceDetailsNodeId!=e._id&&(DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=e._id),null!=t&&(DeviceDetailsHardware=t),null!=n&&(DeviceDetailsNetwork=n),null==(t=DeviceDetailsHardware)&&(t={}),null==(n=DeviceDetailsNetwork)&&(n={});var o=[],i={},a="";if(e.rname&&(a+=addDetailItem("Nom",EscapeHtml(e.rname),i)),t.windows&&t.windows.osinfo&&t.windows.osinfo.Description&&(a+=addDetailItem("Descripció",EscapeHtml(t.windows.osinfo.Description),i)),e.osdesc&&(a+=addDetailItem("Versió",EscapeHtml(e.osdesc),i)),t.windows&&t.windows.osinfo){if((f=t.windows.osinfo).BuildRevision&&(a+=addDetailItem("Número de compilació",EscapeHtml(f.BuildRevision),i)),f.OSArchitecture&&(f.OSArchitecture.startsWith("32")?a+=addDetailItem("Arquitectura","32 bits",i):f.OSArchitecture.startsWith("64")?a+=addDetailItem("Arquitectura","64 bits",i):a+=addDetailItem("Arquitectura",EscapeHtml(f.OSArchitecture),i)),f.LastBootUpTime){var s={year:parseInt(f.LastBootUpTime.substring(0,4)),month:parseInt(f.LastBootUpTime.substring(4,6))-1,day:parseInt(f.LastBootUpTime.substring(6,8)),hours:parseInt(f.LastBootUpTime.substring(8,10)),minutes:parseInt(f.LastBootUpTime.substring(10,12)),seconds:parseInt(f.LastBootUpTime.substring(12,14))};a+=addDetailItem("Última hora d'arrencada",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}f.Domain&&(a+=addDetailItem(f.PartOfDomain?"Domini":"Grup de treball",EscapeHtml(f.Domain),i)),f.DomainState>0&&(a+=addDetailItem("Estat del domini",domainStates[f.DomainState]?domainStates[f.DomainState]:"Desconegut",i))}if(t.linux&&t.linux.LastBootUpTime){s={year:(r=new Date(t.linux.LastBootUpTime)).getFullYear(),month:r.getMonth(),day:r.getDate(),hours:r.getHours(),minutes:r.getMinutes(),seconds:r.getSeconds()};a+=addDetailItem("Última hora d'arrencada",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}if(t.darwin&&t.darwin.LastBootUpTime){var r;s={year:(r=new Date(1e3*t.darwin.LastBootUpTime)).getFullYear(),month:r.getMonth(),day:r.getDate(),hours:r.getHours(),minutes:r.getMinutes(),seconds:r.getSeconds()};a+=addDetailItem("Última hora d'arrencada",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}if(e.wsc){var l=[];null!=e.wsc.antiVirus&&("OK"==e.wsc.antiVirus?l.push("AV - <span style=color:green>D'acord</span>"):l.push("AV - <span style=color:red>DOLENT</span>")),null!=e.wsc.autoUpdate&&("OK"==e.wsc.autoUpdate?l.push("Actualització - <span style=color:green>D'acord</span>"):l.push("Actualització - <span style=color:red>DOLENT</span>")),null!=e.wsc.firewall&&("OK"==e.wsc.firewall?l.push("Tallafoc - <span style=color:green>D'acord</span>"):l.push("Tallafoc - <span style=color:red>DOLENT</span>")),a+=addDetailItem("Seguretat de Windows",l.join(", "))}if(e.defender){l=[];null!=e.defender.RealTimeProtection&&(1==e.defender.RealTimeProtection?l.push("Protecció en temps real - <span style=color:green>Encès</span>"):l.push("Protecció en temps real - <span style=color:red>Apagat</span>")),null!=e.defender.TamperProtected&&(1==e.defender.TamperProtected?l.push("Protecció contra manipulacions - <span style=color:green>Encès</span>"):l.push("Protecció contra manipulacions - <span style=color:red>Apagat</span>")),null!=e.defender.AntivirusSignatureVersion&&l.push("Versió de signatura - <span style=color:green>"+EscapeHtml(e.defender.AntivirusSignatureVersion)+"</span>"),l.length>0&&(a+=addDetailItem("Windows Defender",l.join(", ")))}if(e.av&&e.av.length>0){l=[];for(var d in e.av)if(e.av[d].product){var u=EscapeHtml(e.av[d].product);!0!==e.av[d].enabled&&(u+=" - <span style=color:red>Inhabilitat</span>"),!0!==e.av[d].updated&&(u+=" - <span style=color:red>Obsolet</span>"),1==e.av[d].enabled&&1==e.av[d].updated&&(u+=" - <span style=color:green>D'acord</span>"),l.push(u)}a+=addDetailItem("Antivirus",l.join("<br />"))}if(e.users&&e.users.length>0){var c=e.users.map(function(t,n){var o=e.upnusers&&e.upnusers[n],i=2&features3?e.users&&null!=e.users[n]?EscapeHtml(e.users[n]):null:null!=o?EscapeHtml(o):null,a=EscapeHtml(2&features3&&null!=o?o:t);return e.lusers&&e.lusers.indexOf(t)>=0?addKeyLinkConditional(a,i?i+" - Tancat":"Tancat",!0):i?"<span style=cursor:default title='"+i+"'>"+a+"</span>":a}).join(", ");a+=addDetailItem(e.users.length>1?"Usuaris actius":"Usuari actiu",c)}if(e.idletime&&-1!=e.idletime&&(a+=addDetailItem("Temps d'inactivitat",printTimer(e.idletime))),""!=a&&o.push({name:"Sistema operatiu",html:a,img:"software"}),e.agent){a="";if(null!=e.agent&&null!=e.agent.id&&null!=e.agent.ver){var p="";p=e.agent.id<=agentsStr.length?agentsStr[e.agent.id]:agentsStr[0],0!=e.agent.ver&&(p+=" v"+e.agent.ver),14==e.agent.id&&(p=e.agent.core),a+=addDetailItem("Agent de malla",p)}if(e.firstconnect&&(a+=addDetailItem("Primera connexió d'agent",printDateTime(new Date(e.firstconnect)))),1&e.conn?a+=addDetailItem("Última connexió d'agent","Connectat ara"):e.lastconnect&&(a+=addDetailItem("Última connexió d'agent",printDateTime(new Date(e.lastconnect)))),e.lastaddr){var m=e.lastaddr.split(":");m.length>2?a+=addDetailItem("Adreça de l'últim agent",e.lastaddr):isPrivateIP(e.lastaddr)?a+=addDetailItem("Adreça de l'últim agent",m[0]):a+=addDetailItem("Adreça de l'últim agent",'<a href="https://iplocation.com/?ip='+m[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+m[0]+"</a>")}if(null!=t.agentvers&&t.agentvers.compileTime)try{var g=Date.parse(t.agentvers.compileTime);a+=addDetailItem("Temps de compilació",printDateTime(new Date(g)))}catch(e){}null!=t.time&&(a+=addDetailItem("Última actualització de detalls",printDateTime(new Date(t.time)))),""!=a&&o.push({name:"Agent de malla",html:a,img:"meshagent"})}if(t.mobile){a="";t.mobile.brand&&t.mobile.model&&(a+=addDetailItem("Model",EscapeHtml(t.mobile.brand+", "+t.mobile.model),i)),t.mobile.device&&(a+=addDetailItem("Dispositiu",EscapeHtml(t.mobile.device),i)),t.mobile.bootloader&&(a+=addDetailItem("Carregador d'arrencada",EscapeHtml(t.mobile.bootloader),i)),t.mobile.id&&(a+=addDetailItem("Identificador",EscapeHtml(t.mobile.id),i)),t.mobile.host&&(a+=addDetailItem("Nom d'amfitrió",EscapeHtml(t.mobile.host),i)),t.mobile.androidapi&&t.mobile.androidrelease&&(a+=addDetailItem("Versió d'Android",EscapeHtml(t.mobile.androidrelease+", API Level "+t.mobile.androidapi),i)),""!=a&&o.push({name:"Dispositiu mòbil",html:a,img:"mobile"})}if(null!=n.netif2){a="";for(var d in a+="<table style=width:100%>",n.netif2){var f=n.netif2[d];if(!(0==Array.isArray(f)||f.length<1||null==f[0]||"string"==typeof f[0].mac&&f[0].mac.startsWith("00:00:00:00"))){a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(d+(f[0].fqdn?", "+f[0].fqdn:""))+"</b></div>",f.desc&&(a+=addDetailItem("Descripció",EscapeHtml(f.desc).split("(R)").join("&reg;"))),"string"==typeof f[0].mac&&(f[0].gatewaymac?a+=addDetailItem("Capa MAC",format("MAC: {0}, passarel·la: {1}",EscapeHtml(f[0].mac),EscapeHtml(f[0].gatewaymac))):a+=addDetailItem("Capa MAC",format("MAC: {0}",EscapeHtml(f[0].mac)))),"number"==typeof f[0].speed&&0x8000000000000000!=f[0].speed&&f[0].speed>0&&(a+=addDetailItem("Velocitat de la interfície",format("{0}",getNetworkSpeed(f[0].speed))));for(var h=0;h<f.length;h++){var v=f[h],k=[];v.address&&k.push(format("IP: {0}",EscapeHtml(v.address))),v.netmask&&k.push(format("Màscara: {0}",EscapeHtml(v.netmask))),v.gateway&&k.push(format("Passarel·la: {0}",EscapeHtml(v.gateway))),k.length>0&&("IPv4"==v.family&&(a+=addDetailItem("Capa IPv4",k.join(","))),"IPv6"==v.family&&(a+=addDetailItem("Capa IPv6",k.join(","))))}a+="</div></td></tr>"}}t.network&&t.network.dns&&(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+=addDetailItem("<b>Servidors DNS</b>",t.network.dns.join(",")),a+="</div></td></tr>"),""!=(a+="</table>")&&o.push({name:"Treball en xarxa",html:a,img:"networking"})}if(null!=e.intelamt){a="";a+=addDetailItem("Versió",e.intelamt.ver?"v"+EscapeHtml(e.intelamt.ver):"<i>Desconegut</i>",i),a+=addDetailItem("Identificador",e.intelamt.uuid?EscapeHtml(e.intelamt.uuid):"<i>Desconegut</i>",i);var y={0:nobreak("No activat (previ)"),1:nobreak("No activat (Entrada)"),2:nobreak("Activat")},x="";2==e.intelamt.state&&e.intelamt.flags&&(2&e.intelamt.flags?x=", Mode de control de client (CCM)":4&e.intelamt.flags&&(x=", Mode de control d'administrador (ACM)")),a+=addDetailItem("Estat de subministrament",(e.intelamt.state?y[e.intelamt.state]:"<i>Desconegut</i>")+x,i),a+=addDetailItem("Seguretat",1==e.intelamt.tls?"Protegit mitjançant TLS":"TLS no està configurat",i),""!=(a+=addDetailItem("Credencials d'administrador",null==e.intelamt.user||""==e.intelamt.user||null!=e.intelamt.warn&&9&e.intelamt.warn?"Desconegut":"Conegut",i))&&("number"==typeof e.intelamt.sku&&16&e.intelamt.sku?o.push({name:"Gestió estàndard d'Intel&reg; (Intel&reg; SM)",html:a,img:"amt"}):o.push({name:"Tecnologia de gestió activa Intel&reg; (Intel&reg; AMT)",html:a,img:"amt"}))}if(t.identifiers){a="";var b=t.identifiers;if(b.bios_vendor&&(a+=addDetailItem("Venedor",EscapeHtml(b.bios_vendor),i)),b.bios_version&&(a+=addDetailItem("Versió",EscapeHtml(b.bios_version),i)),b.bios_serial&&(a+=addDetailItem("Serial",EscapeHtml(b.bios_serial),i)),b.bios_mode&&(a+=addDetailItem("Mode",EscapeHtml(b.bios_mode),i)),""!=a&&o.push({name:"BIOS",html:a,img:"chip"}),a="",b.board_vendor&&(a+=addDetailItem("Venedor",EscapeHtml(b.board_vendor),i)),b.board_name&&(a+=addDetailItem("Nom",EscapeHtml(b.board_name),i)),b.board_serial&&""!=b.board_serial&&(a+=addDetailItem("Serial",EscapeHtml(b.board_serial),i)),b.board_version&&(a+=addDetailItem("Versió",EscapeHtml(b.board_version),i)),b.product_uuid&&(a+=addDetailItem("Identificador",EscapeHtml(b.product_uuid),i)),b.cpu_name&&(a+=addDetailItem("CPU",EscapeHtml(b.cpu_name).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i)),b.gpu_name)for(var d in b.gpu_name)a+=addDetailItem("GPU",EscapeHtml(b.gpu_name[d]).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i);""!=a&&o.push({name:"Placa base",html:a,img:"motherboard"}),a="",b.chassis_manufacturer&&(a+=addDetailItem("Manufacturer",EscapeHtml(b.chassis_manufacturer),i)),b.product_name&&(a+=addDetailItem("Nom del producte",EscapeHtml(b.product_name),i)),b.chassis_serial&&(a+=addDetailItem("Serial",EscapeHtml(b.chassis_serial),i)),b.chassis_assettag&&(a+=addDetailItem("Etiqueta d'actiu",EscapeHtml(b.chassis_assettag),i)),""!=a&&o.push({name:"Sistema",html:a,img:"system"})}if(t.tpm){a="";var w=t.tpm;w.SpecVersion&&(a+=addDetailItem("SpecVersion",parseFloat(EscapeHtml(w.SpecVersion)).toFixed(1),i)),w.ManufacturerId&&(a+=addDetailItem("Identificador",EscapeHtml(w.ManufacturerId),i)),w.ManufacturerVersion&&(a+=addDetailItem("Versió",EscapeHtml(w.ManufacturerVersion),i)),null!=w.IsActivated&&(a+=addDetailItem("Activat",w.IsActivated?"Sí":"No",i)),null!=w.IsEnabled&&(a+=addDetailItem("Habilitat",w.IsEnabled?"Sí":"No",i)),null!=w.IsOwned&&(a+=addDetailItem("Owned",w.IsOwned?"Sí":"No",i)),""!=a&&o.push({name:"TPM",html:a,img:"tpm"})}if(t.battery){a="";for(var d in a+="<table style=width:100%>",t.battery){var S=t.battery[d];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(S.DeviceName?S.DeviceName:"Desconegut")+"</b></div>",S.CycleCount&&(a+=addDetailItem("Cycle Count",EscapeHtml(S.CycleCount),i)),S.FullChargedCapacity&&(a+=addDetailItem("Full Charged Capacity",format("{0} mWh",S.FullChargedCapacity),i)),S.EstimatedRuntime&&(a+=addDetailItem("Estimated Runtime",format("{0} minuts",Math.floor(S.EstimatedRuntime/60)),i)),S.Chemistry&&(a+=addDetailItem("Chemistry",EscapeHtml(S.Chemistry),i)),S.DesignedCapacity&&(a+=addDetailItem("Design Capacity",format("{0} mWh",S.DesignedCapacity),i)),S.ManufactureDate&&(a+=addDetailItem("Manufacture Date",EscapeHtml(S.ManufactureDate),i)),S.ManufactureName&&(a+=addDetailItem("Manufacture Name",EscapeHtml(S.ManufactureName),i)),S.SerialNumber&&(a+=addDetailItem("Serial Number",EscapeHtml(S.SerialNumber),i)),S.ChargeRate&&(a+=addDetailItem("Charge Rate",format("{0} mW",S.ChargeRate),i)),null!=S.Charging&&(a+=addDetailItem("Charging",S.Charging?"Sí":"No",i)),S.DischargeRate&&(a+=addDetailItem("Discharge Rate",format("{0} mW",S.DischargeRate),i)),null!=S.Discharging&&(a+=addDetailItem("Discharging",S.Discharging?"Sí":"No",i)),S.RemainingCapacity&&(a+=addDetailItem("Remaining Capacity",format("{0} mWh",S.RemainingCapacity),i)),S.Voltage&&(a+=addDetailItem("Voltage",format("{0} V",S.Voltage/1e3),i)),S.Health&&(a+=addDetailItem("Salut",format("{0} %",S.Health),i)),S.BatteryCharge&&(a+=addDetailItem("Carrega de la bateria",format("{0} %",S.BatteryCharge),i)),a+="</div>"}""!=(a+="</table>")&&o.push({name:"Battery",html:a,img:"battery"})}if(t.windows&&t.windows.memory&&t.windows.memory.length>0){a="";for(var d in t.windows.memory.sort(function(e,t){return e.BankLabel>t.BankLabel?1:e.BankLabel<t.BankLabel?-1:0}),a+="<table style=width:100%>",t.windows.memory){f=t.windows.memory[d];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.BankLabel?f.BankLabel:f.DeviceLocator?f.DeviceLocator:"Unknown")+"</b></div>",f.Capacity&&f.Speed?a+=addDetailItem("Capacitat / Velocitat",format("{0} Mb, {1} Mhz",f.Capacity/1024/1024,f.Speed),i):f.Capacity&&(a+=addDetailItem("Capacitat",format("{0} Mb",f.Capacity/1024/1024),i)),f.PartNumber&&(a+=addDetailItem("Número de part",EscapeHtml(f.Manufacturer&&"Undefined"!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>"}""!=(a+="</table>")&&o.push({name:"Memòria",html:a,img:"ram"})}if(t.linux&&t.linux.memory&&t.linux.memory.Memory_Device.length>0){a="";for(var d in t.linux.memory.Memory_Device.sort(function(e,t){return e.Locator>t.Locator?1:e.Locator<t.Locator?-1:0}),a+="<table style=width:100%>",t.linux.memory.Memory_Device){(f=t.linux.memory.Memory_Device[d]).Size&&"No Module Installed"==f.Size||(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.Locator?f.Locator:"Unknown")+"</b></div>",f.Size&&f.Speed?a+=addDetailItem("Capacitat / Velocitat",format("{0}, {1}",f.Size,f.Speed),i):f.Size&&(a+=addDetailItem("Capacitat",format("{0}",f.Size),i)),f.PartNumber&&(a+=addDetailItem("Número de part",EscapeHtml(f.Manufacturer&&"Undefined"!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>")}""!=(a+="</table>")&&o.push({name:"Memòria",html:a,img:"ram"})}if(t.darwin&&t.darwin.memory&&t.darwin.memory.length>0){a="";for(var d in a+="<table style=width:100%>",t.darwin.memory){(f=t.darwin.memory[d]).Size&&"No Module Installed"==f.Size||(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.DeviceLocator?f.DeviceLocator:"Unknown")+"</b></div>",f.Size&&f.Speed?a+=addDetailItem("Capacitat / Velocitat",format("{0}, {1}",f.Size,f.Speed),i):f.Size&&(a+=addDetailItem("Capacitat",format("{0}",f.Size),i)),f.PartNumber&&(a+=addDetailItem("Número de part",EscapeHtml(f.Manufacturer&&""!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>")}""!=(a+="</table>")&&o.push({name:"Memòria",html:a,img:"ram"})}if(t.identifiers&&b.storage_devices){a="";for(var d in b.storage_devices.sort(function(e,t){return e.Caption>t.Caption?1:e.Caption<t.Caption?-1:0}),a+="<table style=width:100%>",b.storage_devices){if((f=b.storage_devices[d]).Size){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.Caption)+"</b></div>",f.Model&&f.Model!=f.Caption&&(a+=addDetailItem("Model",EscapeHtml(f.Model),i)),f.Size&&("string"==typeof f.Size&&parseInt(f.Size)==f.Size&&(f.Size=parseInt(f.Size)),"number"==typeof f.Size&&(a+=addDetailItem("Capacitat",format("{0} Mb",Math.floor(f.Size/1024/1024)),i)),"string"==typeof f.Size&&(a+=addDetailItem("Capacitat",EscapeHtml(f.Size),i))),t.windows&&t.windows.drives&&f.Model){const e=t.windows.drives.find(e=>e.Model===f.Model);e&&(a+=addDetailItem("Estat",EscapeHtml(e.Status),i))}a+="</div>"}}""!=(a+="</table>")&&o.push({name:"Emmagatzematge",html:a,img:"storage"})}if(t.windows&&t.windows.volumes){a="";for(var d in t.windows.volumes){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+d+":"+(null==(f=t.windows.volumes[d]).name||""==f.name?"":" - "+EscapeHtml(f.name))+"</b></div>",f.size){var D=["Bytes","KB","MB","GB","TB"],C=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.size))/Math.log(1024)),10))?`${f.size} ${D[h]}`:`${(f.size/1024**h).toFixed(2)} ${D[h]}`;a+=addDetailItem("Capacitat",EscapeHtml(C),i)}if(f.sizeremaining){D=["Bytes","KB","MB","GB","TB"],C=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.sizeremaining))/Math.log(1024)),10))?`${f.sizeremaining} ${D[h]}`:`${(f.sizeremaining/1024**h).toFixed(2)} ${D[h]}`;a+=addDetailItem("Capacitat restant",EscapeHtml(C),i)}if(f.type)a+=addDetailItem("Sistema de fitxers",(""!=(M=1==f.removable?"Extraïble":1==f.cdrom?"CD ROM":"")?M+" / ":"")+("Unknown"==f.type?"Desconegut":EscapeHtml(f.type)),i);if(f.protectionStatus||f.volumeStatus){var Q=[];f.protectionStatus&&Q.push("Habilitat"),f.volumeStatus&&"FullyDecrypted"==f.volumeStatus&&Q.push("Totalment desxifrat"),f.volumeStatus&&"EncryptionInProgress"==f.volumeStatus&&Q.push("Xifratge en curs"),f.volumeStatus&&"FullyEncrypted"==f.volumeStatus&&Q.push("Totalment encriptat"),Q=Q.join(" - "),f.recoveryPassword&&(Q+=addKeyLink("",'deviceDetailsShowBitlockerInfo("'+encodeURIComponentEx(d)+'","'+encodeURIComponentEx(f.identifier)+'","'+encodeURIComponentEx(f.recoveryPassword)+'")')),a+=addDetailItem("BitLocker",Q,i)}a+="</div>"}""!=a&&o.push({name:"Volums d'emmagatzematge",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}if(t.linux&&t.linux.volumes){a="";for(var d in t.linux.volumes){if(!(f=t.linux.volumes[d]).mount_point.startsWith("/var/lib/docker/overlay2")){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+f.mount_point+"</b></div>",f.size){D=["KB","MB","GB","TB"],C=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.size))/Math.log(1024)),10))?`${f.size} ${D[h]}`:`${(f.size/1024**h).toFixed(2)} ${D[h]}`;a+=addDetailItem("Capacitat",EscapeHtml(C),i)}if(f.available){if(0==Math.abs(f.available))C="0 KB";else D=["KB","MB","GB","TB"],C=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.available))/Math.log(1024)),10))?`${f.available} ${D[h]}`:`${(f.available/1024**h).toFixed(2)} ${D[h]}`;a+=addDetailItem("Capacitat restant",EscapeHtml(C),i)}if(f.type)a+=addDetailItem("Sistema de fitxers",(""!=(M=1==f.removable?"Extraïble":1==f.cdrom?"CD ROM":"")?M+" / ":"")+("Unknown"==f.type?"Desconegut":EscapeHtml(f.type)),i);a+="</div>"}}""!=a&&o.push({name:"Volums d'emmagatzematge",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}if(t.darwin&&t.darwin.volumes){a="";for(var d in t.darwin.volumes){if(!(f=t.darwin.volumes[d]).mount_point.startsWith("/var/lib/docker/overlay2")){var M;if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+f.mount_point+"</b></div>",f.size&&(a+=addDetailItem("Capacitat",EscapeHtml(f.size),i)),f.available&&(a+=addDetailItem("Capacitat restant",EscapeHtml(f.available),i)),f.type)a+=addDetailItem("Sistema de fitxers",(""!=(M=1==f.removable?"Extraïble":1==f.cdrom?"CD ROM":"")?M+" / ":"")+("Unknown"==f.type?"Desconegut":EscapeHtml(f.type)),i);a+="</div>"}}""!=a&&o.push({name:"Volums d'emmagatzematge",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}a="";for(var d in o)null==o[d].img?a+="<div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+o[d].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+o[d].html+"</div>":(a+="<table style=width:100%><tr>",a+="<td style=width:32px;vertical-align:top><img src=images/details/"+o[d].img+'32.png srcset="images/details/'+o[d].img+'64.png 2x" border=0 width=32 /></td>',a+="<td><div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+o[d].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+o[d].html+"</div></td>",a+="</tr></table>");""==a?QH("p10detailshtml","No hi ha informació per a aquest dispositiu."):QH("p10detailshtml",a)}}function deviceDetailsShowBitlockerInfo(e,t,n){if(xxdialogMode)return!1;var o="<div><p>Identificador</p><p style=user-select:text;font-weight:bold>"+(t?decodeURIComponent(t):"Desconegut")+"</p>";o+="<p>Contrasenya de recuperació</p><p style=user-select:text;font-weight:bold>"+(n?decodeURIComponent(n):"Desconegut")+"</p></div>",setDialogMode(2,decodeURIComponent(e)+": Informació de BitLocker",1,null,o,"")}function insertTextAtCursor(e,t){if(document.selection)e.focus(),sel=document.selection.createRange(),sel.text=t;else if(e.selectionStart||"0"==e.selectionStart){var n=e.selectionStart,o=e.selectionEnd;e.value=e.value.substring(0,n)+t+e.value.substring(o,e.value.length),e.setSelectionRange(o+1,o+1)}else e.value+=myValue}var consoleServerText="";function setupConsole(){var e=consoleNode==currentNode;meshes[(consoleNode=currentNode).meshid];if(16&GetNodeRights(currentNode)){null==consoleNode.consoleText&&(consoleNode.consoleText=""),0==e&&(QH("p15agentConsoleText",consoleNode.consoleText),Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight);1&consoleNode.conn||consoleNode.conn;var t=1&consoleNode.conn?"L'agent està en línia":"L'agent està fora de línia";16&consoleNode.conn&&(t+=", MQTT està en línia"),QH("p15statetext",t),QE("p15uploadCore",!!(1&consoleNode.conn)),QV("p15outputselecttd",!!(16&consoleNode.conn)||1==currentNode.pmt&&!!(2&features2)),QV("p15outputselect2",!!(16&consoleNode.conn)),QV("p15outputselect3",1==currentNode.pmt&&!!(2&features2));var n=Q("p15outputselect").value;16&consoleNode.conn||2!=n||(n=1,Q("p15outputselect").value=1),1==currentNode.pmt&&2&features2||3!=n||(n=1,Q("p15outputselect").value=1);var o=!1;1&consoleNode.conn&&1==n&&(o=!0),16&consoleNode.conn&&2==n&&(o=!0),1==currentNode.pmt&&2&features2&&3==n&&(o=!0),QE("p15consoleText",o)}else QH("p15statetext","Accés denegat"),QE("p15consoleText",!1),QE("p15uploadCore",!1),QV("p15outputselecttd",!1);QV("devListToolbarViewIcons3",!!(1&consoleNode.conn))}function p15consoleClear(){QH("p15agentConsoleText",""),Q("id_p15consoleClear").blur(),consoleNode.consoleText=""}var currentMesh,consoleHistory=[];function p15consoleSend(e){if(!e||13==e.keyCode){var t=Q("p15consoleText").value,n="<div style=color:green>&gt; "+EscapeHtml(t)+"<br/></div>";if(16&consoleNode.conn&&2==Q("p15outputselect").value?(n="<div style=color:orange>MQTT&gt; "+EscapeHtml(t)+"<br/></div>",consoleNode.consoleText+=n,meshserver.send({action:"sendmqttmsg",topic:"console",nodeids:[consoleNode._id],msg:t})):1==consoleNode.pmt&&3==Q("p15outputselect").value&&2&features2?(n="<div style=color:violet>EMPUJAR&gt; "+EscapeHtml(t)+"<br/></div>",consoleNode.consoleText+=n,meshserver.send({action:"pushconsole",nodeid:consoleNode._id,console:t})):1&consoleNode.conn&&(consoleNode.consoleText+=n,meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:t})),Q("p15agentConsoleText").innerHTML+=n,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight,Q("p15consoleText").value="",t.length>0){var o=consoleHistory.indexOf(t);o>=0&&consoleHistory.splice(o,1),consoleHistory.unshift(t),consoleHistory.splice(10)}}}function p15consoleReceive(e,t,n){"serverconsole"===e?(t="<div>"+EscapeHtml(t)+"</div>",consoleServerText+=t,"server"==consoleNode&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight)):(t="MQTT"==n?"<div style=color:red>MQTT&gt; "+EscapeHtml(t)+"<br/></div>":"<div>"+EscapeHtml(t)+"</div>",null==e.consoleText?e.consoleText=t:e.consoleText+=t,consoleNode==e&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight))}function p15downloadConsoleText(){saveAs(new Blob([Q("p15agentConsoleText").innerText],{type:"application/octet-stream"}),"console.txt")}function p15uploadCore(e){if(!xxdialogMode)if(1==e.shiftKey)meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"});else if(1==e.altKey)meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"});else if(1==e.ctrlKey)p15uploadCore2();else{setDialogMode(2,"Realitza l'acció de l'agent",3,p15uploadCoreEx,addHtmlValue("Acció","<select id=d3coreMode style=width:230px><option value=1>Carregueu el nucli del servidor predeterminat</option><option value=2>Netegeu el nucli</option><option value=3>Carregueu un fitxer bàsic</option><option value=4>Agent de desconnexió suau</option><option value=5>Agent de desconnexió dura</option><option value=6>Carregueu el nucli de recuperació</option><option value=7>Carregueu un nucli petit</option><option value=8>Restart agent service</option><option value=9>Força l'actualització de l'agent</option></select>"))}}function p15uploadCoreEx(){1==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"}):2==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"}):3==Q("d3coreMode").value?p15uploadCore2():4==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:1}):5==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:2}):6==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"recovery"}):7==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"tiny"}):8==Q("d3coreMode").value?meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:"service restart"}):9==Q("d3coreMode").value&&meshserver.send({action:"updateAgents",nodeids:[consoleNode._id]})}function p15uploadCore2(){xxdialogMode||(Q("d3localmodeform").action="uploadmeshcorefile.ashx",Q("d3auth").value=authCookie,Q("d3attrib").value=currentNode._id,setDialogMode(4,"Carregueu Mesh Agent Core",3,p15uploadCoreEx2),d3init())}function p15uploadCoreEx2(){if(1==Q("d3uploadMode").value)Q("d3submit").click();else{var e=d3getFileSel();1==e.length&&meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"custom",path:d3filetreelocation.join("/")+"/"+e[0]})}}function p20updateMesh(){if(null!=currentMesh){QH("p20meshName",EscapeHtml(currentMesh.name));var e=format("Desconegut #{0}",currentMesh.mtype),t=GetMeshRights(currentMesh);1==currentMesh.mtype&&(e="Només Intel&reg; AMT, sense agent"),2==currentMesh.mtype&&(e="Gestionat mitjançant un agent de programari"),3==currentMesh.mtype&&(e=null==currentMesh.relayid?"Dispositius locals, sense agent":"No s'ha retransmès cap dispositiu d'agent a través de l'agent"),4==currentMesh.mtype&&(e=null==currentMesh.relayid?"Dispositiu IP-KVM":"Dispositiu IP-KVM retransmès a través de l'agent",1==currentMesh.kvm.model&&(e+=", Raritan KX III"));var n="";if(n+=addHtmlValue("Nom",addLinkConditional(EscapeHtml(currentMesh.name),"p20editmesh(1)",!!(1&t))),n+=addHtmlValue("Descripció",addLinkConditional(currentMesh.desc&&""!=currentMesh.desc?EscapeHtml(currentMesh.desc):"<i>Cap</i>","p20editmesh(2)",!!(1&t))),n+=addHtmlValue("Tipus",e),(3==currentMesh.mtype||4==currentMesh.mtype)&&null!=currentMesh.relayid){var o="<i>Desconegut</i>",i=getNodeFromId(currentMesh.relayid);null!=i&&(o=EscapeHtml(i.name)),n+=addHtmlValue("Dispositiu de relé",addLinkConditional(o,"p20editmeshrelay()",!!(1&t)))}4==currentMesh.mtype&&(n+=addHtmlValue("Nom d'amfitrió",currentMesh.kvm.host),n+=addHtmlValue("Nom d'usuari",currentMesh.kvm.user)),n+='<br><input type=button value="Notes" onclick=showNotes(false,"'+encodeURIComponent(currentMesh._id)+'") />',n+="<br style=clear:both><br>";var a=currentMesh.links[userinfo._id];a&&2&a.rights&&(n+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20showAddMeshUserDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Afegeix usuari</a></div>"),navigator.userAgent.toLowerCase().indexOf("android")>=0&&(n+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20installAndroidDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Instal·leu en aquest dispositiu</a></div>"),n+='<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:left;width:430px>Autoritzacions d\'usuari</th></tr>';var s=1,r=[];for(var l in currentMesh.links){var d=l.split("/")[2];currentMesh.links[l].name&&(d=currentMesh.links[l].name),l==userinfo._id&&(d=userinfo.name),null!=usergroups&&null!=usergroups[l]&&(d=usergroups[l].name),r.push({id:l,name:d,rights:currentMesh.links[l].rights})}for(var l in r.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0}),r){var u="",c="Drets Parcials",p=r[l].rights,m=2;4294967295==p?c="Administrador total":0==p&&(c="Sense Drets"),l!=userinfo._id&&(4294967295==t||2&t)&&(u='<a onclick=p20deleteUser(event,"'+encodeURIComponent(r[l].id)+'") style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),r[l].id.startsWith("ugrp/")&&(m=4),n+='<tr onclick=p20viewuser("'+encodeURIComponent(r[l].id)+'") style=height:32px;cursor:pointer'+(s%2==0?";background-color:#DDD":"")+"><td>",n+="<div style=float:right>"+u+"</div><div style=float:right;padding-right:4px>"+c+"</div><div class=m"+m+"></div><div>&nbsp;"+EscapeHtml(decodeURIComponent(r[l].name))+"<div></div></div>",n+="</td></tr>",++s}n+="</tbody></table>",4294967295==t&&(n+="<div style=font-size:small;text-align:right;margin-top:6px><span><a onclick=p20showDeleteMeshDialog() style=cursor:pointer>Suprimeix el grup</a></span></div>"),QH("p20info",n)}}function p20showDeleteMeshDialog(){if(xxdialogMode)return!1;var e=format("Esteu segur que voleu suprimir el grup {0}? En suprimir el grup de dispositius, també se suprimirà tota la informació sobre els dispositius d'aquest grup.",EscapeHtml(currentMesh.name))+"<br /><br />";return setDialogMode(2,"Suprimeix el grup",3,p20showDeleteMeshDialogEx,e+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confirmeu</label>"),p20validateDeleteMeshDialog(),!1}function p20validateDeleteMeshDialog(){QE("idx_dlgOkButton",Q("p20check").checked)}function p20showDeleteMeshDialogEx(e,t){meshserver.send({action:"deletemesh",meshid:currentMesh._id,meshname:currentMesh.name})}function p20editmeshrelay(){if(!xxdialogMode){var e=[];if(!(2&features))for(var t in nodes){var n=nodes[t];2==n.mtype&&null!=n.agent&&4294967295==GetNodeRights(n)&&e.push(n)}if(e.sort(nameSort),0==e.length)setDialogMode(2,"Edita el grup de dispositius",1,null,"No hi ha cap dispositiu de relé disponible.");else{var o=[];for(var t in e)o.push('<option value="'+e[t]._id+'"'+(currentMesh.relayid==e[t]._id?" selected":"")+">"+EscapeHtml(e[t].name)+"</option>");setDialogMode(2,"Edita el grup de dispositius",3,p20editmeshrelayEx,addHtmlValue("Dispositiu de relé","<div style=width:170px><select id=d2devrelay style=width:100%>"+o.join("")+"</select></div>"))}}}function p20editmeshrelayEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,relayid:Q("d2devrelay").value})}function p20editmesh(e){if(!xxdialogMode){var t=addHtmlValue("Nom","<input id=dp20meshname style=width:170px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate() />");setDialogMode(2,"Edita el grup de dispositius",3,p20editmeshEx,t+=addHtmlValue("Descripció","<input id=dp20meshdesc style=width:170px maxlength=1024 onkeyup=p20editmeshValidate() />")),Q("dp20meshname").value=currentMesh.name,currentMesh.desc&&(Q("dp20meshdesc").value=currentMesh.desc),p20editmeshValidate(),2==e?Q("dp20meshdesc").focus():Q("dp20meshname").focus()}}function p20editmeshEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,meshname:Q("dp20meshname").value,desc:Q("dp20meshdesc").value})}function p20editmeshValidate(){QE("idx_dlgOkButton",Q("dp20meshname").value.length>0)}function p20installAndroidDialog(){if(!xxdialogMode){var e="<div style=text-align:center><p>Instal·leu l'agent MeshCentral al vostre dispositiu Android. Un cop instal·lat, feu clic a l'enllaç de vinculació per connectar el vostre dispositiu a aquest servidor.</p>";e+='<p><a rel="noreferrer noopener" target=_blank href="https://play.google.com/store/apps/details?id=com.meshcentral.agent2"><img style=cursor:pointer src="images/google-play-140.png" width=140 srcset="images/google-play-280.png 2x" /></a></p>',e+='<p><a rel="noreferrer noopener" target=_blank href="https://www.amazon.co.uk/gp/product/B097Z4Q7SK/"><img style=cursor:pointer src="images/amazon-appstore-140.png"  width=140 srcset="images/amazon-appstore-280.png 2x" /></a></p>',e+='<p><a rel="noreferrer noopener" target=_blank href="meshagents?id=14'+(urlargs.key?"&key="+urlargs.key:"")+'" title="Versió APK de MeshAgent">APK d\'Android</a></p>',setDialogMode(2,"Instal·lació d'Android",1,null,e+='<p><a href="'+serverinfo.magenturl+","+serverinfo.agentCertHash+","+currentMesh._id.split("/")[2]+'"><b>Enllaç de vinculació del dispositiu</b></a></p></div>')}}function p20showAddMeshUserDialog(){if(!xxdialogMode){var e=addHtmlValue("User ID","<input id=dp20username style=width:170px maxlength=256 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() />");e+='<div style="border:2px groove gray;background-color:white;max-height:120px;overflow-y:scroll">',e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Administrador total</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Edita el grup de dispositius</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Gestioneu els usuaris del grup de dispositius</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Gestiona els ordinadors del grup de dispositius</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Control remot</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Només visualització remota</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Només entrada limitada</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>Sense accés al terminal</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>Sense accés a fitxers</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>No Intel&reg; AMT</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Consola de l'agent de malla</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>Fitxers del servidor</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Dispositius d'activació</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Edita les notes del dispositiu</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Mostra només esdeveniments propis</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20chatnotify>Xateja i notifica</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20uninstall>Desinstal·leu l'agent</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20commands>Comandaments a distància</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20resetoff>Restablir / Apagar</label><br>",setDialogMode(2,"Afegeix usuari al grup de dispositius",3,p20showAddMeshUserDialogEx,e+="</div>"),p20validateAddMeshUserDialog(),Q("dp20username").focus()}}function p20validateAddMeshUserDialog(){var e=GetMeshRights(currentMesh),t=!Q("p20fulladmin").checked;QE("p20fulladmin",4294967295==e),QE("p20editmesh",t&&4294967295==e),QE("p20manageusers",t),QE("p20managecomputers",t),QE("p20remotecontrol",t),QE("p20meshagentconsole",t),QE("p20meshserverfiles",t),QE("p20wakedevices",t),QE("p20editnotes",t),QE("p20limitevents",t),QE("p20remoteview",t&&Q("p20remotecontrol").checked),QE("p20remotelimitedinput",t&&Q("p20remotecontrol").checked&&!Q("p20remoteview").checked),QE("p20noterminal",t&&Q("p20remotecontrol").checked),QE("p20nofiles",t&&Q("p20remotecontrol").checked),QE("p20noamt",t&&Q("p20remotecontrol").checked),QE("p20chatnotify",t),QE("p20uninstall",t),QE("p20commands",t),QE("p20resetoff",t)}function p20showAddMeshUserDialogEx(){var e=0;1==Q("p20fulladmin").checked?e=4294967295:(1==Q("p20editmesh").checked&&(e+=1),1==Q("p20manageusers").checked&&(e+=2),1==Q("p20managecomputers").checked&&(e+=4),1==Q("p20remotecontrol").checked&&(e+=8),1==Q("p20meshagentconsole").checked&&(e+=16),1==Q("p20meshserverfiles").checked&&(e+=32),1==Q("p20wakedevices").checked&&(e+=64),1==Q("p20editnotes").checked&&(e+=128),1==Q("p20remoteview").checked&&(e+=256),1==Q("p20noterminal").checked&&(e+=512),1==Q("p20nofiles").checked&&(e+=1024),1==Q("p20noamt").checked&&(e+=2048),1==Q("p20remotelimitedinput").checked&&(e+=4096),1==Q("p20limitevents").checked&&(e+=8192),1==Q("p20chatnotify").checked&&(e+=16384),1==Q("p20uninstall").checked&&(e+=32768),1==Q("p20commands").checked&&(e+=131072),1==Q("p20resetoff").checked&&(e+=262144));var t=Q("dp20username").value.split(","),n=[];for(var o in t)n.push(t[o].trim());meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:n,meshadmin:e})}function p20viewuser(e){if(!xxdialogMode){e=decodeURIComponent(e);var t=[],n=GetMeshRights(currentMesh),o=GetMeshRights(currentMesh,e);4294967295==o?t.push("Administrador total"):(1&o&&t.push("Edita el grup de dispositius"),2&o&&t.push("Gestioneu els usuaris del grup de dispositius"),4&o&&t.push("Gestiona els ordinadors del grup de dispositius"),8&o&&t.push("Control remot"),16&o&&t.push("Consola de l'agent"),32&o&&t.push("Fitxers del servidor"),64&o&&t.push("Dispositius d'activació"),128&o&&t.push("Edita les notes"),256&o&&t.push("Només visualització remota"),512&o&&t.push("Sense terminal"),1024&o&&t.push("No hi ha fitxers"),2048&o&&t.push("No Intel&reg; AMT"),8&o&&4096&o&&!(256&o)&&t.push("Entrada limitada"),8192&o&&t.push("Només esdeveniments propis"),16384&o&&t.push("Xateja i notifica"),32768&o&&t.push("Desinstal·la"),131072&o&&t.push("Ordres"),262144&o&&t.push("Restablir/Desactivar")),0==t.length&&t.push("Sense Drets");var i=1,a=e.split("/")[2];currentMesh.links[e].name&&(a=currentMesh.links[e].name);var s=addHtmlValue("Nom d'usuari",EscapeHtml(a));a!=e.split("/")[2]&&(s+=addHtmlValue("ID d'usuari",EscapeHtml(e.split("/")[2]))),s+=addHtmlValue("Permisos",t.join(",")),userinfo._id!=e&&(4294967295==n||2&n&&4294967295!=o)&&(i+=4),setDialogMode(2,"Usuari del grup de dispositius",i,p20viewuserEx,s,e)}}function p20viewuserEx(e,t){if(2==e){var n=t.split("/")[2];users&&users[t]&&(n=users[t].name),usergroups&&usergroups[t]&&(n=usergroups[t].name),userinfo._id==t&&(n=userinfo.name),setDialogMode(2,"Usuari de malla remot",3,p20viewuserEx2,format("Confirmeu l'eliminació de l'usuari {0}?",n),t)}}function p20deleteUser(e,t){haltEvent(e),p20viewuserEx(2,decodeURIComponent(t))}function p20viewuserEx2(e,t){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:t})}var notifications=[];function clickNotificationIcon(e){1==e?QV("notifiyBox",!0):0==e?QV("notifiyBox",!1):QV("notifiyBox","none"==QS("notifiyBox").display),drawNotifications()}function setNotificationCount(e){parseInt(Q("notificationCount").innerHTML)!=e&&(QH("notificationCount2",e),QV("notificationCount",e>0))}function drawNotifications(){var e=getstore("notifications",0),t="";if(0==notifications.length)t="<div style=margin:5px>Actualment no hi ha notificacions</div>";else for(var n in notifications){var o=notifications[n],i="",a=new Date(o.time),s=0;if(null!=o.title&&(i="<b>"+EscapeHtml(o.title)+"</b>: "),null!=o.nodeid){var r=getNodeFromId(o.nodeid);null!=r&&(s=r.icon,i=16&e?"<b>"+EscapeHtml(meshes[r.meshid].name)+" / "+EscapeHtml(r.name)+"</b>: ":"<b>"+EscapeHtml(r.name)+"</b>: ")}t+='<div title="'+format("Va tenir lloc a les {0}",printDateTime(a))+'" id="notifyx'+o.id+'" class=notification style="cursor:pointer;border-top:1px solid '+(""==t?"transparent":"orange")+'">',s&&(t+="<div class=j"+s+' onclick="notificationSelected('+o.id+')" style=margin:5px;float:left></div>'),t+='<div onclick="notificationDelete('+o.id+')" class=unselectable title="Esborra aquesta notificació" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+o.id+')" style=margin:5px>'+i+EscapeHtml(o.text)+"</div><div style=margin-left:5px;margin-bottom:5px;color:gray;font-size:10px>"+printDateTime(a)+"</div></div>"}var l="";notifications.length>1&&(l='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Esborra-ho tot</div>'),QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+t+l+"</div>")}function notificationSelected(e,t){var n=-1;for(var o in notifications)notifications[o].id==e&&(n=o);-1!=n&&(notificationSelectedEx(notifications[n],e),t&&notifications[n]&&(notifications[n].notification&&(notifications[n].notification.close(),delete notifications[n].notification),notificationDelete(e)))}function notificationSelectedEx(e,t){null!=e.nodeid?"desktop"==e.tag?gotoDevice(e.nodeid,12):"terminal"==e.tag?gotoDevice(e.nodeid,11):"files"==e.tag?gotoDevice(e.nodeid,13):"intelamt"==e.tag?gotoDevice(e.nodeid,14):"console"==e.tag?gotoDevice(e.nodeid,15):gotoDevice(e.nodeid,10):"backupcodes"!=e.tag||xxdialogMode?null!=e.tag&&e.tag.startsWith("meshmessenger/")?(safeNewWindow("/messenger?id="+e.tag+"&title="+encodeURIComponentEx(e.username),e.tag.split("/")[2]),notificationDelete(t)):null!=e.url&&(safeNewWindow(e.url),notificationDelete(t)):(account_manageOtp(0),notificationDelete(t))}function notificationDelete(e){var t=-1,n=Q("notifyx"+e);if(null!=n){for(var o in notifications)notifications[o].id==e&&(t=o);if(-1!=t&&(meshserver.send({action:"intersession",subaction:"removeNotify",id:e}),notifications[t].notification&&(notifications[t].notification.close(),delete notifications[t].notification),notifications.splice(t,1),n.parentNode.removeChild(n),setNotificationCount(notifications.length),0==notifications.length&&QV("notifiyBox",!1),1==notifications.length&&QV("notifyRemoveAll",!1),notifications.length>0&&0==t)){var i=notifications[0];QS("notifyx"+i.id)["border-top"]="1px solid transparent"}}}function addNotification(e){if("number"==typeof e.titleid)try{e.title=[null,"Compte nou","Límit del servidor","Avís de seguretat","Configuració del compte","Grup de dispositius","Codis d'invitació"][e.titleid]}catch(e){}if("number"==typeof e.msgid)try{e.text=[null,"Permís denegat","Nom d'usuari no vàlid","Contrasenya invàlida","Email invàlid","Domini no vàlid","Permisos de lloc no vàlids","L'usuari ja existeix","No es pot afegir usuari en aquest mode","Excepció de validació","S'ha arribat al límit del compte.","Sol·licitud de xat, feu clic aquí per acceptar.","Hi ha hagut {0} intents fallits d'inici de sessió en aquest compte des de l'última sessió.","No s'ha pogut canviar l'adreça electrònica, un altre compte ja utilitza: {0}.","Email enviat.","No s'ha trobat l'usuari {0}.","No s'han trobat usuaris {0}.","Error, no es pot canviar a la contrasenya utilitzada anteriorment.","Error, no es pot canviar a la contrasenya d'ús habitual.","Error, la contrasenya no s'ha canviat.","La contrasenya ha canviat.","La contrasenya actual no és correcta.","Error, el codi d'invitació \"{0}\" ja s'utilitza.","La passarel·la d'SMS no està activada","Sense drets de gestió d'usuaris","Missatge SMS no vàlid","No hi ha cap número de telèfon per a aquest usuari","SMS enviat correctament.","Error d'SMS","Error d'SMS: {0}",'El domini de correu electrònic "{0}" no està permès. Només es permet ({1}).'][e.msgid],Array.isArray(e.args)&&(e.text=format(e.text,e.args[0],e.args[1],e.args[2],e.args[3],e.args[4],e.args[5]))}catch(e){}null==e.time&&(e.time=Date.now()),null==e.id&&(e.id=Math.random()),notifications.unshift(e),setNotificationCount(notifications.length),clickNotificationIcon(!0);var t=getstore("notifications",0);1&t&&Q("chimes").play();var n=null;if(Notification&&"granted"==Notification.permission){var o=e.text.split("&reg;").join("").split("<b>").join("").split("</b>").join("").split("<br />").join("\r\n");if(e.nodeid){var i=getNodeFromId(e.nodeid);i&&(n=16&t?new Notification(decodeURIComponent("{{{extitle}}}")+" - "+meshes[i.meshid].name+" - "+i.name,{tag:e.tag,body:o,icon:"/images/notify/icons128-"+i.icon+".png"}):new Notification(decodeURIComponent("{{{extitle}}}")+" - "+i.name,{tag:e.tag,body:o,icon:"/images/notify/icons128-"+i.icon+".png"}))}else{null==e.icon&&(e.icon=0);var a=e.title;a=null==a?"":" - "+e.title,n=new Notification(decodeURIComponent("{{{extitle}}}")+a,{tag:e.tag,body:o,icon:"/images/notify/icons128-"+e.icon+".png"})}n.id=e.id,n.xtag=e.tag,n.url=e.url,n.nodeid=e.nodeid,n.username=e.username,n.onclick=function(e){notificationSelected(e.target.id,!0)},e.notification=n}if("number"==typeof e.maxtime&&e.maxtime>0){var s=function e(){notificationDelete(e.xid)};s.xid=e.id,setTimeout(s,1e3*e.maxtime)}}function deleteAllNotifications(){notifications=[],setNotificationCount(0),drawNotifications(),QV("notifiyBox",!1)}var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,xxcurrentView=-1;function go(e){if(setSessionActivity(),!xxdialogMode&&xxcurrentView!=e){updateFooterMenu(),setDialogMode(0);for(var t=0;t<32;t++)QV("p"+t,t==e);xxcurrentView=e,updateCurrentUrl()}}function updateCurrentUrl(){if(!(268435456&features)&&xxcurrentView>0){var e="";for(var t in xxcurrentView>=10&&xxcurrentView<=19?null!=currentNode&&(e="?viewmode="+xxcurrentView+"&gotonode="+currentNode._id.split("/")[2]+(currentDevicePanel>0?"&panel="+currentDevicePanel:"")):xxcurrentView>=20&&xxcurrentView<=29?null!=currentMesh&&(e="?viewmode="+xxcurrentView+"&gotomesh="+currentMesh._id.split("/")[2]):xxcurrentView>1&&(e="?viewmode="+xxcurrentView),urlargs)e+=(""==e?"?":"&")+t+"="+urlargs[t];try{window.history.replaceState({},document.title,window.location.pathname+e)}catch(e){}}}function setDialogMode(e,t,n,o,i,a){setSessionActivity(),xxdialogMode=e,xxdialogFunc=o,xxdialogButtons=n,xxdialogTag=a,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&n),QV("idx_dlgCancelButton",2&n),QV("id_dialogclose",2&n||8&n),QV("idx_dlgDeleteButton",4&n),QV("idx_dlgButtonBar",7&n),t&&QH("id_dialogtitle",t);for(var s=1;s<24;s++)QV("dialog"+s,s==e);QV("dialog",e),i&&(2==e?QH("id_dialogOptions",i):QH("id_dialogMessage",i))}function dialogclose(e){setSessionActivity();var t=xxdialogFunc,n=xxdialogButtons,o=xxdialogTag;setDialogMode(),(8&n||e)&&t&&t(e,o)}function removeUserRights(e,t){if(t!=userinfo._id||null==userinfo.removeRights)return e;var n=0,o=0;return 8&userinfo.removeRights&&(o+=8),65536&userinfo.removeRights&&(n+=65536),256&userinfo.removeRights&&(n+=256),512&userinfo.removeRights&&(n+=512),1024&userinfo.removeRights&&(n+=1024),16&userinfo.removeRights&&(o+=16),32768&userinfo.removeRights&&(o+=32768),131072&userinfo.removeRights&&(o+=131072),64&userinfo.removeRights&&(o+=64),262144&userinfo.removeRights&&(o+=262144),4294967295!=e?(e|=n,e&=4294967295-o):(e=2015471,e|=n,e&=4294967295-o),e}function GetMeshRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),"string"==typeof e&&(e=meshes[e]),null==e||null==e.links)return 0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return removeUserRights(4294967295,t);var n=0,o=e.links[t];if(null!=o){if(4294967295==o.rights)return removeUserRights(4294967295,t);n=o.rights}var i=null;if(t==userinfo._id?i=userinfo:null!=users&&(i=users[t]),null!=i)for(var a in i.links)if(a.startsWith("ugrp/")&&null!=(o=e.links[a])){if(4294967295==o.rights)return removeUserRights(4294967295,t);n|=o.rights}return removeUserRights(n,t)}function IsMeshViewable(e,t){if(null==e)return!1;if(null==t&&(t=userinfo._id),"string"==typeof e&&(e=meshes[e]),null==e||null==e.links)return!1;if(null!=e.links[t])return!0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return!0;var n=null;if(t==userinfo._id?n=userinfo:null!=users&&(n=users[t]),null!=n)for(var o in n.links)if(o.startsWith("ugrp/")&&null!=e.links[o])return!0;return!1}function GetNodeRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),"string"==typeof e&&null==(e=getNodeFromId(e)))return 0;var n=GetMeshRights(e.meshid,t);if(4294967295==n)return removeUserRights(n,t);if(null!=e.links&&null!=e.links[t]&&(n|=e.links[t].rights),null!=e.links&&null!=userinfo.links)for(var o in e.links)o.startsWith("ugrp/")&&null!=userinfo.links[o]&&null!=e.links[o].rights&&(n|=e.links[o].rights);return removeUserRights(n,t)}function IsNodeViewable(e,t){if(null==e)return!1;if(null==t&&(t=userinfo._id),"string"==typeof e&&null==(e=getNodeFromId(e)))return!1;if(IsMeshViewable(e.meshid,t))return!0;if(null!=e.links&&null!=e.links[t])return!0;if(null!=e.links&&null!=userinfo.links)for(var n in e.links)if(n.startsWith("ugrp/")&&null!=userinfo.links[n]&&null!=e.links[n].rights)return!0;return!1}function nameSort(e,t){var n=e.name.toLowerCase(),o=t.name.toLowerCase();return sortCollator.compare(n,o)}function getNodeAmtVersion(e){if(null==e||null==e.intelamt||"string"!=typeof e.intelamt.ver)return 0;var t=e.intelamt.ver.split(".");return t.length<2?0:parseInt(t[0])+parseInt(t[1])/100}function putstore(e,t){try{if("undefined"==typeof localStorage||localStorage.getItem(e)==t)return;null==t?localStorage.removeItem(e):localStorage.setItem(e,t)}catch(e){}if("_"!=e[0]){for(var n={},o=0,i=localStorage.length;o<i;++o){var a=localStorage.key(o);"_"!=a[0]&&(n[a]=localStorage.getItem(a))}meshserver.send({action:"userWebState",state:JSON.stringify(n)})}}function getstore(e,t){try{if("undefined"==typeof localStorage)return t;var n=localStorage.getItem(e);return null==n||null==n?t:n}catch(e){return t}}function center(){xtermfit&&xtermfit.fit(),onDevicesScroll(),QS("dialog").left=(getDocWidth()-300)/2+"px",deskAdjust(),null!=currentNode&&drawDeviceTimeline()}function messagebox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e,1)}function statusbox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e)}function getDocWidth(){return window.innerWidth?window.innerWidth:document.documentElement&&document.documentElement.clientWidth&&0!=document.documentElement.clientWidth?document.documentElement.clientWidth:document.getElementsByTagName("body")[0].clientWidth}function haltEvent(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1}function haltReturn(e){13==e.keyCode&&haltEvent(e)}function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function reload(){window.location.href=window.location.href}function getNodeFromId(e){for(var t in nodes)if(nodes[t]._id==e)return nodes[t];return null}function addHtmlValue(e,t){return"<table><td style=width:120px>"+e+"<td><b>"+t+"</b></table>"}function addHtmlValue2(e,t){return"<div><div style=display:inline-block;float:right>"+t+"</div><div style=display:inline-block>"+e+"</div></div>"}function addHtmlValue4(e,t){return"<table style=width:100%><td style=width:120px>"+e+"<td style=text-align:right><b>"+t+"</b></table>"}function addLink(e,t){return"<a style=cursor:pointer;text-decoration:none onclick='"+t+"'>&diams; "+e+"</a>"}function addLinkConditional(e,t,n){return n?addLink(e,t):e}function addKeyLink(e,t){return"<span tabindex=0 style=cursor:pointer;text-decoration:none onclick="+t+" onkeypress=\"if (event.key=='Enter') { "+t+' } ">'+e+" <img class=hoverButton src=images/key16.png></span>"}function addKeyLinkConditional(e,t,n){return n?"<span title='"+t+"'>"+e+" <img class=hoverButton src=images/key16.png></span>":e}function passwordcheck(e){return/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()]).{8,}/.test(e)}function getFileSizeStr(e){return"number"!=typeof e&&(e=0),1==e?"1 byte":format("{0} bytes",e)}function focusTextBox(e){setTimeout(function(){Q(e).selectionStart=Q(e).selectionEnd=65535,Q(e).focus()},0)}isFilenameValid=function(){var e=/^[^\\/:\*\?"<>\|]+$/,t=/^\./,n=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(o){return e.test(o)&&!t.test(o)&&!n.test(o)&&"."!=o[0]}}();function printDate(e){return e.toLocaleDateString(args.locale)}function printTime(e){return e.toLocaleTimeString(args.locale)}function printDateTime(e){return e.toLocaleString(args.locale)}function printTimer(e){return zeroPad(Math.floor(e/3600),2)+":"+zeroPad(Math.floor(e/60)%60,2)+":"+zeroPad(e%60,2)}function format(e){var t=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,n){return void 0!==t[n]?t[n]:e})}function nobreak(e){return e.split(" ").join("&nbsp;")}function getUserName(e){var t=e.split("/"),n=t[0]+"/"+t[1]+"/"+t[2],o="";if(4==t.length&&t[3].startsWith("guest:")&&(o=" - "+decode_utf8(atob(t[3].substring(6)))),users&&null!=users[n])return null!=users[n].realname?users[n].realname+o:users[n].name+o;if(currentNode&&currentNode.links&&currentNode.links[e]&&null!=currentNode.links[e].name)return currentNode.links[e].name+o;if(e==userinfo._id)return userinfo.name+o;if(nodes)for(var i in nodes)if(nodes[i].links)for(var a in nodes[i].links)if(nodes[i].links[a].name&&a==e)return nodes[i].links[a].name+o;if(meshes)for(var i in meshes)if(meshes[i].links)for(var a in meshes[i].links)if(meshes[i].links[a].name&&a==e)return meshes[i].links[a].name+o;return t[2]+o}function addDetailItem(e,t,n){return"<table style=width:100%><td>"+nobreak(e)+"<td style=text-align:right>"+t+"</table>"}function isPrivateIP(e){return e.startsWith("10.")||e.startsWith("172.16.")||e.startsWith("192.168.")}function encodeURIComponentEx(e){return encodeURIComponent(e).replace(/'/g,"%27")}function safeNewWindow(e,t){var n=window.open(e,t,"noopener,noreferrer");n&&(n.opener=null)}function isWindowsNode(e){return 2==e.mtype&&null!=e.agent&&null!=e.agent.id&&[1,2,3,4,21,22,34,42,43].indexOf(e.agent.id)>=0}</script>