<!doctypehtml><html lang=pt dir=ltr xmlns=http://www.w3.org/1999/xhtml><meta http-equiv=X-UA-Compatible content="IE=edge"><meta http-equiv=Content-Type content="text/html;charset=utf-8"><meta name=viewport content="user-scalable=1,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name=apple-mobile-web-app-capable content=yes><meta name=format-detection content="telephone=no"><link type=image/x-icon href={{{domainurl}}}favicon.ico rel="shortcut icon"><link keeplink=1 type=text/css href=styles/style.css media=screen rel=stylesheet title=CSS><link type=text/css href=styles/ol.css media=screen rel=stylesheet title=CSS><link type=text/css href=styles/ol3-contextmenu.min.css media=screen rel=stylesheet title=CSS><link type=text/css href=styles/xterm.css media=screen rel=stylesheet title=CSS><script src=scripts/common-0.0.1{{{min}}}.js></script><script src=scripts/meshcentral{{{min}}}.js></script><script src=scripts/amt-0.2.0{{{min}}}.js></script><script src=scripts/amt-wsman-0.2.0{{{min}}}.js></script><script src=scripts/amt-desktop-0.0.2{{{min}}}.js></script><script src=scripts/amt-terminal-0.0.2{{{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 src=scripts/amt-redir-ws-0.1.0{{{min}}}.js></script><script src=scripts/amt-wsman-ws-0.2.0{{{min}}}.js></script><script src=scripts/agent-redir-ws-0.1.1{{{min}}}.js></script><script src=scripts/agent-redir-rtc-0.1.0{{{min}}}.js></script><script src=scripts/agent-desktop-0.0.2{{{min}}}.js></script><script src=scripts/qrcode.min.js></script><script src=scripts/xterm{{{min}}}.js></script><script src=scripts/xterm-addon-fit{{{min}}}.js></script><script keeplink=1 src=scripts/u2f-api{{{min}}}.js></script><script keeplink=1 src=scripts/charts{{{min}}}.js></script><script keeplink=1 src=scripts/filesaver.min.js></script><script keeplink=1 src=scripts/ol{{{min}}}.js></script><script keeplink=1 src=scripts/ol3-contextmenu{{{min}}}.js></script><title>{{{title}}}</title><body id=body oncontextmenu=handleContextMenu(event) style=display:none;min-width:495px onload='"undefined"!=typeof startup&&startup()'><div id=contextMenu class="contextMenu noselect"style=display:none><div id=cxinfo class=cmtext onclick=cmaction(1,event)><b>Informação</b></div><div id=cxdesktop class=cmtext onclick=cmaction(3,event)>Área de Trabalho</div><div id=cxterminal class=cmtext onclick=cmaction(2,event)>Terminal</div><div id=cxfiles class=cmtext onclick=cmaction(4,event)>Arquivos</div><div id=cxevents class=cmtext onclick=cmaction(5,event)>Eventos</div><div id=cxdetails class=cmtext onclick=cmaction(6,event)>Detalhes</div><div id=cxconsole class=cmtext onclick=cmaction(7,event)>Console</div><div id=cxplugins class=cmtext onclick=cmaction(8,event) style=display:none>Plugins</div><hr id=cxmgroupsplit><div id=cxmdesktop class=cmtext onclick=cmaction(9,event) style=display:none>Multi-Desktop</div></div><div id=meshContextMenu class="contextMenu noselect"style=display:none;min-width:0><div id=cxselectall class=cmtext onclick=cmmeshaction(1,event)>Selecionar tudo</div><div id=cxselectnone class=cmtext onclick=cmmeshaction(2,event)>Selecione nenhum</div></div><div id=termShellContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmtermaction(1,event)><b>Shell de administração</b></div><div class=cmtext onclick=cmtermaction(6,event)>Admin PowerShell</div><div class=cmtext onclick=cmtermaction(8,event)>Shell do Usuário</div><div class=cmtext onclick=cmtermaction(9,event)>Usuário PowerShell</div></div><div id=termShellContextMenuLinux class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmtermaction(1,event)><b>Root Shell</b></div><div class=cmtext onclick=cmtermaction(8,event)>Shell do Usuário</div><div class=cmtext onclick=cmtermaction(100,event)>Shell de Login</div></div><div id=deskConnectContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmdeskaction(1,event)>Ask Consent + Bar</div><div class=cmtext onclick=cmdeskaction(2,event)>Ask Consent</div><div class=cmtext onclick=cmdeskaction(3,event)>Privacy Bar</div></div><div id=altPortContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmaltportaction(1,event)>Porta alternativa</div></div><div id=rfbPortContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmrfbportaction(1,event)>Porta alternativa</div></div><div id=filesContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmfilesaction(1,event)>Renomear</div><div class=cmtext onclick=cmfilesaction(2,event)>Editar</div><div class=cmtext onclick=cmfilesaction(3,event)>Deletar</div></div><div id=deskPlayerContextMenu class="contextMenu noselect"style=display:none;min-width:0><div class=cmtext onclick=cmdeskplayeraction(1,event)>Open Player...</div></div><div id=container><div id=notifiyBox class=notifiyBox style=display:none></div><div id=masthead class=noselect><div style=float:left>{{{titlehtml}}}</div><div class=title>{{{title1}}}</div><div class=title2>{{{title2}}}</div><div style=float:right><div id=notificationCount onclick=clickNotificationIcon() class=unselectable style=display:none title="Clique para visualizar as notificações atuais">0</div></div><p id=logoutControl><span id=logoutControlSpan style=color:#fff></span><span id=idleTimeoutNotify style=color:#ff0></span></div><div id=page_leftbar><div style=height:16px></div><div id=LeftMenuMyDevices tabindex=0 class="lbbutton lbbuttonsel"title="Meus dispositivos"onclick=go(1,event) onkeypress='"Enter"==event.key&&go(1)'><div class=lb2></div></div><div id=LeftMenuMyAccount tabindex=0 class=lbbutton title="Minha conta"onclick=go(2,event) onkeypress='"Enter"==event.key&&go(2)'><div class=lb1></div></div><div id=LeftMenuMyEvents tabindex=0 class=lbbutton title="Meus Eventos"onclick=go(3,event) onkeypress='"Enter"==event.key&&go(3)'><div class=lb3></div></div><div id=LeftMenuMyFiles tabindex=0 class=lbbutton style=display:none title="Meus arquivos"onclick=go(5,event) onkeypress='"Enter"==event.key&&go(5)'><div class=lb4></div></div><div id=LeftMenuMyUsers tabindex=0 class=lbbutton style=display:none title="Meus usuários"onclick=go(4,event) onkeypress='"Enter"==event.key&&go(4)'><div class=lb5></div></div><div id=LeftMenuMyServer tabindex=0 class=lbbutton style=display:none title="Meu servidor"onclick=go(6,event) onkeypress='"Enter"==event.key&&go(6)'><div class=lb6></div></div></div><div id=topbar class=noselect><div><div style=position:relative><span id=logoutControlSpan2 style=color:#fff></span><div tabindex=0 id=uiMenuButton title="Seleção da interface do usuário"onclick=showUserInterfaceSelectMenu() onkeypress='"Enter"==event.key&&showUserInterfaceSelectMenu()'>♦<div id=uiMenu style=display:none><div tabindex=0 id=uiViewButton1 class=uiSelector onclick=userInterfaceSelectMenu(1) title="Interface da barra esquerda"onkeypress='"Enter"==event.key&&userInterfaceSelectMenu(1)'><div class=uiSelector1></div></div><div tabindex=0 id=uiViewButton2 class=uiSelector onclick=userInterfaceSelectMenu(2) title="Interface da barra superior"onkeypress='"Enter"==event.key&&userInterfaceSelectMenu(2)'><div class=uiSelector2></div></div><div tabindex=0 id=uiViewButton3 class=uiSelector onclick=userInterfaceSelectMenu(3) title="Interface de largura fixa"onkeypress='"Enter"==event.key&&userInterfaceSelectMenu(3)'><div class=uiSelector3></div></div><div tabindex=0 id=uiViewButton4 class=uiSelector onclick=toggleNightMode() title="Alternar modo noturno"onkeypress='"Enter"==event.key&&toggleNightMode()'><div class=uiSelector4></div></div><div tabindex=0 id=uiViewButton5 class=uiSelector onclick=toggleFooterBarMode() title="Alternar barra de rodapé"onkeypress='"Enter"==event.key&&toggleFooterBarMode()'><div class=uiSelector5></div></div></div></div><table id=MainMenuSpan cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=MainMenuMyDevices class="topbar_td style3x"onclick=go(1,event) onkeypress='"Enter"==event.key&&go(1)'>Meus dispositivos<td tabindex=0 id=MainMenuMyAccount class="topbar_td style3x"onclick=go(2,event) onkeypress='"Enter"==event.key&&go(2)'>Minha conta<td tabindex=0 id=MainMenuMyEvents class="topbar_td style3x"onclick=go(3,event) onkeypress='"Enter"==event.key&&go(3)'>Meus Eventos<td tabindex=0 id=MainMenuMyFiles class="topbar_td style3x"onclick=go(5,event) onkeypress='"Enter"==event.key&&go(5)'>Meus arquivos<td tabindex=0 id=MainMenuMyUsers class="topbar_td style3x"onclick=go(4,event) onkeypress='"Enter"==event.key&&go(4)'>Meus usuários<td tabindex=0 id=MainMenuMyServer class="topbar_td style3x"onclick=go(6,event) onkeypress='"Enter"==event.key&&go(6)'>Meu servidor<td class="topbar_td_end style3">&nbsp;</table><div id=MainSubMenuSpan style=display:none><table id=MainSubMenu cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=MainDev class="topbar_td style3x"onclick=go(10,event) onkeypress='"Enter"==event.key&&go(10)'>Geral<td tabindex=0 id=MainDevDesktop class="topbar_td style3x"onclick=go(11,event) onkeypress='"Enter"==event.key&&go(11)'>Área de Trabalho<td tabindex=0 id=MainDevTerminal class="topbar_td style3x"onclick=go(12,event) onkeypress='"Enter"==event.key&&go(12)'>Terminal<td tabindex=0 id=MainDevFiles class="topbar_td style3x"onclick=go(13,event) onkeypress='"Enter"==event.key&&go(13)'>Arquivos<td tabindex=0 id=MainDevEvents class="topbar_td style3x"onclick=go(16,event) onkeypress='"Enter"==event.key&&go(16)'>Eventos<td tabindex=0 id=MainDevInfo class="topbar_td style3x"onclick=go(17,event) onkeypress='"Enter"==event.key&&go(17)'>Detalhes<td tabindex=0 id=MainDevAmt class="topbar_td style3x"onclick=go(14,event) onkeypress='"Enter"==event.key&&go(14)'>Intel®AMT<td tabindex=0 id=MainDevConsole class="topbar_td style3x"onclick=go(15,event) onkeypress='"Enter"==event.key&&go(15)'>Console<td tabindex=0 id=MainDevPlugins class="topbar_td style3x"onclick=go(19,event) onkeypress='"Enter"==event.key&&go(19)'>Plugins<td class="topbar_td_end style3">&nbsp;</table></div><div id=MeshSubMenuSpan style=display:none><table id=MeshSubMenu cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=MeshGeneral class="topbar_td style3x"onclick=go(20,event) onkeypress='"Enter"==event.key&&go(20)'>Geral<td tabindex=0 id=MeshSummary class="topbar_td style3x"onclick=go(21,event) onkeypress='"Enter"==event.key&&go(21)'>Sumário<td class="topbar_td_end style3">&nbsp;</table></div><div id=UserSubMenuSpan style=display:none><table id=UserSubMenu cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=UserGeneral class="topbar_td style3x"onclick=go(30,event) onkeypress='"Enter"==event.key&&go(30)'>Geral<td tabindex=0 id=UserEvents class="topbar_td style3x"onclick=go(31,event) onkeypress='"Enter"==event.key&&go(31)'>Eventos<td class="topbar_td_end style3">&nbsp;</table></div><div id=UsersSubMenuSpan style=display:none><table id=UsersSubMenu cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=UsersGeneral class="topbar_td style3x"onclick=go(4,event) onkeypress='"Enter"==event.key&&go(4)'>Usuários<td tabindex=0 id=UsersGroups class="topbar_td style3x"onclick=go(50,event) onkeypress='"Enter"==event.key&&go(50)'>Grupos<td tabindex=0 id=UsersRecordings class="topbar_td style3x"onclick=go(52,event) onkeypress='"Enter"==event.key&&go(52)'>Recordings<td class="topbar_td_end style3">&nbsp;</table></div><div id=ServerSubMenuSpan style=display:none><table id=ServerSubMenu cellpadding=0 cellspacing=0 class=style1><tr><td tabindex=0 id=ServerGeneral class="topbar_td style3x"onclick=go(6,event) onkeypress='"Enter"==event.key&&go(6)'>Geral<td tabindex=0 id=ServerStats class="topbar_td style3x"onclick=go(40,event) onkeypress='"Enter"==event.key&&go(40)'>Estatísticas<td tabindex=0 id=ServerConsole class="topbar_td style3x"onclick=go(115,event) onkeypress='"Enter"==event.key&&go(115)'>Console<td tabindex=0 id=ServerTrace class="topbar_td style3x"onclick=go(41,event) onkeypress='"Enter"==event.key&&go(41)'>Vestígio<td tabindex=0 id=ServerPlugins class="topbar_td style3x"onclick=go(42,event) onkeypress='"Enter"==event.key&&go(42)'>Plugins<td class="topbar_td_end style3">&nbsp;</table></div><div id=UserDummyMenuSpan><table id=UserDummyMenu cellpadding=0 cellspacing=0 class=style1><tr><td class=style3>&nbsp;</table></div></div></div></div><div id=column_l><div id=p0 style=display:none><div id=p0message><span id=p0span>Servidor desconectado</span>,<href onclick=reload() style=cursor:pointer><u>clique para reconectar</u></href>.</div></div><div id=p1 style=display:none><div id=p1title><div style=display:none id=devListToolbarViewIcons><div tabindex=0 id=devViewButton1 class=viewSelector onclick=onDeviceViewChange(1) onkeypress='"Enter"==event.key&&onDeviceViewChange(1)'title=Colunas><div class=viewSelector2></div></div><div tabindex=0 id=devViewButton2 class=viewSelector onclick=onDeviceViewChange(2) onkeypress='"Enter"==event.key&&onDeviceViewChange(2)'title=Lista><div class=viewSelector1></div></div><div tabindex=0 id=devViewButton3 class=viewSelector onclick=onDeviceViewChange(3) onkeypress='"Enter"==event.key&&onDeviceViewChange(3)'title="Áreas de trabalho"><div class=viewSelector3></div></div><div tabindex=0 id=devViewButton4 class=viewSelector onclick=onDeviceViewChange(4) onkeypress='"Enter"==event.key&&onDeviceViewChange(4)'title=Mapa style=display:none><div class=viewSelector4></div></div></div><div><h1>Meus dispositivos</h1></div></div><table id=devListToolbarSpan class=noselect><tr><td class=h1><td id=devListToolbar class=style14 style=display:none>&nbsp;&nbsp;<input type=button id=SelectAllButton onclick=selectallButtonFunction() value="Selecionar tudo">&nbsp; <input type=button id=GroupActionButton disabled value="Ações do grupo"onclick=groupActionFunction()>&nbsp; <input id=SearchInput placeholder=Filtro onchange=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) autocomplete=off onfocus=onSearchFocus(1) onblur=onSearchFocus(0)>&nbsp; <label><input type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox()><span title="Mostrar o nome do sistema operacional dos dispositivos">Nome do SO</span></label> <label><input type=checkbox id=OnlineCheckBox onclick=onOnlineCheckBox(event)><span title="Only show devices that are online">Online</span></label> <span id=devCustomUIBar></span><td id=kvmListToolbar class=style14 style=display:none>&nbsp;&nbsp;<input type=button onclick=connectAllKvmFunction() value="Conectar todos">&nbsp; <input type=button onclick=disconnectAllKvmFunction() value="Desconectar todos">&nbsp; <label><input type=checkbox id=autoConnectDesktopCheckbox onclick=autoConnectDesktops(event) title="Conexão automática">Auto&nbsp;</label> <input type=button onclick=showMultiDesktopSettings() value=Configurações>&nbsp; <input id=KvmSearchInput placeholder=Filtro onchange=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) autocomplete=off onfocus=onSearchFocus(1) onblur=onSearchFocus(0)>&nbsp;<td id=devMapToolbar class=style14 style=display:none>&nbsp;&nbsp;<input id=mapSearchLocation placeholder="Pesquisar Localização"onfocus=onMapSearchFocus(1) onblur=onMapSearchFocus(0)> <input type=button value=Procurar title="Pesquisar localização"onclick=getSearchLocation()> <input type=button id=refreshmap title="Redefinir visualização de mapa"value=Redefinir onclick=refreshMap(!1,!0)><td class=auto-style1 style=height:100%><div style=display:none id=devListToolbarView>Visualizar <select id=viewselect onchange=onDeviceViewChange()><option value=1>Colunas<option value=2>Lista<option value=3>Áreas de trabalho<option id=viewselectmapoption value=4 style=display:none>Mapa</select></div><div style=display:none id=devListToolbarSort>Classificar <select id=sortselect onchange=masterUpdate(6)><option>Grupo<option>Ligar<option>Dispositivo<option>Tags</select> &nbsp;</div><div style=display:none id=devListToolbarSize>Tamanho <select id=sizeselect onchange=onDeviceViewChange()><option value=0>Pequeno<option value=1>Médio<option value=2>ampla</select> &nbsp;</div><td class=h2></table><div id=NoMeshesPanel style=display:none><table><tr><td valign=top style=width:50px><img src=images/info.png loading=lazy width=47 height=48><td><div id=getStarted1>Para começar, <a href=# onclick="return account_createMesh()"><strong>clique aqui para criar um grupo de dispositivos</strong></a>.</div><div id=getStarted2>Nenhum grupo de dispositivos.</div></table></div><div id=xdevices class=noselect style=display:none></div><div id=xdevicesmap style=display:none><div id=xmapSearchResultsDlg style=display:none><div id=xmapSearchResultsBck><div id=xmapSearchClose onclick=mapCloseSearchWindow()><b>X</b></div><div style=padding:5px>Resultados da Localização</div><div style=width:100%;margin:6px></div></div><div id=xmapSearchResults style=margin:6px></div></div></div><div id=xmap-info-window></div></div><div id=p2 style=display:none><div id=p2title><h1>Minha conta</h1></div><div id=p2info style=overflow-y:auto><img id=p2AccountImage alt=""loading=lazy width=128 height=128 src=images/clipboard-128.png><div id=p2AccountSecurity style=display:none><p><strong>Segurança da conta</strong><div style=margin-left:25px><div id=managePhoneNumber1><div class=p2AccountActions><span id=authPhoneNumberCheck><strong>✓</strong></span></div><span><a href=# onclick="return account_managePhone()">Manage phone number</a><br></span></div><div id=manageEmail2FA><div class=p2AccountActions><span id=authEmailSetupCheck><strong>✓</strong></span></div><span><a href=# onclick="return account_manageAuthEmail()">Gerenciar autenticação de email</a><br></span></div><div id=manageAuthApp><div class=p2AccountActions><span id=authAppSetupCheck><strong>✓</strong></span></div><span><a href=# onclick="return account_manageAuthApp()">Gerenciar aplicativo autenticador</a><br></span></div><div id=manageHardwareOtp><div class=p2AccountActions><span id=authKeySetupCheck><strong>✓</strong></span></div><span><a href=# onclick="return account_manageHardwareOtp(0)">Gerenciar chaves de segurança</a><br></span></div><div id=manageOtp><div class=p2AccountActions><span id=authCodesSetupCheck><strong>✓</strong></span></div><span><a href=# onclick="return account_manageOtp(0)">Gerenciar códigos de backup</a><br></span></div></div></div><div id=p2AccountActions><p><strong>Ações da conta</strong><p class=mL><span id=managePhoneNumber2 style=display:none><a href=# onclick="return account_managePhone()">Manage phone number</a><br></span><span id=verifyEmailId style=display:none><a href=# onclick="return account_showVerifyEmail()">Verificar email</a><br></span><span id=accountEnableNotificationsSpan style=display:none><a href=# onclick="return account_enableNotifications()">Ativar notificações da web</a><br></span><a href=# onclick="return account_showLocalizationSettings()">Configurações de localização</a><br><a href=# onclick="return account_showAccountNotifySettings()">Configurações de notificação</a><br><span id=p2AccountPassActions><span id=accountChangeEmailAddressSpan style=display:none><a href=# onclick="return account_showChangeEmail()">Mude o endereço de email</a><br></span><a href=# onclick="return account_showChangePassword()">Mudar senha</a><span id=p2nextPasswordUpdateTime></span><br><a href=# onclick="return account_showDeleteAccount()">Deletar conta</a><br></span></p><br style=clear:both></div><strong>Grupos de dispositivos</strong> <span id=p2createMeshLink1>( <a href=# onclick="return account_createMesh()"class=newMeshBtn>Novo</a> )</span><br><br><div id=p2meshes></div><div id=p2noMeshFound style=display:none>Nenhum grupo de dispositivos.<span id=p2createMeshLink2> <a href=# onclick="return account_createMesh()"><strong>Comece aqui!</strong></a></span></div><br style=clear:both></div></div><div id=p3 style=display:none><div id=p3title><h1>Meus Eventos</h1></div><table class=pTable><tr><td class=h1><td class=auto-style1>Mostrar <select id=p3limitdropdown onchange=refreshEvents()><option value=60>Últimos 60<option value=120>Últimos 120<option value=250>Últimos 250<option value=500>Últimos 500<option value=1000>Últimos 1000</select>&nbsp; <a href=# onclick=p3showDownloadEventsDialog(2)><img src=images/link4.png height=10 width=10 title="Download de Eventos"style=cursor:pointer></a>&nbsp;<td class=h2></table><div id=p3events></div></div><div id=p4 style=display:none><div id=p4title><h1>Meus usuários</h1></div><table class=pTable><tr><td class=h1><td class=style14><div style=float:right><input type=button onclick=showUserBroadcastDialog() style=margin-right:6px value=Broadcast> <a href=# onclick=p4downloadUserInfo()><img style=cursor:pointer title="Baixar informações do usuário"src=images/link4.png></a><a href=# onclick=p4batchAccountCreate()><img id=p4UserBatchCreate style=cursor:pointer;display:none title="Lote criar muitas contas de usuário"src=images/link6.png></a></div><div><input type=button id=UsersSelectAllButton onclick=p3usersSelectallButtonFunction() value="Selecionar tudo"> <input type=button id=UsersGroupActionButton disabled value="Ações do grupo"onclick=p3usersGroupActionFunction()> <input id=UserNewAccountButton type=button onclick=showCreateNewAccountDialog() value="Nova conta..."> <input id=UserSearchInput style=width:120px;margin-left:6px placeholder=Filtro onchange=onUserSearchInputChanged() onkeyup=onUserSearchInputChanged() autocomplete=off onfocus=onUserSearchFocus(1) onblur=onUserSearchFocus(0)></div><td class=h2></table><div id=p3users></div></div><div id=p5 style=display:none><div id=p5title><h1>Meus arquivos</h1></div><table id=p5toolbar cellpadding=0 cellspacing=0><tr><td id=p5filehead valign=bottom><div id=p5rightOfButtons></div><div><input type=button id=p5FolderUp disabled onclick="return p5folderup()"value=Acima>&nbsp; <input type=button id=p5SelectAllButton disabled onclick=p5selectallfile() value="Selecionar tudo">&nbsp; <input type=button id=p5RenameFileButton disabled value=Renomear onclick=p5renamefile()>&nbsp; <input type=button id=p5DeleteFileButton disabled value=Deletar onclick=p5deletefile()>&nbsp; <input type=button id=p5NewFolderButton disabled value="Nova pasta"onclick=p5createfolder()>&nbsp; <input type=button id=p5UploadButton disabled value=Envio onclick=p5uploadFile()>&nbsp; <input type=button id=p5CutButton disabled value=Cortar onclick=p5copyFile(1)>&nbsp; <input type=button id=p5CopyButton disabled value=Copiar onclick=p5copyFile(0)>&nbsp; <input type=button id=p5PasteButton disabled value=Colar onclick=p5pasteFile()>&nbsp;</div><tr><td id=p5filesubhead><div style=float:right><select id=p5sortdropdown onchange=updateFiles()><option value=1 selected>Classificar por nome<option value=2>Classificar por tamanho<option value=3>Classificar por data<option value=4>Decrescente por nome<option value=5>Decrescente por tamanho<option value=6>Descrescente por data</select></div><div>&nbsp;&nbsp;<span id=p5currentpath></span></div></table><div id=p5filetable><div id=p5PublicShare><div>Esses arquivos são compartilhados publicamente, clique em "link" para obter o URL público.</div></div><div id=bigok style=display:none><b>✓</b></div><div id=bigfail style=display:none><b>✗</b></div><span id=p5files></span></div><table id=p5toolbarBottom style=width:100% cellpadding=0 cellspacing=0><tr><td class=style6>&nbsp;<span id=p5bottomstatus></span></table></div><div id=p6 style=display:none><div id=p6info style=overflow-y:auto><div id=p6title><img id=MainMeshImage src=serverpic.ashx><h1>Meu servidor</h1></div><div id=p2ServerActions><p><strong>Ações do servidor</strong><div class=mL><div id=p2ServerActionsBackup><a href={{{domainurl}}}backup.zip rel="noreferrer noopener"target=_blank>Fazer o download do backup do servidor</a></div><div id=p2ServerActionsRestore><a href=# onclick="return server_showRestoreDlg()">Restaurar servidor com backup</a></div><div id=p2ServerActionsVersion><a href=# onclick="return server_showVersionDlg()">Verifique a versão do servidor</a></div><div id=p2ServerActionsErrors><a href=# onclick="return server_showErrorsDlg()">Mostrar log de erros do servidor</a></div></div></div><br><strong>Estatísticas do servidor</strong><br><br><div id=serverStats><div id=serverCpuChartView style=display:none><div class=chartViewCanvas><canvas id=serverCpuChart></canvas></div><div class=chartViewText id=serverCpuChartText></div></div><div id=serverMemoryChartView style=display:none><div class=chartViewCanvas><canvas id=serverMemoryChart></canvas></div><div class=chartViewText id=serverMemoryChartText></div></div><br><br><div id=serverStatsTable></div></div><div id=serverWarningsDiv style=display:none><br><strong>Avisos do servidor</strong><br><br><div id=serverWarnings></div></div></div></div><div id=p10 style=display:none><div id=p10title><div id=p10BackButton><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Geral - <span id=p10deviceName></span></h1></div><div id=p10info style=overflow-y:auto><table style=width:100% cellpadding=0 cellspacing=0><tr><td style=width:auto valign=top><div id=p10html></div><td style=width:20px><td style=width:200px;vertical-align:top;position:relative valign=top><img id=p10deviceNotify onclick=showDeviceSessions(null,null,event) class=deviceNotifyLargeDot src=images/icon-relay-notify-40.png width=40 height=40><div id=p10deviceBattery class="deviceBatteryLarge deviceBatteryLarge1"></div><a href=# onclick=p10showiconselector()><img id=MainComputerImage></a><div id=MainComputerState></div></table><br><div id=p10html2></div><div id=p10html3></div><div id=p10html4></div></div></div><div id=p11 class=noselect style=display:none><div id=p11title><div id=p11deviceNameHeader><div id=p11BackButton><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><div id=devListToolbarViewIcons><div class=viewSelector onclick=deskToggleFull(event) title="Tela cheia. Mantenha a tecla Shift pressionada no navegador em tela cheia."><div class=viewSelector5></div></div></div><h1>Área de Trabalho - <span id=p11deviceName></span></h1></div></div><div id=p11warning onclick=showFeaturesDlg()><div class=icon2></div><div class=warningbox>Intel® Porta de redirecionamento AMT ou recurso KVM desativado<span id=p11warninga>, clique aqui para habilitá-lo.</span></div></div><div id=p11warning2 onclick=showPowerActionDlg()><div class=icon2></div><div class=warningbox>O computador remoto não está ligado, clique aqui para emitir um comando de energia.</div></div><div id=deskarea0 cellpadding=0 cellspacing=0><div id=deskarea1 class=areaHead><div class=toright2><span id=p11power></span>&nbsp;<div class=deskareaicon title="Alternar modo de exibição"onclick=toggleAspectRatio(1)>⇲</div><div class=deskareaicon title="Vire à esquerda"onclick=drotate(-1)>↺</div><div class=deskareaicon title="Vire à direita"onclick=drotate(1)>↻</div><div id=deskRecordIcon class=deskareaicon title="O servidor está gravando esta sessão"style=display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px></div><input id=deskFocusBtn type=button title="Alternar modo de foco, quando ativo, apenas a região ao redor do mouse é atualizada"onkeypress=return!1 onkeydown=return!1 value="Focus All"onclick=deskToggleFocus() style=margin-right:3px;display:none> <input id=deskActionsBtn type=button title="Execute ações de energia no dispositivo"onkeypress=return!1 onkeydown=return!1 value=Ações onclick=deviceActionFunction() class=mR> <input id=deskActionsSettings type=button value=Configurações... title="Editar configurações da área de trabalho remota"onkeypress=return!1 onkeydown=return!1 onclick=showDesktopSettings() class=mR> <input type=button title="Alterar o estado de energia da máquina remota"onkeypress=return!1 onkeydown=return!1 value="Ações de energia (Ligar/Desligar)"onclick=showPowerActionDlg() style=display:none></div><div><div id=idx_deskFullBtn2 onclick=deskToggleFull(event)>&nbsp;✖</div><input type=button id=autoconnectbutton1 value="Conexão automática"onclick=autoConnectDesktop(event) onkeypress=return!1 onkeydown=return!1 style=display:none> <span id=connectbutton1span><input type=button id=connectbutton1 cmenu=deskConnectButton value=Conectar onclick=connectDesktop(event,3) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=connectbutton1hspan>&nbsp;<input type=button id=connectbutton1h value="Conectar HW"title="Conectar-se usando o KVM de hardware Intel AMT"onclick=connectDesktop(event,2) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=disconnectbutton1span>&nbsp;<input type=button id=disconnectbutton1 value=Desconectar onclick=connectDesktop(event,0) onkeypress=return!1 onkeydown=return!1></span>&nbsp;<span id=deskstatus>Desconectado</span><span id=deskmetadata></span></div></div><div id=deskarea2><div class=areaProgress><div id=progressbar></div></div></div><div id=deskarea3x><div id=DeskFocus oncontextmenu=return!1 onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></div><div id=DeskParent><canvas id=Desk width=640 height=480 oncontextmenu=return!1 onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event) onmousewheel=dmousewheel(event)></canvas></div><div id=DeskTools><div id=deskToolsAreaTop><a id=DeskToolsRefreshButton style=right:2px onclick=refreshDeskTools()>Atualizar</a><div id=deskToolsTopTabProcess class=deskToolsTopTab onclick=changeDeskToolTab(0) style=left:0;bottom:0>Processos</div><div id=deskToolsTopTabService class=deskToolsTopTab onclick=changeDeskToolTab(1) style=display:none;left:90px;color:gray>Serviços</div></div><div id=deskToolsArea><div id=DeskToolsProcessTab><div id=deskToolsHeader><a class=colmn1 title="Classificar por ID do processo"onclick=sortProcess(0)>PID</a> <a class=colmn2 title="Classificar por nome"onclick=sortProcess(1)>Nome</a></div><div id=DeskToolsProcesses></div></div><div id=DeskToolsServiceTab style=display:none><div id=deskToolsServiceHeader><a class=colmn1 style=width:70px title="Classificar por estado"onclick=sortService(0)>Estado</a> <a class=colmn2 title="Classificar por nome"onclick=sortService(1)>Nome</a></div><div id=DeskToolsServices></div></div></div></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 class=areaFoot><div class=toright2><span id=DeskLatency title="Desktop Session Latency"></span> <span id=DeskTimer title="Tempo de sessão"></span>&nbsp; <select id=termdisplays style=display:none onchange=deskSetDisplay(event) onkeypress=return!1 onkeydown=return!1></select>&nbsp; <input id=DeskToolsButton type=button value=Ferramentas title="Alternar visualização de ferramentas"onkeypress=return!1 onkeydown=return!1 onclick=toggleDeskTools()>&nbsp; <span id=DeskChatButton class=deskarea title="Abra a janela de bate-papo neste computador"><img src=images/icon-chat.png onclick=deviceChat(event) height=16 width=16 style=padding-top:2px></span><span id=DeskNotifyButton title="Exibir uma notificação no computador remoto"><img src=images/icon-notify.png onclick=deviceToastFunction() height=16 width=16 style=padding-top:2px></span><span id=DeskOpenWebButton title="Abra um endereço da web no computador remoto"><img src=images/icon-url2.png onclick=deviceUrlFunction() height=16 width=16 style=padding-top:2px></span><span id=DeskBackgroundButton title="Alternar plano de fundo da área de trabalho remota"><img src=images/icon-background.png onclick=deviceToggleBackground(event) height=16 width=16 style=padding-top:2px></span><span id=DeskSaveImageButton title="Salvar uma captura de tela da área de trabalho remota"><img src=images/icon-camera.png onclick=deskSaveImage() height=16 width=16 style=padding-top:2px></span><span id=DeskRecordButton cmenu=deskPlayerContextMenu title="Record remote desktop session to file"style=display:none><img id=DeskRecordButtonImage src=images/icon-film.png onclick=deskRecordSession() height=16 width=16 style=padding-top:2px></span></div><div><select id=deskkeys><option value=10>CTRL+ALT+DEL<option value=5>Win<option value=0>Win+Down<option value=1>Win+Up<option value=2>Win+L<option value=3>Win+M<option value=4>Shift+Win+M<option value=6>Win+R<option value=7>Alt-F4<option value=8>CTRL-W<option value=9>Alt-Tab<option value=11>Win+Left<option value=12>Win+Right</select> <input id=DeskWD type=button value=Enviar onkeypress=return!1 onkeydown=return!1 onclick=deskSendKeys()> <input id=DeskClip type=button value="Área de transferência"onkeypress=return!1 onkeydown=return!1 onclick=showDeskClip()> <input id=DeskType type=button value=Tipo onkeypress=return!1 onkeydown=return!1 onclick=showDeskType()> <label><span id=DeskControlSpan title="Alternar entrada de mouse e teclado"><input id=DeskControl type=checkbox onkeypress=return!1 onkeydown=return!1 onclick=toggleKvmControl()>Entrada</span></label>&nbsp;</div></div></div></div><div id=p12 style=display:none><div id=p12title><div id=p12BackButton><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><div id=devListToolbarViewIcons2 style=float:right><div class=viewSelector onclick=deskToggleFull(event) title="Tela cheia. Mantenha a tecla Shift pressionada no navegador em tela cheia."><div class=viewSelector5></div></div></div><h1>Terminal - <span id=p12deviceName></span></h1></div><div id=p12warning onclick=showFeaturesDlg()><div class=icon2></div><div class=warningbox>Intel® Porta de redirecionamento AMT ou recurso KVM desativado<span id=p12warninga>, clique aqui para habilitá-lo.</span></div></div><div id=p12warning2 onclick=showPowerActionDlg()><div class=icon2></div><div class=warningbox>O computador remoto não está ligado, clique aqui para emitir um comando de energia.</div></div><div id=termTable style=position:relative><table style=width:100% cellpadding=0 cellspacing=0><tr><td class=areaHead><div class=toright2><div id=termRecordIcon class=deskareaicon title="O servidor está gravando esta sessão"style=display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px></div><input id=termActionsBtn type=button title="Execute ações de energia no dispositivo"onkeypress=return!1 onkeydown=return!1 value=Ações onclick=deviceActionFunction()></div><div><div id=idx_termFullBtn2 onclick=deskToggleFull(event)>&nbsp;✖</div><input type=button id=autoconnectbutton2 value="Conexão automática"onclick=autoConnectTerminal(event) onkeypress=return!1 onkeydown=return!1 style=display:none> <span id=connectbutton2span><input type=button id=connectbutton2 cmenu=termConnectButton value=Conectar onclick=connectTerminal(event,1) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=connectbutton2hspan>&nbsp;<input type=button id=connectbutton2h value="Conectar HW"title="Conectar-se usando o KVM de hardware Intel AMT"onclick=connectTerminal(event,2) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=disconnectbutton2span>&nbsp;<input type=button id=disconnectbutton2 value=Desconectar onclick=connectTerminal(event,0) onkeypress=return!1 onkeydown=return!1></span>&nbsp;<span id=termstatus>Desconectado</span><span id=termtitle></span></div><tr><td><div class=areaProgress><div id=termprogressbar></div></div><tr><td id=termarea3x><div id=termarea3xdiv style=width:100%;height:100%></div><pre id=Term></pre><tr><td class=areaFoot><div class=toright2><span id=TermTimer title="Tempo de sessão"></span>&nbsp; <span id=terminalSettingsButtons style=display:none><input id=id_tcrbutton type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton value=CR+LF title="Alterne o que a chave de retorno enviará"onclick=termToggleCr()> <input id=id_tfxkeysbutton type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton value="Intel (F10 = ESC+[OM)"title="Alterna o tipo de emulação de teclas F1 a F10"onclick=termToggleFx()> <input id=id_ttypebutton type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton value="Ascii estendido"title="Alternar tipo de emulação de terminal"onclick=termToggleType()> </span><span id=terminalSizeDropDown style=display:none><select id=termSizeList onkeypress=return!1><option value=1>80x25<option value=2>100x30</select> </span><span id=specialKeyDropDown><select id=specialkeylist onkeypress=return!1></select> <input id=specialkeylistinput type=button onkeypress=return!1 class=bottombutton value=Enviar title="Enviar a chave especial selecionada"onclick=sendSpecialKey()></span></div><div>&nbsp; <input type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton id=ctrlcbutton value=CTRL-C onclick='termSendKey(3,"ctrlcbutton")'> <input type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton id=ctrlxbutton value=CTRL-X onclick='termSendKey(24,"ctrlxbutton")'> <input type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton id=escbutton value=ESC onclick='termSendKey(27,"escbutton")'> <input type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton id=bsbutton value=Excluir onclick='termSendKey(8,"bsbutton")'style=display:none> <input type=button onkeypress=return!1 onkeydown=return!1 class=bottombutton id=pastebutton value=Colar title="Cole o texto no terminal"onclick=showTermPasteDialog() style=display:none></div></table><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=p13 style=display:none><div id=p13title><div id=p13BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Arquivos - <span id=p13deviceName></span></h1></div><table id=p13toolbar cellpadding=0 cellspacing=0><tr><td class=areaHead><div class=toright2><input id=filesActionsBtn type=button title="Execute ações de energia no dispositivo"value=Ações onclick=deviceActionFunction()><div id=filesRecordIcon class=deskareaicon title="O servidor está gravando esta sessão"style=display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px></div></div><div><input id=p13AutoConnect value="Conexão automática"onclick=autoConnectFiles(event) type=button style=display:none> <input id=p13Connect value=Conectar onclick=connectFiles(event) type=button> <span id=p13Status>Desconectado</span></div><tr><td class=areaHead2 valign=bottom><div id=p13rightOfButtons class=toright2></div><div><input type=button id=p13FolderUp disabled onclick=p13folderup() value=Acima>&nbsp; <input type=button id=p13SelectAllButton disabled onclick=p13selectallfile() value="Selecionar tudo">&nbsp; <input type=button id=p13RenameFileButton disabled value=Renomear onclick=p13renamefile()>&nbsp; <input type=button id=p13DeleteFileButton disabled value=Deletar onclick=p13deletefile()>&nbsp; <input type=button id=p13ViewFileButton disabled value=Editar onclick=p13viewfile()>&nbsp; <input type=button id=p13NewFolderButton disabled value="Nova pasta"onclick=p13createfolder()>&nbsp; <input type=button id=p13UploadButton disabled value=Envio onclick=p13uploadFile()>&nbsp; <input type=button id=p13CutButton disabled value=Cortar onclick=p13copyFile(1)>&nbsp; <input type=button id=p13CopyButton disabled value=Copiar onclick=p13copyFile(0)>&nbsp; <input type=button id=p13PasteButton disabled value=Colar onclick=p13pasteFile()>&nbsp; <input type=button id=p13RefreshButton disabled value=Atualizar onclick=p13folderup(9999)>&nbsp;</div><tr><td class=areaHead3><div class=toright2><select id=p13sortdropdown onchange=p13updateFiles()><option value=1 selected>Classificar por nome<option value=2>Classificar por tamanho<option value=3>Classificar por data<option value=4>Decrescente por nome<option value=5>Decrescente por tamanho<option value=6>Descrescente por data</select></div><div>&nbsp;&nbsp;<span id=p13currentpath></span></div></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><div id=p13bigok style=display:none><b>✓</b></div><div id=p13bigfail style=display:none><b>✗</b></div><span id=p13files></span></div><table id=p13toolbarBottom cellpadding=0 cellspacing=0><tr><td class=style6>&nbsp;<span id=p13bottomstatus></span></table></div><div id=p14 style=display:none><div id=p14title><div id=p14BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><div id=devListToolbarViewIcons><div class=viewSelector onclick=deskToggleFull(event) title="Tela cheia. Mantenha a tecla Shift pressionada no navegador em tela cheia."><div class=viewSelector5></div></div></div><h1>Intel® AMT - <span id=p14deviceName></span></h1></div><iframe id=p14iframe src={{{domainurl}}}commander.htm></iframe></div><div id=p15 style=display:none><div id=p15title><div id=p15BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1><span id=p15deviceName></span></h1></div><table id=consoleTable cellpadding=0 cellspacing=0><tr><td class=areaHead><div class=toright2><div id=p15coreName title="Informações sobre o núcleo atual em execução neste agente"></div><input type=button id=p15uploadCore value="Ação do agente"onclick=p15uploadCore(event) title="Alterar o módulo de código Java Script do agente"> <img onclick=p15downloadConsoleText() style=cursor:pointer;margin-top:6px title="Baixar do texto do console"src=images/link4.png></div><div id=p15statetext></div><tr><td><div class=areaProgress><div id=consoleprogressbar></div></div><tr><td id=p15agentConsole><pre id=p15agentConsoleText></pre><tr><td class=areaFoot><table style=width:100%><tr><td style=width:99%><input id=p15consoleText style=width:100% onkeyup=p15consoleSend(event) onfocus=onConsoleFocus(1) onblur=onConsoleFocus(0)><td>&nbsp;<td id=p15outputselecttd><select id=p15outputselect><option value=1>Agente<option value=2>MQTT</select><td style=width:1%><input id=id_p15consoleClear type=button class=bottombutton value=Limpo onclick=p15consoleClear()></table></table></div><div id=p16 style=display:none><div id=p16title><div id=p16BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Eventos - <span id=p16deviceName></span></h1></div><table class=pTable><tr><td class=h1><td class=auto-style1>Mostrar <select id=p16limitdropdown onchange=refreshDeviceEvents()><option value=60>Últimos 60<option value=120>Últimos 120<option value=250>Últimos 250<option value=500>Últimos 500<option value=1000>Últimos 1000</select> <a href=# onclick=p3showDownloadEventsDialog(1)><img src=images/link4.png height=10 width=10 title="Download de Eventos"style=cursor:pointer></a>&nbsp;<td class=h2></table><div id=p16events></div></div><div id=p17 style=display:none;margin-left:-18px><div id=p17title style=margin-left:18px><div id=p17BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Detalhes - <span id=p17deviceName></span></h1></div><div id=p17info style=overflow-y:auto></div></div><div id=p19 style=display:none><div id=p19title><div id=p19BackButton style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Plugins - <span id=p19deviceName></span></h1></div><div id=p19headers></div><div id=p19pages></div></div><div id=p20 style=display:none><div id=p20title><picture id=MainMeshImage style=border-width:0;height:200px;width:200px;float:right><source type=image/webp width=200 height=200 srcset=images/webp/mesh-256.webp><img alt=""width=200 height=200 src=images/mesh-256.png></picture><div style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Geral - <span id=p20meshName></span></h1></div><p id=p20info></div><div id=p21 style=display:none><div id=p21title><div style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Resumo - <span id=p21meshName></span></h1></div><div style=width:100%><div style=display:table;width:93%><div id=meshPowerChartDiv style=width:31%;display:inline-block;text-align:center;max-width:250px><div style=margin:10px;font-size:16px>Estados de potência</div><canvas id=meshPowerChart style=width:250px;height:250px></canvas></div><div id=meshOsChartDiv style=width:31%;display:inline-block;text-align:center;max-width:250px><div style=margin:10px;font-size:16px>Tipos de agentes</div><canvas id=meshOsChart style=width:250px;height:250px></canvas></div><div id=meshConnChartDiv style=width:31%;display:inline-block;text-align:center;max-width:250px><div style=margin:10px;font-size:16px>Conectividade</div><canvas id=meshConnChart style=width:250px;height:250px></canvas></div></div></div><p id=p21info></div><div id=p30 style=display:none><div id=p30title><div style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Geral - <span id=p30userName></span></h1></div><div id=p30info style=overflow-y:auto><table style=width:100% cellpadding=0 cellspacing=0><tr><td style=width:auto valign=top><div id=p30html></div><td style=width:20px><td style=width:200px;position:relative valign=top><img id=p30userAuthServiceLogo loading=lazy style=display:none class=userAuthStrategyLogo width=64 height=64><picture id=MainUserImage style=border-width:0;height:200px;width:200px;float:right><source type=image/webp width=200 height=200 srcset=images/webp/user-256.webp><img alt=""width=200 height=200 src=images/user-256.png></picture><div style=width:100%;text-align:center><strong><span id=MainUserState></span></strong></div></table><br><div id=p30html2></div><div id=p30html3></div></div></div><div id=p31 style=display:none><div id=p31title><div style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Eventos - <span id=p31userName></span></h1></div><table class=pTable><tr><td class=h1><td class=auto-style1>Mostrar <select id=p31limitdropdown onchange=refreshUsersEvents()><option value=60>Últimos 60<option value=120>Últimos 120<option value=250>Últimos 250<option value=500>Últimos 500<option value=1000>Últimos 1000</select> <a href=# onclick=p3showDownloadEventsDialog(3)><img src=images/link4.png height=10 width=10 title="Download de Eventos"style=cursor:pointer></a>&nbsp;<td class=h2></table><div id=p31events></div></div><div id=p40 style=display:none><div id=p40title><h1>Estatísticas do meu servidor</h1></div><div class=areaHead><div class=toright2><select id=p40type onchange=updateServerTimelineStats()><option value=0>Conexões<option value=1>Memória</select>&nbsp; <select id=p40time onchange=updateServerTimelineHours()><option value=3>Últimas 3 horas<option value=8>Últimas 8 horas<option value=24>Último dia<option value=168>Semana passada<option value=720>Últimos 30 dias</select>&nbsp; <img src=images/link4.png height=10 width=10 title="Baixar pontos de dados (.csv)"style=cursor:pointer onclick=p40downloadEvents()>&nbsp;</div><div><input value=Atualizar type=button onclick=refreshServerTimelineStats()> &nbsp;<label><input id=p40log type=checkbox onclick=updateServerTimelineHours()>Log-X</label></div></div><canvas id=serverMainStats></canvas></div><div id=p41 style=display:none><div id=p41title><h1>Rastreio do meu servidor</h1></div><div class=areaHead><div class=toright2>Mostrar <select id=p41limitdropdown onchange=displayServerTrace()><option value=100>Últimos 100<option value=250>Últimos 250<option value=500>Últimos 500<option value=1000>Últimos 1000</select> <input value=Limpo type=button onclick=clearServerTracing()> <img src=images/link4.png height=10 width=10 title="Rastreio de download (.csv)"style=cursor:pointer onclick=p41downloadServerTrace()>&nbsp;</div><div><input value=Rastreamento type=button onclick=setServerTracing()> <span id=p41traceStatus>Nenhum</span></div></div><div id=p41events></div></div><div id=p42 style=display:none><h1>Meus plugins de servidor</h1><div class=areaHead><div class=toright2></div><div><input value="Download do plugin"type=button onclick="return pluginHandler.addPluginDlg()"></div></div><div id=pluginRestartNotice class=areaHead style=background-color:gold;display:none><div class=toright2><input value="Atualizar núcleos do agente"type=button onclick="return distributeCore(),!1"></div><div style=padding:2px><div style=padding:2px><b>Aviso prévio:</b> Os plug-ins foram alterados, isso pode exigir atualização do núcleo do agente.</div></div></div><table id=p42tbl><tr class=DevSt><th style=width:26px><th style=width:10px><th class=chName>Nome<th class=chDescription>Descrição<th class=chSite style=text-align:center>Ligação<th class=chVersion style=text-align:center>Versão<th class=chUpgradeAvail style=text-align:center>Mais recentes<th class=chStatus style=text-align:center>Status<th class=chAction style=text-align:center>Ação<th style=width:10px></table><div id=pluginNoneNotice style=width:100%;text-align:center;padding-top:10px;display:none><i>Não há plugins no servidor.</i></div></div><div id=p43 style=display:none><div id=p43BackButton><div class=backButton tabindex=0 onclick=go(42) title=Voltar onkeypress='"Enter"==event.key&&go(42)'><div class=backButtonEx></div></div></div><h1>Meus plugins de servidor - <span id=p43title></span></h1><iframe id=p43iframe frameborder=0 style="width:100%;height:calc(100vh - 245px);max-height:calc(100vh - 245px)"></iframe></div><div id=p50 style=display:none><div id=p50title><h1>Meus grupos de usuários</h1></div><table class=pTable><tr><td class=h1><td class=style14><div style=float:right></div><div><input type=button id=UsersGroupsSelectAllButton onclick=p50usersSelectallButtonFunction() value="Selecionar tudo"> <input type=button id=UsersGroupsGroupActionButton disabled value="Ações do grupo"onclick=p50usersGroupActionFunction()> <input id=NewUserGroupButton type=button onclick=showCreateUserGroupDialog(1) value="Novo grupo..."> <input id=DuplicateUserGroupButton type=button style=display:none onclick=showCreateUserGroupDialog(2) value="Grupo duplicado ..."></div><td class=h2></table><div id=p50groups></div></div><div id=p51 style=display:none><div id=p51title><div style=float:left><div class=backButton tabindex=0 onclick=goBack() title=Voltar onkeypress='"Enter"==event.key&&goBack()'><div class=backButtonEx></div></div></div><h1>Grupo de usuários - <span id=p51groupName></span></h1></div><div id=p51info style=overflow-y:auto><table style=width:100% cellpadding=0 cellspacing=0><tr><td style=width:auto valign=top><div id=p51group></div><td style=width:20px><td style=width:200px valign=top><picture id=MainUserImage style=border-width:0;height:200px;width:200px;float:right><source type=image/webp width=200 height=200 srcset=images/webp/group-256.webp><img alt=""width=200 height=200 src=images/group-256.png></picture><div style=width:100%;text-align:center><strong><span id=MainUserState></span></strong></div></table><div id=p51group2></div><br></div></div><div id=p52 style=display:none><div id=p52title><h1>My User Recordings</h1></div><table class=pTable><tr><td class=h1><td class=style14><div style=float:right><input type=button onclick=openRecodringPlayer() value="Open Player..."></div><div><input type=button onclick=refreshRecodings() value=Atualizar></div><td class=h2></table><div id=p52recordings style=overflow-y:auto></div></div><br id=column_l_bottomgap></div><div id=footer><div class=footer1>{{{footer}}}</div><div class=footer2><a id=verifyEmailId2 style=display:none href=# onclick=account_showVerifyEmail()>Verificar Email</a> &nbsp;<a id=termsLinkFooter href=terms>Termos &amp; Privacidade</a></div></div><div id=dialog class=noselect style=display:none><div id=dialogHeader><div tabindex=0 id=id_dialogclose onclick=setDialogMode() onkeypress='"Enter"==event.key&&setDialogMode()'>✖</div><div id=id_dialogtitle></div></div><div id=dialogBody><div id=dialog1><div id=id_dialogMessage></div></div><div id=dialog2><div id=id_dialogOptions></div></div><div id=dialog3><div id=d3upload><div>Seleção de arquivo</div><select id=d3uploadMode onchange=d3modechange()><option value=1>Upload de arquivo local<option value=2>Seleção de arquivo do servidor</select></div><div id=d3localmode style=display:none><div>Subir arquivo</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=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=Acima>&nbsp;</div><div id=d3serverfiles></div></div></div><div id=dialog4><input id=d4WrapButton type=button value="Wrap On"onclick=d4ToggleWrap()> <input id=d4SizeButton type=button value=Pequeno onclick=d4ToggleSize()> <textarea id=d4editorarea autocomplete=off style="height:calc(100vh - 286px);width:100%;overflow:scroll;resize:none;white-space:pre"></textarea></div><div id=dialog7><div id=d7meshkvm><h4>Área de trabalho remota do agente</h4><div><div>Qualidade</div><select id=d7bitmapquality dir=rtl></select></div><div><div>Dimensionamento</div><select id=d7bitmapscaling 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></div><div><div>Taxa de quadros</div><select id=d7framelimiter dir=rtl><option selected value=50>Rápido<option value=100>Médio<option value=400>Lento<option value=1000>Muito devagar</select></div></div><div id=d7amtkvm><h4>Intel® AMT Hardware KVM</h4><div><div>Codificação de Imagem</div><select id=d7desktopmode><option value=1>RLE8, mais rápido<option value=2>RLE16, Recomendado<option value=3>RAW8, lento<option value=4>RAW16, muito lento</select></div><div><div>Outros ajustes</div><div id=d7otherset style=display:block><label style=display:block><input type=checkbox id=d7showfocus>Mostrar ferramenta de foco</label> <label style=display:block><input type=checkbox id=d7showcursor>Mostrar Cursor do Mouse Local</label> <label style=display:block><input type=checkbox id=d7localKeyMap>Mapa do teclado local</label></div></div></div></div></div><div id=idx_dlgButtonBar><input id=idx_dlgCancelButton type=button value=Cancelar onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=Ok onclick=dialogclose(1)><div><input id=idx_dlgDeleteButton type=button value=Deletar style=display:none onclick=dialogclose(2)></div></div></div><iframe name=fileUploadFrame style=display:none></iframe><form style=display:none method=post action=uploadfile.ashx enctype=multipart/form-data target=fileUploadFrame><input id=p5fileDragName name=name><input id=p5fileDragAuthCookie name=auth><input id=p5fileDragSize name=size><input id=p5fileDragType name=type><input id=p5fileDragData name=data><input id=p5fileDragLink name=link><input type=submit id=p5loginSubmit2 style=display:none></form><form style=display:none method=post action=uploadnodefile.ashx enctype=multipart/form-data target=fileUploadFrame><input id=p13fileDragName name=name><input id=p13fileDragSize name=size><input id=p13fileDragType name=type><input id=p13fileDragData name=data><input id=p13fileDragLink name=link><input type=submit id=p13loginSubmit2 style=display:none></form><audio id=chimes><source src=sounds/chimes.mp3 type=audio/mp3></audio></div><script nonce=abc>"use strict";var args,urlargs,webState="{{{webstate}}}";for(var i in""!=webState&&(webState=JSON.parse(decodeURIComponent(webState))),webState)"desktopsettings"!=i&&localStorage.setItem(i,webState[i]);if(!webState.loctag)try{localStorage.removeItem("loctag")}catch(e){}var desktop,terminal,files,autoReconnect=!0,powerStatetable=["","Ligado","Hibernar","Hibernar","Hibernar","Hibernando","Desligar","Presente"],StatusStrs=["Desconectado","Conectando...","Configurando...","Conectado","Intel&reg; AMT conectado"],agentsStr=["Desconhecido","Windows 32 Bits console","Windows 64 Bits console","Serviço Windows 32 Bits","Serviço Windows 64 Bits","Linux 32 bits","Linux 64 bits","MIPS","XENx86","Android ARM","Linux ARM","MacOS 32 bits","Android x86","PogoPlug ARM","Android APK","Linux Poky x86-32 bits","MacOS 64 bits","ChromeOS","Linux Poky x86-64 bits","Linux NoKVM x86-32 bits","Linux NoKVM x86-64 bits","Windows MinCore console","Windows MinCore service","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 64bit","ARMv6l / ARMv7l / NoKVM","Desconhecido","Desconhecido","FreeBSD x86-64"],sort=0,searchFocus=0,mapSearchFocus=0,userSearchFocus=0,consoleFocus=0,showRealNames=!1,meshserver=null,meshes={},meshcount=0,nodes=null,usergroups=null,filetree={},userinfo=null,serverinfo=null,events=[],users=null,wssessions=null,nodeShortIdent=0,desktopsettings={encoding:2,showfocus:!1,showmouse:!0,showcad:!0,quality:40,scaling:1024,framerate:50,localkeymap:!1},multidesktopsettings={quality:20,scaling:128,framerate:1e3},debugLevel=parseInt("{{{debuglevel}}}"),features=parseInt("{{{features}}}"),sessionTime=parseInt("{{{sessiontime}}}"),sessionRefreshTimer=null,domain="{{{domain}}}",domainUrl="{{{domainurl}}}",authCookie="{{{authCookie}}}",authRelayCookie="{{{authRelayCookie}}}",logoutControls=JSON.parse(decodeURIComponent("{{{logoutControls}}}")),authCookieRenewTimer=null,multiDesktop={},multiDesktopFilter=null,serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}",amtScanResults=null,debugmode=0,clickOnce=0!=(256&features)&&detectClickOnce(),attemptWebRTC=0!=(128&features),passRequirements="{{{passRequirements}}}";""!=passRequirements&&(passRequirements=JSON.parse(decodeURIComponent(passRequirements)));var customui="{{{customui}}}";customui=""!=customui?JSON.parse(decodeURIComponent(customui)):null;var deskAspectRatio=0;try{deskAspectRatio=parseInt(getstore("deskAspectRatio","0"))}catch(e){}var uiMode=parseInt(getstore("uiMode",1)),webPageStackMenu=!1,webPageFullScreen=!0,nightMode="1"==getstore("nightMode","0"),footerBar="1"==getstore("footerBar","1"),sessionActivity=Date.now(),updateSessionTimer=null,pluginHandlerBuilder={{{pluginHandler}}},pluginHandler=null;null!=pluginHandlerBuilder&&(pluginHandler=new pluginHandlerBuilder);var installedPluginList=null,goBackStack=[],CollapsedGroups={};try{CollapsedGroups=JSON.parse(getstore("_collapse","{}"))}catch(e){}var xterm=null,xtermfit=null,xtermResizeTimer=null,p11DeskConsoleMsgTimer=null,p12TermConsoleMsgTimer=null,p13FilesConsoleMsgTimer=null;function startup(){if(0==(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)}delete(urlargs=parseUriArgs()).viewmode,delete urlargs.gotonode,delete urlargs.gotomesh,delete urlargs.gotouser,delete urlargs.gotougrp,urlargs.key&&(Q("termsLinkFooter").href+="?key="+urlargs.key),(args=parseUriArgs()).locale||null!=(s=getstore("loctag",0))&&"*"!=s&&(args.locale=s);debugmode=args.debug,attemptWebRTC=0,null!=args.webrtc&&(attemptWebRTC=1==args.webrtc),QV("p13AutoConnect",debugmode),QV("autoconnectbutton2",debugmode),QV("autoconnectbutton1",debugmode),nightMode&&(QC("body").add("night"),QS("body")["background-color"]="#000"),toggleFullScreen();var t=0,o=parseInt("{{{hide}}}");(o||args.hide)&&(args.hide&&(t=parseInt(args.hide)),o&&(t|=o)),args.hide=t,QV("uiViewButton5",!(4&args.hide)),adjustPanels();var n="";logoutControls&&null!=logoutControls.name&&(n=format("Bem-vindo {0}.",logoutControls.name)),null!=logoutControls.logoutUrl&&(n+=format(' <a href="'+logoutControls.logoutUrl+'" style="color:white">Sair</a>')),1&args.hide?QH("logoutControlSpan2",n):QH("logoutControlSpan",n),document.onclick=function(e){hideContextMenu()},document.onkeypress=ondockeypress,document.onkeydown=ondockeydown,document.onkeyup=ondockeyup,window.addEventListener("blur",ondocblur,!1),window.onresize=function(){hideContextMenu(),masterUpdate(512),null!=xtermfit&&12==xxcurrentView&&xtermfit.fit()},setTimeout(function(){masterUpdate(512)},200),(meshserver=MeshServerCreateControl(domainUrl,authCookie)).onStateChanged=onStateChanged,meshserver.onMessage=onMessage,meshserver.trace=1==args.trace,meshserver.Start(),Q("sortselect").selectedIndex=sort=getstore("sort",0),Q("sizeselect").selectedIndex=getstore("viewsize",1),Q("KvmSearchInput").value=Q("SearchInput").value=getstore("_search",""),showRealNames=1==getstore("showRealNames",0),Q("RealNameCheckBox").checked=showRealNames,Q("OnlineCheckBox").checked=1==getstore("onlineOnly",0),Q("viewselect").value=getstore("deviceView",1),Q("DeskControl").checked=1==getstore("DeskControl",1),QV("accountChangeEmailAddressSpan",0==(2097152&features)),masterUpdate(3);for(var i=1;i<5;i++)Q("devViewButton"+i).classList.remove("viewSelectorSel");Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel"),Q("p5filetable").addEventListener("drop",p5fileDragDrop,!1),Q("p5filetable").addEventListener("dragover",p5fileDragOver,!1),Q("p5filetable").addEventListener("dragleave",p5fileDragLeave,!1),Q("p13filetable").addEventListener("drop",p13fileDragDrop,!1),Q("p13filetable").addEventListener("dragover",p13fileDragOver,!1),Q("p13filetable").addEventListener("dragleave",p13fileDragLeave,!1),setInterval(updateDeviceTimeline,12e4);var a=null;try{a=localStorage.getItem("desktopsettings")}catch(e){}null!=a&&(desktopsettings=JSON.parse(a)),a=null;try{a=localStorage.getItem("multidesktopsettings")}catch(e){}null!=a&&(multidesktopsettings=JSON.parse(a)),applyDesktopSettings();for(var s="",r=1;r<27;r++)s+="<option value='"+r+"'>CTRL-"+String.fromCharCode(64+r)+" ("+r+")</option>";QH("specialkeylist",s),setupGeneralServerStats(),setupServerTimelineStats(),userInterfaceSelectMenu(),setupMeshSummaryStats(),QV("p4UserBatchCreate",0==(524288&features)),d4EditWrapVal=getstore("editorWrap",0),d4EditSizeVal=getstore("editorSize",0),d4ToggleWrap(!0),d4ToggleSize(!0),null!=pluginHandler&&pluginHandler.callHook("onWebUIStartupEnd"),-1==["en","ko","ja","zh-chs"].indexOf("{{{lang}}}")&&""!="{{{lang}}}".toLowerCase()&&QC("body").add("nonenglish");var l=document.getElementsByClassName("topbar_td");for(var d in l)l[d].innerHTML&&(l[d].innerHTML=l[d].innerHTML.split(" ").join("&nbsp;"));if(null!=customui&&customui.devicesbarbuttons){s="";for(var d in customui.devicesbarbuttons){var c="one"==customui.devicesbarbuttons[d].selection||"many"==customui.devicesbarbuttons[d].selection?"disabled":"";s+='<input id="cui:'+d+'" type="button" value="'+customui.devicesbarbuttons[d].name+'" '+c+' onclick=customUIAction(event,"devicesbarbuttons") />'}QH("devCustomUIBar",s)}10<=sessionTime&&(sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8)))}function refreshCookieSession(){var e=null;try{e=new XDomainRequest}catch(e){}(e=e||new XMLHttpRequest).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 customUIAction(e,t){var o=e.srcElement.id;if(0!=o.startsWith("cui:")){var n=customui[t][o.substring(4)];if(null!=n&&"devicesbarbuttons"==t){for(var i=document.getElementsByClassName("DeviceCheckbox"),a=[],s=0;s<i.length;s++)!0===i[s].checked&&a.push(i[s].defaultValue.substring(6));"string"==typeof n.action&&("event"==n.action&&meshserver.send({action:"uicustomevent",section:t,element:o.substring(4),selectedDevices:a}),n.action.startsWith("dialog:")&&showCustomUiDialog(n.action.substring(7),{section:t,element:o.substring(4),selectedDevices:a}))}}}function showCustomUiDialog(e,t){if(null!=customui&&null!=customui.dialogs&&"object"==typeof customui.dialogs[e]){var o="",n=customui.dialogs[e],i=3;if("string"==typeof n.text&&(o+="<div style=margin-bottom:8px>"+n.text+"</div>"),"number"==typeof n.buttons&&(i=n.buttons),"object"==typeof n.elements)for(var a in n.elements){var s=n.elements[a];if("text"==s.type&&(o+=addHtmlValue(s.name,"<input id=cui:"+a+" style=width:230px autocomplete=off />")),"droplist"==s.type){var r="";for(var l in s.options)r+='<option value="'+l+'">'+EscapeHtml(s.options[l])+"</option>";o+=addHtmlValue(s.name,'<select id="cui:'+a+'" style=width:230px autocomplete=off />'+r+"</select>")}}setDialogMode(2,n.title,i,showCustomUiDialogEx,o,{action:"uicustomevent",section:"dialogs",element:e,src:t,values:{}})}}function showCustomUiDialogEx(e,t){if(1==e){var o=customui.dialogs[t.element];if("object"==typeof o.elements)for(var n in o.elements){var i=o.elements[n];"text"==i.type&&(t.values[n]=Q("cui:"+n).value),"droplist"==i.type&&(t.values[n]=Q("cui:"+n).value)}meshserver.send(t)}}function adjustPanels(){var e=args.hide;0==footerBar&&(e|=4),QV("masthead",!(1&e)),QV("topbar",!(2&e)),QV("footer",!(4&e)),QV("p1title",!(8&e)),QV("p2title",!(8&e)),QV("p3title",!(8&e)),QV("p4title",!(8&e)),QV("p5title",!(8&e)),QV("p6title",!(8&e)),QV("p10title",!(8&e)),QV("p11title",!(8&e)),QV("p12title",!(8&e)),QV("p13title",!(8&e)),QV("p14title",!(8&e)),QV("p15title",!(8&e)),QV("p16title",!(8&e)),QV("p17title",!(8&e)),QV("p20title",!(8&e)),QV("p21title",!(8&e)),QV("p30title",!(8&e)),QV("p31title",!(8&e)),QV("p40title",!(8&e)),QV("p41title",!(8&e)),QV("p50title",!(8&e)),QV("p51title",!(8&e)),footerBar?QC("body").remove("nofooter"):QC("body").add("nofooter"),0!=args.hide&&(2==uiMode?(QS("container")["grid-template-rows"]=(1&e?"0":"66")+"px fit-content(48px) auto "+(4&e?"0":"45")+"px",QS("container")["-ms-grid-rows"]=(1&e?"0":"66")+"px fit-content(48px) auto "+(4&e?"0":"45")+"px"):(QS("container")["grid-template-rows"]=(1&e?"0":"66")+"px "+(2&e?"0":"24")+"px auto "+(4&e?"0":"45")+"px",QS("container")["-ms-grid-rows"]=(1&e?"0":"66")+"px "+(2&e?"0":"24")+"px auto "+(4&e?"0":"45")+"px"));var t=(1&e?0:66)+(2&e?0:24)+(4&e?0:45)+(8&e?0:60),o=1<uiMode?24:0;QS("p2info").height="calc(100vh - "+(20+t+o)+"px)",QS("p2info")["max-height"]="calc(100vh - "+(20+t+o)+"px)",QS("p3users")["max-height"]="calc(100vh - "+(50+t)+"px)",QS("p3events").height="calc(100vh - "+(50+t)+"px)",QS("p5filetable").height="calc(100vh - "+(99+t)+"px)",QS("p13filetable").height="calc(100vh - "+(127+t+o)+"px)",QS("serverMainStats").height="calc(100vh - "+(50+t+o)+"px)",QS("serverMainStats")["max-height"]="calc(100vh - "+(50+t+o)+"px)",QS("xdevices")["max-height"]="calc(100vh - "+(46+t)+"px)",QS("xdevicesmap")["max-height"]="calc(100vh - "+(46+t)+"px)",QS("p15agentConsole").height="calc(100vh - "+(84+t+o)+"px)",QS("p15agentConsole")["max-height"]="calc(100vh - "+(84+t+o)+"px)",QS("p15agentConsoleText").height="calc(100vh - "+(81+t+o)+"px)",QS("p15agentConsoleText")["max-height"]="calc(100vh - "+(81+t+o)+"px)";var n=!(0===args.xterm||null!=terminal&&null==xterm);fullscreen?(QS("deskarea3x").height=null,QS("deskarea3x")["max-height"]=null,QS("p14iframe").height=null,QS("p14iframe")["max-height"]=null,n&&(QS("termarea3x").height="calc(100vh - 55px)",QS("termarea3xdiv").height="calc(100vh - 55px)",QS("termarea3x")["max-width"]="calc(1px)")):(QS("deskarea3x").height="calc(100vh - "+(74+t+o)+"px)",QS("deskarea3x")["max-height"]="calc(100vh - "+(74+t+o)+"px)",QS("p14iframe").height="calc(100vh - "+(23+t+o)+"px)",QS("p14iframe")["max-height"]="calc(100vh - "+(23+t+o)+"px)",n&&(QS("termarea3x").height="calc(100vh - "+(74+t+o)+"px)",QS("termarea3xdiv").height="calc(100vh - "+(74+t+o)+"px)",QS("termarea3x")["max-width"]="calc(1px)")),QS("p43iframe").height="calc(100vh - "+(84+t)+"px)",QS("p43iframe")["max-height"]="calc(100vh - "+(84+t)+"px)",QS("p6info").height="calc(100vh - "+(t-50+o)+"px)",QS("p6info")["max-height"]="calc(100vh - "+(t-50+o)+"px)",QS("p10info").height="calc(100vh - "+(20+t+o)+"px)",QS("p10info")["max-height"]="calc(100vh - "+(20+t+o)+"px)",QS("p17info").height="calc(100vh - "+(20+t+o)+"px)",QS("p17info")["max-height"]="calc(100vh - "+(20+t+o)+"px)",QS("p30info").height="calc(100vh - "+(20+t+o)+"px)",QS("p30info")["max-height"]="calc(100vh - "+(20+t+o)+"px)",QS("p51info").height="calc(100vh - "+(20+t+o)+"px)",QS("p51info")["max-height"]="calc(100vh - "+(20+t+o)+"px)",QS("p16events").height="calc(100vh - "+(50+t+o)+"px)",QS("p16events")["max-height"]="calc(100vh - "+(50+t+o)+"px)",QS("p31events").height="calc(100vh - "+(50+t+o)+"px)",QS("p31events")["max-height"]="calc(100vh - "+(50+t+o)+"px)",QS("p41events").height="calc(100vh - "+(48+t+o)+"px)",QS("p41events")["max-height"]="calc(100vh - "+(48+t+o)+"px)",QS("p52recordings").height="calc(100vh - "+(48+t+o)+"px)",QS("p52recordings")["max-height"]="calc(100vh - "+(48+t+o)+"px)",""!="{{currentNode}}".toLowerCase()&&(QV("p10BackButton",!1),QV("p11BackButton",!1),QV("p12BackButton",!1),QV("p13BackButton",!1),QV("p14BackButton",!1),QV("p15BackButton",!1),QV("p16BackButton",!1)),p1updateInfo()}function toggleAspectRatio(e){1===e&&putstore("deskAspectRatio",deskAspectRatio=(deskAspectRatio+1)%3),deskAdjust()}function toggleStackMenu(e){1==webPageFullScreen&&(1===e&&putstore("webPageStackMenu",webPageStackMenu=!webPageStackMenu),0==webPageStackMenu?QC("body").remove("menu_stack"):(QC("body").add("menu_stack"),10<=xxcurrentView&&QC("column_l").remove("room4submenu")),deskAdjust())}function showUserInterfaceSelectMenu(){Q("uiViewButton1").classList.remove("uiSelectorSel"),Q("uiViewButton2").classList.remove("uiSelectorSel"),Q("uiViewButton3").classList.remove("uiSelectorSel"),Q("uiViewButton4").classList.remove("uiSelectorSel"),Q("uiViewButton5").classList.remove("uiSelectorSel");try{Q("uiViewButton"+uiMode).classList.add("uiSelectorSel")}catch(e){}QV("uiMenu","none"==QS("uiMenu").display),nightMode&&Q("uiViewButton4").classList.add("uiSelectorSel"),footerBar&&Q("uiViewButton5").classList.add("uiSelectorSel")}function userInterfaceSelectMenu(e){e&&putstore("uiMode",uiMode=e),webPageFullScreen=uiMode<3,webPageStackMenu=1<uiMode,toggleFullScreen(0),toggleStackMenu(0),webPageStackMenu&&10<=xxcurrentView?QC("column_l").add("room4submenu"):QC("column_l").remove("room4submenu"),adjustPanels()}function toggleNightMode(){(nightMode=!nightMode)?(QC("body").add("night"),QS("body")["background-color"]="#000"):(QC("body").remove("night"),QS("body")["background-color"]="#d3d9d6"),putstore("nightMode",nightMode?"1":"0")}function toggleFooterBarMode(){putstore("footerBar",(footerBar=!footerBar)?"1":"0"),QS("container")["grid-template-rows"]=null,QS("container")["-ms-grid-rows"]=null,adjustPanels()}function toggleFullScreen(e){1===e&&putstore("webPageFullScreen",webPageFullScreen=!webPageFullScreen),0==webPageFullScreen?(QC("body").remove("menu_stack"),QC("body").remove("fullscreen"),QC("body").remove("arg_hide"),10<=xxcurrentView&&QC("column_l").add("room4submenu"),QV("UserDummyMenuSpan",!1)):(QC("body").add("fullscreen"),16&args.hide&&QC("body").add("arg_hide"),QV("page_leftbar",!(16&args.hide)),QV("MainMenuSpan",!(16&args.hide)),10<=xxcurrentView&&QC("column_l").remove("room4submenu"),QV("UserDummyMenuSpan",xxcurrentView<10&&webPageFullScreen)),masterUpdate(512),QV("body",!0)}function getNodeFromId(e){if(null!=nodes)for(var t in nodes)if(nodes[t]._id==e)return nodes[t];return null}function reload(){var e=window.location.href;e.endsWith("/#")&&(e=e.substring(0,e.length-2)),window.location.href=e}function onStateChanged(e,t,o,n){if(0==t){if(setDialogMode(0),go(0),powerTimelineUpdate=powerTimelineNode=powerTimelineReq=powerTimeline=null,deleteAllNotifications(),hideContextMenu(),QV("verifyEmailId2",!1),QV("logoutControl",!1),"noauth"==n)return void QH("p0span","Não foi possível executar a autenticação");2==o?autoReconnect&&setTimeout(serverPoll,5e3):QH("p0span","Não foi possível conectar o soquete da web"),null!=authCookieRenewTimer&&(clearInterval(authCookieRenewTimer),authCookieRenewTimer=null)}else 2==t&&(meshserver.send({action:"usergroups"}),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",id:"{{currentNode}}"}),null!=pluginHandler&&meshserver.send({action:"plugins"}),""=="{{currentNode}}".toLowerCase()&&meshserver.send({action:"files"}),""=="{{viewmode}}".toLowerCase()&&go(1),authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},18e5))}function serverPoll(){var e=null;try{e=new XDomainRequest}catch(e){}(e=e||new XMLHttpRequest).open("HEAD",window.location.href),e.timeout=15e3,e.onload=function(){reload()},e.onerror=e.ontimeout=function(){setTimeout(serverPoll,1e4)},e.send()}function detectClickOnce(){for(var e in window.navigator.mimeTypes)if("application/x-ms-application"==window.navigator.mimeTypes[e].type)return!0;var t=window.navigator.userAgent.toUpperCase();return 0<=t.indexOf(".NET CLR 3.5")||0<=t.indexOf("(WINDOWS NT ")}function updateSiteAdmin(){var e=userinfo.siteadmin;QV("p2AccountSecurity",0==(4&features)&&0==serverinfo.domainauth&&0!=(4096&features)),QV("managePhoneNumber1",33554432&features&&67108864&features),QV("managePhoneNumber2",33554432&features&&!(67108864&features)),QV("manageEmail2FA",8388608&features),QV("p2AccountPassActions",0==(4&features)&&0==serverinfo.domainauth&&null!=userinfo&&0==userinfo._id.split("/")[2].startsWith("~")),QV("p2ServerActions",21&e),QV("LeftMenuMyServer",21&e),QV("MainMenuMyServer",21&e),QV("p2ServerActionsBackup",1&e),QV("p2ServerActionsRestore",4&e),QV("p2ServerActionsVersion",16&e),QV("MainMenuMyFiles",8&e),QV("LeftMenuMyFiles",8&e),0==(8&e)&&5==xxcurrentView&&(setDialogMode(0),go(1)),null!=currentNode&&gotoDevice(currentNode._id,xxcurrentView,!0),0!=(2&userinfo.siteadmin)?(null==users&&meshserver.send({action:"users"}),null==wssessions&&meshserver.send({action:"wssessioncount"})):(wssessions=users=null,masterUpdate(16384),(4==xxcurrentView||30<=xxcurrentView&&xxcurrentView<40)&&(setDialogMode(0),go(1),currentUser=null)),meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)}),QV("ServerConsole",4294967295===userinfo.siteadmin),QV("ServerTrace",4294967295===userinfo.siteadmin),115==xxcurrentView&&4294967295!=userinfo.siteadmin&&go(6),6==xxcurrentView&&0==(21&userinfo.siteadmin)&&go(1),0!=(21&e)&&meshserver.send({action:"serverstats",interval:1e4})}var updateNaggleTimer=null,updateNaggleFlags=0;function masterUpdate(e){updateNaggleFlags|=e,null==updateNaggleTimer&&(updateNaggleTimer=setTimeout(function(){512&updateNaggleFlags&&center(),1&updateNaggleFlags&&onSearchInputChanged(),2&updateNaggleFlags&&onSortSelectChange(!1),128&updateNaggleFlags&&updateMeshes(),4&updateNaggleFlags&&(updateDevices(),updateDeviceDetails(),21==xxcurrentView&&p21updateMesh()),8&updateNaggleFlags&&drawNotifications(),16&updateNaggleFlags&&32768&features&&updateMapMarkers(),32&updateNaggleFlags&&eventsUpdate(),64&updateNaggleFlags&&32768&features&&refreshMap(!1,!0),256&updateNaggleFlags&&drawDeviceTimeline(),1024&updateNaggleFlags&&deviceEventsUpdate(),2048&updateNaggleFlags&&userEventsUpdate(),4096&updateNaggleFlags&&p20updateMesh(),8192&updateNaggleFlags&&updateUserGroups(),16384&updateNaggleFlags&&updateUsers(),32768&updateNaggleFlags&&updateRecordings(),updateNaggleTimer=null,updateNaggleFlags=0,gotoStartViewPage()},150))}function count2factoraAuths(){var e=0;return 1==userinfo.otpsecret&&e++,8388608&features&&1==userinfo.otpekey&&e++,67108864&features&&null!=userinfo.phone&&e++,null!=userinfo.otphkeys&&(e+=userinfo.otphkeys),0<e&&1==userinfo.otpkeys&&e++,e}var backupCodesWarningDone=!1;function updateSelf(){var e=count2factoraAuths();if(QV("verifyEmailId",!0!==userinfo.emailVerified&&null!=userinfo.email&&1==serverinfo.emailcheck),QV("verifyEmailId2",!0!==userinfo.emailVerified&&null!=userinfo.email&&1==serverinfo.emailcheck),QV("manageOtp",0<e),QV("authPhoneNumberCheck",null!=userinfo.phone),QV("authEmailSetupCheck",1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified),QV("authAppSetupCheck",1==userinfo.otpsecret),QV("authKeySetupCheck",0<userinfo.otphkeys),QV("authCodesSetupCheck",0<userinfo.otpkeys),masterUpdate(4228),0==backupCodesWarningDone&&1==e){addNotification({text:"Adicione códigos de backup de dois fatores. Se o fator atual for perdido, não há como recuperar esta conta.",title:"Autenticação de dois fatores"}),backupCodesWarningDone=!0}var t=4294967295==userinfo.siteadmin||0==(64&userinfo.siteadmin);if(QV("p2createMeshLink1",t),QV("p2createMeshLink2",t),QV("getStarted1",t),QV("getStarted2",!t),"number"==typeof userinfo.passchange)if(-1==userinfo.passchange)QH("p2nextPasswordUpdateTime"," - Redefinir no próximo login.");else if(null!=passRequirements&&"number"==typeof passRequirements.reset){var o=userinfo.passchange+86400*passRequirements.reset-Math.floor(Date.now()/1e3);if(o<0)QH("p2nextPasswordUpdateTime"," - Redefinir no próximo login.");else if(o<3600){var n=Math.floor(o/60);QH("p2nextPasswordUpdateTime",format(1==n?" - Reinicie em 1 minuto.":" - Redefina em {0} minutos.",n))}else if(o<86400){var i=Math.floor(o/3600);QH("p2nextPasswordUpdateTime",format(1==i?" - Reinicie em 1 hora.":" - Redefina em {0} horas.",i))}else{var a=Math.floor(o/86400);QH("p2nextPasswordUpdateTime",format(1==i?" - Redefinir em 1 dia.":" - Redefina em {0} dias.",a))}}QV("MainMenuMyUsers",null!=users&&0==(4&features)||0!=(512&userinfo.siteadmin)&&0!=(134217728&features)),QV("LeftMenuMyUsers",null!=users&&0==(4&features)||0!=(512&userinfo.siteadmin)&&0!=(134217728&features)),QV("UsersGeneral",null!=users&&0==(4&features)),QV("UsersGroups",null!=users&&0==(4&features)),QV("UsersRecordings",0!=(512&userinfo.siteadmin)&&0!=(134217728&features))}function setSessionActivity(){sessionActivity=Date.now(),QH("idleTimeoutNotify","")}function checkIdleSessionTimeout(){var e=Date.now()-sessionActivity;if(e>serverinfo.timeout)window.location.href="logout";else{var t=Math.round((serverinfo.timeout-e)/1e3);t<=60?QH("idleTimeoutNotify","<br />"+format(1==t?"1 segundo até desconectar":"{0} segundos até desconectar",t)):(t=Math.round(t/60))<=5&&QH("idleTimeoutNotify","<br />"+format(1==t?"1 minuto até desconectar":"{0} minutos até desconectar",t))}}function onMessage(e,t){switch(t.action){case"trace":serverTrace.unshift(t),displayServerTrace();break;case"intersession":"removeNotify"==t.subaction&&notificationDelete(t.id);break;case"traceinfo":"object"==typeof t.traceSources&&(null!=t.traceSources&&0<t.traceSources.length?(serverTraceSources=t.traceSources,QH("p41traceStatus",EscapeHtml(t.traceSources.join(", ")))):(serverTraceSources=[],QH("p41traceStatus","Nenhum")));break;case"serverstats":updateGeneralServerStats(t);break;case"serverwarnings":if(null!=t.warnings&&0<t.warnings.length){var o="";for(var n in t.warnings)o+="<div style=color:red;padding-bottom:6px><b>ATENÇÃO:"+t.warnings[n]+"</b></div>";QH("serverWarnings",o),QV("serverWarningsDiv",!0)}break;case"servertimelinestats":setServerTimelineStats(t.events);break;case"authcookie":authCookie=t.cookie,authRelayCookie=t.rcookie;break;case"serverinfo":(serverinfo=t.serverinfo).timeout&&(setInterval(checkIdleSessionTimeout,1e4),checkIdleSessionTimeout()),1==debugmode&&console.log("Server time: ",printDateTime(new Date(serverinfo.serverTime)));break;case"userinfo":userinfo=t.userinfo,updateSiteAdmin(),updateSelf();break;case"users":for(var i in users={},t.users)users[t.users[i]._id]=t.users[i];null!=currentUser&&(currentUser=users[currentUser._id]),masterUpdate(16384),updateSelf();break;case"wssessioncount":wssessions=t.wssessions,masterUpdate(16384);break;case"meshes":for(var i in meshes={},t.meshes)meshes[t.meshes[i]._id]=t.meshes[i];null!=currentMesh&&(currentMesh=meshes[currentMesh._id]),masterUpdate(132);break;case"usergroups":var a=0;if(Array.isArray(t.ugroups)){for(var n in usergroups={},t.ugroups)a++,usergroups[t.ugroups[n]._id]=t.ugroups[n];0==a&&(usergroups=null)}else{for(var n in usergroups=t.ugroups,t.ugroups)a++,t.ugroups[n]._id=n;0==a&&(usergroups=null)}masterUpdate(8192);break;case"files":filetree=setupBackPointers(t.filetree),updateFiles(),d3updatefiles();break;case"nodes":for(var i in nodes=[],t.nodes)for(var s in t.nodes[i])null!=t.nodes[i][s]._id?(t.nodes[i][s].namel=t.nodes[i][s].name.toLowerCase(),t.nodes[i][s].rname?t.nodes[i][s].rnamel=t.nodes[i][s].rname.toLowerCase():t.nodes[i][s].rnamel=t.nodes[i][s].namel,t.nodes[i][s].meshnamel=meshes[i]?meshes[i].name.toLowerCase():"*",t.nodes[i][s].meshid=i,t.nodes[i][s].state=t.nodes[i][s].state?t.nodes[i][s].state:0,t.nodes[i][s].icon||(t.nodes[i][s].icon=1),t.nodes[i][s].ident=++nodeShortIdent,nodes.push(t.nodes[i][s])):console.log("Invalid node ("+s+"): "+JSON.stringify(t.nodes));null!=currentNode&&0==IsNodeViewable(currentNode)&&(currentNode=null,go(1)),null!=currentNode&&(null!=(currentNode=getNodeFromId(currentNode._id))?gotoDevice(currentNode._id,xxcurrentView,!0):go(1)),masterUpdate(71);break;case"powertimeline":if(t.nodeid!=powerTimelineReq)break;for(var n in powerTimelineNode=t.nodeid,powerTimeline=t.timeline,powerTimelineUpdate=Date.now()+3e5,powerTimeline)n%2==1&&(powerTimeline[n]=1e3*powerTimeline[n]);currentNode._id==t.nodeid&&masterUpdate(256);break;case"getsysinfo":if(t.nodeid!=powerTimelineReq)break;!0===t.noinfo?updateDeviceDetails(getNodeFromId(t.nodeid)):updateDeviceDetails(getNodeFromId(t.nodeid),t.hardware);break;case"lastconnect":null!=(B=getNodeFromId(t.nodeid))&&(B.lastconnect=t.time,B.lastaddr=t.addr,currentNode._id==B._id&&""==Q("MainComputerState").innerHTML&&QH("MainComputerState","<span>Visto pela última vez:<br />"+printDateTime(new Date(B.lastconnect))+"</span>"));break;case"msg":if(null!=t.nodeid){var r=-1;if(null!=nodes)for(var n in nodes)if(nodes[n]._id==t.nodeid){r=n;break}if(-1!=r)if("console"==t.type)p15consoleReceive(nodes[r],t.value,t.source);else if("notify"==t.type){if(0==(8&(s=getstore("notifications",0)))&&null!=t.amtMessage)break;s={text:t.value,title:t.title,icon:t.icon};null!=t.id&&(s.id=t.id),null!=t.nodeid&&(s.nodeid=t.nodeid),null!=t.tag&&(s.tag=t.tag),null!=t.username&&(s.username=t.username),addNotification(s)}else if("ps"==t.type)showDeskToolsProcesses(t);else if("services"==t.type)showDeskToolsServices(t);else if("getclip"==t.type&&"clipboard"==xxdialogTag&&null!=currentNode&&currentNode._id==t.nodeid)Q("d2clipText").value=t.data;else if("setclip"==t.type&&"clipboard"==xxdialogTag&&null!=currentNode&&currentNode._id==t.nodeid)QH("dlgClipStatus",t.success?"<span style=color:green>Sucesso</span>":"<span style=color:red>Falhou</span>"),setTimeout(function(){try{QH("dlgClipStatus","")}catch(e){}},2e3);else if("userSessions"==t.type&&null!=currentNode&&currentNode._id==t.nodeid&&null==desktop){var l=[];if(null!=t.data)for(var n in t.data)"Active"!=t.data[n].State&&"Console"!=t.data[n].StationName&&3!=debugmode||l.push(t.data[n]);if(0==l.length)connectDesktop(null,1,null,t.tag);else if(1==l.length)connectDesktop(null,1,l[0].SessionId,t.tag);else{o="";for(var n in l)o+='<div style="text-align:left;cursor:pointer;background-color:gray;margin:5px;padding:5px;border-radius:5px" onclick=connectDesktop(event,1,'+l[n].SessionId+","+t.tag+")>"+l[n].State+", "+l[n].StationName,l[n].Username&&(l[n].Domain?o+=" - "+l[n].Domain+"/"+l[n].Username:o+=" - "+l[n].Username),o+="</div>";QH("p11DeskSessionSelector",o),QV("p11DeskSessionSelector",!0)}}}else if("notify"==t.type){s={text:t.value,title:t.title,icon:t.icon};null!=t.id&&(s.id=t.id),null!=t.tag&&(s.tag=t.tag),null!=t.username&&(s.username=t.username),addNotification(s)}break;case"getnetworkinfo":if(currentNode._id!=t.nodeid)return;if(updateDeviceDetails(getNodeFromId(t.nodeid),null,t),2==xxdialogMode&&xxdialogTag=="if"+t.nodeid)if(null==t.netif)QH("d2netinfo","Nenhuma informação de interface de rede disponível para este dispositivo.");else{o="<div class=dialogText>";if(currentNode.lastconnect&&(o+=addHtmlValue2("Última conexão do agente",printDateTime(new Date(currentNode.lastconnect)))),currentNode.lastaddr){var d=currentNode.lastaddr.split(":");2<d.length?o+=addHtmlValue2("Último endereço do agente",currentNode.lastaddr+' <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(currentNode.lastaddr)+'") width=10 height=10>'):isPrivateIP(currentNode.lastaddr)?o+=addHtmlValue2("Último endereço do agente",d[0]+' <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(d[0])+'") width=10 height=10>'):o+=addHtmlValue2("Último endereço do agente",'<a href="https://iplocation.com/?ip='+d[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+d[0]+'</a> <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(d[0])+'") width=10 height=10>')}for(var n in o+=addHtmlValue2("Última atualização de interfaces",printDateTime(new Date(t.updateTime))),t.netif){var c=t.netif[n];o+="<hr />",c.name&&(o+=addHtmlValue2("Nome","<b>"+EscapeHtml(c.name)+"</b>")),c.desc&&(o+=addHtmlValue2("Descrição",EscapeHtml(c.desc).replace("(R)","&reg;").replace("(r)","&reg;"))),c.dnssuffix&&(o+=addHtmlValue2("Sufixo DNS",EscapeHtml(c.dnssuffix)+' <img src="images/link4.png" title="Copiar nome para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.dnssuffix)+'") width=10 height=10>')),c.mac&&(o+=addHtmlValue2("Endereço MAC",'<a href="https://dnslytics.com/mac-address-lookup/'+c.mac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(c.mac.toLowerCase())+'</a> <img src="images/link4.png" title="Copiar endereço MAC para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.mac.toLowerCase())+'") width=10 height=10>')),c.v4addr&&(o+=addHtmlValue2("Endereço IPv4",EscapeHtml(c.v4addr)+' <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.v4addr)+'") width=10 height=10>')),c.v4mask&&(o+=addHtmlValue2("Máscara IPv4",EscapeHtml(c.v4mask)+' <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.v4mask)+'") width=10 height=10>')),c.v4gateway&&(o+=addHtmlValue2("Gateway IPv4",EscapeHtml(c.v4gateway)+' <img src="images/link4.png" title="Copiar endereço para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.v4gateway)+'") width=10 height=10>')),c.gatewaymac&&(o+=addHtmlValue2("Gateway MAC",'<a href="https://dnslytics.com/mac-address-lookup/'+c.gatewaymac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(c.gatewaymac.toLowerCase())+'</a> <img src="images/link4.png" title="Copiar endereço MAC para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(c.gatewaymac.toLowerCase())+'") width=10 height=10>'))}o+="</div>",QH("d2netinfo",o)}break;case"serverversion":if(2==xxdialogMode&&"MeshCentralServerUpdate"==xxdialogTag){o="<div class=dialogText>";t.tags.current||(t.tags.current="Desconhecido"),t.tags.stable||(t.tags.stable="Desconhecido"),t.tags.latest||(t.tags.latest="Desconhecido"),o+=addHtmlValue2("Versão Atual","<b>"+EscapeHtml(t.tags.current)+"</b>"),o+="<hr />",o+=addHtmlValue2("<label><input id=d2updateCheck1 type=checkbox onclick=server_showVersionDlgUpdate()"+("Desconhecido"==t.tags.stable||t.tags.current==t.tags.stable?" disabled":"")+" /> Stable Version</label>","<b>"+EscapeHtml(t.tags.stable)+"</b>"),o+=addHtmlValue2("<label><input id=d2updateCheck2 type=checkbox onclick=server_showVersionDlgUpdate()"+("Desconhecido"==t.tags.latest||t.tags.current==t.tags.latest?" disabled":"")+" /> Última versão</label>","<b>"+EscapeHtml(t.tags.latest)+"</b>"),o+="</div>",t.tags.current==t.tags.latest&&t.tags.current==t.tags.stable||0==(2048&features)?setDialogMode(2,"Versão MeshCentral",1,null,o):(setDialogMode(2,"Versão MeshCentral",3,server_showVersionDlgEx,o+="<hr />Marque e clique em OK para iniciar a atualização automática do servidor.",t.tags),server_showVersionDlgUpdate())}break;case"servererrors":if(2==xxdialogMode&&"MeshCentralServerErrors"==xxdialogTag)if(null==t.data)setDialogMode(2,"Erros do servidor MeshCentral",1,null,"O servidor não possui log de erros.");else{o='<div class="dialogText dialogTextLog"><pre id=d2ServerErrorsLogPre>'+EscapeHtml(t.data)+"</pre></div>";o+='<br /><div style=float:right><img src=images/link4.png height=10 width=10 title="Baixar log de erro" style=cursor:pointer onclick=d2CopyServerErrorsToClip()></div>',setDialogMode(2,"Erros do servidor MeshCentral",3,server_showErrorsDlgEx,o+="<div><label><input id=d2clearErrorsCheck type=checkbox onclick=server_showErrorsDlgUpdate() /> Verifique e clique em OK para limpar o log de erros.</label></div>"),server_showErrorsDlgUpdate()}break;case"serverconsole":p15consoleReceive("serverconsole",t.value);break;case"events":null!=t.nodeid&&null!=currentNode&&t.nodeid==currentNode._id?(currentDeviceEvents=t.events,masterUpdate(1024)):null!=t.user&&t.user==currentUser.name?(currentUserEvents=t.events,masterUpdate(2048)):(events=t.events,masterUpdate(32));break;case"recordings":p52recordings=t.events,updateRecordings();break;case"getcookie":if("clickonce"==t.tag)if(1==t.trustedCert){var u=window.location.origin+domainUrl+"clickonce/minirouter/MeshMiniRouter.application?WS=wss%3A%2F%2F"+window.location.hostname+"%2Fmeshrelay.ashx%3Fauth="+t.cookie+"&CH={{{webcerthash}}}&AP="+t.protocol+(1==debugmode?"":"&HOL=1");window.open(u,"_blank").opener=null}else{var p=""=="{{{serverRedirPort}}}".toLowerCase()?"{{{serverPublicPort}}}":"{{{serverRedirPort}}}";u="http://"+window.location.hostname+":"+p+domainUrl+"clickonce/minirouter/MeshMiniRouter.application?WS=wss%3A%2F%2F"+window.location.hostname+"%2Fmeshrelay.ashx%3Fauth="+t.cookie+"&CH={{{webcerthash}}}&AP="+t.protocol+(1==debugmode?"":"&HOL=1");window.open(u,"_blank").opener=null}else if("novnc"==t.tag){var m=window.location.origin+domainUrl+"novnc/vnc.html?ws=wss%3A%2F%2F"+window.location.host+"%2Fmeshrelay.ashx%3Fauth%3D"+t.cookie+"&show_dot=1"+(urlargs.key?"&key="+urlargs.key:"");null!=(B=getNodeFromId(t.nodeid))&&(m+="&name="+encodeURIComponentEx(B.name)),window.open(m,"mcnovnc/"+t.nodeid).opener=null}else if("mstsc"==t.tag){u=window.location.origin+domainUrl+"mstsc.html?ws="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");null!=(B=getNodeFromId(t.nodeid))&&(u+="&name="+encodeURIComponentEx(B.name)),window.open(u,"mcmstsc/"+t.nodeid).opener=null}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){var g=t.secret;52==g.length?g=g.split(/(.............)/).filter(Boolean).join(" "):32==g.length&&(g=(g=g.split(/(....)/).filter(Boolean).join(" ")).substring(0,20)+"<br/>"+g.substring(20)),QH("d2optinfo","<table style=width:380px><tr><td style=vertical-align:top>"+format('Instale o <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank> Google Authenticator </a> ou um aplicativo compatível e digitalize o código de barras, use <a href="{0}" rel="noreferrer noopener" target=_blank> esse link </a> ou digite o segredo. Em seguida, insira o token atual de 6 dígitos abaixo para ativar o login em duas etapas.',t.url)+'<br /><br />Secret<br /><tt id=d2optsecret secret="'+t.secret+'" style=font-size:12px>'+g+'</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="'+t.url+'" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />Digite o token aqui para o login em duas etapas: <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></td></table>'),new QRCode(Q("qrcode"),{text:t.url,width:128,height:128,colorDark:"#000000",colorLight:"#EEE",correctLevel:QRCode.CorrectLevel.H}),QV("idx_dlgOkButton",!0),QE("idx_dlgOkButton",!1),Q("d2otpauthinput").focus()}break;case"otpauth-setup":if(xxdialogMode)return;setDialogMode(2,"Autenticador de aplicativo",1,null,t.success?"<b style=color:green>Ativação do aplicativo autenticador bem-sucedida.</b> Agora você precisará de um token válido para fazer login novamente.":"<b style=color:red>Falha na ativação do login em duas etapas.</b> Limpe o segredo do aplicativo e tente novamente. Você tem apenas alguns minutos para inserir o código correto.");break;case"otpauth-clear":if(xxdialogMode)return;setDialogMode(2,"Autenticador de aplicativo",1,null,t.success?"<b>Aplicativo autenticador removido.</b> Você pode reativar esse recurso a qualquer momento.":"<b style=color:red>A remoção da ativação do login em duas etapas falhou.</b> Tente novamente.");break;case"otpauth-getpasswords":if(xxdialogMode)return;o="Os tokens únicos podem ser usados como autenticação secundária. Gere um conjunto, imprima-os e mantenha-os em um local seguro.";if(o+='<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 class=selecttext style=width:100%;text-align:center>',t.passwords){var v=0,h="";for(var n in t.passwords){++v%2&&(o+="<tr>");for(var f=""+t.passwords[n].p;f.length<8;)f="0"+f;!0===t.passwords[n].u?(o+="<td>"+f.substring(0,4)+"&nbsp;"+f.substring(4),""!=h&&(h+=" "),h+=f):o+="<td><strike style=color:#BBB>"+f.substring(0,4)+"&nbsp;"+f.substring(4)}}else o+="<tr><td>Nenhum token ativo";o+="</table></div></div><br />",o+="<div><input type=button value=Fechar onclick=setDialogMode(0) style=float:right></input>",o+='<input type=button value="Gere novos tokens" onclick="account_manageOtp(1);"></input>',null!=t.passwords&&(o+='<input type=button value="Limpar Tokens" onclick="account_manageOtp(2);"></input>',o+='&nbsp;<img src=images/link4.png height=10 width=10 title="Copiar códigos válidos para a área de transferência" style=cursor:pointer onclick=copyTextToClip2("'+encodeURIComponentEx(h)+'")>'),setDialogMode(2,"Gerenciar códigos de backup",8,null,o+="</div><br />","otpauth-manage");break;case"otp-hkey-get":if(xxdialogMode&&"otpauth-hardware-manage"!=xxdialogTag)return;var x='<div style="border-radius:6px;border:2px solid #CCC;background-color:#BBB;width:100%;box-sizing:border-box;margin-bottom:6px"><div style="margin:3px;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold"><table style=width:100%;text-align:left>',k="</table></div></div>";o='<a href="https://www.yubico.com/" rel="noreferrer noopener" target="_blank">Chaves Hardware</a> são usados como autenticação de login secundária.';if(o+='<div style="max-height:150px;overflow-y:auto;overflow-x:hidden;margin-top:6px;margin-bottom:6px">',t.keys&&0<t.keys.length)for(var n in t.keys){var b=t.keys[n];o+=x+'<tr style=margin:5px><td style=width:30px><img width=24 height=18 src="images/hardware-key-'+(2==b.type?"OTP":"WebAuthn")+'-24.png" style=margin-top:4px><td style=width:250px>'+b.name+'<td><input type=button value="Remover" onclick=account_removehkey('+b.i+")></input>"+k}else o+=x+"<tr style=text-align:center><td>Nenhuma chave configurada"+k;o+="</div>",o+='<div><input type=button value="Fechar" onclick=setDialogMode(0) style=float:right></input>',0!=(131072&features)&&(o+='<input id=d2addkey3 type=button value="Adicionar chave" onclick="account_addhkey(3);"></input>'),0!=(16384&features)&&(o+='<input id=d2addkey2 type=button value="Adicione YubiKeyreg; OTP" onclick="account_addhkey(2);"></input>'),setDialogMode(2,"Gerenciar chaves de segurança",8,null,o+="</div><br />","otpauth-hardware-manage"),0==u2fSupported()&&QE("d2addkey1",!1);break;case"otp-hkey-yubikey-add":t.result?meshserver.send({action:"otp-hkey-get"}):setDialogMode(2,"Adicionar chave de segurança",1,null,"<br />Erro, não foi possível adicionar a chave.<br /><br />");break;case"otp-hkey-setup-response":if(xxdialogMode&&"otpauth-hardware-manage"!=xxdialogTag)return;1==t.result?meshserver.send({action:"otp-hkey-get"}):setDialogMode(2,"Adicionar chave de segurança",1,null,"<br />ERRO: Não foi possível adicionar a chave.<br /><br />","otpauth-hardware-manage");break;case"webauthn-startregister":if(xxdialogMode&&"otpauth-hardware-manage"!=xxdialogTag)return;setDialogMode(2,"Adicionar chave de segurança",2,null,o='Pressione o botão da tecla agora.<br /><br /><div style=width:100%;text-align:center><img width=120 height=117 src="images/hardware-keypress-120.png" /></div><input id=dp1keyname style=display:none value='+t.name+" />");var y=t.request;t.request.challenge=Uint8Array.from(atob(t.request.challenge),function(e){return e.charCodeAt(0)}),t.request.user.id=Uint8Array.from(atob(t.request.user.id),function(e){return e.charCodeAt(0)}),setTimeout(function(){navigator.credentials.create({publicKey:y}).then(function(e){var t={rawId:btoa(String.fromCharCode.apply(null,new Uint8Array(e.rawId))),response:{attestationObject:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.attestationObject))),clientDataJSON:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.clientDataJSON)))},type:e.type};meshserver.send({action:"webauthn-endregister",response:t}),setDialogMode(0)},function(e){setDialogMode(2,"Adicionar chave de segurança",1,null,"ERRO:"+e)})},100);break;case"verifyPhone":if(xxdialogMode&&"verifyPhone"!=xxdialogTag)return;o='<table><tr><td><img src="images/phone80.png" style=padding:8px>';o+="<td>Check your phone and enter the verification code.",setDialogMode(2,"Phone Notifications",3,account_managePhoneConfirm,o+='<br /><br /><div style=width:100%;text-align:center>Verification code: <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"event":if(!t.event.nolog){if(currentNode&&t.event.nodeid==currentNode._id){currentDeviceEvents.unshift(t.event);for(var w=parseInt(p16limitdropdown.value);currentDeviceEvents.length>w;)currentDeviceEvents.pop();masterUpdate(1024)}if(currentUser&&t.event.userid==currentUser._id){currentUserEvents.unshift(t.event);for(w=parseInt(p31limitdropdown.value);currentUserEvents.length>w;)currentUserEvents.pop();masterUpdate(2048)}events.unshift(t.event);for(w=parseInt(p3limitdropdown.value);events.length>w;)events.pop();masterUpdate(32)}if(t.event.noact)break;switch(t.event.action){case"recording":null!=p52recordings&&(p52recordings.unshift(t.event),t.event.present=1,updateRecordings());break;case"userWebState":try{if(null!=localStorage){var C=localStorage.getItem("showRealNames"),D=localStorage.getItem("uiMode"),M=localStorage.getItem("sort"),S=localStorage.getItem("loctag"),E=localStorage.getItem("nightMode"),A=localStorage.getItem("footerBar"),T=JSON.parse(t.event.state);for(var n in T)localStorage.setItem(n,T[n]);null!=T.deskAspectRatio&&T.deskAspectRatio!=deskAspectRatio&&(deskAspectRatio=T.deskAspectRatio,deskAdjust()),null!=T.showRealNames&&T.showRealNames!=C&&(showRealNames=Q("RealNameCheckBox").checked="1"==T.showRealNames,masterUpdate(6)),null!=T.uiMode&&T.uiMode!=D&&userInterfaceSelectMenu(parseInt(T.uiMode)),null!=T.sort&&T.sort!=M&&(document.getElementById("sortselect").selectedIndex=sort=parseInt(T.sort),masterUpdate(6)),null!=T.loctag&&T.loctag!=S&&(null!=T.loctag?args.locale=T.loctag:delete args.locale,masterUpdate(4294967295)),null!=T.nightMode&&T.nightMode!=E&&((nightMode="1"==T.nightMode)?(QC("body").add("night"),QS("body")["background-color"]="#000"):(QC("body").remove("night"),QS("body")["background-color"]="#d3d9d6")),null!=T.footerBar&&T.footerBar!=A&&(footerBar="1"==T.footerBar,QS("container")["grid-template-rows"]=null,QS("container")["-ms-grid-rows"]=null,adjustPanels())}}catch(e){}break;case"servertimelinestats":addServerTimelineStats(t.event.data);break;case"accountcreate":case"accountchange":if(userinfo._id==t.event.account._id){var N=t.event.account.siteadmin?t.event.account.siteadmin:0,_=userinfo.siteadmin?userinfo.siteadmin:0;(t.event.account.quota!=userinfo.quota||0==(8&userinfo.siteadmin)&&0!=(8&t.event.account.siteadmin))&&meshserver.send({action:"files"});var I=userinfo.groups;if(userinfo=t.event.account,_!=N&&updateSiteAdmin(),updateSelf(),0!=(2&userinfo.siteadmin)){var U=I||[],V=userinfo.groups?userinfo.groups:[];U.join(",")!=V.join(",")&&(users=wssessions=null,meshserver.send({action:"users"}),meshserver.send({action:"wssessioncount"}))}t.event.nodeListChange==userinfo._id&&meshserver.send({action:"nodes"})}if(null==users)break;null==userinfo.groups||0==userinfo.groups.length||1==findOne(t.event.account.groups,userinfo.groups)?users[t.event.account._id]=t.event.account:delete users[t.event.account._id],masterUpdate(16388);break;case"accountremove":if(null==users)break;delete users[t.event.userid],masterUpdate(16384);break;case"createusergroup":case"usergroupchange":null==usergroups&&(usergroups={});var R=usergroups[t.event.ugrpid];null==R?usergroups[t.event.ugrpid]={_id:t.event.ugrpid,name:t.event.name,desc:t.event.desc,domain:t.event.domain,links:t.event.links}:(R.name=t.event.name,t.event.desc?R.desc=t.event.desc:delete R.desc,t.event.links?R.links=t.event.links:delete R.links),masterUpdate(28672),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes"});break;case"deleteusergroup":if(null!=usergroups&&null!=usergroups[t.event.ugrpid]){delete usergroups[t.event.ugrpid];var H=0;for(var n in usergroups)H++;0==H&&(usergroups=null),masterUpdate(24576)}break;case"createmesh":null!=meshes[t.event.meshid]||!serverinfo.manageAllDeviceGroups&&null==t.event.links[userinfo._id]||(meshes[t.event.meshid]={_id:t.event.meshid,name:t.event.name,mtype:t.event.mtype,desc:t.event.desc,links:t.event.links},masterUpdate(24708),meshserver.send({action:"files"}));break;case"meshchange":if(null==meshes[t.event.meshid]){var F=!1;for(var n in null!=t.event.links[userinfo._id]&&(F=!0),null!=userinfo.links[t.event.meshid]&&(F=!0),userinfo.links)n.startsWith("ugrp/")&&null!=t.event.links[n]&&(F=!0);F&&(meshes[t.event.meshid]={_id:t.event.meshid,name:t.event.name,mtype:t.event.mtype,desc:t.event.desc,links:t.event.links},meshserver.send({action:"nodes"}))}else{if(null!=t.event.name)for(var n in meshes[t.event.meshid].name=t.event.name,nodes)nodes[n].meshid==t.event.meshid&&(nodes[n].meshnamel=t.event.name.toLowerCase());if(null!=t.event.desc&&(meshes[t.event.meshid].desc=t.event.desc),null!=t.event.flags&&(meshes[t.event.meshid].flags=t.event.flags),null!=t.event.consent&&(meshes[t.event.meshid].consent=t.event.consent),t.event.links&&(meshes[t.event.meshid].links=t.event.links),t.event.amt&&(meshes[t.event.meshid].amt=t.event.amt),null!=t.event.invite?meshes[t.event.meshid].invite=t.event.invite:delete meshes[t.event.meshid].invite,0==IsMeshViewable(t.event.meshid)){20==xxcurrentView&&currentMesh==meshes[t.event.meshid]&&go(2),delete meshes[t.event.meshid];var P=[];for(var n in nodes)(nodes[n].meshid!=t.event.meshid||null!=userinfo.links&&null!=userinfo.links[nodes[n]._id])&&P.push(nodes[n]);nodes=P,10<=xxcurrentView&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(1))}}masterUpdate(24708),currentNode&&!IsNodeViewable(currentNode)&&(currentNode=null,10<=xxcurrentView&&xxcurrentView<20&&go(1)),20==xxcurrentView&&currentMesh._id==t.event.meshid&&masterUpdate(4096);break;case"deletemesh":meshes[t.event.meshid]&&(delete meshes[t.event.meshid],masterUpdate(128),meshserver.send({action:"files"}));P=[];if(null!=nodes)for(var n in nodes)nodes[n].meshid!=t.event.meshid&&P.push(nodes[n]);nodes=P,masterUpdate(24580),20<=xxcurrentView&&xxcurrentView<30&&currentMesh._id==t.event.meshid&&(setDialogMode(0),go(2)),10<=xxcurrentView&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(1));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),masterUpdate(23);break;case"removenode":r=-1;for(var n in nodes)if(nodes[n]._id==t.event.nodeid){r=n;break}if(-1!=r){B=nodes[r];currentNode==B&&(10<=xxcurrentView&&xxcurrentView<20&&(setDialogMode(0),go(1)),currentNode=null),nodes.splice(r,1),masterUpdate(20)}break;case"changenode":r=-1;for(var n in nodes)if(nodes[n]._id==t.event.nodeid){r=n;break}if(-1!=r)(B=nodes[r]).name=t.event.node.name,B.rname=t.event.node.rname,B.users=t.event.node.users,B.host=t.event.node.host,B.desc=t.event.node.desc,B.ip=t.event.node.ip,B.osdesc=t.event.node.osdesc,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.userloc=t.event.node.userloc,B.rdpport=t.event.node.rdpport,B.rfbport=t.event.node.rfbport,B.consent=t.event.node.consent,null!=t.event.node.links?B.links=t.event.node.links:delete B.links,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.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.av&&(B.av=t.event.node.av),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),masterUpdate(30),refreshDevice(B._id),currentNode==B&&null!=xxdialogMode&&"@xxmap"==xxdialogTag&&p10showNodeLocationDialog();break;case"nodemeshchange":r=-1;for(var n in nodes)if(nodes[n]._id==t.event.nodeid){r=n;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():"*",masterUpdate(7)):(10<=xxcurrentView&&xxcurrentView<20&&!IsNodeViewable(currentNode)&&(currentNode=null,setDialogMode(0),go(1)),nodes.splice(r,1),masterUpdate(20)),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),masterUpdate(23)}break;case"nodeconnect":r=-1;for(var n in nodes)if(nodes[n]._id==t.event.nodeid){r=n;break}if(-1!=r){B=nodes[r],s=getstore("notifications",0);t.event.meshid&&userinfo.links&&userinfo.links[t.event.meshid]&&userinfo.links[t.event.meshid].notify?s&=userinfo.links[t.event.meshid].notify:s=0,2&s&&(0==(1&B.conn)&&0!=(1&t.event.conn)&&addNotification({text:"Agente conectado",title:B.name,icon:B.icon,nodeid:B._id}),0==(2&B.conn)&&0!=(2&t.event.conn)&&addNotification({text:"Intel AMT detectado",title:B.name,icon:B.icon,nodeid:B._id}),0==(4&B.conn)&&0!=(4&t.event.conn)&&addNotification({text:"Intel AMT CIRA conectado",title:B.name,icon:B.icon,nodeid:B._id}),0==(16&B.conn)&&0!=(16&t.event.conn)&&addNotification({text:"MQTT conectado",title:B.name,icon:B.icon,nodeid:B._id})),4&s&&(0!=(1&B.conn)&&0==(1&t.event.conn)&&addNotification({text:"Agente desconectado",title:B.name,icon:B.icon,nodeid:B._id}),0!=(2&B.conn)&&0==(2&t.event.conn)&&addNotification({text:"Intel AMT não detectado",title:B.name,icon:B.icon,nodeid:B._id}),0!=(4&B.conn)&&0==(4&t.event.conn)&&addNotification({text:"Intel AMT CIRA desconectado",title:B.name,icon:B.icon,nodeid:B._id}),0!=(16&B.conn)&&0==(16&t.event.conn)&&addNotification({text:"MQTT desconectado",title:B.name,icon:B.icon,nodeid:B._id})),B.conn=t.event.conn,B.pwr=t.event.pwr,B.lastconnect=Date.now(),0==(1&B.conn)&&delete B.sessions,masterUpdate(21),refreshDevice(B._id)}break;case"wssessioncount":null!=wssessions&&(0==t.event.count&&wssessions[t.event.userid]?delete wssessions[t.event.userid]:wssessions[t.event.userid]=t.event.count,masterUpdate(16384));break;case"login":null!=users&&users[t.event.userid]&&(users[t.event.userid].login=Math.floor(new Date(t.event.time).getTime()/1e3));break;case"scanamtdevice":if(null==xxdialogMode||!Q("dp1range")||Q("dp1range").value!=t.event.range)return;o="";if(null==t.event.results)o="<div style=width:100%;text-align:center;margin-top:12px>Não foi possível verificar este intervalo de endereços.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>";else{for(var n in amtScanResults=t.event.results,t.event.results){var L=t.event.results[n],O=L.hostname;"host"==L.hosttype&&(O=capitalizeFirstLetter(O.split(".")[0])),20<O.length&&(O=O.substring(0,20)+"...");var G='<b title="'+EscapeHtml(L.hostname)+'">'+EscapeHtml(O)+"</b> - v"+L.ver;2==L.state?1==L.tls?G+=" com TLS.":G+=" sem TLS.":G+=" not activated.",o+='<div style=width:100%;margin-bottom:2px;background-color:lightgray><div style=padding:4px><div style=display:inline-block;margin-right:5px><input class=DevScanCheckbox name=dp1checkbox tag="'+EscapeHtml(n)+'" type=checkbox onclick=addAmtScanToMeshCheckbox() /></div><div class=j1 style=display:inline-block></div><div style=display:inline-block;margin-left:5px;overflow-x:auto;white-space:nowrap>'+G+"</div></div></div>"}""==o&&(o="<div style=width:100%;text-align:center;margin-top:12px>Scan returned no results.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>")}QH("dp1results",o),QE("dp1range",!0),QE("dp1rangebutton",!0);break;case"notify":s={text:t.event.value,title:t.event.title,icon:t.event.icon};null!=t.id&&(s.id=t.id),null!=t.event.tag&&(s.tag=t.event.tag),addNotification(s);break;case"traceinfo":"object"==typeof t.event.traceSources&&(null!=t.event.traceSources&&0<t.event.traceSources.length?(serverTraceSources=t.event.traceSources,QH("p41traceStatus",EscapeHtml(t.event.traceSources.join(", ")))):(serverTraceSources=[],QH("p41traceStatus","Nenhum")));break;case"sysinfohash":null!=currentNode&&t.event.nodeid==powerTimelineReq&&meshserver.send({action:"getsysinfo",nodeid:t.event.nodeid});break;case"devicesessions":if(null==(B=getNodeFromId(t.event.nodeid)))break;if(B.sessions=t.event.sessions,null!=B.sessions){for(var n in B.sessions)0==Object.keys(B.sessions[n]).length&&delete B.sessions[n];0==Object.keys(B.sessions).length&&delete B.sessions}masterUpdate(4),null!=currentNode&&currentNode._id==t.event.nodeid&&gotoDevice(currentNode._id,xxcurrentView,!0),xxdialogTag=="SESSIONS-"+t.event.nodeid&&showDeviceSessions(t.event.nodeid,!0);break;case"stopped":break;case"updatePluginList":installedPluginList=t.event.list,updatePluginList();break;case"pluginStateChange":if(null==pluginHandler)break;pluginHandler.refreshPluginHandler();break;case"plugin":if(null==pluginHandler)break;try{pluginHandler[t.event.plugin][t.event.pluginaction](t)}catch(e){console.log("O PluginHandler não pôde receber a mensagem:",e)}}break;case"createInviteLink":if(xxdialogTag!=t.meshid)break;var z=serverinfo.name;-1!=z.indexOf(".")&&0==(2&features)||(z=window.location.hostname);var q;domainUrl.substring(0,domainUrl.length-1);if(1==serverinfo.https)q="https://"+z+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl+"agentinvite?c="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");else q="http://"+z+(80==serverinfo.port?"":":"+serverinfo.port)+domainUrl+"agentinvite?c="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");Q("agentInvitationLink").href=q;var K=format(1==t.expire?"1 hora":"{0} horas",t.expire);24==t.expire&&(K="1 dia"),168==t.expire&&(K="1 semana"),5040==t.expire&&(K="1 mês"),0==t.expire&&(K="Ilimitado"),QH("agentInvitationLink",format("Link de convite ({0})",K)),QV("agentInvitationLinkDiv",!0);break;case"getmqttlogin":if(null==currentNode||currentNode._id!=t.nodeid||null!=xxdialogMode)return;o="Essas configurações podem ser usadas para conectar o MQTT a este dispositivo.<br /><br />";delete t.action,delete t.nodeid,setDialogMode(2,"Credenciais MQTT",1,null,o+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>"+JSON.stringify(t)+"</textarea>");break;case"stopped":autoReconnect=!1,QH("p0span",t.msg);break;case"updatePluginList":installedPluginList=t.list,updatePluginList();break;case"pluginVersionsAvailable":if(null==pluginHandler)break;updatePluginList(t.list);break;case"downgradePluginVersions":var j='<select id="lastPluginVersion">';t.info.versionList.forEach(function(e){j+='<option value="'+e.zipball_url+'">'+e.name+"</option>"}),j+="</select>",setDialogMode(2,"Ação do Plugin",3,pluginActionEx,format("Select the version to downgrade the plugin: {0}",t.info.name)+"<hr />"+j+"<hr />Esteja ciente de que a desclassificação não é recomendada. Faça isso apenas no caso de uma atualização recente ter quebrado alguma coisa.NaN"+t.info.id+'" />');break;case"pluginError":setDialogMode(2,"Erro de plug-in",1,null,t.msg);break;case"plugin":if(null==pluginHandler||"string"!=typeof t.plugin)break;try{pluginHandler[t.plugin][t.method](e,t)}catch(e){console.log("Error loading plugin handler ("+e+")")}}}function gotoStartViewPage(){var e=parseInt("{{viewmode}}");if(-1==xxcurrentView){if(""!="{{currentNode}}".toLowerCase()){if(null==getNodeFromId("{{currentNode}}"))return;gotoDevice("{{currentNode}}",e)}else if(null!=args.gotonode){if(null==getNodeFromId("node/"+domain+"/"+args.gotonode))return;gotoDevice("node/"+domain+"/"+args.gotonode,e),goBackStack.push(1)}else if(null!=args.gotomesh){if(null==meshes["mesh/"+domain+"/"+args.gotomesh])return;gotoMesh("mesh/"+domain+"/"+args.gotomesh),go(e),goBackStack.push(2)}else if(null!=args.gotouser){var t=args.gotouser;if(args.gotouser.indexOf("/")<0&&(t="user/"+domain+"/"+args.gotouser),null==users||null==users[t])return;gotoUser(t),go(e),goBackStack.push(4)}else if(null!=args.gotougrp){var o=args.gotougrp;if(args.gotougrp.indexOf("/")<0&&(o="ugrp/"+domain+"/"+args.gotougrp),null==usergroups||null==usergroups[o])return;gotoUserGroup(o),go(e),goBackStack.push(50)}else isNaN(e)?(setDialogMode(0),go(1)):go(e);delete args.gotonode,delete args.gotomesh,delete args.gotouser,delete args.gotougrp}}function onRealNameCheckBox(){putstore("showRealNames",(showRealNames=Q("RealNameCheckBox").checked)?1:0),masterUpdate(6)}function onOnlineCheckBox(e){putstore("onlineOnly",Q("OnlineCheckBox").checked?1:0),onDeviceSearchChanged(e)}function onDeviceViewChange(e){null!=e&&(Q("viewselect").value=e);for(var t=1;t<5;t++)Q("devViewButton"+t).classList.remove("viewSelectorSel");Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel"),putstore("deviceView",Q("viewselect").value),putstore("viewsize",Q("sizeselect").value),masterUpdate(4),setTimeout(function(){masterUpdate(512)},200)}function ondockeypress(e){if(setSessionActivity(),!xxdialogMode&&11==xxcurrentView&&desktop&&Q("DeskControl").checked){if(null!=currentNode){var t=GetNodeRights(currentNode);if(0==(4294967295==t||0!=(8&t)&&0==(256&t)))return!1;if(1==(4294967295!=t&&0!=(8&t)&&0==(256&t)&&0!=(4096&t))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}return desktop.m.handleKeys(e)}if(!xxdialogMode&&12==xxcurrentView&&terminal&&3==terminal.State&&null==xterm)return terminal.m.TermHandleKeys(e);if(!xxdialogMode&&(15==xxcurrentView||115==xxcurrentView))return agentConsoleHandleKeys(e);if(!xxdialogMode&&4==xxcurrentView){if(1==e.ctrlKey||1==e.altKey||1==e.metaKey)return;var o=0;if(e.key){if(1===e.key.length&&0==userSearchFocus&&(Q("UserSearchInput").value=Q("UserSearchInput").value+e.key,o=1),8==e.keyCode&&0==userSearchFocus){var n=Q("UserSearchInput").value;Q("UserSearchInput").value=n.substring(0,n.length-1),o=1}27==e.keyCode&&(Q("UserSearchInput").value="",o=1)}else 0!=e.charCode&&0==userSearchFocus&&(Q("UserSearchInput").value=Q("UserSearchInput").value+String.fromCharCode(e.charCode),o=1);if(0<o)return 1==o&&onUserSearchInputChanged(),haltEvent(e)}if(!xxdialogMode&&1==xxcurrentView){if(1==e.ctrlKey&&96==e.charCode)return showRealNames=!showRealNames,putstore("showRealNames",(Q("RealNameCheckBox").value=showRealNames)?1:0),void masterUpdate(6);if(1!=e.ctrlKey&&1!=e.altKey&&1!=e.metaKey){if(Q("viewselect").value<4){o=0;if(e.key){if(1===e.key.length&&0==searchFocus&&(Q("KvmSearchInput").value=Q("SearchInput").value=Q("SearchInput").value+e.key,o=1),8==e.keyCode&&0==searchFocus){n=Q("SearchInput").value;Q("KvmSearchInput").value=Q("SearchInput").value=n.substring(0,n.length-1),o=1}27==e.keyCode&&(Q("KvmSearchInput").value=Q("SearchInput").value="",o=1)}else 0!=e.charCode&&0==searchFocus&&(Q("KvmSearchInput").value=Q("SearchInput").value=Q("SearchInput").value+String.fromCharCode(e.charCode),o=1);if(0<o)return 1==o&&masterUpdate(5),haltEvent(e)}4==Q("viewselect").value&&(e.key?(1===e.key.length&&0==mapSearchFocus&&(Q("mapSearchLocation").value=Q("mapSearchLocation").value+e.key,o=1),27==e.keyCode&&(Q("mapSearchLocation").value="",mapCloseSearchWindow(),o=1),13==e.keyCode&&getSearchLocation()):0!=e.charCode&&0==mapSearchFocus&&(Q("mapSearchLocation").value=Q("mapSearchLocation").value+String.fromCharCode(e.charCode),o=1))}}}function ondockeydown(e){if(setSessionActivity(),!xxdialogMode&&11==xxcurrentView&&desktop&&Q("DeskControl").checked){if(null!=currentNode){var t=GetNodeRights(currentNode);if(0==(4294967295==t||0!=(8&t)&&0==(256&t)))return!1;if(1==(4294967295!=t&&0!=(8&t)&&0==(256&t)&&0!=(4096&t))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}return desktop.m.handleKeyDown(e)}if(!xxdialogMode&&12==xxcurrentView&&terminal&&3==terminal.State&&null==xterm&&(terminal.m.TermHandleKeyDown(e),37<=e.keyCode&&e.keyCode<=40&&haltEvent(e)),!xxdialogMode&&13==xxcurrentView&&116==e.keyCode&&null!=p13filetree)return haltEvent(e),!1;if(!xxdialogMode&&(15==xxcurrentView||115==xxcurrentView))return agentConsoleHandleKeys(e);if(!xxdialogMode&&4==xxcurrentView){if(8===e.keyCode&&0==userSearchFocus){var o=Q("UserSearchInput").value;Q("UserSearchInput").value=o.substring(0,o.length-1),n=1}if(27===e.keyCode&&(Q("UserSearchInput").value="",n=1),0<n)return 1==n&&masterUpdate(5),haltEvent(e)}if(!xxdialogMode&&1==xxcurrentView&&1!=e.ctrlKey&&1!=e.altKey&&1!=e.metaKey){var n=0;if(Q("viewselect").value<4){if(8===e.keyCode&&0==searchFocus){o=Q("SearchInput").value;Q("KvmSearchInput").value=Q("SearchInput").value=o.substring(0,o.length-1),n=1}if(27===e.keyCode&&(Q("KvmSearchInput").value=Q("SearchInput").value="",n=1),0<n)return 1==n&&masterUpdate(5),haltEvent(e)}if(4==Q("viewselect").value){if(8===e.keyCode&&0==mapSearchFocus){o=Q("mapSearchLocation").value;Q("mapSearchLocation").value=o.substring(0,o.length-1),n=1}27===e.keyCode&&(Q("mapSearchLocation").value="",mapCloseSearchWindow(),n=1)}}}function ondockeyup(e){if(setSessionActivity(),!xxdialogMode&&11==xxcurrentView&&desktop&&Q("DeskControl").checked){if(null!=currentNode){var t=GetNodeRights(currentNode);if(0==(4294967295==t||0!=(8&t)&&0==(256&t)))return!1;if(1==(4294967295!=t&&0!=(8&t)&&0==(256&t)&&0!=(4096&t))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}return desktop.m.handleKeyUp(e)}return!xxdialogMode&&12==xxcurrentView&&terminal&&3==terminal.State&&null==xterm?terminal.m.TermHandleKeyUp(e):xxdialogMode||13!=xxcurrentView||116!=e.keyCode||null==p13filetree?xxdialogMode||4!=xxcurrentView||(8!==e.keyCode||0!=searchFocus)&&27!==e.keyCode?(xxdialogMode&&27==e.keyCode&&dialogclose(0),xxdialogMode||0!=xxcurrentView||1==e.ctrlKey||1==e.altKey||1==e.metaKey?void 0:Q("viewselect").value<4&&(8===e.keyCode&&0==searchFocus||27===e.keyCode)?haltEvent(e):4==Q("viewselect").value&&(8===e.keyCode&&0==mapSearchFocus||27===e.keyCode)?haltEvent(e):void 0):haltEvent(e):(p13folderup(9999),haltEvent(e),!1)}function ondocblur(){if(!xxdialogMode&&11==xxcurrentView&&desktop&&Q("DeskControl").checked&&desktop.m.handleReleaseKeys)return desktop.m.handleReleaseKeys()}function devMouseHover(e,t){setSessionActivity();var o=Q("viewselect").value;if(1==o)(n=e.children[1].children[1]).children[0].classList.remove("g1s"),n.children[1].classList.remove("e2s"),n.children[2].classList.remove("g2s"),1==t&&(n.children[0].classList.add("g1s"),n.children[1].classList.add("e2s"),n.children[2].classList.add("g2s"));else if(2==o){var n;(n=e).children[2].classList.remove("g1s"),n.children[4].classList.remove("e2s"),n.children[3].classList.remove("g2s"),1==t&&(n.children[2].classList.add("g1s"),n.children[4].classList.add("e2s"),n.children[3].classList.add("g2s"))}}var deviceHeaderCount,deviceHeaderId=0,deviceHeaderTotal=0,deviceHeadersTitles={},deviceHeaders={},oldviewmode=0;function updateDevices(){if(null!=nodes&&1==xxcurrentView){var e="",t=0,o=null,n={},i=Q("viewselect").value,a={},s={};if(QV("xdevices",i<4),QV("xdevicesmap",4==i),QV("devListToolbar",i<3),QV("kvmListToolbar",3==i),QV("devMapToolbar",4==i),QV("devListToolbarSize",3==i),QV("NoMeshesPanel",0==nodes.length&&0==meshcount),QV("devListToolbarViewIcons",0<nodes.length),QV("devListToolbarSort",0<nodes.length&&i<4),0==nodes.length&&(i=1,sort=0),4==i)setTimeout(function(){null!=xxmap.map&&xxmap.map.updateSize()},200);else{deviceHeaderCount={},deviceHeaders={},deviceHeadersTitles={};var r=[];(deviceHeaderTotal=deviceHeaderId=0)==sort?nodes.sort(meshSort):1==sort?nodes.sort(powerSort):2==sort&&(1==showRealNames?nodes.sort(deviceHostSort):nodes.sort(deviceSort));for(var l=[],d=document.getElementsByClassName("DeviceCheckbox"),c=0;c<d.length;c++)d[c].checked&&l.push(d[c].value);oldviewmode<3&&3==i?multiDesktopFilter=l:3==oldviewmode&&i<3&&(l=multiDesktopFilter);var u=Q("column_l").clientWidth-60,p=Math.floor(u/301);for(var c in p=301+Math.floor((u-301*p)/p),nodes){if(0!=(q=nodes[c]).v){var m=meshes[q.meshid],g=GetNodeRights(q);if(0==sort){if((meshes[q.meshid]?q.meshid:"*")!=o){1!=i&&3!=i||null==o||(e+="</div>"),deviceHeaderSet();var v="";if(2==i&&(e+="<tr><td colspan=5>"),meshes[q.meshid]&&1==meshes[q.meshid].mtype&&(v="<span class=devHeaderx>, Intel&reg; AMT only</span>"),1==i&&null!=o&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),2==i&&(e+="<div>"),e+="<div class=DevSt style=width:100%;padding-top:4px><span style=float:right>",e+="<span id=DevxHeader"+deviceHeaderId+" class=devHeaderx></span>"+v,e+="</span>",1==i||2==i||3==i){var h=CollapsedGroups[q.meshid];e+='<img class=collapseImage id="DevxColImg'+deviceHeaderId+'" src=images/c'+(!0===h?"1":"2")+'.png height=8 width=8 style=margin-left:2px;margin-right:2px;cursor:pointer onclick=toggleCollapseGroup("'+deviceHeaderId+'","'+q.meshid+'",'+i+")></img>"}o=meshes[q.meshid]?(e+='<span id=MxMESH cmenu=meshContextMenu tabindex=0 style=cursor:pointer onclick=gotoMesh("'+q.meshid+"\") onkeypress=\"if (event.key=='Enter') gotoMesh('"+q.meshid+"')\">"+EscapeHtml(meshes[q.meshid].name)+"</span>"+getMeshActions(m,g)+"</div>",q.meshid):(e+="<span id=MxMESH><i>Individual Devices</i></span></div>","*"),2==i&&(e+="</div>"),t=0,(n[o]=1)!=i&&3!=i||(e+="<div id=DevxCol"+deviceHeaderId+(!0===h?" style=display:none":"")+">")}}else if(1==sort){var f=q.pwr?q.pwr:0;if(f!==o){if(1!=i&&3!=i||null==o||(e+="</div>"),deviceHeaderSet(),1==i&&null!==o&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),2==i&&(e+="<tr><td>"),e+="<div class=DevSt style=width:100%;padding-top:4px><span id=DevxHeader"+deviceHeaderId+" class=devHeaderx style=float:right></span>",1==i||2==i||3==i){h=CollapsedGroups["pwr:"+f];e+='<img class=collapseImage id="DevxColImg'+deviceHeaderId+'" src=images/c'+(!0===h?"1":"2")+'.png height=8 width=8 style=margin-left:2px;margin-right:2px;cursor:pointer onclick=toggleCollapseGroup("'+deviceHeaderId+'","pwr:'+f+'",'+i+")></img>"}e+="<span>"+PowerStateStr2(q.pwr)+"</span></div>",o=f,t=0,1!=i&&3!=i||(e+="<div id=DevxCol"+deviceHeaderId+(!0===h?" style=display:none":"")+">")}}else 2==sort&&null==o&&(o="1");0;var x=EscapeHtml(q.name);0==x.length&&(x="<i>Nenhum</i>"),null!=q.rname&&0<q.rname.length&&(x+=" / "+EscapeHtml(q.rname));var k=EscapeHtml(q.name);1==showRealNames&&null!=q.rname&&(k=EscapeHtml(q.rname)),0==k.length&&(k="<i>Nenhum</i>");var b="";if(null!=q.sessions&&(null==q.sessions.kvm&&null==q.sessions.terminal&&null==q.sessions.files||(b=2==i?"<img onclick=showDeviceSessions('"+q._id+"',null,event) class=deviceNotifySmallDot src=images/icon-relay-notify10.png width=10 height=10>":"<img onclick=showDeviceSessions('"+q._id+"',null,event) class=deviceNotifyDot src=images/icon-relay-notify.png width=16 height=16>"),null!=q.sessions.battery&&1==i)){var y=q.sessions.battery,w="";"ac"==y.state&&(w="Device is plugged-in"),"dc"==y.state&&(w="Device is battery powered");var C="",D=-1;"number"==typeof y.level&&0<=y.level&&y.level<=100&&(C=y.level+"%",5<(D=Math.floor((y.level+10)/25)+1)&&(lvl=5),"ac"==y.state&&(100==y.level?D=11:D+=5)),0<D&&(b+='<div class="deviceBatterySmall deviceBatterySmall'+D+'" title="'+(null!=w?w+", "+C:C)+'"></div>')}var M=q.icon;if(q.conn&&0!=q.conn||(M+=" gray"),1==i)e+="<div id=devs cmenu=devsContentMenu onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;position:relative;width:"+p+'px;height:50px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:12px><input class="'+q.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+q._id+" type=checkbox></div><div style=height:100%;cursor:pointer tabindex=0 onclick=gotoDevice('"+q._id+"',null,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+q._id+'\',null,null,event)"><div class="i'+M+'" style=width:50px;float:left></div><div style=height:100%><div class=g1></div><div class=e2><div class=e1 style=width:'+(p-100)+'px title="'+x+'">'+k+"</div><div>"+NodeStateStr(q)+"</div></div><div class=g2></div></div></div>"+b+"</div>";else if(2==i){var S=[];q.conn&&(0!=(1&q.conn)&&S.push('<span title="O agente de malha está conectado e pronto para uso.">Agente</span>'),0!=(2&q.conn)?S.push('<span title="Intel&reg; O AMT CIRA está conectado e pronto para uso.">CIRA</span>'):0!=(4&q.conn)&&S.push('<span title="Intel&reg; AMT é roteável.">AMT</span>'),0!=(8&q.conn)&&S.push('<span title="O agente de malha é alcançável usando outro agente como retransmissão.">Retransmissão</span>'),0!=(16&q.conn)&&S.push('<span title="A conexão MQTT com o dispositivo está ativa.">MQTT</span>'));var E=q.meshid;1==sort?E="pwr:"+(q.pwr?q.pwr:0):3==sort&&(E="tag:**xx**xx*TaG*xx**xx**"),e+="<tr name=DevxCol"+E+((h=3!=sort&CollapsedGroups[E])?" style=display:none":"")+"><td style=position:relative><div id=devs cmenu=devsContentMenu class=bar18 tabindex=0 onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=height:18px;width:100%;font-size:medium onkeypress=\"if (event.key=='Enter') gotoDevice('"+q._id+"',null,null,event)\">",e+='<div class=deviceBarCheckbox><input class="'+q.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+q._id+" type=checkbox></div>",e+="<div class=deviceBarIcon onclick=gotoDevice('"+q._id+"',null,null,event)><div class=\"j"+M+'" style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>',e+="<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>",e+='<div class=style10 style=cursor:pointer;font-size:14px title="'+x+"\" onclick=gotoDevice('"+q._id+"',null,null,event)><span style=width:300px>"+k+"</span></div></div>"+b+"</td>",e+="<td style=text-align:center>"+getUserShortStr(q),e+="<td style=text-align:center>"+(null!=q.ip?q.ip:""),e+="<td style=text-align:center>"+S.join("&nbsp;+&nbsp;"),e+="</tr>"}else 3==i&&1&q.conn&&0!=(8&g||256&g)&&0!=(1&q.agent.caps)&&multiDesktopFilter&&(0==multiDesktopFilter.length||0<=multiDesktopFilter.indexOf("devid_"+q._id))&&(e+="<div id=devs cmenu=devsContentMenu style=display:inline-block;position:relative;margin:1px;background-color:lightgray;border-radius:5px;position:relative><div tabindex=0 style=padding:3px;cursor:pointer onclick=gotoDevice('"+q._id+"',11,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+q._id+"',11,null,event)\">"+b,e+='<div class="j'+M+'" style=width:16px;float:left></div>&nbsp;'+k+"</div>",e+="<span onclick=gotoDevice('"+q._id+"',null,null,event)></span><div id=xkvmid_"+q._id.split("/")[2]+"><div id=skvmid_"+q._id.split("/")[2]+' tabindex=0 style="position:absolute;color:white;left:5px;top:27px;text-shadow:0px 0px 5px #000;z-index:1000;cursor:default" onclick=toggleKvmDevice(\''+q._id+"') onkeypress=\"if (event.key=='Enter') toggleKvmDevice('"+q._id+"')\">Desconectado</div></div>",e+="</div>",r.push(q._id));if(3==sort&&""!=e){if(q.tags)for(var A in q.tags){var T=q.tags[A],N=(h=CollapsedGroups["tag:"+T],e.replace("**xx**xx*TaG*xx**xx**",encodeURIComponentEx(T)+(h?" style=display:none":"")));if(null==a[T]?(a[T]=N,s[T]=1):(a[T]+=N,s[T]+=1),3==i)break}e=""}deviceHeaderTotal++,void 0===deviceHeaderCount[q.state]?deviceHeaderCount[q.state]=1:deviceHeaderCount[q.state]++}}if(1==i&&null!=o&&(e+="</div>"),32<=r.length&&(Q("autoConnectDesktopCheckbox").checked=!1),QE("autoConnectDesktopCheckbox",r.length<32),3==sort){var _=[],I=0;for(var c in a)_.push(c);for(var A in _.sort(function(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}),_){c=_[A];if(2==i)e+="<tr><td colspan=4><div class=DevSt style=width:100%;padding-top:4px>",e+='<img class=collapseImage id="DevxColImg'+I+'" src=images/c'+(!0===(h=CollapsedGroups["tag:"+encodeURIComponentEx(c)])?"1":"2")+'.png height=8 width=8 style=margin-left:2px;margin-right:2px;cursor:pointer onclick=toggleCollapseGroup("'+I+'","tag:'+encodeURIComponentEx(c)+'",2)></img>',e+="<span class=devHeaderx style=float:right>"+s[c]+" node"+(1<s[c]?"s":"")+"</span><span>"+c+"</span></div>"+a[c];else e+="<div class=DevSt style=width:100%;padding-top:4px><span class=devHeaderx style=float:right>"+s[c]+" node"+(1<s[c]?"s":"")+"</span>",e+='<img class=collapseImage id="DevxColImg'+I+'" src=images/c'+(!0===(h=CollapsedGroups["tag:"+encodeURIComponentEx(c)])?"1":"2")+'.png height=8 width=8 style=margin-left:2px;margin-right:2px;cursor:pointer onclick=toggleCollapseGroup("'+I+'","tag:'+encodeURIComponentEx(c)+'")></img>',e+="<span>"+c+"</span></div>",e+="<div id=DevxCol"+I+(!0===h?" style=display:none":"")+">",e+=a[c],e+="</div>";I++}}var U=!1;if(""==e&&0<nodes.length&&""!=Q("SearchInput").value&&(U=!0,e=3==sort?'<div style="margin:30px">No devices are included in any groups, click on a device\'s "Groups" to add to a group.</div>':'<div style="margin:30px">Nenhum dispositivo correspondente a esta pesquisa.</div>'),1==i&&2==t&&(e+="<td><div style=width:301px></div></td>"),0==sort&&""==Q("SearchInput").value&&i<3){var V=deviceHeaderId,R=[];for(var c in meshes)R.push(meshes[c]);for(var c in R.sort(nameSort),R){var H=R[c];g=GetMeshRights(H);if(null==n[H._id])""!=o&&""!=e&&(e+="</tr></table>"),e+="<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr><td colspan=3 class=DevSt>",e+='<img class=collapseImage id="DevxColImg'+ ++V+'" src=images/c'+(!0===(h=CollapsedGroups[H._id])?"1":"2")+'.png height=8 width=8 style=margin-left:2px;margin-right:2px;cursor:pointer onclick=toggleCollapseGroup("'+V+'","'+H._id+'")></img>',e+='<span id=MxMESH style=cursor:pointer onclick=gotoMesh("'+H._id+'")>'+EscapeHtml(H.name)+"</span><span>",e+=getMeshActions(H,g),e+="</span></td></tr><tr>",1==H.mtype?(e+="<td><div style=padding:10px><i>Nenhum Intel&reg; dispositivos AMT nessa malha",0!=(4&g)&&(e+=", <a href=# style=cursor:pointer onclick='return addDeviceToMesh(\""+H._id+"\")'>Adicione um</a>")):2==H.mtype&&(e+="<td>",e+="<div id=DevxCol"+V+(!0===h?" style=display:none":"")+">",e+="<div style=padding:10px><i>Nenhum dispositivo neste grupo",0!=(4&g)&&(e+=", <a href=# style=cursor:pointer onclick='return addAgentToMesh(\""+H._id+"\")'>Adicione um</a>")),e+=".</i></div></td>",e+="</div>",o=H._id,0}}""!=e&&0==U?(e+="</table>",2==i&&(e="<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray><th style=color:gray;width:120px>Do utilizador<th style=color:gray;width:120px>Endereço<th style=color:gray;width:100px>Conectividade"+e+"</tr></table><div style=height:1px></div>")):(e+="</table>",3==sort&&(e='<div style="margin:10px"><i>Nenhum dispositivo com tags encontrado.</i></div>')),e+="<div style=border-top-style:solid;border-top-width:1px;border-top-color:#DDDDDD;cursor:pointer;font-size:10px>",i<3&&0==sort&&0<nodes.length&&(4294967295==userinfo.siteadmin||0==(64&userinfo.siteadmin))&&(e+='<a href=# onclick="return account_createMesh()" title="Crie um novo grupo de dispositivos." style=cursor:pointer>Adicionar grupo de dispositivos</a>&nbsp'),4294967295!=userinfo.siteadmin&&0!=(128&userinfo.siteadmin)||(e+="<a href=# onclick='return p10showMeshCmdDialog(0)' style=cursor:pointer title=\"Faça o download do MeshCmd, uma ferramenta de linha de comando que executa muitas funções.\">MeshCmd</a>&nbsp","win32"==navigator.platform.toLowerCase()&&(e+="<a href=# onclick='return p10showMeshRouterDialog()' style=cursor:pointer title=\"Faça o download do MeshCentral Router, uma ferramenta de mapeamento de portas TCP.\">Roteador</a>&nbsp")),e+="</div><br/>",QH("xdevices",e),deviceHeaderSet();d=document.getElementsByClassName("DeviceCheckbox");if(l)for(c=0;c<d.length;c++)d[c].checked=0<=l.indexOf(d[c].value);for(var c in deviceHeaders)QH(c,deviceHeaders[c]);for(var c in deviceHeadersTitles)Q(c).title=deviceHeadersTitles[c];if(p1updateInfo(),3==i&&1==xxcurrentView){var F=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex],P=F.x+2,B=u-5,L=Math.floor(B/P);for(var c in L=P+Math.floor((B-L*P)/L),F.y=F.y*(L/F.x),F.x=L,multiDesktop)multiDesktop[c].xxdelete=!0;for(var c in r){var O=r[c],G=O.split("/")[2],z=multiDesktop[O];if(null!=z)z.m.CanvasId.setAttribute("style","background-color:black;width:"+F.x+"px;height:"+F.y+"px"),Q("xkvmid_"+G).appendChild(z.m.CanvasId),delete z.xxdelete,QH("skvmid_"+G,["Desconectado","Conectando...","Configurando...","",""][null==z.m.State?z.m.state:z.m.State]);else{var q=getNodeFromId(O);if(desktopNode==q&&null!=desktop){(t=desktop.m.CanvasId).setAttribute("id","kvmid_"+G),t.setAttribute("style","background-color:black;width:"+F.x+"px;height:"+F.y+"px"),t.setAttribute("onclick","toggleKvmDevice('"+O+"')"),t.removeAttribute("onmousedown"),t.removeAttribute("onmouseup"),t.removeAttribute("onmousemove"),Q("xkvmid_"+G).appendChild(t),QH("skvmid_"+G,["Desconectado","Conectando...","Configurando...","",""][null==desktop.m.State?desktop.m.state:desktop.m.State]),desktop.m.SendCompressionLevel&&desktop.m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate),desktop.shortid=G,desktop.onStateChanged=onMultiDesktopStateChange,multiDesktop[O]=desktop,desktop=desktopNode=currentNode=null,QH("DeskParent",'<canvas id="Desk" oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>')}else{(t=document.createElement("canvas")).setAttribute("id","kvmid_"+G),t.setAttribute("width",640),t.setAttribute("height",480),t.setAttribute("oncontextmenu","return false"),t.setAttribute("style","background-color:black;width:"+F.x+"px;height:"+F.y+"px"),t.setAttribute("onclick","toggleKvmDevice('"+O+"')");try{Q("xkvmid_"+G).appendChild(t)}catch(e){}1==Q("autoConnectDesktopCheckbox").checked&&setTimeout(function(){connectMultiDesktop(q,1)},100)}}}for(var c in multiDesktop)1==multiDesktop[c].xxdelete?(multiDesktop[c].Stop(),delete multiDesktop[c]):debugmode&&multiDesktop[c].m&&multiDesktop[c].m.onScreenSizeChange&&mdeskAdjust(multiDesktop[c].m,multiDesktop[c].m.ScreenWidth,multiDesktop[c].m.ScreenHeight,multiDesktop[c].m.CanvasId);deskAdjust()}else disconnectAllKvmFunction(),Q("autoConnectDesktopCheckbox").checked=!1}oldviewmode=i}}function showDeviceSessions(e,t,o){if(o&&haltEvent(o),xxdialogMode&&!t)return!1;var n=null,i="";if(null==(n=null==e?currentNode:getNodeFromId(e))||null==n.sessions)return setDialogMode(0),!1;for(var a in n.sessions)if("kvm"==a&&null==n.sessions.multidesk)for(var s in i+="<u>Remote Desktop</u>",n.sessions.kvm)i+=addHtmlValue4(getUserName(s),1==n.sessions.kvm[s]?"1 sessão":nobreak(format("{0} sessões",n.sessions.kvm[s])));else if("multidesk"==a)for(var s in i+="<u>Remote Desktop</u>",n.sessions.multidesk)i+=addHtmlValue4(getUserName(s),1==n.sessions.multidesk[s]?"1 sessão":nobreak(format("{0} sessões",n.sessions.multidesk[s])));else if("terminal"==a)for(var s in i+="<u>Terminal</u>",n.sessions.terminal)i+=addHtmlValue4(getUserName(s),1==n.sessions.terminal[s]?"1 sessão":nobreak(format("{0} sessões",n.sessions.terminal[s])));else if("files"==a)for(var s in i+="<u>Arquivos</u>",n.sessions.files)i+=addHtmlValue4(getUserName(s),1==n.sessions.files[s]?"1 sessão":nobreak(format("{0} sessões",n.sessions.files[s])));return""!=i&&setDialogMode(2,"Sessions - "+EscapeHtml(n.name),1,null,i,"SESSIONS-"+n._id),!1}function toggleCollapseGroup(e,t,o){var n;if(2==o){var i=document.getElementsByName("DevxCol"+t);if(0==i.length)return;(n="none"==i[0].style.display)?delete CollapsedGroups[t]:CollapsedGroups[t]=!0;for(var a=0;a<i.length;a++)i[a].style.display=n?"":"none"}else(n="none"==QS("DevxCol"+e).display)?delete CollapsedGroups[t]:CollapsedGroups[t]=!0,QV("DevxCol"+e,n);Q("DevxColImg"+e).src=n?"images/c2.png":"images/c1.png",putstore("_collapse",JSON.stringify(CollapsedGroups))}function toggleKvmDevice(e){"string"==typeof e&&(e=getNodeFromId(e));var t=GetNodeRights(e);(8&t||256&t)&&1&e.conn&&connectMultiDesktop(e,1)}function getUserShortStr(e){if(null==e||null==e.users||0==e.users.length)return"";if(1<e.users.length)return'<span title="'+EscapeHtml(e.users.join(", "))+'">'+nobreak(format("{0} usuários",e.users.length))+"</span>";var t=e.users[0],o=t,n=t.indexOf("\\");return 0<n&&(o=t.substring(n+1)),15<(o=EscapeHtml(o)).length&&(o=o.substring(0,14)+"&#8230;"),'<span title="'+EscapeHtml(t)+'">'+o+"</span>"}function autoConnectDesktops(){1==Q("autoConnectDesktopCheckbox").checked&&connectAllKvmFunction()}function connectAllKvmFunction(e){if(xxdialogMode)return!1;if(!0!==e){var t=0;for(var o in nodes){var n=nodes[o],i=nodes[o]._id;if(null==multiDesktop[i]&&(0==multiDesktopFilter.length||0<=multiDesktopFilter.indexOf("devid_"+i))){var a=GetNodeRights(n);(8&a||256&a)&&1&n.conn&&1==n.v&&t++}}if(8<t)return void setDialogMode(2,"Conectar todos",3,function(){connectAllKvmFunction(!0)},format("Tem certeza de que deseja se conectar a {0} dispositivos?",t))}for(var o in nodes)1==nodes[o].v&&null==multiDesktop[nodes[o]._id]&&(0==multiDesktopFilter.length||0<=multiDesktopFilter.indexOf("devid_"+nodes[o]._id))&&toggleKvmDevice(nodes[o]._id)}function disconnectAllKvmFunction(){if(xxdialogMode)return!1;for(var e in multiDesktop)multiDesktop[e].Stop();multiDesktop={}}function onMultiDesktopStateChange(e,t){try{QH("skvmid_"+e.shortid,["Desconectado","Conectando...","Configurando...","",""][t])}catch(e){}}function onDeviceSearchChanged(e){"SearchInput"==e.target.id?Q("KvmSearchInput").value=Q("SearchInput").value:Q("SearchInput").value=Q("KvmSearchInput").value,masterUpdate(5)}function showMultiDesktopSettings(){QV("d7amtkvm",!1),QV("d7meshkvm",!0),d7bitmapquality.value=multidesktopsettings.quality,d7bitmapscaling.value=multidesktopsettings.scaling,multidesktopsettings.framerate?d7framelimiter.value=multidesktopsettings.framerate:d7framelimiter.value=100,setDialogMode(7,"Configurações da área de trabalho remota",3,showMultiDesktopSettingsChanged)}function showMultiDesktopSettingsChanged(){for(var e in multidesktopsettings.quality=d7bitmapquality.value,multidesktopsettings.scaling=d7bitmapscaling.value,multidesktopsettings.framerate=d7framelimiter.value,localStorage.setItem("multidesktopsettings",JSON.stringify(multidesktopsettings)),multiDesktop)multiDesktop[e].m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate)}function connectMultiDesktop(e,t){var o=e._id,n=o.split("/")[2],i=multiDesktop[o];if(null==i){if(null==Q("kvmid_"+n))return;if(2==t){if(null==e.intelamt.user||""==e.intelamt.user)return;(i=CreateAmtRedirect(CreateAmtRemoteDesktop("kvmid_"+n),authCookie)).shortid=n,i.onStateChanged=onMultiDesktopStateChange,i.m.bpp=1,i.m.useZRLE=!0,i.m.showmouse=!0,i.m.onKvmData=function(e){console.log("KVM Data received in multi-desktop mode, this is not supported.")},0<debugmode&&(i.m.onScreenSizeChange=mdeskAdjust),i.Start(o,16994,"*","*",0),i.contype=2,multiDesktop[o]=i}else 1==t&&((i=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("kvmid_"+n),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).m.mouseCursorActive(11==xxcurrentView),i.shortid=n,i.attemptWebRTC=attemptWebRTC,i.onStateChanged=onMultiDesktopStateChange,i.m.CompressionLevel=multidesktopsettings.quality,i.m.ScalingLevel=multidesktopsettings.scaling,multidesktopsettings.framerate&&(i.m.FrameRateTimer=multidesktopsettings.framerate),0<debugmode&&(i.m.onScreenSizeChange=mdeskAdjust),i.Start(o),i.contype=1,multiDesktop[o]=i)}else i.Stop(),delete multiDesktop[o]}function getMeshActions(e,t){if(0==(4&t))return"";var o="";return 0==(1024&features)&&(o+=' <a href=# style=cursor:pointer;font-size:10px title="Adicione um novo Intel&reg; Computador AMT localizado na Internet." onclick=\'return addCiraDeviceToMesh("'+e._id+"\")'>Adicionar CIRA</a>"),1==e.mtype&&(0==(1&features)&&(o+=' <a href=# style=cursor:pointer;font-size:10px title="Adicione um novo Intel&reg; AMT computer that is located on the local network." onclick=\'return addDeviceToMesh("'+e._id+"\")'>Adicionar local</a>",o+=' <a href=# style=cursor:pointer;font-size:10px title="Adicione um novo Intelreg; Computador AMT digitalizando a rede local." onclick=\'return addAmtScanToMesh("'+e._id+"\")'>Escaneamento via rede</a>"),e.amt&&2==e.amt.type?o+=' <a href=# style=cursor:pointer;font-size:10px title="Execute a ativação do modo de controle do cliente Intel AMT (CCM)." onclick=\'return showCcmActivation("'+e._id+"\")'>Ativação</a>":e.amt&&3==e.amt.type&&0!=(1048576&features)&&(o+=' <a href=# style=cursor:pointer;font-size:10px title="Execute a ativação do modo de controle de administração Intel AMT (ACM)." onclick=\'return showAcmActivation("'+e._id+"\")'>Ativação</a>")),2==e.mtype&&(o+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new computer to this device group by installing the mesh agent." onclick=\'return addAgentToMesh("'+e._id+"\")'>Adicionar agente</a>",0==(2&features)&&(o+=' <a href=# style=cursor:pointer;font-size:10px title="Invite someone to install the mesh agent on this device group." onclick=\'return inviteAgentToMesh("'+e._id+"\")'>Convite</a>")),o}function addDeviceToMesh(e){if(xxdialogMode)return!1;var t=meshes[e],o=format('Adicione um novo Intel&reg; Dispositivo AMT para grupo de dispositivos "{0}".',EscapeHtml(t.name))+"<br /><br />";return o+=addHtmlValue("Nome do Dispositivo","<input id=dp1devicename style=width:230px maxlength=32 autocomplete=off onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />"),o+=addHtmlValue("Hostname",'<input id=dp1hostname style=width:230px maxlength=32 autocomplete=off placeholder="Igual ao nome do dispositivo" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />'),o+=addHtmlValue("Nome de usuário",'<input id=dp1username style=width:230px maxlength=32 autocomplete=off placeholder="správce" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />'),o+=addHtmlValue("Senha","<input id=dp1password type=password style=width:230px autocomplete=off maxlength=32 onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />"),setDialogMode(2,"Adicione Intelreg; dispositivo AMT",3,addDeviceToMeshEx,o+=addHtmlValue("Segurança","<select id=dp1tls style=width:236px><option value=0>Sem segurança TLS</option><option value=1>Segurança TLS necessária</option></select>"),e),validateDeviceToMesh(),Q("dp1devicename").focus(),!1}function showCcmActivation(e){if(xxdialogMode)return!1;var t=serverinfo.name,o=meshes[e];-1!=t.indexOf(".")&&0==(2&features)||(t=window.location.hostname);var n;domainUrl.substring(0,domainUrl.length-1);1==serverinfo.https?n="wss://"+t+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl:n="ws://"+t+(80==serverinfo.port?"":":"+serverinfo.port)+domainUrl;var i=format('Execute a ativação do modo de controle de cliente Intel AMT (CCM) para agrupar "{0}" baixando a ferramenta MeshCMD e executando-a assim:',EscapeHtml(o.name))+"<br /><br />";return setDialogMode(2,"Intel&reg; Ativação AMT",9,null,i+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtccm --url "+n+"amtactivate?id="+e.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>"),Q("idx_dlgOkButton").focus(),!1}function showAcmActivation(e){if(xxdialogMode)return!1;var t=serverinfo.name,o=meshes[e];-1!=t.indexOf(".")&&0==(2&features)||(t=window.location.hostname);var n;domainUrl.substring(0,domainUrl.length-1);1==serverinfo.https?n="wss://"+t+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl:n="ws://"+t+(80==serverinfo.port?"":":"+serverinfo.port)+domainUrl;var i=format('Execute a ativação do modo de controle de administração Intel AMT (ACM) para agrupar "{0}" baixando a ferramenta MeshCMD e executando-a assim:',EscapeHtml(o.name))+"<br /><br />";return i+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtacm --url "+n+"amtactivate?id="+e.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>",null!=serverinfo.amtAcmFqdn&&(i+="<div style=margin-top:8px>A Intel AMT precisará ser configurada com um FQDN confiável na MEBx ou ter uma LAN com fio na rede: <b>"+serverinfo.amtAcmFqdn.join(", ")+"</b></div>"),setDialogMode(2,"Intel&reg; Ativação AMT",9,null,i),Q("idx_dlgOkButton").focus(),!1}function addAmtScanToMesh(e){if(xxdialogMode)return!1;var t="Digite um intervalo de endereços IP para procurar dispositivos Intel AMT.<br /><br />";return t+=addHtmlValue("IP Range",'<input id=dp1range style=width:184px value="192.168.1.0/24" onkeyup=addAmtScanToMeshKeyUp(event) /><input id=dp1rangebutton type=button value="Scan" onclick=addAmtScanToMeshButton()></input>'),setDialogMode(2,"Digitalizar para Intel&reg; dispositivos AMT",3,addAmtScanToMeshEx,t+='<div id=dp1results style="width:100%;height:200px;background-color:white;border:1px gray solid;overflow-y:scroll"></div>',e),QE("idx_dlgOkButton",!1),QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>"),focusTextBox("dp1range"),!1}function addAmtScanToMeshKeyUp(e){13==e.keyCode&&(haltEvent(e),addAmtScanToMeshButton())}function addAmtScanToMeshEx(e,t){for(var o=document.getElementsByClassName("DevScanCheckbox"),n=0;n<o.length;n++)if(o[n].checked){var i=o[n].getAttribute("tag"),a=amtScanResults[i],s=a.hostname;"host"==a.hosttype&&(s=capitalizeFirstLetter(s.split(".")[0])),meshserver.send({action:"addamtdevice",meshid:t,devicename:s,hostname:a.hostname,amtusername:"",amtpassword:"",amttls:a.tls})}}function addAmtScanToMeshButton(){QE("dp1range",!1),QE("dp1rangebutton",!1),QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px>Escaneando...</div>"),meshserver.send({action:"scanamtdevice",range:Q("dp1range").value})}function addAmtScanToMeshCheckbox(){for(var e=document.getElementsByClassName("DevScanCheckbox"),t=0,o=0;o<e.length;o++)e[o].checked&&t++;QE("idx_dlgOkButton",0<t)}function addCiraDeviceToMesh(e){if(xxdialogMode)return!1;var t=meshes[e],o=e.split("/")[2].replace(/\@/g,"X").replace(/\$/g,"X"),n="<select id=dlgAddCiraSel onclick=dlgAddCiraSelClick() style=width:230px><option value=0>MeshCommander Script</option><option value=1>Nome de usuário / senha manual</option>";0==(16&features)&&(n+="<option value=2>Certificado manual</option></select>");var i="";return i+=addHtmlValue("Método de instalação",n),i+="<hr>",i+="<div id=dlgAddCira0>"+format("Para adicionar um novo Intel&reg; Dispositivo AMT para grupo de dispositivos \"{0}\" com CIRA, baixe os seguintes arquivos de script e use <a href='http://meshcommander.com' rel='noreferrer noopener' target='_blank'>MeshCommander</a> para executar o script para configurar computadores.",EscapeHtml(t.name))+"<br /><br />",i+=addHtmlValue("Configuração CIRA",'<a href="mescript.ashx?type=1'+(urlargs.key?"&key="+urlargs.key:"")+"&meshid="+e+'" download>cira_setup.mescript</a>'),i+=addHtmlValue("Limpeza CIRA",'<a href="mescript.ashx?type=2'+(urlargs.key?"&key="+urlargs.key:"")+'" download>cira_clean.mescript</a>'),i+="</div>",i+="<div id=dlgAddCira1 style=display:none>"+format('Para adicionar um novo Intel&reg; Dispositivo AMT para grupo de dispositivos "{0}" com CIRA, carregue o seguinte certificado como raiz confiável no Intel AMT',EscapeHtml(t.name)),serverinfo.mpspass?i+=" e autenticar no servidor usando esse nome de usuário e senha.<br /><br />":i+=" e autenticar no servidor usando esse nome de usuário e qualquer senha.<br /><br />",i+=addHtmlValue("Certificado raiz",'<a href="MeshServerRootCert.cer'+(urlargs.key?"?key="+urlargs.key:"")+'" download>Arquivo de certificado raiz</a>'),i+=addHtmlValue("Nome de usuário",'<input style=width:230px readonly value="'+o.substring(0,16)+'" />'),serverinfo.mpspass&&(i+=addHtmlValue("Senha",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpspass)+'" />')),null!=serverinfo&&(i+=addHtmlValue("Servidor MPS",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')),i+="</div>",0==(16&features)&&(i+="<div id=dlgAddCira2 style=display:none>"+format('Para adicionar um novo Intel&reg; Dispositivo AMT para grupo de dispositivos "{0}" com CIRA, carregue o seguinte certificado como raiz confiável no Intel AMT, autentique usando um certificado de cliente com o seguinte nome comum e conecte-se ao servidor a seguir.',EscapeHtml(t.name))+"<br /><br />",i+=addHtmlValue("Certificado raiz",'<a href="MeshServerRootCert.cer'+(urlargs.key?"?key="+urlargs.key:"")+'" download>Arquivo de certificado raiz</a>'),i+=addHtmlValue("Organização",'<input style=width:230px readonly value="'+o+'" />'),null!=serverinfo&&(i+=addHtmlValue("Servidor MPS",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')),i+="</div>"),setDialogMode(2,"Adicione Intelreg; AMT",2,null,i,"fileDownload"),Q("dlgAddCiraSel").focus(),!1}function dlgAddCiraSelClick(){var e=Q("dlgAddCiraSel").value;QV("dlgAddCira0",0==e),QV("dlgAddCira1",1==e),QV("dlgAddCira2",2==e)}function checkEmail(e){var t=e.split("@"),o=2==t.length&&0<t[0].length&&1<t[1].split(".").length&&2<t[1].length;if(1==o){var n=t[1].split(".");for(var i in n)0==n[i].length&&(o=!1)}return o}function inviteAgentToMesh(e){if(xxdialogMode)return!1;var t="",o=meshes[e];return 64&features&&(t+=addHtmlValue("Tipo de convite","<select id=d2InviteType onchange=d2ChangedInviteType() style=width:236px><option value=0>Link invitation</option><option value=1>Email invitation</option></select>")+"<hr />",t+="<div id=emailInviteDiv style=display:none>"+format('Convide alguém para instalar o agente de malha.Um email será enviado com o link para a instalação do agente de malha para o grupo de dispositivos "{0}".',EscapeHtml(o.name))+"<br /><br />",t+=addHtmlValue("Nome (Opcional)",'<input id=agentInviteName value="" style=width:230px maxlength=64 />'),t+=addHtmlValue("Email",'<input id=agentInviteEmail style=width:230px placeholder="example@email.com" onkeyup=validateAgentInvite()></input>'),t+=addHtmlValue("Sistema operacional","<select id=agentInviteNameOs onchange=d2ChangedInviteType() style=width:236px><option value=4>Enviar link de instalação</option><option value=0 selected>Qualquer suportado</option><option value=1>Apenas Windows</option><option value=3>Apenas Apple MacOS </option><option value=2>Apenas Linux</option></select>"),t+="<div id=d2agentexpirediv>",t+=addHtmlValue("Expiração do link","<select id=agentInviteExpire style=width:236px><option value=1>1 hora</option><option value=8>8 horas</option><option value=24>1 dia</option><option value=168>1 semana</option><option value=5040>1 mês</option><option value=0>Ilimitado</option></select>"),t+="</div>",t+=addHtmlValue("Tipo de instalação ","<select id=agentInviteType style=width:236px><option value=0>Segundo plano e interativo</option><option value=2>Apenas em segundo plano</option><option value=1>Apenas interativo</option></select>"),t+=addHtmlValue("Mensagem<br />(opcional)",'<textarea id=agentInviteMessage value="" style=width:230px;height:100px;resize:none maxlength=1024 /></textarea>'),t+="</div>"),t+="<div id=urlInviteDiv>"+format('Convide alguém para instalar o agente de malha compartilhando um link de convite.Este link indica ao usuário instruções de instalação para o grupo de dispositivos "{0}". O link é público e nenhuma conta para este servidor é necessária.',EscapeHtml(o.name))+"<br /><br />",t+=addHtmlValue("Expiração do link","<select id=d2inviteExpire style=width:236px onchange=d2RequestInvitationLink()><option value=1>1 hora</option><option value=8>8 horas</option><option value=24>1 dia</option><option value=168>1 semana</option><option value=5040>1 mês</option><option value=0>Ilimitado</option></select>"),setDialogMode(2,"Convite",3,performAgentInvite,t+='<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px;display:none"><a href=# id=agentInvitationLink target="_blank" style=cursor:pointer></a> <img src=images/link4.png height=10 width=10 title="Copiar link para a área de transferência" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>',e),64&features?(Q("d2InviteType").focus(),d2ChangedInviteType()):(Q("d2inviteExpire").focus(),validateAgentInvite()),d2RequestInvitationLink(),!1}function d2RequestInvitationLink(){meshserver.send({action:"createInviteLink",meshid:xxdialogTag,expire:parseInt(Q("d2inviteExpire").value),flags:0})}function d2ChangedInviteType(){QV("urlInviteDiv",0==Q("d2InviteType").value),QV("d2agentexpirediv",4==Q("agentInviteNameOs").value),QV("emailInviteDiv",1==Q("d2InviteType").value),validateAgentInvite()}function d2CopyInviteToClip(){copyTextToClip(Q("agentInvitationLink").href)}function validateAgentInvite(){64&features&&1==Q("d2InviteType").value?(QE("idx_dlgOkButton",checkEmail(Q("agentInviteEmail").value)),QV("idx_dlgCancelButton",!0)):(QE("idx_dlgOkButton",!0),QV("idx_dlgCancelButton",!1))}function performAgentInvite(e,t){64&features&&1==Q("d2InviteType").value&&meshserver.send({action:"inviteAgent",meshid:t,email:Q("agentInviteEmail").value,name:Q("agentInviteName").value,os:Q("agentInviteNameOs").value,flags:Q("agentInviteType").value,msg:Q("agentInviteMessage").value,expire:parseInt(Q("agentInviteExpire").value)})}function addAgentToMesh(e){if(xxdialogMode)return!1;var t=meshes[e],o="";o+=addHtmlValue("Sistema operacional","<select id=aginsSelect onchange=addAgentToMeshClick() style=width:236px><option value=0>Windows</option><option value=1>Linux / BSD</option><option value=2>Apple MacOS</option><option value=3>Windows (Desinstalador)</option><option value=4>Linux / BSD (desinstalação)</option></select>"),o+="<div id=aginsTypeDiv>",o+=addHtmlValue("Tipo de instalação ","<select id=aginsType onchange=addAgentToMeshClick() style=width:236px><option value=0>Segundo plano e interativo</option><option value=2>Apenas em segundo plano</option><option value=1>Apenas interativo</option></select>"),o+="</div><hr>";var n=t.name;n=n.split("\\").join("").split("/").join("").split(":").join("").split("*").join("").split("?").join("").split('"').join("").split("<").join("").split(">").join("").split("|").join("").split(" ").join("").split("'").join(""),o+="<div id=agins_windows>"+format('Para adicionar um novo computador ao grupo de dispositivos "{0}", faça o download do agente de malha e instale-o no computador para gerenciar. Este agente possui informações de servidor e grupo de dispositivos incorporadas.',EscapeHtml(t.name))+"<br /><br />",o+=addHtmlValue("Mesh Agent",'<a id=aginsw32lnk href="meshagents?id=3&meshid='+e.split("/")[2]+"&installflags=0"+(urlargs.key?"&key="+urlargs.key:"")+'" download onclick="setDialogMode(0)" title="Versão de 32 bits do MeshAgent">Windows (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 32bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid='+e.split("/")[2]+'&installflags=",1)>'),o+=addHtmlValue("Mesh Agent",'<a id=aginsw64lnk href="meshagents?id=4&meshid='+e.split("/")[2]+"&installflags=0"+(urlargs.key?"&key="+urlargs.key:"")+'" download onclick="setDialogMode(0)" title="Versão de 64 bits do MeshAgent">Windows x64 (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 64bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid='+e.split("/")[2]+'&installflags=",1)>'),0<debugmode&&(o+=addHtmlValue("Arquivo de configurações",'<a id=aginswmshlnk href="meshsettings?id='+e.split("/")[2]+"&installflags=0"+(urlargs.key?"&key="+urlargs.key:"")+'" download rel="noreferrer noopener" target="_blank">'+format("{0} configurações (.msh)",EscapeHtml(t.name))+"</a>")),o+="</div>",o+="<div id=agins_linux style=display:none>"+format("Para adicionar um computador a {0}, execute o seguinte comando.Serão necessárias credenciais raiz.",EscapeHtml(t.name))+"<br />",o+="<textarea id=agins_linux_area rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>",o+="<div style='font-size:x-small'>* Para o BSD, execute \"pkg install wget sudo bash\".</div></div>",o+="<div id=agins_osx style=display:none>"+format('Para adicionar um novo computador ao grupo de dispositivos "{0}", faça o download do agente de malha e instale-o no computador para gerenciar. Este instalador do agente possui informações de servidor e grupo de dispositivos incorporadas.',EscapeHtml(t.name))+"<br /><br />",o+=addHtmlValue("Mesh Agent",'<a href="meshosxagent?id=16&meshid='+e.split("/")[2]+(urlargs.key?"&key="+urlargs.key:"")+'" download rel="noreferrer noopener" target="_blank" title="Versão de 64 bits do MacOS Mesh Agent">MacOS Agent (64bit)</a> <img src=images/link4.png height=10 width=10 title="Copiar o URL do agente MacOS para a área de transferência" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=16&meshid='+e.split("/")[2]+'",0)>'),o+="</div>",o+='<div id=agins_windows_un style=display:none>Para remover um agente de malha, faça o download do arquivo abaixo, execute-o e clique em "uninstall".<br /><br />',o+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=3'+(urlargs.key?"&key="+urlargs.key:"")+'" download onclick="setDialogMode(0)" title="Versão de 32 bits do MeshAgent">Windows (.exe)</a>'),o+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=4'+(urlargs.key?"&key="+urlargs.key:"")+'" download onclick="setDialogMode(0)" title="Versão de 64 bits do MeshAgent">Windows x64 (.exe)</a>'),o+="</div>",o+="<div id=agins_linux_un style=display:none>Para remover um agente de malha, execute o seguinte comando. Serão necessárias credenciais raiz.<br />",o+="<textarea id=agins_linux_area_un rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>",setDialogMode(2,"Adicionar agente de malha",2,null,o+="</div>","fileDownload");var i=serverinfo.name;-1!=i.indexOf(".")&&0==(2&features)||(i=window.location.hostname);var a=domainUrl.substring(0,domainUrl.length-1);if(1==serverinfo.https){var s=443==serverinfo.port?"":":"+serverinfo.port;0==(8192&features)?(Q("agins_linux_area").value='(wget "https://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-check-certificate -O ./meshinstall.sh || wget "https://'+i+s+domainUrl+'meshagents?script=1" --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh https://'+i+s+a+" '"+e.split("/")[2]+"' || ./meshinstall.sh https://"+i+s+a+" '"+e.split("/")[2]+"'\r\n",Q("agins_linux_area_un").value='(wget "https://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-check-certificate -O ./meshinstall.sh || wget "https://'+i+s+domainUrl+'meshagents?script=1" --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n'):(Q("agins_linux_area").value='wget "https://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh https://'+i+s+a+" '"+e.split("/")[2]+"' || ./meshinstall.sh https://"+i+s+a+" '"+e.split("/")[2]+"'\r\n",Q("agins_linux_area_un").value='wget "https://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n')}else{s=80==serverinfo.port?"":":"+serverinfo.port;0==(8192&features)?(Q("agins_linux_area").value='(wget "http://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" -O ./meshinstall.sh || wget "http://'+i+s+domainUrl+'meshagents?script=1" --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh http://'+i+s+a+" '"+e.split("/")[2]+"'\r\n",Q("agins_linux_area_un").value='(wget "http://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" -O ./meshinstall.sh || wget "http://'+i+s+domainUrl+'meshagents?script=1" --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n'):(Q("agins_linux_area").value='wget "http://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh http://'+i+s+a+" '"+e.split("/")[2]+"'\r\n",Q("agins_linux_area_un").value='wget "http://'+i+s+domainUrl+"meshagents?script=1"+(urlargs.key?"&key="+urlargs.key:"")+'" --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n')}return Q("aginsSelect").focus(),addAgentToMeshClick(),!1}function copyAgentUrl(e,t){var o=serverinfo.name;-1!=o.indexOf(".")&&0==(2&features)||(o=window.location.hostname);domainUrl.substring(0,domainUrl.length-1);var n="https://"+o+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl+e;1==t&&(n+=Q("aginsType").value),copyTextToClip(n+=urlargs.key?"&key="+urlargs.key:"")}function addAgentToMeshClick(){var e=Q("aginsSelect").value;QV("agins_windows",0==e),QV("agins_linux",1==e),QV("agins_osx",2==e),QV("agins_windows_un",3==e),QV("agins_linux_un",4==e),QV("aginsTypeDiv",0==e),Q("aginsw32lnk").href=Q("aginsw32lnk").href.split("installflags=")[0]+"installflags="+Q("aginsType").value+(urlargs.key?"&key="+urlargs.key:""),Q("aginsw64lnk").href=Q("aginsw64lnk").href.split("installflags=")[0]+"installflags="+Q("aginsType").value+(urlargs.key?"&key="+urlargs.key:""),0<debugmode&&(Q("aginswmshlnk").href=Q("aginswmshlnk").href.split("installflags=")[0]+"installflags="+Q("aginsType").value+(urlargs.key?"&key="+urlargs.key:""))}function validateDeviceToMesh(){QE("idx_dlgOkButton",0<Q("dp1devicename").value.length&&passwordcheck(Q("dp1password").value))}function addDeviceToMeshEx(e,t){var o=Q("dp1username").value;""==o&&(o="admin");var n=Q("dp1hostname").value;""==n&&(n=Q("dp1devicename").value),meshserver.send({action:"addamtdevice",meshid:t,devicename:Q("dp1devicename").value,hostname:n,amtusername:o,amtpassword:Q("dp1password").value,amttls:Q("dp1tls").value})}function deviceHeaderSet(){0!=deviceHeaderId?(deviceHeaders["DevxHeader"+deviceHeaderId]=1==deviceHeaderTotal?"1 nó":format("{0} nós",deviceHeaderTotal),deviceHeaderId++,deviceHeaderCount={},deviceHeaderTotal=0):deviceHeaderId=1}var powerStateStrings=["",'<span title="O dispositivo está ligado.">Ligado</span>','<span title="O dispositivo está no estado de suspensão (S1).">Hibernando</span>','<span title="O dispositivo está no estado de suspensão (S2).">Hibernando</span>','<span title="O dispositivo está no estado de suspensão profunda (S3).">Deep Sleep</span>','<span title="O dispositivo está no estado de hibernação (S4).">Hibernando</span>','<span title="O dispositivo está no estado desligado (S5).">Soft-Off</span>','<span title="O dispositivo foi detectado, mas não foi possível obter o estado de energia.">Presente</span>'],powerStateStrings2=["","O dispositivo está ligado","O dispositivo está no estado de suspensão (S1)","O dispositivo está no estado de suspensão (S2)","O dispositivo está no estado de sono profundo (S3)","O dispositivo está hibernando (S4)","O dispositivo está no estado soft-off (S5)","O dispositivo está presente, mas o estado de energia não pode ser determinado"],powerColorTable=["pwsTransparent","pwsBlack","pwsBlue","pwsBlue2","pwsLightblue","pwsBlueviolet","pwsDarkgreen","pwsLightseagreen","pwsLightseagreen2"];function NodeStateStr(e){var t=[];return 0<e.state&&e.state<powerStatetable.length&&state.push(powerStatetable[e.state]),e.conn&&(0!=(1&e.conn)&&t.push('<span title="O agente de malha está conectado e pronto para uso.">Agente</span>'),0!=(2&e.conn)?t.push('<span title="Intel&reg; O AMT CIRA está conectado e pronto para uso.">CIRA</span>'):0!=(4&e.conn)&&t.push('<span title="Intel&reg; AMT é roteável.">AMT</span>'),0!=(8&e.conn)&&t.push('<span title="O agente de malha é alcançável usando outro agente como retransmissão.">Retransmissão</span>'),0!=(16&e.conn)&&t.push('<span title="A conexão MQTT com o dispositivo está ativa.">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]:"Desconhecido"}function selectallButtonFunction(){for(var e=document.getElementsByClassName("DeviceCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;for(o=0;o<e.length;o++)e[o].checked=0==t;p1updateInfo()}function p1updateInfo(){for(var e=document.getElementsByClassName("DeviceCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;if(0<t?(QE("GroupActionButton",!0),Q("SelectAllButton").value="Selecione nenhum",QV("cxmgroupsplit",!0),QV("cxmdesktop",!0)):(QE("GroupActionButton",!1),Q("SelectAllButton").value="Selecionar tudo",QV("cxmgroupsplit",!1),QV("cxmdesktop",!1)),null!=customui&&customui.devicesbarbuttons)for(var o in customui.devicesbarbuttons)"one"==customui.devicesbarbuttons[o].selection&&QE("cui:"+o,1==t),"many"==customui.devicesbarbuttons[o].selection&&QE("cui:"+o,1<=t)}function groupActionFunction(){var e="",t=getCheckedDevices();if(4194304&features)for(var o in t)if(0!=(16&getNodeFromId(t[o]).conn)){e+="<option value=103>Enviar Mensagem MQTT</option>";break}for(var o in t){var n=getNodeFromId(t[o]),i=GetNodeRights(n);if(0!=(1&n.conn)&&0!=(32768&i)){e+="<option value=104>Desinstalar agente</option>";break}}var a="Selecione uma operação para executar em todos os dispositivos selecionados. As ações serão executadas apenas com os direitos adequados.<br /><br />";setDialogMode(2,"Ações do grupo",3,groupActionFunctionEx,a+=addHtmlValue("Operação","<select id=d2groupop><option value=100>Acordar dispositivo</option><option value=4>Hibernar dispositivo</option><option value=3>Redefinir dispositivos</option><option value=2>Desligar dispositivos</option><option value=105>Exportar informações do dispositivo</option><option value=102>Mover para o grupo de dispositivos</option>"+e+"<option value=101>Excluir Dispositivos</option></select>"))}function getCheckedDevices(){for(var e=[],t=document.getElementsByClassName("DeviceCheckbox"),o=0;o<t.length;o++)if(t[o].checked&&t[o].value){var n=t[o].value.substring(6);-1==e.indexOf(n)&&e.push(n)}return e}function uncheckAllDevices(){for(var e=document.getElementsByClassName("DeviceCheckbox"),t=0;t<e.length;t++)e[t].checked=!1}function groupActionFunctionEx(){var e=Q("d2groupop").value;if(100==e)meshserver.send({action:"wakedevices",nodeids:getCheckedDevices()}),uncheckAllDevices();else if(101==e){"<label><input id=d2check type=checkbox onchange=d2groupActionFunctionDelCheck() />Confirme</label>",setDialogMode(2,"Excluir nós",3,d2groupActionFunctionDelExec,"Confirmar a exclusão dos dispositivos selecionados?<br /><br /><label><input id=d2check type=checkbox onchange=d2groupActionFunctionDelCheck() />Confirme</label>"),QE("idx_dlgOkButton",!1)}else 102==e?p10showChangeGroupDialog(getCheckedDevices()):103==e?p10showSendMqttMsgDialog(getCheckedDevices()):104==e?p10showSendUninstallAgentDialog(getCheckedDevices()):105==e?p2downloadDeviceInfo():(meshserver.send({action:"poweraction",nodeids:getCheckedDevices(),actiontype:parseInt(e)}),uncheckAllDevices())}function p2downloadDeviceInfo(){if(!xxdialogMode){var e="Faça o download da lista de dispositivos com um dos formatos de arquivo abaixo.<br /><br />";e+=addHtmlValue("Formato CSV","<a href=# style=cursor:pointer onclick='return p2downloadDeviceInfoCSV()'>devicelist.csv</a>"),setDialogMode(2,"Exportação de informações do dispositivo",1,null,e+=addHtmlValue("Formato JSON","<a href=# style=cursor:pointer onclick='return p2downloadDeviceInfoJSON()'>devicelist.json</a>"))}}function p2downloadDeviceInfoCSV(){var e="id, nome, rname, host, ícone, ip, osdesc, estado, nome do grupo, conn, pwr\r\n",t=getCheckedDevices();for(var o in t){var n=getNodeFromId(t[o]);e+='"'+n._id.split(",").join("")+'","'+n.name.split(",").join("")+'","'+(n.rname?n.rname.split(",").join(""):"")+'","'+(n.host?n.host.split(",").join(""):"")+'","'+n.icon+'","'+(n.ip?n.ip:"")+'","'+(n.osdesc?n.osdesc.split(",").join(""):"")+'","'+n.state+'","'+meshes[n.meshid].name.split(",").join("")+'","'+(n.conn?n.conn:"")+'","'+(n.pwr?n.pwr:"")+'"\r\n'}return saveAs(new Blob([e],{type:"application/octet-stream"}),"devicelist.csv"),uncheckAllDevices(),!1}function p2downloadDeviceInfoJSON(){var e=getCheckedDevices(),t=[];for(var o in e)t.push(getNodeFromId(e[o]));return saveAs(new Blob([JSON.stringify(t,null,2)],{type:"application/octet-stream"}),"devicelist.json"),uncheckAllDevices(),!1}function d2groupActionFunctionDelCheck(){QE("idx_dlgOkButton",Q("d2check").checked)}function d2groupActionFunctionDelExec(){meshserver.send({action:"removedevices",nodeids:getCheckedDevices()}),uncheckAllDevices()}function onSortSelectChange(e){sort=document.getElementById("sortselect").selectedIndex,e||putstore("sort",sort)}function nameSort(e,t){var o=e.name.toLowerCase(),n=t.name.toLowerCase();return n<o?1:o<n?-1:0}function meshSort(e,t){return e.meshnamel>t.meshnamel?1:e.meshnamel<t.meshnamel?-1:e.meshid==t.meshid?1==showRealNames?e.rnamel>t.rnamel?1:e.rnamel<t.rnamel?-1:0:e.namel>t.namel?1:e.namel<t.namel?-1:0:0}function powerSort(e,t){var o=e.pwr?e.pwr:0,n=t.pwr?t.pwr:0;return n<o?-1:o<n?1:o==n?1==showRealNames?e.rnamel>t.rnamel?1:e.rnamel<t.rnamel?-1:0:e.namel>t.namel?1:e.namel<t.namel?-1:0:0}function deviceSort(e,t){return e.namel>t.namel?1:e.namel<t.namel?-1:0}function deviceHostSort(e,t){return e.rnamel>t.rnamel?1:e.rnamel<t.rnamel?-1:0}function onSearchFocus(e){searchFocus=e}function onMapSearchFocus(e){mapSearchFocus=e}function onUserSearchFocus(e){userSearchFocus=e}function onConsoleFocus(e){consoleFocus=e}function onSearchInputChanged(){var e=Q("SearchInput").value.toLowerCase().trim();putstore("_search",Q("SearchInput").value);var t=null,o=null,n=null,i=null;if(e.startsWith("do utilizador:".toLowerCase())?t=e.substring("do utilizador:".length):e.startsWith("u:".toLowerCase())?t=e.substring("u:".length):e.startsWith("ip:".toLowerCase())?o=e.substring("ip:".length):e.startsWith("grupo:".toLowerCase())?n=e.substring("grupo:".length):e.startsWith("g:".toLowerCase())?n=e.substring("g:".length):e.startsWith("tag:".toLowerCase())?i=Q("SearchInput").value.trim().substring("tag:".length):e.startsWith("t:".toLowerCase())&&(i=Q("SearchInput").value.trim().substring("t:".length)),""==e)for(var a in nodes)nodes[a].v=!0;else if(null!=o)for(var a in nodes)nodes[a].v=null!=nodes[a].ip&&0<=nodes[a].ip.indexOf(o);else if(null!=n)for(var a in nodes)nodes[a].v=0<=meshes[nodes[a].meshid].name.toLowerCase().indexOf(n);else if(null!=i)for(var a in nodes)nodes[a].v=null==nodes[a].tags&&""==i||null!=nodes[a].tags&&0<=nodes[a].tags.indexOf(i);else if(null!=t){for(var a in nodes)if(nodes[a].v=!1,nodes[a].users&&0<nodes[a].users.length)for(var s in nodes[a].users)0<=nodes[a].users[s].toLowerCase().indexOf(t)&&(nodes[a].v=!0)}else try{var r=e.split(/\s+/).join("|"),l=new RegExp(r);for(var a in nodes)if(nodes[a].v=l.test(nodes[a].name.toLowerCase())||null!=nodes[a].rnamel&&l.test(nodes[a].rnamel.toLowerCase()),0==nodes[a].v&&nodes[a].tags)for(var d in nodes[a].tags){if(l.test(nodes[a].tags[d].toLowerCase())){nodes[a].v=!0;break}nodes[a].v=!1}}catch(e){for(var a in nodes)nodes[a].v=!0}if(Q("OnlineCheckBox").checked)for(var a in nodes)null!=nodes[a].conn&&0!=nodes[a].conn||(nodes[a].v=!1)}var contextelement=null;function handleContextMenu(e){if(hideContextMenu(),!xxdialogMode){for(var t=null!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,o=null!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop,n=document.elementFromPoint(e.pageX-t,e.pageY-o);n&&null!=n&&null==n.attributes.cmenu;)n=n.parentElement;if(null==n)return!0;var i=n.attributes.cmenu.value;switch(i){case"termConnectButton":if(null==currentNode||null==currentNode.agent)return!0;contextelement=n;var a=document.getElementById("termShellContextMenu");4<currentNode.agent.id&&(a=document.getElementById("termShellContextMenuLinux")),showContextMenuDiv(a,e.pageX,e.pageY);break;case"deskConnectButton":if(null==currentNode||null==currentNode.agent)return!0;contextelement=n,showContextMenuDiv(document.getElementById("deskConnectContextMenu"),e.pageX,e.pageY);break;case"devsContentMenu":contextelement=n,showContextMenuDiv(a=document.getElementById("contextMenu"),e.pageX,e.pageY);var s=contextelement.children[1].attributes.onclick.value,r=getNodeFromId(s.substring(12,s.length-18)),l=meshes[r.meshid],d=GetNodeRights(r),c=0!=(16&d),u=4294967295==d||0==(65536&d),p=4294967295==d||0==(512&d),m=4294967295==d||0==(1024&d);QV("cxdesktop",(1==l.mtype||null==r.agent||null==r.agent.caps||0!=(1&r.agent.caps)||r.intelamt&&2==r.intelamt.state)&&(8&d||256&d)&&u),QV("cxterminal",(1==l.mtype||null==r.agent||null==r.agent.caps||0!=(2&r.agent.caps)||r.intelamt&&2==r.intelamt.state)&&8&d&&p),QV("cxfiles",2==l.mtype&&(null==r.agent||null==r.agent.caps||0!=(4&r.agent.caps))&&8&d&&m),QV("cxevents",null!=r.intelamt&&(2==r.intelamt.state||2&r.conn)&&8&d),QV("cxconsole",c&&2==l.mtype&&(null==r.agent||null==r.agent.caps||0!=(8&r.agent.caps))&&8&d);break;default:if(null==(a=document.getElementById(i)))return!0;contextelement=n,showContextMenuDiv(a,e.pageX,e.pageY)}return haltEvent(e)}}function showContextMenuDiv(e,t,o){var n=document.documentElement.getBoundingClientRect(),i=n.height,a=n.width;e.style.left=e.style.right=e.style.top=e.style.bottom=null,a/2<t?e.style.right=a-event.pageX+"px":e.style.left=event.pageX+"px",i/2<o?e.style.bottom=i-event.pageY+"px":e.style.top=event.pageY+"px",e.style.display="block"}function cmaction(e,t){var o=contextelement.children[1].attributes.onclick.value;if(o=o.substring(12,o.length-18),9==e&&(Q("viewselect").value=3,Q("viewselect").onchange(),Q("autoConnectDesktopCheckbox").checked=!0,Q("autoConnectDesktopCheckbox").onclick()),0<e&&e<9){var n=[0,10,12,11,13,16,17,15,19][e];if(t&&1==t.shiftKey)window.open(window.location.origin+"?node="+o.split("/")[2]+"&viewmode="+n+"&hide=16","meshcentral:"+o);else{gotoDevice(o,n);var i=meshes[currentNode.meshid];1&currentNode.conn&&2==i.mtype&&(11==n&&null==desktop&&1&currentNode.agent.caps&&connectDesktop(null,3),12==n&&null==terminal&&2&currentNode.agent.caps&&connectTerminal(null,1),13==n&&null==files&&connectFiles(null))}}}function cmmeshaction(e){var t=contextelement.attributes.onclick.value.substring(10,contextelement.attributes.onclick.value.length-2),o=document.getElementsByClassName("DeviceCheckbox");if(1==e||2==e)for(var n=0;n<o.length;n++)o[n].attributes&&o[n].attributes.class.value.split(" ")[0]==t&&(o[n].checked=1==e);p1updateInfo()}function cmtermaction(e){e<100?connectTerminal(null,1,{protocol:e}):100==e&&connectTerminal(null,1,{protocol:1,requireLogin:!0})}function cmdeskaction(e){1==e&&connectDesktop(null,3,null,72),2==e&&connectDesktop(null,3,null,8),3==e&&connectDesktop(null,3,null,64)}function cmaltportaction(e){if(!xxdialogMode){setDialogMode(2,"Conexão RDP",3,function(){setDialogMode(0);var e=0<Q("d10rdpport").value.length?parseInt(Q("d10rdpport").value):3389;meshserver.send({action:"changedevice",nodeid:currentNode._id,rdpport:e}),null!=currentNode&&p10clickOnce(currentNode._id,"RDP2",e)},'Porta de conexão remota RDP:<br /><br /><input type=text placeholder="3389" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10rdpport type=text>',currentNode),Q("d10rdpport").focus(),null!=currentNode.rdpport&&(Q("d10rdpport").value=currentNode.rdpport)}}function cmrfbportaction(e){if(!xxdialogMode){setDialogMode(2,"noVNC Connection",3,function(){setDialogMode(0);var e=0<Q("d10rfbport").value.length?parseInt(Q("d10rfbport").value):3389;meshserver.send({action:"changedevice",nodeid:currentNode._id,rfbport:e}),null!=currentNode&&p10rfb(currentNode._id,e)},'noVNC remote connection port:<br /><br /><input type=text placeholder="5900" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10rfbport type=text>',currentNode),Q("d10rfbport").focus(),null!=currentNode.rfbport&&(Q("d10rfbport").value=currentNode.rfbport)}}function cmfilesaction(e){if(!xxdialogMode){var t=p13sort_files(p13filetree.dir)[parseInt(contextelement.attributes.fileindex.nodeValue)];1==e?(setDialogMode(2,"Renomear",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+t.n+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:t.n}),focusTextBox("p13renameinput"),p13fileNameCheck()):2==e?t.s<=204800?p13downloadfile(encodeURIComponentEx(p13filetreelocation.join("/")+"/"+t.n),encodeURIComponentEx(t.n),t.s,"viewer"):messagebox("Editor de Arquivos","Somente arquivos com menos de 200k podem ser editados."):3==e&&setDialogMode(2,"Deletar",3,p13deletefileCm,"Apagar item?",t)}}function cmdeskplayeraction(e){xxdialogMode||window.open(window.location.origin+"{{{domainurl}}}player.htm","meshcentral-deskplayer")}function p13deletefileCm(e,t){files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:[t.n],rec:!1}),p13folderup(999)}function hideContextMenu(){QV("contextMenu",!1),QV("meshContextMenu",!1),QV("termShellContextMenu",!1),QV("termShellContextMenuLinux",!1),QV("deskConnectContextMenu",!1),QV("altPortContextMenu",!1),QV("rfbPortContextMenu",!1),QV("filesContextMenu",!1),QV("deskPlayerContextMenu",!1),contextelement=null}var map_cm_popup,map_cm_editMarker,map_cm_clearMarker,map_cm_saveMarker,map_cm_nodemenu_items,contextmenu_items,currentNode,xxmap={map:null,contextmenu:null,activeInteractions:[],showindex:0,markersSource:null,markersLayer:null,mapLayer:null,mapView:null};function updateMapMarkers(e){if(0!=(32768&features)){if(null!=xxmap&&null==xxmap.map)try{loadmap()}catch(e){console.error("loadmap() exception",e)}if(null!=xxmap){var t=null;for(var o in nodes)try{var n=map_parseNodeLoc(nodes[o]),i=xxmap.markersSource.getFeatureById(nodes[o]._id);if(null==n||nodes[o].meshid!=e&&null!=e)i&&xxmap.markersSource.removeFeature(i);else{var a=n[0],s=n[1];n[2];null==t?t=[a,s,a,s,0]:(a<t[0]&&(t[0]=a),s<t[1]&&(t[1]=s),a>t[2]&&(t[2]=a),s>t[3]&&(t[3]=s)),null==i?(addFeature(nodes[o]),t[4]=1):(updateFeature(nodes[o],i),i.setStyle(markerStyle(nodes[o],n[2])))}}catch(e){console.error("updateMapMarkers() exception",e,JSON.stringify(nodes[o]))}return t}}}function stringToIntHash(e){var t,o=0;for(t=0;t<e.length;t++)o=(o<<5)-o+e.charCodeAt(t),o|=0;return o}function map_parseNodeLoc(e){var t=null,o=0;return e.iploc&&(t=e.iploc,o=1),e.wifiloc&&(t=e.wifiloc,o=2),e.gpsloc&&(t=e.gpsloc,o=3),e.userloc&&(t=e.userloc,o=4),null==t||"string"!=typeof t?null:(t=t.split(","),1==o?[parseFloat(t[0])+stringToIntHash(e._id.substring(0,20))/1e11,parseFloat(t[1])+stringToIntHash(e._id.substring(20))/1e11,o]:[parseFloat(t[0]),parseFloat(t[1]),o])}function loadmap(){if(0!=(32768&features)&&null!=xxmap)if(0!=(32768&features)){QV("viewselectmapoption",!0),QV("devViewButton4",!0);try{xxmap.markersSource=new ol.source.Vector,xxmap.markersLayer=new ol.layer.Vector({source:xxmap.markersSource}),xxmap.mapLayer=new ol.layer.Tile({source:new ol.source.OSM}),xxmap.mapView=new ol.View({center:ol.proj.transform([0,0],"EPSG:4326","EPSG:3857"),zoom:2,minZoom:2,maxZoom:20,extent:ol.proj.transformExtent([-1e5,-69.55,1e5,69.55],"EPSG:4326","EPSG:3857")}),xxmap.map=new ol.Map({target:"xdevicesmap",layers:[xxmap.mapLayer,xxmap.markersLayer],view:xxmap.mapView}),xxmap.map.addOverlay(map_cm_popup),xxmap.map.on("click",function(e){var t=xxmap.map.forEachFeatureAtPixel(e.pixel,function(e,t){return e});if(t){var o=t.getId();if(null!=o)gotoDevice(o,10);else gotoDevice(getCorrespondingFeature(t).getId(),10)}}),xxmap.map.on("pointermove",function(e){var t=xxmap.map.forEachFeatureAtPixel(e.pixel,function(e,t){return e});if(t){xxmap.map.getTargetElement().style.cursor="pointer";var o=t.getGeometry().getCoordinates();if(map_cm_popup.setPosition(o),t.getId())QH("xmap-info-window",t.get("name"));else{var n=getCorrespondingFeature(t);QH("xmap-info-window",n.get("name"))}}else xxmap.map.getTargetElement().style.cursor="",QH("xmap-info-window","")});var e=new ContextMenu({width:160,defaultItems:!1,items:contextmenu_items});e.on("open",function(e){var t=xxmap.map.forEachFeatureAtPixel(e.pixel,function(e,t){return e});if(xxmap.contextmenu.clear(),t)if(t.getId())addContextMenuItems(t);else{var o=getCorrespondingFeature(t);o?addContextMenuItems(o):xxmap.contextmenu.extend(contextmenu_items)}else xxmap.contextmenu.extend(contextmenu_items)}),null==xxmap.contextmenu&&(xxmap.contextmenu=e),xxmap.map.addControl(xxmap.contextmenu)}catch(e){console.log(e),QV("viewselectmapoption",!1),QV("devViewButton4",!1),xxmap=null}}else xxmap=null}function addFeature(e,t,o){var n=getModifiedFeature(e._id);if(n)xxmap.markersSource.addFeature(n);else{if(!t&&!o){var i=map_parseNodeLoc(e);t=i[0],o=i[1]}if(180<o&&(o=180-o,meshserver.send({action:"changedevice",nodeid:e._id,userloc:[t,o]})),t<90&&-90<t&&o<180&&-180<o){var a=new ol.Feature({geometry:new ol.geom.Point(ol.proj.transform([o,t],"EPSG:4326","EPSG:3857")),name:e.name,status:e.conn,lat:t,lon:o});a.setId(e._id),a.setStyle(markerStyle(e)),xxmap.markersSource.addFeature(a)}}}function removeFeature(e){var t=xxmap.markersSource.getFeatureById(e._id);t&&xxmap.markersSource.removeFeature(t)}function updateFeature(e,t){e.conn!=t.get("status")&&(t.set("status",e.conn),t.setStyle(markerStyle(e)));var o=map_parseNodeLoc(e);if(null!=o){var n=o[0],i=o[1];if(n!=t.get("lat")||i!=t.get("lon")){t.set("lat",n),t.set("lon",i);var a=ol.proj.transform([parseFloat(i),parseFloat(n)],"EPSG:4326","EPSG:3857");t.getGeometry().setCoordinates(a)}}e.name!=t.get("name")&&t.set("name",e.name)}function modifyMarkerloc(e){var t=e.getId();if(t&&(e.setStyle(markerStyle(getNodeFromId(e.a),4)),!getActiveInteractions(e))){var o=new ol.interaction.Modify({features:new ol.Collection([e]),pixelTolerance:10});xxmap.activeInteractions.push({featureid:t,feature:e,interaction:o}),xxmap.map.addInteraction(o)}}function saveMarkerloc(e){var t=e.getId();if(t){var o=getActiveInteractions(e);if(o){xxmap.map.removeInteraction(o),removeInteraction(t);var n=e.getGeometry().getCoordinates(),i=ol.proj.transform(n,"EPSG:3857","EPSG:4326");180<i[0]&&(i[0]=180-i[0]);var a=[i[1],i[0]];meshserver.send({action:"changedevice",nodeid:t,userloc:a})}}}function markerStyle(e,t){null==t&&(t=0,e.iploc&&(t=1),e.wifiloc&&(t=2),e.gpsloc&&(t=3),e.userloc&&(t=4));var o=connStateColor(e);return[new ol.style.Style({image:new ol.style.Icon({color:o,anchor:[.5,1],src:"images/mapmarker"+["","-ip","-wifi","-gps","-user"][t]+".png"})})]}function connStateColor(e){return 1==e.conn||3==e.conn||5==e.conn?"#00ffdd":"#C70039"}function addContextMenuItems(t){getActiveInteractions(t)?(map_cm_saveMarker.data=t,xxmap.contextmenu.push(map_cm_saveMarker)):(map_cm_editMarker.data=t,xxmap.contextmenu.push(map_cm_editMarker),getNodeFromId(t.a).userloc&&(map_cm_clearMarker.data=t,xxmap.contextmenu.push(map_cm_clearMarker)));map_cm_nodemenu_items.forEach(function(e){"Aumentar o zoom até o limite"==e.text||"Diminuir o zoom até o limite"==e.text?e.data=t:"-"!=e&&(e.data=t.getId())}),xxmap.contextmenu.extend(map_cm_nodemenu_items)}function getActiveInteractions(e){for(var t=e.getId(),o=0;o<xxmap.activeInteractions.length;o++)if(xxmap.activeInteractions[o].featureid==t)return xxmap.activeInteractions[o].interaction;return!1}function getModifiedFeature(e){if(e)for(var t=0;t<xxmap.activeInteractions.length;t++)if(xxmap.activeInteractions[t].featureid==e)return xxmap.activeInteractions[t].feature;return null}function removeInteraction(e){for(var t=-1,o=0;o<xxmap.activeInteractions.length;o++)if(xxmap.activeInteractions[o].featureid===e){t=o;break}0<=t&&xxmap.activeInteractions.splice(t,1)}function getCorrespondingFeature(e){for(var t=e.getGeometry().getCoordinates(),o=0;o<xxmap.activeInteractions.length;o++){var n=xxmap.activeInteractions[o].feature,i=n.getGeometry().getCoordinates();if(i[0].toFixed(5)==t[0].toFixed(5)&&i[1].toFixed(5)==t[1].toFixed(5))return n}return null}function refreshMap(e,t){e&&(xxmap.map.setTarget(null),xxmap.map=null,xxmap.markersSource=null,xxmap.mapView=null,xxmap.mapLayer=null,xxmap.activeInteractions=[]);var o=updateMapMarkers();if(null!=o&&(t||1==o[4])){var n=(o[0]+o[2])/2,i=(o[1]+o[3])/2,a=Math.max(Math.abs(o[0]-o[2]),Math.abs(o[1]-o[3])),s=xxmap.map.getView();s.setCenter(ol.proj.transform([i,n],"EPSG:4326","EPSG:3857"));for(var r=360,l=-2;a<r;)l++,r/=2;s.setZoom(l)}}function placeNode(e){if(!xxdialogMode){var t='<div style=margin-bottom:6px><label for=selectnode-search>Procurar</label>&nbsp&nbsp<input type=text placeholder="Nome do dispositivo" id="selectnode-search" onchange=onPlaceNodeInputChange() onkeyup=onPlaceNodeInputChange() autocomplete=off style=width:120px></div><div id=placenode style="height:254px;overflow-y:auto;width:100%;margin:12px 1px 4px 1px;"><div id=noNodesMapPlace style=text-align:center;width:100%;display:none>Nenhum dispositivo encontrado.</div>';for(var o in nodes)t+="<div class=noselect id="+nodes[o]._id+"-rowid onclick=selectNodeToPlace(event,'"+nodes[o]._id+"') style=background-color:lightgray;margin-bottom:4px;border-radius:2px><input name=PlaceMapDeviceCheckbox id="+nodes[o]._id+"-checkid type=checkbox style=width:16px;display:inline />",t+="<div class=j"+nodes[o].icon+" style=width:16px;height:16px;margin-top:2px;margin-right:4px;display:inline-block></div><div style=width:16px;display:inline>"+nodes[o].name+"</div></div>";setDialogMode(2,"Selecione um nó para colocar",3,placeNodeEx,t+"</div>",e),onPlaceNodeInputChange()}}function placeNodeEx(e,t){var o=document.getElementsByName("PlaceMapDeviceCheckbox");for(var n in o)if(o[n].checked){var i=getNodeFromId(o[n].id.substring(0,o[n].id.length-8));if(i){var a=xxmap.markersSource.getFeatureById(n),s=ol.proj.transform(t,"EPSG:3857","EPSG:4326"),r=[s[1],s[0]];if(a)a.getGeometry().setCoordinates(t),getActiveInteractions(a)?saveMarkerloc(a):meshserver.send({action:"changedevice",nodeid:i._id,userloc:r});else meshserver.send({action:"changedevice",nodeid:i._id,userloc:r})}}}function onPlaceNodeInputChange(){updatePlaceNodeTable(Q("selectnode-search").value.trim().toLowerCase())}function updatePlaceNodeTable(e){document.getElementsByName("PlaceMapDeviceCheckbox");var t=0;for(var o in nodes){var n=0<=nodes[o].namel.indexOf(e)||""==e||null!=nodes[o].rnamel&&0<=nodes[o].rnamel.indexOf(e);n&&t++,QV(nodes[o]._id+"-rowid",n)}QV("noNodesMapPlace",0==t)}function selectNodeToPlace(e,t){if("PlaceMapDeviceCheckbox"!=e.target.name){var o=Q(t+"-checkid");o.checked=!o.checked}var n=document.getElementsByName("PlaceMapDeviceCheckbox"),i=0;for(var a in n)n[a].checked&&i++;QE("idx_dlgOkButton",0<i)}function addMeshOptions(e,t){}function meshOptionRmvMod(e,t){}function meshExists(){for(var e in meshes)if(meshes[e])return!0;return!1}function setMeshView(e){var t=Q("select-mesh");t[t.selectedIndex].value==e&&(t[0].selected=!0,onSelectMeshChange())}function clearMeshOptions(){}function getSearchLocation(){try{var e=Q("mapSearchLocation").value.trim();if(0<e.length){var t=new XMLHttpRequest;t.onreadystatechange=function(){4==t.readyState&&200==t.status&&formatSearchData(t.responseText)},t.open("GET","https://nominatim.openstreetmap.org/search?q="+e+"&format=json",!0),t.send()}}catch(e){}}function formatSearchData(e){try{QH("xmapSearchResults","");for(var t=JSON.parse(e),o=0,n='<div class="xmapItem">',i=0;i<t.length;i++)if(t[i].display_name&&t[i].boundingbox[0]&&t[i].boundingbox[1]&&t[i].boundingbox[2]&&t[i].boundingbox[3]){o++;n+='<div class="xmapItemSel1" onclick=mapGotoSelectedLocation(this)><div>'+t[i].display_name+"</div><div style=display:none>"+t[i].boundingbox[0]+"!#!"+t[i].boundingbox[1]+"!#!"+t[i].boundingbox[2]+"!#!"+t[i].boundingbox[3]+"</div></div>"}if(n+="</div>",1==o)zoomToExtent([parseFloat(t[0].boundingbox[2]),parseFloat(t[0].boundingbox[0]),parseFloat(t[0].boundingbox[3]),parseFloat(t[0].boundingbox[1])]);else 0==o&&(n="<div style=width:200px>Nenhum local encontrado.<div>"),QV("xmapSearchResultsDlg",!0);QH("xmapSearchResults",n)}catch(e){}}function mapGotoSelectedLocation(e){var t=e.children[1].innerHTML.split("!#!");zoomToExtent([parseFloat(t[2]),parseFloat(t[0]),parseFloat(t[3]),parseFloat(t[1])]),mapCloseSearchWindow()}function mapCloseSearchWindow(){QH("xmapSearchResults",""),QV("xmapSearchResultsDlg",!1)}function zoomToLocation(e,t){var o=xxmap.map.getView();o.setCenter(e),o.setZoom(t)}function zoomToFitExtent(){if(0<xxmap.markersSource.getFeatures().length){var e=xxmap.markersSource.getExtent();xxmap.map.getView().fit(e,xxmap.map.getSize())}}function zoomToExtent(e){var t=ol.proj.transformExtent(e,ol.proj.get("EPSG:4326"),ol.proj.get("EPSG:3857"));xxmap.map.getView().fit(t,xxmap.map.getSize())}function refreshDevice(e){currentNode&&currentNode._id==e&&gotoDevice(e,xxcurrentView,!0)}32768&features&&(map_cm_popup=new ol.Overlay({element:Q("xmap-info-window"),positioning:"bottom-center",stopEvent:!1}),map_cm_editMarker={text:"Modificar localização do nó",callback:function(e){modifyMarkerloc(e.data)}},map_cm_clearMarker={text:"Remover localização do nó",callback:function(e){meshserver.send({action:"changedevice",nodeid:e.data.a,userloc:[]})}},map_cm_saveMarker={text:"Salvar localização do nó",callback:function(e){saveMarkerloc(e.data)}},map_cm_nodemenu_items=[{text:"Informações gerais",callback:function(e){null!=e.data&&gotoDevice(e.data,10)}},{text:"Área de Trabalho",callback:function(e){null!=e.data&&gotoDevice(e.data,11)}},{text:"Terminal",callback:function(e){null!=e.data&&gotoDevice(e.data,12)}},{text:"Intel&reg; AMT",callback:function(e){null!=e.data&&gotoDevice(e.data,14)}},"-",{text:"Aumentar o zoom até o limite",callback:function(e){zoomToLocation(e.data.getGeometry().getCoordinates(),19)}},{text:"Diminuir o zoom até o limite",callback:function(e){zoomToLocation(e.data.getGeometry().getCoordinates(),2)}}],contextmenu_items=[{text:"Atualizar",callback:function(){refreshMap(!0,!0)}},{text:"Zoom para ajustar a extensão",callback:function(){zoomToFitExtent()}},{text:"Centralize o mapa aqui",callback:function(e){xxmap.mapView.animate({center:e.coordinate})}},{text:"Coloque o nó aqui",callback:function(e){placeNode(e.coordinate)}}]);var powerTimelineNode=null,powerTimelineReq=null,powerTimelineUpdate=null,powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(e,t,o,n){if(!0===userinfo.emailVerified||1!=serverinfo.emailcheck||4294967295==userinfo.siteadmin)if(262144&features&&0==count2factoraAuths())setDialogMode(2,"Segurança da Conta",1,null,'Não foi possível acessar um dispositivo até que a autenticação de dois fatores esteja ativada. Isso é necessário para segurança extra. Vá para a guia "Minha conta" e consulte a seção "Segurança da conta".');else if(n&&1==n.shiftKey)window.open(window.location.origin+"?node="+e.split("/")[2]+"&viewmode=10&hide=16","meshcentral:"+e);else{var i=getNodeFromId(e);if(null!=i){var a=meshes[i.meshid],s=GetNodeRights(i),r=null==currentNode||currentNode._id!=e;if(!currentNode||currentNode._id!=i._id||1==o){if(currentNode=i,QV("p10deviceNotify",null!=currentNode.sessions&&(null!=currentNode.sessions.kvm||null!=currentNode.sessions.terminal||null!=currentNode.sessions.files)),QV("p10deviceBattery",!1),null!=currentNode.sessions&&null!=currentNode.sessions.battery){var l=currentNode.sessions.battery,d="";"ac"==l.state&&(d="Device is plugged-in"),"dc"==l.state&&(d="Device is battery powered");var c="",u=-1;"number"==typeof l.level&&0<=l.level&&l.level<=100&&(c=l.level+"%",5<(u=Math.floor((l.level+10)/25)+1)&&(lvl=5),"ac"==l.state&&(100==l.level?u=11:u+=5)),0<u&&(Q("p10deviceBattery").title=null!=d?d+", "+c:c,QV("p10deviceBattery",!0),Q("p10deviceBattery").className="deviceBatteryLarge deviceBatteryLarge"+u)}else QV("p10deviceBattery",!1);var p,m=EscapeHtml(i.name);0==m.length&&(m="<i>Nenhum</i>"),0==(4&s)||a.flags&&0!=(2&a.flags)||(m='<span tabindex=0 title="clique aqui para criar um grupo de dispositivos" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>'+m+' <img class=hoverButton src="images/link5.png" /></span>'),p=m,a&&(m+="<span style=color:#AAA;font-size:small> - "+EscapeHtml(a.name)+"</span>"),QH("p10deviceName",m),QH("p11deviceName",m),QH("p12deviceName",m),QH("p13deviceName",m),QH("p14deviceName",m),QH("p15deviceName","Console - "+m),QH("p16deviceName",m),QH("p17deviceName",m),QH("p19deviceName",m);var g="<table style=width:100%>";0!=(8&args.hide)&&(g+="<br />"+addDeviceAttribute("Nome",p)),a&&(g+=addDeviceAttribute('<span title="O nome do grupo de dispositivos ao qual este computador pertence.">Grupo</span>','<a href=# title="O nome do grupo de dispositivos ao qual este computador pertence" onclick=gotoMesh("'+i.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[i.meshid].name)+"</a>")),null!=i.rname&&i.name!=i.rname&&(g+=addDeviceAttribute('<span title="O nome deste computador, conforme definido no sistema operacional">Nome do SO</span>','<span title="O nome deste computador, conforme definido no sistema operacional">'+EscapeHtml(i.rname)+"</span>")),0==(1&features)&&(g+=addDeviceAttribute("Hostname",addLinkConditional("<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+(i.host?EscapeHtml(i.host):"<i>Nenhum</i>")+"</span>","showEditNodeValueDialog(1)",4&s)));var v=i.desc?EscapeHtml(i.desc):"<i>Nenhum</i>";if(g+=addDeviceAttribute("Descrição",0!=(4&s)?"<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+v+' <img class=hoverButton src="images/link5.png" /></span>':v),null!=i.agent&&null!=i.agent.id&&null!=i.agent.ver){var h="";h=i.agent.id<=agentsStr.length?agentsStr[i.agent.id]:agentsStr[0],0!=i.agent.ver&&(h+=" v"+i.agent.ver),g+=addDeviceAttribute("Mesh Agent",h)}if(null!=i.intelamt){h="";var f={0:nobreak("Não ativado (pré)"),1:nobreak("Não ativado (entrada)"),2:nobreak("ativado")};null!=i.intelamt.ver&&null==i.intelamt.state?h+="<i>Estado desconhecido</i>, v"+i.intelamt.ver:null==i.intelamt.ver&&2==i.intelamt.state?h+="<i>ativado</i>":null==i.intelamt.ver||null==i.intelamt.state?h+="<i>Estado da versão desconhecida</i>":(h+=f[i.intelamt.state],2==i.intelamt.state&&i.intelamt.flags&&(2&i.intelamt.flags?h+=' <span title="O Intel AMT é ativado no modo de controle do cliente">CCM</span>':4&i.intelamt.flags&&(h+=' <span title="O Intel AMT é ativado no modo de controle de administrador">ACM</span>')),h+=", v"+i.intelamt.ver),1==i.intelamt.tls&&(h+=', <span title="O Intel AMT está configurado com segurança de rede TLS">TLS</span>'),2==i.intelamt.state&&(null!=i.intelamt.user&&""!=i.intelamt.user||(h+=0!=(4&s)?', <i style=color:#FF0000;cursor:pointer title="Editar Intel & reg; Credenciais AMT" onclick=editDeviceAmtSettings("'+i._id+'")>Sem credenciais</i>':", <i style=color:#FF0000>Sem credenciais</i>"),h+=" ",0!=(4&s)&&(h+='<img src=images/link4.png height=10 width=10 title="Editar Intel & reg; Credenciais AMT" style=cursor:pointer onclick=editDeviceAmtSettings("'+i._id+'")>'));var x='<span title="Intel&reg; Manageability Engine">Intel&reg; ME<span>';"number"==typeof i.intelamt.sku&&(0!=(8&i.intelamt.sku)?x='<span title="Intel&reg; Tecnologia de gerenciamento ativo">Intel&reg; AMT<span>':0!=(16&i.intelamt.sku)&&(x='<span title="Intel&reg; Gerenciamento padrão">Intel&reg; SM<span>')),g+=addDeviceAttribute(x,h)}if(null!=i.agent&&null!=i.agent.tag)(k=EscapeHtml(i.agent.tag)).startsWith("mailto:")&&(k='<a href="'+k+'">'+k.substring(7)+"</a>"),g+=addDeviceAttribute("Etiqueta do agente",k);else if(null!=i.intelamt&&null!=i.intelamt.tag){var k;(k=EscapeHtml(i.intelamt.tag)).startsWith("mailto:")&&(k='<a href="'+k+'">'+k.substring(7)+"</a>"),g+=addDeviceAttribute("Intel&reg; Tag AMT ",k)}if(i.osdesc&&(g+=addDeviceAttribute("Sistema operacional",i.osdesc)),i.av&&0<i.av.length){var b=[];for(var y in i.av)if(i.av[y].product){var w=EscapeHtml(i.av[y].product);!0!==i.av[y].enabled&&(w+=" - <span style=color:red>Desativado</span>"),!0!==i.av[y].updated&&(w+=" - <span style=color:red>Desatualizado</span>"),1==i.av[y].enabled&&1==i.av[y].updated&&(w+=" - <span style=color:green>Ok</span>"),b.push(w)}g+=addDeviceAttribute("Antivírus",b.join("<br />"))}if(i.users&&i.conn&&0<i.users.length&&1&i.conn&&(g+=addDeviceAttribute(format("Usuário ativo {0}",1<i.users.length?"s":""),i.users.join(", "))),null!=i.agent){var C=[],D=0;i.consent&&(D=i.consent),serverinfo.consent&&(D|=serverinfo.consent),64&D&&8&D?C.push("Prompt da área de trabalho + barra de ferramentas"):64&D?C.push("Barra de ferramentas da área de trabalho"):8&D?C.push("Prompt da área de trabalho"):1&D&&C.push("Notificação na área de trabalho"),16&D?C.push("Prompt do terminal"):2&D&&C.push("Notificação - terminal"),32&D?C.push("Arquivos do prompt"):4&D&&C.push("Notificação arquivos"),7==D&&(C=["Notificar sempre"]),56==(56&D)&&(C=["Sempre alerta"]),""==(C=C.join(", "))&&(C="<i>Nenhum</i>"),g+=addDeviceAttribute("Consentimento do Usuário",addLinkConditional(C,"p20editmeshconsent(3)",1&s))}var M=i.conn;if(M&&1<M){var S=[];0!=(1&i.conn)&&S.push('<span title="O agente de malha está conectado e pronto para uso.">Mesh Agent</span>'),0!=(2&i.conn)?S.push('<span title="Intel&reg; O AMT CIRA está conectado e pronto para uso.">Intel&reg; AMT CIRA</span>'):0!=(4&i.conn)&&S.push('<span title="Intel&reg; O AMT é roteável e pronto para uso.">Intel&reg; AMT</span>'),0!=(8&i.conn)&&S.push('<span title="O agente de malha é alcançável usando outro agente como retransmissão.">Mesh Relay</span>'),0!=(16&i.conn)&&S.push('<span title="A conexão MQTT com o dispositivo está ativa.">MQTT</span>'),g+=addDeviceAttribute("Conectividade",S.join(", "))}var E="<i>Nenhum</i>";if(null!=i.tags)for(var y in E="",i.tags)E+='<span class="tagSpan">'+i.tags[y]+"</span>";g+=addDeviceAttribute("Tags",0!=(4&s)?"<span onclick=showEditNodeValueDialog(3) style=cursor:pointer>"+E+' <img class=hoverButton src="images/link5.png" /></span>':E),g+="</table><br />",0!=(76&s)&&(g+='<input type=button value="Ações" title="Execute ações de energia no dispositivo" onclick=deviceActionFunction() />'),g+='<input type=button value="Notas" title="Ver notas sobre este dispositivo" onclick=showNotes('+(0==(128&s))+',"'+encodeURIComponentEx(i._id)+'") />',g+='<input type=button value="Log de Evento" title="Escreva um evento para este dispositivo" onclick=writeDeviceEvent("'+encodeURIComponentEx(i._id)+'") />',1&M&&8&s&&(g+='<input type=button value="Mensagem" title="Display a text message on the remote device" onclick=deviceMessageFunction() />'),QH("p10html",g),masterUpdate(256);var A=4294967295==s||0==(65536&s),T=4294967295==s||0==(512&s),N=4294967295==s||0==(1024&s),_=4294967295==s||0==(2048&s);g='<div class="p10html3right">',0!=(4&s)&&(g+='&nbsp;<a href=# onclick=p10showChangeGroupDialog(["'+i._id+'"]) title="Mova este dispositivo para um grupo de dispositivos diferente">Alterar grupo</a>',g+='&nbsp;<a href=# onclick=p10showDeleteNodeDialog("'+i._id+'") title="Remova este dispositivo">Excluir dispositivo</a>'),g+='</div><div class="p10html3left">',i.agent&&(g+='<a href=# onclick=p10showNodeNetInfoDialog("'+i._id+'") title="Mostrar informações da interface de rede do dispositivo">Interfaces</a>&nbsp;'),32768&features&&null!=xxmap&&(g+='<a href=# onclick=p10showNodeLocationDialog("'+i._id+'") title="Mostrar informações de localizações do dispositivo">Localização</a>&nbsp;'),4294967295!=userinfo.siteadmin&&0!=(128&userinfo.siteadmin)||T&&0!=(8&s)&&null!=i.agent&&(g+='<a href=# onclick=p10showMeshCmdDialog(1,"'+i._id+'") title="Roteador de tráfego usado para conectar-se a um dispositivo através deste servidor.">MeshCmd</a>&nbsp;'),0!==args.xterm||!i.agent||0==(2&i.agent.caps)||0==(8&s)||4294967295!=s&&0!=(512&s)||(g+='<a href=# onclick=p10openxterm(event,"'+i._id+'") title="Abra o terminal XTerm">XTerm</a>&nbsp;'),0!=(1&M)&&1==clickOnce&&i.agent&&0!=(8&s)&&(0<i.agent.id&&i.agent.id<5&&(g+='<a href=# cmenu=altPortContextMenu id=rdpClickOnceLink onclick=p10clickOnce("'+i._id+'","RDP2") title="Requer o suporte Microsoft ClickOnce no seu navegador.">RDP</a>&nbsp;'),4<i.agent.id&&(g+='<a href=# onclick=p10clickOnce("'+i._id+'","PSSH",22) title="Requer o suporte Microsoft ClickOnce no seu navegador.">Putty</a>&nbsp;',g+='<a href=# onclick=p10clickOnce("'+i._id+'","WSCP",22) title="Requer o suporte Microsoft ClickOnce no seu navegador.">WinSCP</a>&nbsp;')),0!=(1&M)&&i.agent&&0!=(8&s)&&0==(536870912&features)&&(g+='<a href=# cmenu=rfbPortContextMenu id=rfbLink onclick=p10rfb("'+i._id+'") title="Launch noVNC session to this device.">noVNC</a>&nbsp;'),0!=(1&M)&&i.agent&&0!=(8&s)&&0==(1073741824&features)&&(g+='<a href=# cmenu=rfbPortContextMenu id=mstscLink onclick=p10mstsc("'+i._id+'") title="Launch web-based RDP session to this device.">Web-RDP</a>&nbsp;'),4294967295==s&&4194304&features&&(g+='<a href=# onclick=p10showMqttLoginDialog("'+i._id+'") title="Obtenha credenciais de login do MQTT para este dispositivo.">Login do MQTT</a>&nbsp;'),g+="</div><br>",QH("p10html3",g);var I=PowerStateStr(i.state);0!=(1&M)&&(0<I.length&&(I+="<br/>"),I+='<span style=font-size:12px title="Agente conectado">Agente conectado</span>'),0!=(2&M)?(0<I.length&&(I+="<br/>"),I+='<span style=font-size:12px title="Intel&reg; AMT conectado">Intel&reg; AMT conectado</span>'):0!=(4&M)&&(0<I.length&&(I+="<br/>"),I+='<span style=font-size:12px title="Intel&reg; AMT detectado">Intel&reg; AMT detectado</span>'),0!=(16&M)&&(0<I.length&&(I+="<br/>"),I+='<span style=font-size:12px title="MQTT conectado">Canal MQTT conectado</span>'),""==I&&i.lastconnect&&(I="<span style=font-size:12px>Visto pela última vez:<br />"+printDateTime(new Date(i.lastconnect))+"</span>"),QH("MainComputerState",I),Q("MainComputerImage").setAttribute("src","images/icons256-"+i.icon+"-1.png"),Q("MainComputerImage").className=i.conn&&0!=i.conn?"":"gray",T&&setupTerminal(),N&&setupFiles();var U=0!=(16&s);U?setupConsole():15==t&&(t=10),QV("MainDevDesktop",A&&(null==i.agent&&("number"!=typeof i.intelamt.sku||0!=(8&i.intelamt.sku))||null!=i.agent&&(null==i.agent.caps||0!=(1&i.agent.caps)||i.intelamt&&2==i.intelamt.state))&&(8&s||256&s)),QV("MainDevTerminal",(null==i.agent&&null!=i.intelamt||null==i.agent.caps||0!=(2&i.agent.caps)||i.intelamt&&2==i.intelamt.state)&&8&s&&T),QV("MainDevFiles",null!=i.agent&&null!=i.agent.caps&&0!=(4&i.agent.caps)&&8&s&&N),QV("MainDevAmt",null!=i.intelamt&&(2==i.intelamt.state||2&i.conn)&&8&s&&_),QV("MainDevConsole",U&&null!=i.agent&&null!=i.agent.caps&&0!=(8&i.agent.caps)&&8&s),QV("MainDevPlugins",!1),QV("p15uploadCore",null!=i.agent&&null!=i.agent.caps&&0!=(16&i.agent.caps)),QH("p15coreName",null!=i.agent&&null!=i.agent.core?i.agent.core:"");var V=Q("p14iframe").contentWindow.getCurrentMeshNode();null!=V&&V._id!=currentNode._id&&Q("p14iframe").contentWindow.disconnect();var R=0!=(6&i.conn);if(Q("p14iframe").contentWindow.setConnectionState(R),Q("p14iframe").contentWindow.setFrameHeight("650px"),Q("p14iframe").contentWindow.setAuthCallback(updateAmtCredentials),QV("deskActionsBtn",0!=(72&s)),QV("termActionsBtn",0!=(72&s)),QV("filesActionsBtn",0!=(72&s)),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("p17info","")),QV("DeskTools",!1),showDeskToolsProcesses(),refreshDeviceEvents(),document.title=currentNode&&10<=xxcurrentView&&xxcurrentView<20?currentNode.name+(a?" - "+a.name:"")+" - "+decodeURIComponent("{{{extitle}}}"):decodeURIComponent("{{{extitle}}}"),r&&(p11clearConsoleMsg(),p12clearConsoleMsg(),p13clearConsoleMsg()),null!=pluginHandler){QH("p19headers",""),QH("p19pages",""),pluginHandler.callHook("onDeviceRefreshEnd",e,t,o,n);var H=getstore("_curPluginPage",null);null!=H&&null!=Q("p19ph-"+H)&&pluginHandler.callPluginPage(H,Q("p19ph-"+H))}if(g="",7&s&&(g+='<a href=# onclick="return p20showAddMeshUserDialog(5)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar usuário</a>',null!=usergroups)){var F=0,P=!1;for(var y in usergroups)usergroups[y]._id.split("/")[1]==e.split("/")[1]&&(F++,null!=currentNode.links&&null!=currentNode.links[y]||(P=!0));0<F&&P&&(g+='<a href=# onclick="return p20showAddMeshUserDialog(6)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar grupo de usuários</a>')}g+='<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>Autorizações de usuário</th><th scope=col style=text-align:left></th></tr>';var B=1;if(null!=currentNode.links){var L=[];for(var y in currentNode.links)(y.startsWith("user/")||y.startsWith("ugrp/"))&&L.push(y);for(var y in L.sort(),L){var O="",G="",z=L[y],q=currentNode.links[z].rights,K=EscapeHtml(z.split("/")[2]),j=(G=makeUserDeviceRightsString(q),!1);null!=users&&null!=users[z]&&(K=EscapeHtml(users[z].name)),null!=usergroups&&null!=usergroups[z]&&(K=EscapeHtml(usergroups[z].name),j=!0),0!=(2&s)&&(G=j?(O="<a href=# onclick='return p30removeUserFromNode(event,\""+encodeURIComponentEx(z)+'")\' title="Remova os direitos do grupo de usuários para este grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>','<span style=cursor:pointer onclick=p20showAddMeshUserDialog(6,"'+encodeURIComponentEx(z)+'")>'+G+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"):(O="<a href=# onclick='return p30removeUserFromNode(event,\""+encodeURIComponentEx(z)+'")\' title="Remova os direitos de usuário deste grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>','<span style=cursor:pointer onclick=p20showAddMeshUserDialog(5,"'+encodeURIComponentEx(z)+'")>'+G+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>")),null!=users&&(K=j?"<a href=# onclick='gotoUserGroup(\""+encodeURIComponentEx(z)+"\");haltEvent(event);'>"+K+"</a>":"<a href=# onclick='gotoUser(\""+encodeURIComponentEx(z)+"\");haltEvent(event);'>"+K+"</a>"),g+="<tr "+(++B%2==0?"style=background-color:#DDD":"")+'><td style=width:30%><div title="'+(j?"Grupo de usuários":"Do utilizador")+'" class=m'+(j?4:2)+"></div><div>&nbsp;"+K+"<div></div></div></td><td style=width:70%><div style=float:right>"+O+"</div><div>"+G+"</div></td></tr>"}}1==B&&(g+="<tr><td><div style=padding:6px>&nbsp;<i>No users with special device permissions</i><div></div></div></td><td></td></tr>"),g+="</tbody></table>",QH("p10html4",g);var W="";if(0==(268435456&features)&&10<=xxcurrentView&&xxcurrentView<=19&&null!=currentNode){for(var y in W="?viewmode="+xxcurrentView+"&gotonode="+currentNode._id.split("/")[2],urlargs)W+="&"+y+"="+urlargs[y];try{window.history.replaceState({},document.title,window.location.pathname+W)}catch(e){}}}setupDesktop(),go(t=t||10)}}else setDialogMode(2,"Segurança da Conta",1,null,'Não foi possível acessar um dispositivo até que um endereço de email seja verificado. Isso é necessário para a recuperação de senha. Vá para a guia "Minha conta" para alterar e verificar um endereço de email.')}function makeUserDeviceRightsString(e){if(57592==e)return"Direitos completos do dispositivo";var t=[];if(8&e){var o=[];256&e&&o.push("No Input"),512&e&&o.push("Sem terminal"),1024&e&&o.push("Sem arquivos"),2048&e&&o.push("Nenhum AMT"),4096&e&&o.push("Entrada limitada"),65536&e&&o.push("No Desktop"),0<o.length?t.push("Control ("+o.join(", ")+")"):t.push("Control")}return 16&e&&t.push("Console"),32&e&&t.push("Arquivos do servidor"),64&e&&t.push("Wake"),128&e&&t.push("Notas"),8192&e&&t.push("Limit Events"),16384&e&&t.push("Chat"),32768&e&&t.push("Desinstalar"),0==t.length?"Sem direitos":t.join(", ")}function makeDeviceGroupRightsString(e){if(4294967295==e)return"Full Rights";var t=[];if(1&e&&t.push("Edit Group"),2&e&&t.push("Gerenciar Usuários"),4&e&&t.push("Manage Devices"),8&e){var o=[];256&e&&o.push("No Input"),512&e&&o.push("Sem terminal"),1024&e&&o.push("Sem arquivos"),2048&e&&o.push("Nenhum AMT"),4096&e&&o.push("Entrada limitada"),65536&e&&o.push("No Desktop"),0<o.length?t.push("Control ("+o.join(", ")+")"):t.push("Control")}return 16&e&&t.push("Console"),32&e&&t.push("Arquivos do servidor"),64&e&&t.push("Wake"),128&e&&t.push("Notas"),8192&e&&t.push("Limit Events"),16384&e&&t.push("Chat"),32768&e&&t.push("Desinstalar"),0==t.length?"Sem direitos":t.join(", ")}function writeDeviceEvent(e){xxdialogMode||(setDialogMode(2,"Adicionar evento do dispositivo",3,writeDeviceEventEx,"<textarea id=d2devEvent style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>This will add an entry to this device's event log.<span>",e),Q("d2devEvent").focus())}function writeDeviceEventEx(e,t){meshserver.send({action:"setDeviceEvent",nodeid:decodeURIComponent(t),msg:encodeURIComponentEx(Q("d2devEvent").value)})}function showNotes(e,t){xxdialogMode||(setDialogMode(2,"Notas",2,showNotesEx,"<textarea id=d2devNotes ro="+e+" noteid="+t+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>As notas do grupo de dispositivos podem ser visualizadas e alteradas por outros administradores do grupo de dispositivos.<span>",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 deviceChat(e){if(!xxdialogMode){var t="/messenger?id=meshmessenger/"+encodeURIComponentEx(currentNode._id)+"/"+encodeURIComponentEx(userinfo._id)+"&title="+currentNode.name;null!=authCookie&&""!=authCookie&&(t+="&auth="+authCookie),e&&1==e.shiftKey?window.open(t,"meshmessenger:"+currentNode._id):window.open(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)})}}function deviceToggleBackground(){xxdialogMode||meshserver.send({action:"msg",type:"deskBackground",nodeid:currentNode._id,op:1})}function deviceUrlFunction(){xxdialogMode||(setDialogMode(2,"Abrir página no dispositivo",3,deviceUrlFunctionEx,'<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll></input>'),Q("d2devurl").focus())}function deviceUrlFunctionEx(){meshserver.send({action:"msg",type:"openUrl",nodeid:currentNode._id,url:Q("d2devurl").value})}function deviceMessageFunction(){xxdialogMode||(setDialogMode(2,"Device Message",3,deviceMessageFunctionEx,"<div style=margin-bottom:4px>Display a message box on the remote device.</div><textarea id=d2devMessage style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>"),Q("d2devMessage").focus())}function deviceMessageFunctionEx(){meshserver.send({action:"msg",type:"messagebox",nodeid:currentNode._id,title:"{{{title}}}",msg:Q("d2devMessage").value})}function deviceToastFunction(){xxdialogMode||(setDialogMode(2,"Notificação de dispositivo",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>"),Q("d2devToast").focus())}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"{{{title}}}",msg:Q("d2devToast").value})}function deviceActionFunction(){if(!xxdialogMode){var e=GetNodeRights(currentNode),t="Selecione uma operação para executar neste dispositivo.<br /><br />",o="<select id=d2deviceop style=float:right;width:250px>";0!=(64&e)&&(o+="<option value=100>Ligar</option>"),0!=(8&e)&&(o+="<option value=4>Hibernar</option><option value=3>Redefinir</option><option value=2>Desligar</option>"),0!=(16&currentNode.conn)&&(o+="<option value=103>Enviar Mensagem MQTT</option>"),0!=(1&currentNode.conn)&&0!=(32768&e)&&(o+="<option value=104>Desinstalar agente</option>"),setDialogMode(2,"Ação do dispositivo",3,deviceActionFunctionEx,t+=addHtmlValue("Operação",o+="</select>"))}}function deviceActionFunctionEx(){var e=Q("d2deviceop").value;100==e?meshserver.send({action:"wakedevices",nodeids:[currentNode._id]}):103==e?p10showSendMqttMsgDialog([currentNode._id]):104==e?p10showSendUninstallAgentDialog([currentNode._id]):meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})}function updateAmtCredentials(e){var t=getNodeFromId(currentNode._id);1==e||null==t.intelamt.user||""==t.intelamt.user?editDeviceAmtSettings(currentNode._id,updateAmtCredentialsEx):Q("p14iframe").contentWindow.connectButtonfunctionEx()}function updateAmtCredentialsEx(e,t){Q("p14iframe").contentWindow.connectButtonfunctionEx()}function updateDeviceTimeline(){2==meshserver.State&&null!=powerTimelineNode&&null!=powerTimelineUpdate&&null!=currentNode&&powerTimelineNode==powerTimelineReq&&currentNode._id==powerTimelineNode&&powerTimelineUpdate<Date.now()&&(powerTimelineUpdate=null,meshserver.send({action:"powertimeline",nodeid:currentNode._id}),meshserver.send({action:"lastconnect",nodeid:currentNode._id}))}function drawDeviceTimeline(){if(!(null==currentNode||xxcurrentView<10||19<xxcurrentView)){var e=null,t=Date.now();currentNode._id==powerTimelineNode&&(e=powerTimeline);var o=new Date;o.setHours(0,0,0,0);(o=new Date(o.getTime()-5184e5)).getTime();var n=[];if(null!=e&&1<e.length){n.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]),n.push([i,i+r,s]),i+=r}}var l="",d=1,c=new Date,u=Q("masthead").offsetWidth-192;c.setHours(0,0,0,0);for(a=0;a<7;a++){var p="",m=c.getTime(),g=m+864e5;for(var v in n){var h=n[v];if(1==isTimeBlockInside(m,g,h[0],h[1])){var f=Math.max(m,h[0]),x=Math.min(Math.min(g,h[1]),t),k=Math.round((x-f)*u/864e5);if(0<k){var b=format("{0} from {1} to {2}.",powerStateStrings2[h[2]],printTime(new Date(f)),printTime(new Date(x)));p+='<div class="pwState '+powerColor(h[2])+'" title="'+b+'" style="width:'+k+'px;"></div>'}}}l+="<tr class="+(d%2==0?"altBack":"")+"><td><div>&nbsp;"+printDate(c)+"<div></div></div></td><td><div>"+p+"</div></td></tr>",++d,c=new Date(c.getTime()-864e5)}QH("p10html2",'<table cellpadding=2 cellspacing=0><thead><tr style=><th scope=col style=text-align:center;width:150px>Dia</th><th scope=col style=text-align:center><a download href="devicepowerevents.ashx?id='+currentNode._id+(urlargs.key?"&key="+urlargs.key:"")+'" onclick="setDialogMode(0)"><img title="Download de eventos de energia" src="images/link4.png" /></a>Estado de energia de 7 dias</th></tr></thead><tbody>'+l+"</tbody></table>")}}function powerColor(e){return e<powerColorTable.length?powerColorTable[e]:"pwsYellow"}function isTimeBlockInside(e,t,o,n){return o<e&&t<n||(e<o&&o<t||e<n&&n<t)}function addDeviceAttribute(e,t){return"<tr><td class=style7>"+e+"</td><td class=style9>"+t+"</td></tr>"}function editDeviceAmtSettings(e,t,o){if(!xxdialogMode){var n="",i=getNodeFromId(e),a=3;0!=(4&GetNodeRights(i))&&(n+=addHtmlValue("Nome de usuário",'<input id=dp10username style=width:230px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />'),n+=addHtmlValue("Senha","<input id=dp10password type=password style=width:230px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />"),n+=addHtmlValue("Segurança","<select id=dp10tls style=width:236px><option value=0>Sem segurança TLS</option><option value=1>Segurança TLS necessária</option></select>"),null!=i.intelamt.user&&""!=i.intelamt.user&&(a=7),setDialogMode(2,"Editar Intel & reg; Credenciais AMT",a,editDeviceAmtSettingsEx,n,{node:i,func:t,arg:o}),null!=i.intelamt.user&&""!=i.intelamt.user?Q("dp10username").value=i.intelamt.user:Q("dp10username").value="admin",Q("dp10tls").value=i.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 o=Q("dp10username").value;""==o&&(o="admin");var n=Q("dp10password").value;""==n&&(o=""),meshserver.send({action:"changedevice",nodeid:t.node._id,intelamt:{user:o,pass:n,tls:parseInt(Q("dp10tls").value)}}),t.node.intelamt.user=o,t.node.intelamt.tls=parseInt(Q("dp10tls").value),t.func&&setTimeout(function(){t.func(null,t.arg)},300)}}function p10showSendMqttMsgDialog(e){if(xxdialogMode)return!1;var t=addHtmlValue("Tema","<input id=dp2topic style=width:230px maxlength=64 onchange=p10validateSendMqttMsgDialog() onkeyup=p10validateSendMqttMsgDialog(event,1) />");return setDialogMode(2,"Enviar mensagem MQTT",3,p10showSendMqttMsgDialogEx,t+=addHtmlValue("Mensagem","<div style=width:230px;margin:0;padding:0><textarea id=dp2msg maxlength=4096 style=width:100%;height:150px;resize:none onchange=p10validateSendMqttMsgDialog() onkeyup=p10validateSendMqttMsgDialog(event,1)></textarea></div>"),e),p10validateSendMqttMsgDialog(),Q("dp2topic").focus(),!1}function p10validateSendMqttMsgDialog(){QE("idx_dlgOkButton",0<Q("dp2topic").value.length&&0<Q("dp2msg").value.length)}function p10showSendMqttMsgDialogEx(e,t){meshserver.send({action:"sendmqttmsg",nodeids:t,topic:Q("dp2topic").value,msg:Q("dp2msg").value}),uncheckAllDevices()}function p10showSendUninstallAgentDialog(e){if(xxdialogMode)return!1;var t="";return t=1<e.length?format("Tem certeza de que deseja desinstalar os {0} agentes selecionados?",e.length):"Tem certeza de que deseja desinstalar o agente selecionado?",t+="<br /><br />",1<e.length?t+="Isso não removerá os dispositivos do servidor, mas os dispositivos não poderão mais se conectar ao servidor. Todo o acesso remoto aos dispositivos será perdido. Os dispositivos devem estar conectados para que este comando funcione.":t+="Isso não removerá este dispositivo do servidor, mas o dispositivo não poderá mais se conectar ao servidor. Todo o acesso remoto ao dispositivo será perdido. O dispositivo deve estar conectado para que este comando funcione.",setDialogMode(2,"Desinstalar agente",3,p10showSendUninstallAgentDialogEx,t+="<br /><br /><label style=color:red><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirme</label>",e),p10validateSendUninstallAgentDialog(),!1}function p10validateSendUninstallAgentDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showSendUninstallAgentDialogEx(e,t){meshserver.send({action:"uninstallagent",nodeids:t}),uncheckAllDevices()}function p10showChangeGroupDialog(e){if(xxdialogMode)return!1;var t=null;if(1==e.length)try{t=meshes[getNodeFromId(e[0])]._id}catch(e){}var o="<select id=p10newGroup style=width:236px>",n=0;for(var i in meshes){var a=GetMeshRights(i);meshes[i]._id!=t&&4&a&&(n++,o+="<option value='"+meshes[i]._id+"'>"+meshes[i].name+"</option>")}if(o+="</select>",0<n){var s=1==e.length?"Selecione um novo grupo para este dispositivo<br /><br />":"Selecione um novo grupo para dispositivos selecionados<br /><br />";setDialogMode(2,"Alterar grupo",3,p10showChangeGroupDialogEx,s+=addHtmlValue("Novo grupo de dispositivos",o),e)}else setDialogMode(2,"Alterar grupo",1,null,"Não existe outro grupo de dispositivos do mesmo tipo.");return!1}function p10showChangeGroupDialogEx(e,t){meshserver.send({action:"changeDeviceMesh",nodeids:t,meshid:Q("p10newGroup").value}),uncheckAllDevices()}function p10showDeleteNodeDialog(e){return xxdialogMode||(setDialogMode(2,"Excluir nó",3,p10showDeleteNodeDialogEx,format("Tem certeza de que deseja excluir o nó {0}?",EscapeHtml(currentNode.name))+"<br /><br /><label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirme</label>",e),p10validateDeleteNodeDialog()),!1}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(e,t){meshserver.send({action:"removedevices",nodeids:[t]})}function p10clickOnce(e,t,o){return"RDP2"==t&&null==o&&(o=null!=currentNode.rdpport?currentNode.rdpport:3389),meshserver.send({action:"getcookie",nodeid:e,tcpport:o,tag:"clickonce",protocol:t}),!1}function p10rfb(e,t){null==t&&(t=null!=currentNode.rfbport?currentNode.rfbport:5900),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"novnc"})}function p10mstsc(e,t){null==t&&(t=null!=currentNode.rdpport?currentNode.rdpport:3389),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"mstsc"})}var d2map=null;function p10showNodeLocationDialog(){if(null!=xxdialogMode&&"@xxmap"==xxdialogTag)setDialogMode(0);else if(xxdialogMode)return!1;var e=[],t=["iploc","wifiloc","gpsloc","userloc"],o=null;for(var n in t)if(null!=currentNode[t[n]]){var i=currentNode[t[n]].split(","),a=parseFloat(i[0]),s=parseFloat(i[1]);if(a<90&&-90<a&&s<180&&-180<s){var r=new ol.Feature({geometry:new ol.geom.Point(ol.proj.fromLonLat([s,a]))});r.setStyle(markerStyle(currentNode,parseInt(n)+1)),e.push(r),null==o?o=[a,s,a,s,0]:(a<o[0]&&(o[0]=a),s<o[1]&&(o[1]=s),a>o[2]&&(o[2]=a),s>o[3]&&(o[3]=s))}}var l=new ol.source.Vector({features:e}),d=new ol.layer.Vector({source:l});setDialogMode(2,"Localização do dispositivo",1,null,"<div id=d2map style=width:100%;height:300px></div>","@xxmap");var c=0,u=0,p=8;if(null!=o){u=(o[0]+o[2])/2,c=(o[1]+o[3])/2;var m=Math.max(Math.abs(o[0]-o[2]),Math.abs(o[1]-o[3])),g=360;for(p=-2;m<g;)p++,g/=2}return 1==e.length&&(p=8),d2map=new ol.Map({target:"d2map",interactions:ol.interaction.defaults({dragPan:!1,mouseWheelZoom:!1}),layers:[new ol.layer.Tile({source:new ol.source.OSM}),d],view:new ol.View({center:ol.proj.fromLonLat([c,u]),zoom:p})}),!1}function p10showNodeNetInfoDialog(){return xxdialogMode||(setDialogMode(2,"Interfaces de rede",1,null,"<div id=d2netinfo>Carregando...</div>","if"+currentNode._id),meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id})),!1}function p10showMeshRouterDialog(){if(!xxdialogMode){var e="<div>O MeshCentral Router é uma ferramenta do Windows para mapeamento de portas TCP. Você pode, por exemplo, RDP em um dispositivo remoto através deste servidor.</div><br />";e+=addHtmlValue("Executável Win32",'<a style=cursor:pointer download href="meshagents?meshaction=winrouter'+(urlargs.key?"&key="+urlargs.key:"")+'" onclick="setDialogMode(0)">MeshCentralRouter.exe</a>');var t=serverinfo.name;-1!=t.indexOf(".")&&0==(2&features)||(t=window.location.hostname);domainUrl.substring(0,domainUrl.length-1);e+='<br /><div>Run MeshCentral Router and click "install" to make it launchable from the browser.</div>',e+='<br /><a style=cursor:pointer target="mcrouterframe" rel="noreferrer noopener" download href="'+("mcrouter://"+t+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl+"control.ashx?c="+authCookie+"&t="+serverinfo.tlshash+"&l={{{lang}}}")+'"><input type=button style=width:100%;cursor:pointer value="Launch MeshCentral Router" /></a>',setDialogMode(2,"MeshCentral Router",1,null,e+='<iframe style=display:none name="mcrouterframe"></iframe>',"fileDownload")}}function p10showMqttLoginDialog(e){meshserver.send({action:"getmqttlogin",nodeid:e})}function p10openxterm(e,t){haltEvent(e);var o="/xterm?nodeid="+encodeURIComponentEx(t)+"&auto=1",n=getNodeFromId(t);if(null!=n)return 0<=[1,2,3,4,21,22].indexOf(n.agent.id)?o+="&os=win":o+="&os=linux",window.open(o,"xterm:"+t),!1}function p10showMeshCmdDialog(e,t){if(!xxdialogMode){"<option value=3>Windows (32 Bits)</option>","<option value=4>Windows (64 Bits)</option>","<option value=5>Linux x86 (32 bits)</option>","<option value=6>Linux x86 (64 bits)</option>","<option value=16>MacOS (64 bits)</option>","<option value=25>Linux ARM, Raspberry Pi (32 bits)</option>","</select>";var o="";0==e&&(o+="<div>MeshCmd é uma ferramenta de linha de comando que executa várias operações diferentes. Opcionalmente, o arquivo de ação pode ser baixado e editado para fornecer informações e credenciais do servidor.<br /><br />"),1==e&&(o+='<div>Faça o download de "meshcmd" com um arquivo de ação para rotear o tráfego desse servidor para este dispositivo. Certifique-se de editar o meshaction.txt e adicionar a senha da sua conta ou fazer as alterações necessárias.<br /><br />'),o+=addHtmlValue("Sistema operacional","<select id=aginsSelect onclick=meshCmdOsClick() style=width:236px><option value=3>Windows (32 Bits)</option><option value=4>Windows (64 Bits)</option><option value=5>Linux x86 (32 bits)</option><option value=6>Linux x86 (64 bits)</option><option value=16>MacOS (64 bits)</option><option value=25>Linux ARM, Raspberry Pi (32 bits)</option></select>"),o+=addHtmlValue("MeshCmd",'<a id=meshcmddownloadid href="meshagents?meshcmd=3'+(urlargs.key?"&key="+urlargs.key:"")+'" download></a>'),0==e&&(o+=addHtmlValue("Arquivo de Ação",'<a href="meshagents?meshaction=generic'+(urlargs.key?"&key="+urlargs.key:"")+'" download>MeshAction (.txt)</a>')),1==e&&(o+=addHtmlValue("Arquivo de Ação",'<a href="meshagents?meshaction=route&nodeid='+t+(urlargs.key?"&key="+urlargs.key:"")+'" download>MeshAction (.txt)</a>')),setDialogMode(2,"Baixar MeshCmd",9,null,o+="</div>","fileDownload"),meshCmdOsClick()}}function meshCmdOsClick(){var e=Q("aginsSelect").value,t="";3==e&&(t="MeshCmd (executável Win32)"),4==e&&(t="MeshCmd (executável Win64)"),5==e&&(t="MeshCmd (Linux x86, 32bit)"),6==e&&(t="MeshCmd (Linux x86, 64bit)"),16==e&&(t="MeshCmd (MacOS, 64bit)"),25==e&&(t="MeshCmd (Linux ARM, 32 bits)"),QH("meshcmddownloadid",t),Q("meshcmddownloadid").setAttribute("href","meshagents?meshcmd="+e+(urlargs.key?"&key="+urlargs.key:""))}function p10showiconselector(){if(!xxdialogMode&&0!=(4&GetNodeRights(currentNode))){'<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i1 onclick=p10setIcon(1) onkeypress="if (event.key==\'Enter\') p10setIcon(1)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i2 onclick=p10setIcon(2) onkeypress="if (event.key==\'Enter\') p10setIcon(2)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i3 onclick=p10setIcon(3) onkeypress="if (event.key==\'Enter\') p10setIcon(3)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i4 onclick=p10setIcon(4) onkeypress="if (event.key==\'Enter\') p10setIcon(4)"></div>',"<br />",'<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i5 onclick=p10setIcon(5) onkeypress="if (event.key==\'Enter\') p10setIcon(5)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i6 onclick=p10setIcon(6) onkeypress="if (event.key==\'Enter\') p10setIcon(6)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i7 onclick=p10setIcon(7) onkeypress="if (event.key==\'Enter\') p10setIcon(7)"></div>','<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i8 onclick=p10setIcon(8) onkeypress="if (event.key==\'Enter\') p10setIcon(8)"></div>',"<br /><br /></div>",setDialogMode(2,"Seleção de ícone",0,null,'<div style=text-align:center><br /><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i1 onclick=p10setIcon(1) onkeypress="if (event.key==\'Enter\') p10setIcon(1)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i2 onclick=p10setIcon(2) onkeypress="if (event.key==\'Enter\') p10setIcon(2)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i3 onclick=p10setIcon(3) onkeypress="if (event.key==\'Enter\') p10setIcon(3)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i4 onclick=p10setIcon(4) onkeypress="if (event.key==\'Enter\') p10setIcon(4)"></div><br /><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i5 onclick=p10setIcon(5) onkeypress="if (event.key==\'Enter\') p10setIcon(5)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i6 onclick=p10setIcon(6) onkeypress="if (event.key==\'Enter\') p10setIcon(6)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i7 onclick=p10setIcon(7) onkeypress="if (event.key==\'Enter\') p10setIcon(7)"></div><div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i8 onclick=p10setIcon(8) onkeypress="if (event.key==\'Enter\') p10setIcon(8)"></div><br /><br /></div>'),QV("id_dialogclose",!0)}}function p10setIcon(e){setDialogMode(0),meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:e})}var desktopNode,showEditNodeValueDialog_modes=["Nome do Dispositivo","Hostname","Descrição","Tags"],showEditNodeValueDialog_modes2=["name","host","desc","tags"],showEditNodeValueDialog_modes3=["","","","Tag1, Tag2, Tag3"];function showEditNodeValueDialog(e){if(!xxdialogMode){setDialogMode(2,"Editar dispositivo",3,showEditNodeValueDialogEx,addHtmlValue(showEditNodeValueDialog_modes[e],'<input id=dp10devicevalue maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[e]+'" onchange=p10editdevicevalueValidate('+e+",event) onkeyup=p10editdevicevalueValidate("+e+",event) />"),e);var t=currentNode[showEditNodeValueDialog_modes2[e]];null==t&&(t=""),Array.isArray(t)&&(t=t.join(", ")),Q("dp10devicevalue").value=t,p10editdevicevalueValidate(),Q("dp10devicevalue").focus()}}function showEditNodeValueDialogEx(e,t){var o={action:"changedevice",nodeid:currentNode._id};o[showEditNodeValueDialog_modes2[t]]=Q("dp10devicevalue").value,meshserver.send(o)}function p10editdevicevalueValidate(e,t){var o=1<e||0<Q("dp10devicevalue").value.length;QE("idx_dlgOkButton",o),null!=t&&1==o&&13==t.keyCode&&dialogclose(1)}function setupDesktop(){if(desktopNode!=currentNode&&null!=desktop&&(desktop.Stop(),desktop=desktopNode=null),desktopNode!=currentNode||null==desktop){var e=multiDesktop[currentNode._id];if(null!=e){QH("DeskParent","");var t=e.m.CanvasId;t.setAttribute("id","Desk"),t.setAttribute("onmousedown","dmousedown(event)"),t.setAttribute("onmouseup","dmouseup(event)"),t.setAttribute("onmousemove","dmousemove(event)"),t.removeAttribute("onclick"),Q("DeskParent").appendChild(t),(desktop=e).m.SendCompressionLevel&&desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate),desktop.onStateChanged=onDesktopStateChange,desktop.onMetadataChange=function(e){updateMetadata(desktop,"deskmetadata")},desktop&&desktop.m.mouseCursorActive&&desktop.m.mouseCursorActive(!0),desktopNode=currentNode,onDesktopStateChange(desktop,desktop.State),delete multiDesktop[currentNode._id]}else QH("DeskParent",'<canvas id=Desk oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>'),desktopNode=currentNode;Q("Desk").addEventListener("DOMMouseScroll",function(e){return dmousewheel(e)}),Q("Desk").addEventListener("mousewheel",function(e){return dmousewheel(e)})}desktopNode=currentNode,updateDesktopButtons(),deskAdjust(),updateMetadata(desktop,"deskmetadata")}function updateDesktopButtons(){meshes[currentNode.meshid];var e=0;null!=desktop&&(e=desktop.State);var t=GetNodeRights(currentNode);QV("disconnectbutton1span",0!=e),QV("connectbutton1span",0==e&&(8&t||256&t)&&null!=currentNode.agent&&1&currentNode.agent.caps),QV("connectbutton1hspan",0==e&&8&t&&null!=currentNode.intelamt&&2==currentNode.intelamt.state&&null!=currentNode.intelamt.ver&&(null==currentNode.intelamt.sku||"number"==typeof currentNode.intelamt.sku&&0!=(8&currentNode.intelamt.sku))),QV("d7amtkvm",!(null==currentNode.intelamt||null==currentNode.intelamt.ver&&null!=currentNode.agent||0!=e&&2!=desktop.contype)),QV("d7meshkvm",webRtcDesktop||null!=currentNode.agent&&1&currentNode.agent.caps&&(0==e||1==desktop.contype));var o=4294967295==t||0!=(8&t)&&0==(256&t)&&0==(4096&t),n=0!=(1&currentNode.conn);QE("connectbutton1",n);var i=0!=(6&currentNode.conn);QE("connectbutton1h",i),QV("deskFocusBtn",null!=desktop&&2==desktop.contype&&0!=e&&desktopsettings.showfocus),QV("DeskClip",currentNode.agent&&11!=currentNode.agent.id&&16!=currentNode.agent.id&&(null==desktop||2!=desktop.contype)),QE("DeskClip",3==e),QE("DeskType",3==e),QV("DeskWD",o),QE("DeskWD",3==e),QV("deskkeys",o),QE("deskkeys",3==e),QV("DeskSaveImageButton",3==e&&null!=Q("Desk").toBlob),QV("DeskRecordButton",3==e&&null!=Q("Desk").toBlob&&null!=desktop.m.StartRecording),QV("DeskChatButton",0!=(16384&t)&&0==browserfullscreen&&o&&currentNode.agent&&n),QV("DeskNotifyButton",0!=(16384&t)&&0==browserfullscreen&&currentNode.agent&&currentNode.agent.id<5&&o&&currentNode.agent&&n),QV("DeskToolsButton",o&&currentNode.agent&&n),QV("DeskOpenWebButton",0==browserfullscreen&&o&&currentNode.agent&&n),QV("DeskBackgroundButton",3==e&&1==desktop.contype&&currentNode.agent&&11!=currentNode.agent.id&&16!=currentNode.agent.id&&n),QV("DeskControlSpan",o),QV("deskActionsBtn",0==browserfullscreen),QV("deskActionsSettings",0==browserfullscreen),Q("DeskControl").checked=!!(8&t)&&1==getstore("DeskControl",1),QS("DeskControlSpan").color=Q("DeskControl").checked?null:"red",0==n&&QV("DeskTools",!1)}var autoConnectDesktopTimer=null;function autoConnectDesktop(e){autoConnectDesktopTimer=null==autoConnectDesktopTimer?setInterval(function(){connectDesktop(null,1)},1e3):(clearInterval(autoConnectDesktopTimer),null)}var agentConsoleMessages=["","Waiting for user to grant access...","Denied","Failed to start remote terminal session, {0} ({1})","Timeout","Received invalid network data"];function formatAgentConsoleMessage(e,t,o){for(null==o&&(o=[]);o.length<3;)o.push("");return(t&&t<agentConsoleMessages.length?EscapeHtml(format(agentConsoleMessages[t],o[0],o[1],o[2])):EscapeHtml(e)).split("\n").join("<br />")+"<br /><br />"}function connectDesktop(e,t,o,n){if(!xxdialogMode)if(null!=e&&0!=e.shiftKey&&3==t&&(t=1),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,2);(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.localKeyMap=desktopsettings.localkeymap,desktop.m.showmouse=desktopsettings.showmouse,desktop.m.onScreenSizeChange=deskAdjust,desktop.m.onKvmData=function(e){if(0!=e.length){var t=null;try{t=JSON.parse(e)}catch(e){}if(null!=t&&null!=t.action)if("restart"==t.action)webRtcDesktopReset(),desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1}));else if("present"==t.action&&null==webRtcDesktop){webRtcDesktop={platform:t.platform};"undefined"!=typeof RTCPeerConnection?webRtcDesktop.webrtc=new RTCPeerConnection(null):"undefined"!=typeof webkitRTCPeerConnection&&(webRtcDesktop.webrtc=new webkitRTCPeerConnection(null)),webRtcDesktop.webchannel=webRtcDesktop.webrtc.createDataChannel("DataChannel",{}),webRtcDesktop.webchannel.onopen=function(){console.log("WebRTC Data Channel Open"),Q("deskstatus").textContent=StatusStrs[desktop.State]+", Soft-KVM",desktop.m.hold(!0),webRtcDesktop.webRtcActive=!0,webRtcDesktop.softdesktop=CreateKvmDataChannel(webRtcDesktop.webchannel,CreateAgentRemoteDesktop("Desk",Q("id_mainarea")),desktop.m),webRtcDesktop.softdesktop.m.setRotation(desktop.m.rotation),webRtcDesktop.softdesktop.m.onScreenSizeChange=deskAdjust,desktopsettings.quality&&(webRtcDesktop.softdesktop.m.CompressionLevel=desktopsettings.quality),desktopsettings.scaling&&(webRtcDesktop.softdesktop.m.ScalingLevel=desktopsettings.scaling),webRtcDesktop.softdesktop.Start()},webRtcDesktop.webchannel.onclose=function(e){console.log("WebRTC Data Channel Closed"),webRtcDesktopReset()},webRtcDesktop.webrtc.onicecandidate=function(e){null==e.candidate?desktop.m.sendKvmData(JSON.stringify({action:"offer",ver:1,sdp:webRtcDesktop.webrtcoffer.sdp})):webRtcDesktop.webrtcoffer.sdp+="a="+e.candidate.candidate+"\r\n"},webRtcDesktop.webrtc.oniceconnectionstatechange=function(){null==webRtcDesktop||null==webRtcDesktop.webrtc||"disconnected"!=webRtcDesktop.webrtc.iceConnectionState&&"failed"!=webRtcDesktop.webrtc.iceConnectionState||webRtcDesktopReset()},webRtcDesktop.webrtc.createOffer(function(e){webRtcDesktop.webrtcoffer=e,webRtcDesktop.webrtc.setLocalDescription(e,function(){},webRtcDesktopReset)},webRtcDesktopReset,{mandatory:{OfferToReceiveAudio:!1,OfferToReceiveVideo:!1}})}else"answer"==t.action&&null!=webRtcDesktop&&webRtcDesktop.webrtc.setRemoteDescription(new RTCSessionDescription({type:"answer",sdp:t.sdp}),function(){},webRtcDesktopReset)}else desktop.m._sentPresence||(desktop.m._sentPresence=!0,desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1})))},desktop.Start(desktopNode._id,16994,"*","*",0),desktop.contype=2}else null==t||1==t||3==t&&4<currentNode.agent.id?((desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).m.mouseCursorActive(11==xxcurrentView),desktop.debugmode=debugmode,desktop.m.debugmode=debugmode,desktop.attemptWebRTC=attemptWebRTC,desktop.options={},null!=o&&(desktop.options.tsid=o),null!=n&&(desktop.options.consent=n),desktop.onStateChanged=onDesktopStateChange,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.onMetadataChange=function(e){updateMetadata(desktop,"deskmetadata")},desktop.m.CompressionLevel=desktopsettings.quality,desktop.m.ScalingLevel=desktopsettings.scaling,desktopsettings.framerate&&(desktop.m.FrameRateTimer=desktopsettings.framerate),desktop.m.onDisplayinfo=deskDisplayInfo,desktop.m.onScreenSizeChange=deskAdjust,desktop.Start(desktopNode._id),desktop.latency.callback=function(e){console.log("latency",e),updateSessionTime()},desktop.contype=1):3==t&&meshserver.send({action:"msg",type:"userSessions",nodeid:currentNode._id,tag:n});else desktop.Stop(),webRtcDesktopReset(),desktopNode=desktop=null,null!=pluginHandler&&pluginHandler.callHook("onDesktopDisconnect")}function updateMetadata(e,t){var o="",n=0;if(e&&3==e.State){if(e.metadata&&e.metadata.users)for(var i in e.metadata.users)n+=e.metadata.users[i];1<n&&(o="<span onclick=showSessionMetadata(1) style=cursor:pointer>"+format(", {0} watching",n)+"</span>")}QH("deskmetadata",o),e==desktop&&"sessionMetadata1"==xxdialogTag&&showSessionMetadata(1)}function showSessionMetadata(e){if(!xxdialogMode||xxdialogTag=="sessionMetadata"+e){xxdialogMode&&setDialogMode(0);var t=null;if(1==e&&(t=desktop),t&&t.metadata){var o="";if(t.metadata.startTime&&(o+=addHtmlValue4("Start Time",printDateTime(new Date(t.metadata.startTime)))),t.metadata.users)for(var n in t.metadata.users){var i=1==t.metadata.users[n]?"1 connection":format("{0} connections",t.metadata.users[n]),a=n.split("/")[2];null!=users&&null!=users[n]&&(a=users[n].name),o+=addHtmlValue4(format('User "{0}"',a),i)}setDialogMode(2,"Session Information",1,null,o,"sessionMetadata"+e)}}}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)}var webRtcDesktop=null;function webRtcDesktopReset(){if(null!=webRtcDesktop){if(null!=webRtcDesktop.softdesktop&&(webRtcDesktop.softdesktop.Stop(),webRtcDesktop.softdesktop=null),null!=webRtcDesktop.webchannel){try{webRtcDesktop.webchannel.close()}catch(e){}webRtcDesktop.webchannel=null}if(null!=webRtcDesktop.webrtc){try{webRtcDesktop.webrtc.close()}catch(e){}webRtcDesktop.webrtc=null}webRtcDesktop=null,desktop&&desktop.m&&(desktop.m.hold(!1),Q("deskstatus").textContent=StatusStrs[desktop.State])}}function onDesktopStateChange(e,t){var o=t;3==o&&2==e.contype&&o++;var n=StatusStrs[o];switch(null!=desktop&&1==desktop.webRtcActive&&(n+=", WebRTC"),QH("deskstatus",n),t){case 0:null!=desktop.m.recordedData&&deskRecordSession(),desktop.Stop(),desktopNode=desktop=null,QV("DeskFocus",!1),QV("termdisplays",!1),QV("deskRecordIcon",!1),deskFocusBtn.value="All Focus",1==fullscreen&&deskToggleFull(),webRtcDesktopReset(),deskPreferedStickyDisplay=0;break;case 2:break;case 3:desktop&&1==desktop.serverIsRecording&&QV("deskRecordIcon",!0),desktop.startTime=new Date,null==updateSessionTimer&&(updateSessionTimer=setInterval(updateSessionTime,1e3))}updateDesktopButtons(),deskAdjust(),setTimeout(deskAdjust,50),updateMetadata(desktop,"deskmetadata")}function updateSessionTime(){var e="",t=0;desktop&&desktop.startTime?(desktop.latency&&0<=desktop.latency.current&&(e=format("{0} ms, ",desktop.latency.current)),t=Math.floor((new Date-desktop.startTime)/1e3),QH("DeskTimer",e+zeroPad(Math.floor(t/3600),2)+":"+zeroPad(Math.floor(t/60)%60,2)+":"+zeroPad(t%60,2))):QH("DeskTimer",""),t=0,terminal&&terminal.startTime?(terminal.latency&&0<=terminal.latency.current&&(e=format("{0} ms, ",terminal.latency.current)),t=Math.floor((new Date-terminal.startTime)/1e3),QH("TermTimer",e+zeroPad(Math.floor(t/3600),2)+":"+zeroPad(Math.floor(t/60)%60,2)+":"+zeroPad(t%60,2))):QH("TermTimer",""),null==desktop&&null==terminal&&(clearInterval(updateSessionTimer),updateSessionTimer=null)}function showDesktopSettings(){xxdialogMode||(applyDesktopSettings(),updateDesktopButtons(),setDialogMode(7,"Configurações da área de trabalho remota",3,showDesktopSettingsChanged))}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value,desktopsettings.showfocus=d7showfocus.checked,desktopsettings.showmouse=d7showcursor.checked,desktopsettings.quality=d7bitmapquality.value,desktopsettings.scaling=d7bitmapscaling.value,desktopsettings.framerate=d7framelimiter.value,desktopsettings.localkeymap=d7localKeyMap.checked,localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings)),applyDesktopSettings(),desktop&&(1==desktop.contype&&0!=desktop.State&&desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate),2==desktop.contype&&(0==desktopsettings.showfocus&&(desktop.m.focusmode=0,deskFocusBtn.value="All Focus"),0!=desktop.State&&(desktop.Stop(),setTimeout(function(){connectDesktop(null,2)},50))))}function applyDesktopSettings(){var e="",t=512&features?[90,80,70,60,50,40,30,20,10,5,1]:[60,50,40,30,20,10,5,1];for(var o in t)e+="<option value="+t[o]+">"+t[o]+"%</option>";QH("d7bitmapquality",e),d7desktopmode.value=desktopsettings.encoding,d7showfocus.checked=desktopsettings.showfocus,d7showcursor.checked=desktopsettings.showmouse,d7bitmapquality.value=40,0<=t.indexOf(parseInt(desktopsettings.quality))&&(d7bitmapquality.value=desktopsettings.quality),d7bitmapscaling.value=desktopsettings.scaling,desktopsettings.framerate?d7framelimiter.value=desktopsettings.framerate:d7framelimiter.value=100,desktopsettings.localkeymap&&(d7localKeyMap.checked=desktopsettings.localkeymap),QV("deskFocusBtn",null!=desktop&&2==desktop.contype&&0!=desktop.state&&desktopsettings.showfocus)}function enterBrowserFullscreen(e){e.requestFullscreen?e.requestFullscreen():e.msRequestFullscreen?e.msRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullscreen&&e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}function exitBrowserFullscreen(){document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()}function isBrowserFullscreen(){return!!(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)}var fullscreen=!1,browserfullscreen=!1;function deskToggleFull(e){var t=!(0===args.xterm||null!=terminal&&null==xterm);if(fullscreen=!fullscreen)QC("body").add("fulldesk"),QS("deskarea3x").height="100%",QS("deskarea3x")["max-height"]="100%",t?(QS("termTable").position="absolute",QS("termTable").top=QS("termTable").bottom=QS("termTable").left=QS("termTable").right="0"):(QS("termTable").height="100%",QS("termTable")["max-height"]="100%"),1==e.shiftKey&&(enterBrowserFullscreen(Q("container")),browserfullscreen=!0);else{QC("body").remove("fulldesk");var o=args.hide;0==footerBar&&(o|=4);var n=(1&o?0:66)+(2&o?0:24)+(4&o?0:45)+(8&o?0:60);QS("deskarea3x").height="calc(100vh - "+(75+n)+"px)",QS("deskarea3x")["max-height"]="calc(100vh - "+(75+n)+"px)",t?(QS("termTable").position=null,QS("termTable").top=QS("termTable").bottom=QS("termTable").left=QS("termTable").right=null):(QS("termTable").height="calc(100vh - "+(75+n)+"px)",QS("termTable")["max-height"]="calc(100vh - "+(75+n)+"px)"),1==browserfullscreen&&(exitBrowserFullscreen(),browserfullscreen=!1)}deskAdjust(),updateDesktopButtons(),adjustPanels(),null!=xterm&&12==xxcurrentView&&(xtermfit.fit(),xterm.focus())}function deskToggleFocus(){desktop.m.focusmode=(desktop.m.focusmode+64)%192,Q("deskFocusBtn").value=["All Focus","Foco pequeno","Foco grande"][desktop.m.focusmode/64]}function deskAdjust(){var e=Q("DeskParent").clientHeight,t=Q("DeskParent").clientWidth,o=Q("Desk").height,n=Q("Desk").width;if(2==deskAspectRatio)QS("Desk")["margin-top"]=null,QS("Desk").height="100%",QS("Desk").width="100%",QS("DeskParent").overflow="hidden";else if(1==deskAspectRatio)QS("Desk")["margin-top"]="0px",QS("Desk").height=o+"px",QS("Desk").width=n+"px",QS("DeskParent").overflow="scroll";else{if(o/n<e/t){var i=o*t/n+"px";QS("Desk").height=i,QS("Desk").width="100%"}else{var a=n*e/o+"px";QS("Desk").height=webPageFullScreen||fullscreen?null:"100%",QS("Desk").width=a}QS("Desk")["margin-top"]=null,QS("DeskParent").overflow="hidden"}}function mdeskAdjust(e,t,o,n){if(e&&t&&o&&n)if("Desk"!=n.id){var i=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex],a=i.x+2,s=Q("xdevices").clientWidth-30,r=Math.floor(s/a);r=a+Math.floor((s-r*a)/r),i.y=i.y*(r/i.x),i.x=r;var l=i.y,d=i.x;0!=e.State&&(l=i.y,d=t/o*i.y),QS(n.id)["max-height"]=l+"px",QS(n.id)["max-width"]=d+"px",QS(n.id)["margin-top"]="0",QS(n.id)["margin-bottom"]="0"}else deskAdjust()}function deskSendKeys(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){var e=Q("deskkeys").value;0==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[65364,1],[65364,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,40],[desktop.m.KeyAction.UP,40],[desktop.m.KeyAction.EXUP,91]]):1==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[65362,1],[65362,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,38],[desktop.m.KeyAction.UP,38],[desktop.m.KeyAction.EXUP,91]]):2==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[108,1],[108,0],[65511,0]]):desktop.sendCtrlMsg('{"action":"lock"}'):3==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[109,1],[109,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91]]):4==e?2==desktop.contype?desktop.m.sendkey([[65505,1],[65511,1],[109,1],[109,0],[65511,0],[65505,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN,16],[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91],[desktop.m.KeyAction.UP,16]]):5==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.EXUP,91]]):6==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[114,1],[114,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,82],[desktop.m.KeyAction.UP,82],[desktop.m.KeyAction.EXUP,91]]):7==e?2==desktop.contype?desktop.m.sendkey([[65513,1],[65473,1],[65473,0],[65513,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,115],[desktop.m.KeyAction.UP,115],[desktop.m.KeyAction.EXUP,18]]):8==e?2==desktop.contype?desktop.m.sendkey([[65507,1],[119,1],[119,0],[65507,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,17],[desktop.m.KeyAction.DOWN,87],[desktop.m.KeyAction.UP,87],[desktop.m.KeyAction.EXUP,17]]):9==e?2==desktop.contype?desktop.m.sendkey([[65513,1],[65289,1],[65289,0],[65513,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,9],[desktop.m.KeyAction.UP,9],[desktop.m.KeyAction.EXUP,18]]):10==e?desktop.m.sendcad():11==e?2==desktop.contype?desktop.m.sendkey([[65511,1],[65361,1],[65361,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,37],[desktop.m.KeyAction.UP,37],[desktop.m.KeyAction.EXUP,91]]):12==e&&(2==desktop.contype?desktop.m.sendkey([[65511,1],[65363,1],[65363,0],[65511,0]]):desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,39],[desktop.m.KeyAction.UP,39],[desktop.m.KeyAction.EXUP,91]]))}}function showDeskType(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){Q("DeskType").blur();'<textarea id=d2typeText style="margin-top:5px;width:100%;height:184px;resize:none" maxlength=2000></textarea>',setDialogMode(2,"Entrada remota do teclado",3,showDeskTypeEx,'<div>Digite o texto e clique em OK para digitá-lo remotamente usando um teclado em inglês dos EUA.Certifique-se de colocar o cursor remoto na posição correta antes de continuar.<div><textarea id=d2typeText style="margin-top:5px;width:100%;height:184px;resize:none" maxlength=2000></textarea>'),Q("d2typeText").focus()}}var AmtDeskTypeTimer=null,AmtDeskTypeContent=null,DeskTypeTranslate={39:222,42:106,43:107,44:188,45:189,46:190,47:191,59:186,61:187,91:219,92:220,93:221,96:192,191:111},DeskTypeShiftTranslate={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,58:186,60:188,62:190,63:191,64:50,94:54,95:189,106:56,107:187,123:219,124:220,125:221,126:192};function showDeskTypeEx(){var e=Q("d2typeText").value,t=Q("d2typeText").value.toUpperCase(),o=[],n=!1;if(2==desktop.contype){for(var i in e){var a=e.charCodeAt(i);o.push([a,1],[a,0])}AmtDeskTypeContent=o,AmtDeskTypeTimer=setInterval(function(){var e=AmtDeskTypeContent.shift();desktop&&desktop.m.sendkey(e[0],e[1]),null!=desktop&&0!=AmtDeskTypeContent.length||(clearInterval(AmtDeskTypeTimer),AmtDeskTypeContent=null)},10)}else{for(var i in e){a=e.charCodeAt(i);var s=t.charCodeAt(i);65<=a&&a<=90||97<=a&&a<=122?(a==s&&0==n&&(o.push([desktop.m.KeyAction.DOWN,16]),n=!0),a!=s&&1==n&&(o.push([desktop.m.KeyAction.UP,16]),n=!1)):48<=a&&a<=57?1==n&&(o.push([desktop.m.KeyAction.UP,16]),n=!1):DeskTypeTranslate[a]?(1==n&&(o.push([desktop.m.KeyAction.UP,16]),n=!1),s=DeskTypeTranslate[a]):DeskTypeShiftTranslate[a]&&(0==n&&(o.push([desktop.m.KeyAction.DOWN,16]),n=!0),s=DeskTypeShiftTranslate[a]),o.push([desktop.m.KeyAction.DOWN,s],[desktop.m.KeyAction.UP,s])}1==n&&(o.push([desktop.m.KeyAction.UP,16]),n=!1),desktop.m.SendKeyMsgKC(o)}}function showDeskClip(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){Q("DeskClip").blur();'<input id=dlgClipGet type=button value="Get Clipboard" style=width:120px onclick=showDeskClipGet()>','<input id=dlgClipSet type=button value="Set Clipboard" style=width:120px onclick=showDeskClipSet()>','<div id=dlgClipStatus style="display:inline-block;margin-left:8px" ></div>','<textarea id=d2clipText style="width:100%;height:184px;resize:none" maxlength=65535></textarea>','<input type=button value="Close" style=width:80px;float:right onclick=dialogclose(0)><div style=height:26px;margin-top:3px><span id=linuxClipWarn style=display:none>A área de transferência remota é válida por 60 segundos.</span>&nbsp;</div><div></div>',setDialogMode(2,"Área de transferência remota",8,null,'<input id=dlgClipGet type=button value="Get Clipboard" style=width:120px onclick=showDeskClipGet()><input id=dlgClipSet type=button value="Set Clipboard" style=width:120px onclick=showDeskClipSet()><div id=dlgClipStatus style="display:inline-block;margin-left:8px" ></div><textarea id=d2clipText style="width:100%;height:184px;resize:none" maxlength=65535></textarea><input type=button value="Close" style=width:80px;float:right onclick=dialogclose(0)><div style=height:26px;margin-top:3px><span id=linuxClipWarn style=display:none>A área de transferência remota é válida por 60 segundos.</span>&nbsp;</div><div></div>',"clipboard"),Q("d2clipText").focus()}}function showDeskClipGet(){null!=desktop&&3==desktop.State&&meshserver.send({action:"msg",type:"getclip",nodeid:currentNode._id})}function showDeskClipSet(){null!=desktop&&3==desktop.State&&(meshserver.send({action:"msg",type:"setclip",nodeid:currentNode._id,data:Q("d2clipText").value}),QV("linuxClipWarn",currentNode&&currentNode.agent&&4<currentNode.agent.id&&21!=currentNode.agent.id&&22!=currentNode.agent.id))}function sendCAD(){xxdialogMode||null==desktop||3!=desktop.State||desktop.m.sendcad()}function toggleDeskTools(){xxdialogMode||("none"==QS("DeskTools").display?(QV("DeskTools",!0),Q("DeskTools").nodeid=currentNode._id,QH("DeskToolsProcesses",""),QH("DeskToolsServices",""),QV("deskToolsTopTabService",!1),changeDeskToolTab(0),refreshDeskTools(0),refreshDeskTools(1)):QV("DeskTools",!1))}var deskToolTabSelection=0;function changeDeskToolTab(e){QV("DeskToolsProcessTab",0==(deskToolTabSelection=e)),QV("DeskToolsServiceTab",1==e),QS("deskToolsTopTabProcess").bottom=0==e?"0px":"3px",QS("deskToolsTopTabService").bottom=1==e?"0px":"3px",QS("deskToolsTopTabProcess").color=0==e?"black":"gray",QS("deskToolsTopTabService").color=1==e?"black":"gray"}function refreshDeskTools(e){var t=null==e?deskToolTabSelection:e;QV("DeskToolsRefreshButton",!1),setTimeout(refreshDeskToolsEx,500),0==t&&meshserver.send({action:"msg",type:"ps",nodeid:currentNode._id}),1==t&&meshserver.send({action:"msg",type:"services",nodeid:currentNode._id})}function refreshDeskToolsEx(){QV("DeskToolsRefreshButton",!0)}var deskTools={sort:1,ssort:1,msg:null,smsg:null};function sortProcess(e){deskTools.sort=e,showDeskToolsProcesses(deskTools.msg)}function sortService(e){deskTools.ssort=e,showDeskToolsServices(deskTools.smsg)}function sortProcessPid(e,t){return e.p>t.p?1:e.p<t.p?-1:sortProcessName(e,t)}function sortProcessName(e,t){return e.d>t.d?1:e.d<t.d?-1:0}function showDeskToolsProcesses(e){if(null!=(deskTools.msg=e)){if(Q("DeskTools").nodeid==e.nodeid){var t=[],o=null;try{o=JSON.parse(e.value)}catch(e){}if(null!=o){for(var n in o)t.push({p:parseInt(n),c:o[n].cmd,d:o[n].cmd.toLowerCase(),u:o[n].user});0==deskTools.sort?t.sort(sortProcessPid):1==deskTools.sort&&t.sort(sortProcessName);var i="";for(var a in t)if(0!=t[a].p){var s=t[a].c;30<s.length&&(s='<span title="'+s+'">'+s.substring(0,30)+"...</span>"),i+="<div class=deskToolsBar><div style=width:50px;float:left;text-align:right;padding-right:5px>"+t[a].p+'</div><a href=# style=float:right;padding-right:5px;cursor:pointer title="Stop process" onclick=\'return stopProcess('+t[a].p+',"'+t[a].c+'")\'><img width=10 height=10 src="images/trash.png"></a><div style=float:right;padding-right:5px>'+(t[a].u?t[a].u:"")+"</div><div>"+s+"</div></div>"}QH("DeskToolsProcesses",i)}}}else QH("DeskToolsProcesses","")}function showDeskToolsServices(e){if(null!=(deskTools.smsg=e)){if(Q("DeskTools").nodeid==e.nodeid){QV("deskToolsTopTabService",!0);var t=[],o=null;try{o=JSON.parse(e.value)}catch(e){}if(null!=(deskTools.services=o)){for(var n in o)o[n].status?t.push({p:capitalizeFirstLetter(o[n].status.state.toLowerCase()),d:o[n].displayName,i:n}):o[n].serviceType&&t.push({p:o[n].serviceType,d:o[n].name,i:n});0==deskTools.ssort?t.sort(sortProcessPid):1==deskTools.ssort&&t.sort(sortProcessName);var i="";for(var n in t)if(0!=t[n].p){var a=t[n].d;30<a.length&&(a='<span title="'+a+'">'+a.substring(0,30)+"...</span>"),i+="<div onclick=showServiceDetailsDialog("+t[n].i+") class=deskToolsBar><div style=width:70px;float:left;padding-right:5px>"+t[n].p+"</div><div>"+a+"</div></div>"}QH("DeskToolsServices",i)}}}else QH("DeskToolsProcesses","")}function showServiceDetailsDialog(e){if(!xxdialogMode){var t=deskTools.services[e];if(null!=t){var o="";if(t.name&&(o+=addHtmlValue("Nome",t.name)),t.displayName&&(o+=addHtmlValue("Mostrar nome",t.displayName)),t.status){t.status.state&&(o+=addHtmlValue("Estado",capitalizeFirstLetter(t.status.state.toLowerCase()))),t.status.pid&&(o+=addHtmlValue("PID",t.status.pid));var n=[];!0===t.status.isFileSystemDriver&&n.push("Driver do sistema de arquivos"),!0===t.status.isInteractive&&n.push("Interativo"),!0===t.status.isKernelDriver&&n.push("KernelDriver"),!0===t.status.isOwnProcess&&n.push("Processo próprio"),!0===t.status.isSharedProcess&&n.push("Processo compartilhado"),0<n.length&&(o+=addHtmlValue("Tipo",n.join(", ")))}setDialogMode(2,"Detalhes do serviço",8,null,o+='<br/><div style=float:right;margin-bottom:12px><input type=button value="Fechar" onclick=showServiceDetailsDialogEx(0,'+e+')></div><div style=margin-bottom:12px><input type=button value="Start" onclick=showServiceDetailsDialogEx(1,'+e+')><input type=button value="Pare" onclick=showServiceDetailsDialogEx(2,'+e+')><input type=button value="Reiniciar" onclick=showServiceDetailsDialogEx(3,'+e+")></div>",name)}}}function showServiceDetailsDialogEx(e,t){if(setDialogMode(0),0!=e){var o=deskTools.services[t];null!=o&&(1==e&&meshserver.send({action:"msg",type:"serviceStart",nodeid:currentNode._id,serviceName:o.name}),2==e&&meshserver.send({action:"msg",type:"serviceStop",nodeid:currentNode._id,serviceName:o.name}),3==e&&meshserver.send({action:"msg",type:"serviceRestart",nodeid:currentNode._id,serviceName:o.name}),setTimeout(function(){refreshDeskTools(1)},1e3))}}function toggleKvmControl(){putstore("DeskControl",Q("DeskControl").checked?1:0),QS("DeskControlSpan").color=Q("DeskControl").checked?null:"red"}function deskRecordSession(){if(null!=desktop)if(null==desktop.m.recordedData)Q("DeskRecordButtonImage").src="images/icon-film-red.png",desktop.m.StartRecording();else{Q("DeskRecordButtonImage").src="images/icon-film.png";var e=new Date,t="DesktopSesion-"+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);saveAs(data2blob(desktop.m.StopRecording().join("")),t+".mcrec")}}function deskSaveImage(){if(!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 deskDisplayInfo(e,t,o){var n=0,i="";for(var a in t)n++,i+="<option"+(o==a?" selected":"")+" value="+a+">"+t[a]+"</option>",deskPreferedStickyDisplay==a&&o!=deskPreferedStickyDisplay&&desktop.m.SetDisplay(a),deskPreferedStickyDisplay=-1;QH("termdisplays",i),QV("termdisplays",1<n)}function deskGetDisplayNumbers(e){desktop.m.GetDisplayNumbers()}var deskPreferedStickyDisplay=-1;function deskSetDisplay(e){desktop.m.SetDisplay(deskPreferedStickyDisplay=parseInt(Q("termdisplays").value)),Q("termdisplays").blur()}var terminalNode,dblClickDetectArgs={t:0,x:0,y:0};function dblClickDetect(e){if(1==e.buttons){var t=Date.now();t-dblClickDetectArgs.t<250&&Math.abs(e.clientX-dblClickDetectArgs.x)<2&&Math.abs(e.clientY-dblClickDetectArgs.y)<2&&!xxdialogMode&&null!=desktop&&Q("DeskControl").checked&&(null!=webRtcDesktop&&null!=webRtcDesktop.softdesktop?(webRtcDesktop.softdesktop.m.mousedblclick(e),desktop.m.sendKeepAlive()):desktop.m.mousedblclick(e)),dblClickDetectArgs.t=t,dblClickDetectArgs.x=e.clientX,dblClickDetectArgs.y=e.clientY}}function dmousedown(e){setSessionActivity(),e.addx=Q("DeskParent").scrollLeft,e.addy=Q("DeskParent").scrollTop,!xxdialogMode&&null!=desktop&&Q("DeskControl").checked&&(null!=webRtcDesktop&&null!=webRtcDesktop.softdesktop?(webRtcDesktop.softdesktop.m.mousedown(e),desktop.m.sendKeepAlive()):desktop.m.mousedown(e)),dblClickDetect(e)}function dmouseup(e){setSessionActivity(),e.addx=Q("DeskParent").scrollLeft,e.addy=Q("DeskParent").scrollTop,!xxdialogMode&&null!=desktop&&Q("DeskControl").checked&&(null!=webRtcDesktop&&null!=webRtcDesktop.softdesktop?(webRtcDesktop.softdesktop.m.mouseup(e),desktop.m.sendKeepAlive()):desktop.m.mouseup(e))}function dmousemove(e){setSessionActivity(),e.addx=Q("DeskParent").scrollLeft,e.addy=Q("DeskParent").scrollTop,!xxdialogMode&&null!=desktop&&Q("DeskControl").checked&&(null!=webRtcDesktop&&null!=webRtcDesktop.softdesktop?(webRtcDesktop.softdesktop.m.mousemove(e),desktop.m.sendKeepAlive()):desktop.m.mousemove(e))}function dmousewheel(e){return setSessionActivity(),e.addx=Q("DeskParent").scrollLeft,e.addy=Q("DeskParent").scrollTop,!(xxdialogMode||null==desktop||!Q("DeskControl").checked)&&(null!=webRtcDesktop&&null!=webRtcDesktop.softdesktop?(webRtcDesktop.softdesktop.m.mousewheel(e),desktop.m.sendKeepAlive()):desktop.m.mousewheel&&desktop.m.mousewheel(e),haltEvent(e),!0)}function drotate(e){xxdialogMode||null==desktop||(desktop.m.setRotation(desktop.m.rotation+e),deskAdjust(),deskAdjust())}function stopProcess(e,t){return setDialogMode(2,"Controle do processo",3,stopProcessEx,format('Parar processo #{0} "{1}"?',e,t),e),!1}function stopProcessEx(e,t){meshserver.send({action:"msg",type:"pskill",nodeid:currentNode._id,value:t}),setTimeout(refreshDeskTools,300)}function setupTerminal(){terminalNode!=currentNode&&null!=terminal&&(terminal.Stop(),terminal=null),terminalNode=currentNode,updateTerminalButtons()}function updateTerminalButtons(){meshes[terminalNode.meshid];var e=null!=terminal&&0!=terminal.state;QV("disconnectbutton2span",1==e),QV("connectbutton2span",0==e&&null!=currentNode.agent&&2&currentNode.agent.caps),QV("connectbutton2hspan",0==e&&null!=terminalNode.intelamt&&2==terminalNode.intelamt.state&&null!=terminalNode.intelamt.ver),QV("terminalSizeDropDown",0==e&&null!=terminalNode.intelamt&&2==terminalNode.intelamt.state&&null!=terminalNode.intelamt.ver);var t=0!=(1&terminalNode.conn);QE("connectbutton2",t);var o=0!=(6&terminalNode.conn);QE("connectbutton2h",o),QE("ctrlcbutton",e),QE("ctrlxbutton",e),QE("escbutton",e),QE("bsbutton",e),QE("pastebutton",e),QE("specialkeylist",e),QE("specialkeylistinput",e),QV("terminalSettingsButtons",terminal&&2==terminal.contype),terminal&&(Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation],Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation],Q("id_tcrbutton").value="\r\n"==terminal.m.lineFeed?"CR+LF":"LF");var n=!(0===args.xterm||null!=terminal&&null==xterm);QV("termarea3xdiv",n),QV("Term",!n),QV("bsbutton",!n),QV("pastebutton",!n),QV("devListToolbarViewIcons2",n),QE("termSizeList",null==terminal)}function onTerminalStateChange(e,t){var o=t;3==o&&2==e.contype&&o++;var n=StatusStrs[o];switch(1==terminal.webRtcActive&&(n+=", WebRTC"),QH("termstatus",n),t){case 0:QH("termtitle",""),QV("termRecordIcon",!1),null==xterm?(e.m.TermResetScreen(),e.m.TermDraw()):(xterm.dispose(),xterm=xtermfit=null),null!=terminal&&(terminal.Stop(),terminal=null);break;case 3:e&&1==e.serverIsRecording&&QV("termRecordIcon",!0),terminal.startTime=new Date,null==updateSessionTimer&&(updateSessionTimer=setInterval(updateSessionTime,1e3)),null!=xterm&&xterm.focus()}updateTerminalButtons()}var autoConnectTerminalTimer=null;function autoConnectTerminal(e){autoConnectTerminalTimer=null==autoConnectTerminalTimer?setInterval(connectTerminal,100):(clearInterval(autoConnectTerminalTimer),null)}function CreateRemoteTunnel(e,t){var o={protocol:1};return null!=t&&"number"==typeof t.protocol&&(o.protocol=t.protocol),o.onTunnelUpdate=e,o.xxStateChange=function(e){},o.ProcessBinaryData=function(e){o.onTunnelUpdate(e)},o.ProcessData=function(e){o.onTunnelUpdate(e)},o.terminalEmulation=1,o.fxEmulation=0,o.lineFeed="\r\n",o}function tunnelUpdate(e){"string"==typeof e?xterm.writeUtf8(e):xterm.writeUtf8(new Uint8Array(e))}function xTermSendResize(){(xtermResizeTimer=null)!=xterm&&null!=terminal&&null!=terminal.sendCtrlMsg&&terminal.sendCtrlMsg(JSON.stringify({ctrlChannel:"102938",type:"termsize",cols:xterm.cols,rows:xterm.rows}))}function connectTerminal(e,t,o){if(p12clearConsoleMsg(),terminal)terminal.Stop(),terminal=null,fullscreen&&deskToggleFull();else if(2==t){if(null==terminalNode.intelamt.user||""==terminalNode.intelamt.user)return void editDeviceAmtSettings(terminalNode._id,connectTerminal,2);var n={};1==Q("termSizeList").value?(n.cols=80,n.rows=25):2==Q("termSizeList").value&&(n.cols=100,n.rows=30),fullscreen&&deskToggleFull(),QV("termarea3xdiv",!1),QV("Term",!0),(terminal=CreateAmtRedirect(CreateAmtRemoteTerminal("Term",n),authCookie)).debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.m.onTitleChange=function(e,t){QH("termtitle"," - "+EscapeHtml(t))},terminal.onStateChanged=onTerminalStateChange,terminal.Start(terminalNode._id,16994,"*","*",0),terminal.contype=2,Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation]}else{n={protocol:null!=o&&"number"==typeof o.protocol?o.protocol:1};o&&o.requireLogin&&(n.requireLogin=!0),-1==[1,2,3,4,21,22].indexOf(currentNode.agent.id)&&(1==Q("termSizeList").value?(n.cols=80,n.rows=25,n.xterm=!0):2==Q("termSizeList").value?(n.cols=100,n.rows=30,n.xterm=!0):3==Q("termSizeList").value&&(n.cols=Math.floor((Q("column_l").clientWidth-60)/10),n.rows=Math.floor((Q("column_l").clientHeight-120)/20),n.xterm=!0)),e&&1==e.shiftKey&&(4<currentNode.agent.id?1==n.protocol&&(n.protocol=7):1==n.protocol&&(n.protocol=6)),0!==args.xterm?(QV("termarea3xdiv",!0),QV("Term",!1),null!=xterm&&xterm.dispose(),xtermfit=new FitAddon.FitAddon,xterm=new Terminal,xtermfit&&xterm.loadAddon(xtermfit),xterm.open(Q("termarea3xdiv")),xterm.onData(function(e){null!=terminal&&terminal.sendText(e)}),xtermfit&&xtermfit.fit(),xterm.onTitleChange(function(e){QH("termtitle"," - "+EscapeHtml(e))}),xterm.onResize(function(e){xtermResizeTimer&&clearTimeout(xtermResizeTimer),xtermResizeTimer=setTimeout(xTermSendResize,200)}),(terminal=CreateAgentRedirect(meshserver,CreateRemoteTunnel(tunnelUpdate,o),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.options={cols:xterm.cols,rows:xterm.rows},o&&o.requireLogin&&(terminal.options.requireLogin=!0),terminal.Start(terminalNode._id),terminal.onStateChanged=onTerminalStateChange,terminal.contype=1,terminal.attemptWebRTC=!1,terminal.onConsoleMessageChange=function(e,t){terminal.consoleMessage?(Q("p12TermConsoleMsg").innerHTML+=formatAgentConsoleMessage(terminal.consoleMessage,terminal.consoleMessageId,terminal.consoleMessageArgs),QV("p12TermConsoleMsg",!0),null!=p12TermConsoleMsgTimer&&clearTimeout(p12TermConsoleMsgTimer),terminal.consoleMessageTimeout&&(p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,1e3*terminal.consoleMessageTimeout))):p12clearConsoleMsg()}):(QV("termarea3xdiv",!1),QV("Term",!0),(terminal=CreateAgentRedirect(meshserver,CreateAmtRemoteTerminal("Term",n),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).options=n,terminal.debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.m.onTitleChange=function(e,t){QH("termtitle"," - "+EscapeHtml(t))},terminal.m.lineFeed=0<=[1,2,3,4,21,22].indexOf(currentNode.agent.id)?"\r\n":"\r",terminal.attemptWebRTC=!1,terminal.onStateChanged=onTerminalStateChange,terminal.onConsoleMessageChange=function(){terminal.consoleMessage?(Q("p12TermConsoleMsg").innerHTML+=formatAgentConsoleMessage(terminal.consoleMessage,terminal.consoleMessageId,terminal.consoleMessageArgs),QV("p12TermConsoleMsg",!0),null!=p12TermConsoleMsgTimer&&clearTimeout(p12TermConsoleMsgTimer),terminal.consoleMessageTimeout&&(p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,1e3*terminal.consoleMessageTimeout))):p12clearConsoleMsg()},terminal.Start(terminalNode._id),terminal.contype=1,terminal.m.terminalEmulation=0,terminal.m.fxEmulation=0,Q("id_ttypebutton").value=terminalEmulations[0])}Q("connectbutton2").blur()}var terminalEmulations=["Terminal UTF8","ASCII estendido","Intel ASCII"];function termToggleType(){terminal&&!xxdialogMode&&(terminal.m.terminalEmulation=(terminal.m.terminalEmulation+1)%3,Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation],Q("id_ttypebutton").blur())}var filesNode,fxEmulations=["Intel (F10 = ESC+[OM)","Alternativo (F10 = ESC + 0)","VT100+ (F10 = ESC+[OY)"];function termToggleFx(){terminal&&!xxdialogMode&&(terminal.m.fxEmulation=(terminal.m.fxEmulation+1)%3,Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation],Q("id_tfxkeysbutton").blur())}function termToggleCr(){terminal&&!xxdialogMode&&("\n"==terminal.m.lineFeed?terminal.m.lineFeed="\r\n":terminal.m.lineFeed="\n",Q("id_tcrbutton").value="\r\n"==terminal.m.lineFeed?"CR+LF":"LF")}function termSendKey(e,t){terminal&&!xxdialogMode&&(null!=xterm?(terminal.sendText?terminal.sendText(String.fromCharCode(e)):terminal.send(String.fromCharCode(e)),xterm.focus()):null!=terminal&&(terminal.m.TermSendKey(e),Q(t).blur()))}function showTermPasteDialog(){terminal&&!xxdialogMode&&(Q("pastebutton").blur(),setDialogMode(2,"Colar",3,showTermPasteDialogEx,'<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>'),Q("d2pasteText").focus())}function showTermPasteDialogEx(){terminal&&terminal.m.TermSendKeys(Q("d2pasteText").value)}function sendSpecialKey(){null!=xterm?(terminal.sendText(String.fromCharCode(Q("specialkeylist").value)),xterm.focus()):null!=terminal&&(terminal.m.TermSendKey(Q("specialkeylist").value),Q("specialkeylist").blur(),Q("specialkeylistinput").blur())}function setupFiles(){var e=filesNode==currentNode,t=0!=(1&(filesNode=currentNode).conn);QE("p13Connect",t),0!=e&&0!=t||!files||(files.Stop(),files=null)}function onFilesStateChange(e,t){p13Connect.value=0==t?"Conectar":"Desconectar";var o=StatusStrs[t];switch(1==files.webRtcActive&&(o+=", WebRTC"),Q("p13Status").textContent=o,t){case 0:QH("p13files",""),p13filetree=null,p13filetreelocation=[],QH("p13currentpath",""),QE("p13FolderUp",!1),QV("filesRecordIcon",!1),p13setActions(),null!=files&&(files.Stop(),files=null);break;case 3:p13targetpath="",files&&(files.sendText({action:"ls",reqid:1,path:""}),1==files.serverIsRecording&&QV("filesRecordIcon",!0))}}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){autoConnectFilesTimer=null==autoConnectFilesTimer?setInterval(connectFiles,100):(clearInterval(autoConnectFilesTimer),null)}function connectFiles(e){p13clearConsoleMsg(),files?(files.Stop(),files=null):((files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).attemptWebRTC=attemptWebRTC,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(0<e.length&&123!=e.charCodeAt(0))p13gotDownloadBinaryData(e);else if("download"!=(e=JSON.parse(decode_utf8(e))).action)if(e.path=e.path.replace(/\//g,"\\"),null!=p13filetree&&e.path==p13filetree.path){var t=p13getCheckedNames();p13filetree=e,p13updateFiles(t)}else{for(var o=e.path.replace(/\//g,"\\"),n=p13targetpath.replace(/\//g,"\\");0<o.length&&"\\"==o[0];)o=o.substring(1);for(;0<n.length&&"\\"==n[0];)n=n.substring(1);(o==n||"\\"==e.path&&""==p13targetpath)&&(p13filetree=e,p13updateFiles())}else p13gotDownloadCommand(e)}function p13getCheckedNames(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].value].n);return e}function p13updateFiles(e){var t="",o="",n='<a href=# style=cursor:pointer onclick="return p13folderup(0)">Raiz</a>',i=p13filetree.path.split("\\");for(var a in p13filetreelocation=[],i)""!=i[a]&&p13filetreelocation.push(i[a]);for(var a in p13filetreelocation)n+=' / <a href=# style=cursor:pointer onclick="return p13folderup('+(parseInt(a)+1)+')">'+p13filetreelocation[a]+"</a>";var s=p13filetreelocation.join("/"),r=p13sort_files(p13filetree.dir);for(var a in r){var l,d=r[a],c=d.n;l=70<(l=c).length?'<span title="'+EscapeHtml(c)+'">'+EscapeHtml(c.substring(0,70))+"...</span>":EscapeHtml(c),c=EscapeHtml(c);var u="";if(null!=d.d)u=printDateTime(new Date(d.d))+"&nbsp;";var p="";null!=d.s&&(p=getFileSizeStr(d.s));var m="";if(d.t<3){m="<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 title=""></span><span><div class=fileIcon'+d.t+' onclick=p13folderset("'+encodeURIComponentEx(d.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p13folderset("'+encodeURIComponentEx(d.nx)+"\")'>"+l+"</a></span></div>"}else{var g=l;0<d.s&&(g="<a href=# style=cursor:pointer onclick=\"return p13downloadfile('"+encodeURIComponentEx(s+"/"+c)+"','"+encodeURIComponentEx(c)+"',"+d.s+')">'+l+"</a>"),m="<div id=fileEntry cmenu=filesContextMenu fileIndex="+a+" class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'>&nbsp;<span class=fsize>"+u+"</span><span style=float:right>"+p+"</span><span><div class=fileIcon"+d.t+"></div>"+g+"</span></div>"}d.t<3?t+=m:o+=m}if(QH("p13files",t+o),QH("p13currentpath",n),QE("p13FolderUp",0!=p13filetreelocation.length),null!=e){var v=document.getElementsByName("fd");for(a=0;a<v.length;a++)0<=e.indexOf(p13filetree.dir[v[a].value].n)&&(v[a].checked=!0)}p13setActions()}function p13folderset(e){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[e].n).split("\\").join("/"),files.sendText({action:"ls",reqid:1,path:p13targetpath})}function p13folderup(e){if(null==e)p13filetreelocation.pop();else for(;p13filetreelocation.length>e;)p13filetreelocation.pop();return p13targetpath=p13filetreelocation.join("/"),files.sendText({action:"ls",reqid:1,path:p13targetpath}),!1}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=[],o=Q("p13sortdropdown").value;for(var n in e)e[n].nx=n,null==e[n].s&&(e[n].s=0),null==e[n].n&&(e[n].n=n),e[n].ln=e[n].n.toLowerCase(),t.push(e[n]);return p13sortorder=1,3<o&&(p13sortorder=-1,o-=3),1==o?t.sort(p13sort_filename):2==o?t.sort(p13sort_bysize):3==o&&t.sort(p13sort_timestamp),t}function p13setActions(){if(null==p13filetree)QE("p13DeleteFileButton",!1),QE("p13NewFolderButton",!1),QE("p13UploadButton",!1),QE("p13RenameFileButton",!1),QE("p13ViewFileButton",!1),QE("p13SelectAllButton",!1),Q("p13SelectAllButton").value="Selecionar tudo",QE("p13RefreshButton",!1),QE("p13CutButton",!1),QE("p13CopyButton",!1),QE("p13PasteButton",!1);else{var e=p13getFileSelCount(),t=p13getFileCount(),o=p13getFileSelCount(!1),n=0<currentNode.agent.id&&currentNode.agent.id<5;QE("p13DeleteFileButton",0<e&&(0<p13filetreelocation.length||0==n)),QE("p13NewFolderButton",0<p13filetreelocation.length||0==n),QE("p13UploadButton",0<p13filetreelocation.length||0==n),QE("p13RenameFileButton",1==e&&(0<p13filetreelocation.length||0==n)),QE("p13ViewFileButton",1==e&&1==o&&(0<p13filetreelocation.length||0==n)),QE("p13SelectAllButton",0<t),Q("p13SelectAllButton").value=0<e?"Selecione nenhum":"Selecionar tudo",QE("p13RefreshButton",!0),QE("p13CutButton",0<e&&e==o&&(0<p13filetreelocation.length||0==n)),QE("p13CopyButton",0<e&&e==o&&(0<p13filetreelocation.length||0==n)),QE("p13PasteButton",(0<p13filetreelocation.length||0==n)&&null!=p13clipboard&&0<p13clipboard.length)}}function p13getFileSelCount(e){for(var t=0,o=document.getElementsByName("fd"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function p13getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function p13getFileCount(){return document.getElementsByName("fd").length}function p13selectallfile(){for(var e=0==p13getFileSelCount(),t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked=e;p13setActions()}function p13createfolder(){setDialogMode(2,"Nova pasta",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=0<p13getFileSelDirCount()?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Exclusão recursiva</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Deletar",3,p13deletefileEx,1<e?format("Excluir {0} itens selecionados?",e)+t:"Excluir item selecionado?"+t)}function p13deletefileEx(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].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"),o=0;o<t.length;o++)t[o].checked&&(e=p13filetree.dir[t[o].value].n);setDialogMode(2,"Renomear",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,"Subir arquivo",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />"),updateUploadDialogOk("p13uploadinput")}function updateUploadDialogOk(e){QE("idx_dlgOkButton",0<Q("p13uploadinput").files.length)}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(encodeURIComponentEx(p13filetreelocation.join("/")+"/"+p13filetree.dir[e[t].value].n),encodeURIComponentEx(p13filetree.dir[e[t].value].n),p13filetree.dir[e[t].value].s,"viewer"):messagebox("Editor de Arquivos","Somente arquivos com menos de 200k podem ser editados.");break}}var p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(e){var t=document.getElementsByName("fd");p13clipboard=[],p13clipboardCut=e,p13clipboardFolder=p13targetpath;for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&p13clipboard.push(p13filetree.dir[t[o].value].n);p13updateClipview()}function p13pasteFile(){var e="";null!=p13clipboard&&0<p13clipboard.length&&(e=0==p13clipboardCut?1<p13clipboard.length?format("Confirmar cópia de {0} entradas para este local?",p13clipboard.length):format("Confirmar cópia de 1 entrada para este local?"):1<p13clipboard.length?format("Confirmar a movimentação de {0} entradas para este local?",p13clipboard.length):format("Confirmar a movimentação de 1 entrada para este local?")),setDialogMode(2,"Colar",3,p13pasteFileEx,e)}function p13pasteFileEx(){files.sendText({action:0==p13clipboardCut?"copy":"move",reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard}),p13folderup(999),1==p13clipboardCut&&(p13clipboardFolder=p13clipboard=null,p13clipboardCut=0,p13updateClipview())}function p13updateClipview(){var e="";null!=p13clipboard&&0<p13clipboard.length&&(e=0==p13clipboardCut?1<p13clipboard.length?format('Mantendo {0} entradas para cópia, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Limpo</a>.',p13clipboard.length):format('Mantendo 1 entrada para cópia, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Limpo</a>.'):1<p13clipboard.length?format('Manter {0} entradas para mover, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Limpo</a>.',p13clipboard.length):format('Segurando 1 entrada para mover, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Limpo</a>.')),QH("p13bottomstatus",e),p13setActions()}function p13clearClip(){return p13clipboardFolder=p13clipboard=null,p13clipboardCut=0,p13updateClipview(),!1}function p13fileDragDrop(e){if(haltEvent(e),QV("p13bigfail",!1),QV("p13bigok",!1),null!=e.dataTransfer&&0!=e.dataTransfer.files.length&&null!=p13filetree){var t=[];for(var o in e.dataTransfer.files)null!=e.dataTransfer.files[o].size&&0!=e.dataTransfer.files[o].size&&t.push(e.dataTransfer.files[o]);0!=t.length&&p13doUploadFiles(t)}}var downloadFile,p13dragtimer=null;function p13fileDragOver(e){haltEvent(e),null!=p13dragtimer&&(clearTimeout(p13dragtimer),p13dragtimer=null);var t=null!=p13filetree;QV("p13bigok",t),QV("p13bigfail",!t)}function p13fileDragLeave(e){haltEvent(e),"p13filetable"!=e.target.id?(QV("p13bigfail",!1),QV("p13bigok",!1)):p13dragtimer=setTimeout(function(){QV("p13bigfail",!1),QV("p13bigok",!1),p13dragtimer=null},10)}function p13downloadfile(e,t,o,n){xxdialogMode||downloadFile||!files||(downloadFile={path:decodeURIComponent(e),file:decodeURIComponent(t),size:o,tsize:0,data:"",state:0,id:Math.random(),tag:n},files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path}),setDialogMode(2,"⇬ Fazer download do arquivo",10,p13downloadFileCancel,"<div>"+downloadFile.file+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+o+" />"))}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&&(4<e.length&&(downloadFile.tsize+=e.length-4,downloadFile.data+=e.substring(4),Q("d2progressBar").value=downloadFile.tsize),0!=(1&ReadInt(e,0))?"viewer"==downloadFile.tag?(setDialogMode(4,EscapeHtml(downloadFile.file),3,p13editSaveBack,null,downloadFile.file),QS("dialog").width="auto",QS("dialog").bottom="80px",QS("dialog").top=QS("dialog").left=QS("dialog").right="100px",Q("d4editorarea").value=downloadFile.data,downloadFile=null):(saveAs(data2blob(downloadFile.data),downloadFile.file),downloadFile=null,setDialogMode(0)):files.sendText({action:"download",sub:"ack",id:downloadFile.id}))}var uploadFile,d4EditWrapVal=0,d4EditSizeVal=0;function d4ToggleWrap(e){e||(d4EditWrapVal=++d4EditWrapVal%2),Q("d4WrapButton").value=["Wrap: ON","Wrap: OFF"][d4EditWrapVal],QS("d4editorarea").overflow=0==d4EditWrapVal?"auto":"scroll",QS("d4editorarea")["white-space"]=0==d4EditWrapVal?null:"pre",putstore("editorWrap",d4EditWrapVal)}function d4ToggleSize(e){e||(d4EditSizeVal=++d4EditSizeVal%4),QS("d4editorarea")["font-size"]=["100%","125%","150%","200%"][d4EditSizeVal],Q("d4SizeButton").value=["Tamanho: 100%","Tamanho: 125%","Tamanho: 150%","Tamanho: 200%"][d4EditSizeVal],putstore("editorSize",d4EditSizeVal)}function p13editSaveBack(e,t){var o=(new TextEncoder).encode(Q("d4editorarea").value);p13uploadFileContinue(1,[{name:t,size:o.byteLength,type:"text/plain",xdata:o}])}function p13doUploadFiles(e){if(!xxdialogMode){var t=0<currentNode.agent.id&&currentNode.agent.id<5,o=[],n=0;for(var i in p13filetree.dir)t?o.push(p13filetree.dir[i].n.toLowerCase()):o.push(p13filetree.dir[i].n);for(i=0;i<e.length;i++)t?0<=o.indexOf(e[i].name.toLowerCase())&&n++:0<=o.indexOf(e[i].name)&&n++;0==n?p13uploadFileContinue(1,e):setDialogMode(2,"Subir arquivo",3,p13uploadFileContinue,format(1==n?"O upload substituirá 1 arquivo. Continuar?":"O upload substituirá {0} arquivos. Continuar?",n),e)}}function p13uploadFileContinue(e,t){(uploadFile={}).xpath=p13filetreelocation.join("/"),uploadFile.xfiles=t,uploadFile.xfilePtr=-1,setDialogMode(2,"Subir arquivo",10,p13uploadFileCancel,"<div id=p13dfileName>Conectando...</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />"),p13uploadReconnect()}function onFileUploadStateChange(e,t){switch(t){case 0:setTimeout(function(){p13folderup(9999)},200);break;case 3:p13uploadNextFile()}}function p13uploadReconnect(){uploadFile.ws=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotUploadData),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),uploadFile.ws.attemptWebRTC=!1,uploadFile.ws.ctrlMsgAllowed=!1,uploadFile.ws.onStateChanged=onFileUploadStateChange,uploadFile.ws.Start(filesNode._id)}function p13uploadNextFile(){if(uploadFile.xfilePtr++,uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var e=uploadFile.xfiles[uploadFile.xfilePtr];QH("p13dfileName",e.name),Q("d2progressBar").max=e.size,Q("d2progressBar").value=0,null==e.xdata?(uploadFile.xreader=new FileReader,uploadFile.xreader.onload=function(){uploadFile.xdata=uploadFile.xreader.result,uploadFile.ws.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xdata.byteLength}))},uploadFile.xreader.readAsArrayBuffer(e)):(uploadFile.xdata=e.xdata,uploadFile.ws.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xdata.byteLength})))}else p13uploadFileCancel()}function p13uploadFileCancel(e,t){null!=uploadFile&&(null!=uploadFile.ws&&(uploadFile.ws.Stop(),uploadFile.ws=null),uploadFile=null),setDialogMode(0)}function p13gotUploadData(e){var t=JSON.parse(e);if(null!=uploadFile&&parseInt(uploadFile.xfilePtr)==parseInt(t.reqid))if("uploadstart"==t.action){p13uploadNextPart(!1);for(var o=0;o<8;o++)p13uploadNextPart(!0)}else"uploadack"==t.action?p13uploadNextPart(!1):"uploaderror"==t.action&&p13uploadFileCancel()}function p13uploadNextPart(e){var t=uploadFile.xdata,o=uploadFile.xptr,n=uploadFile.xptr+4096;if(n>t.byteLength){if(1==e)return;n=t.byteLength}if(o==t.byteLength)null!=uploadFile.ws&&(uploadFile.ws.Stop(),uploadFile.ws=null),uploadFile.xfiles.length>uploadFile.xfilePtr+1?p13uploadReconnect():p13uploadFileCancel();else{var i=t.slice(o,n);uploadFile.ws.send(i),uploadFile.xptr=n,Q("d2progressBar").value=n}}var currentDeviceEvents=null;function deviceEventsUpdate(){var e="",t=null;for(var o in currentDeviceEvents){var n=currentDeviceEvents[o],i=new Date(n.time);if(n.msg){null==n.h&&(n.h=Math.random()),printDate(i)!=t&&(null!=t&&(e+="</table>"),e+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+(t=printDate(i))+"</td></tr>");var a="si3";"user"==n.etype&&(a="m2"),"server"==n.etype&&(a="si3");var s=EscapeHtml(n.msg).split("(R)").join("&reg;");n.username&&(s=2&userinfo.siteadmin&&n.userid?"<a href=# onclick='gotoUser(\""+encodeURIComponentEx(n.userid)+"\");haltEvent(event);'>"+EscapeHtml(n.username)+"</a> &rarr; "+s:EscapeHtml(n.username)+" &rarr; "+s),"relay"!=n.etype&&"relaylog"!=n.action||(a="relayIcon16"),e+="<tr onclick=showEventDetails("+n.h+",1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+a+"></div></td><td class=g1>&nbsp;</td><td class=style10>"+printTime(i)+" - "+s+"</td><td class=g2>&nbsp;</td></tr><tr style=height:2px></tr>"}}null!=t&&(e+="</table>"),""==e&&(e="<br><i>Nenhum evento encontrado</i><br><br>"),QH("p16events",e)}function refreshDeviceEvents(){meshserver.send({action:"events",nodeid:currentNode._id,limit:parseInt(p16limitdropdown.value)})}function showEventDetails(e,t){var o,n;for(var i in 1==t&&(o=currentDeviceEvents),2==t&&(o=events),3==t&&(o=currentUserEvents),o)if(o[i].h==e){n=o[i];break}if(n){if(xxdialogMode)return!1;var a="<div style=overflow-y:auto>";for(var i in n)"h"!=i&&"_id"!=i&&"ids"!=i&&"domain"!=i&&null!=n[i]&&"object"!=typeof n[i]&&(a+=addHtmlValue3(EscapeHtml(i),EscapeHtml(n[i])));setDialogMode(2,"Detalhes do evento",9,null,a+="</div>")}}var consoleNode,DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=null;function updateDeviceDetails(e,t,o){if(null!=currentNode&&(null==e&&(e=currentNode),currentNode._id==e._id)){DeviceDetailsNodeId!=e._id&&(DeviceDetailsNetwork=DeviceDetailsHardware=null,DeviceDetailsNodeId=e._id),null!=t&&(DeviceDetailsHardware=t),null!=o&&(DeviceDetailsNetwork=o),null==(t=DeviceDetailsHardware)&&(t={}),null==(o=DeviceDetailsNetwork)&&(o={});var n=[],i={};if(t.windows&&t.windows.osinfo||e.osdesc){var a="";if(e.rname&&(a+=addDetailItem("Nome",EscapeHtml(e.rname),i)),e.osdesc&&(a+=addDetailItem("Versão",EscapeHtml(e.osdesc),i)),t.windows&&t.windows.osinfo)(d=t.windows.osinfo).OSArchitecture&&(a+=addDetailItem("Arquitetura",EscapeHtml(d.OSArchitecture),i));""!=a&&n.push({name:"Sistema operacional",html:a,img:"software64.png"})}if(e.agent){a="";if(null!=e.agent&&null!=e.agent.id&&null!=e.agent.ver){var s="";s=e.agent.id<=agentsStr.length?agentsStr[e.agent.id]:agentsStr[0],0!=e.agent.ver&&(s+=" v"+e.agent.ver),a+=addDetailItem("Mesh Agent",s)}if(0!=(1&e.conn)?a+=addDetailItem("Última conexão do agente","Conectado agora"):e.lastconnect&&(a+=addDetailItem("Última conexão do agente",printDateTime(new Date(e.lastconnect)))),e.lastaddr){var r=e.lastaddr.split(":");2<r.length?a+=addDetailItem("Último endereço do agente",e.lastaddr):isPrivateIP(e.lastaddr)?a+=addDetailItem("Último endereço do agente",r[0]):a+=addDetailItem("Último endereço do agente",'<a href="https://iplocation.com/?ip='+r[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+r[0]+"</a>")}""!=a&&n.push({name:"Mesh Agent",html:a,img:"meshagent64.png"})}if(null!=o.netif){a="";for(var l in a+="<table style=width:100%>",o.netif){var d=o.netif[l];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(d.name+(d.dnssuffix?", "+d.dnssuffix:""))+"</b></div>",d.desc&&(a+=addDetailItem("Descrição",EscapeHtml(d.desc).split("(R)").join("&reg;"))),d.mac&&(d.gatewaymac?a+=addDetailItem("Camada MAC",format("MAC: {0}, Gateway: {1}",EscapeHtml(d.mac),EscapeHtml(d.gatewaymac))):a+=addDetailItem("Camada MAC",format("MAC: {0}",d.mac))),d.v4addr&&"0.0.0.0"!=d.v4addr&&(d.v4gateway&&d.v4mask?a+=addDetailItem("Camada IPv4",format("IP: {0}, Máscara: {1}, Gateway: {2}",EscapeHtml(d.v4addr),EscapeHtml(d.v4mask),EscapeHtml(d.v4gateway))):a+=addDetailItem("Camada IPv4",format("IP: {0}",EscapeHtml(d.v4addr)))),a+="</div>"}""!=(a+="</table>")&&n.push({name:"Trabalho em rede",html:a,img:"networking64.png"})}if(null!=e.intelamt){a="";a+=addDetailItem("Versão",e.intelamt.ver?"v"+e.intelamt.ver:"<i>Desconhecido</i>",i);var c={0:nobreak("Não ativado (pré)"),1:nobreak("Não ativado (entrada)"),2:nobreak("ativado")},u="";2==e.intelamt.state&&e.intelamt.flags&&(2&e.intelamt.flags?u=", Client Control Mode (CCM)":4&e.intelamt.flags&&(u=", Admin Control Mode (ACM)")),a+=addDetailItem("Estado de provisionamento",(e.intelamt.state?c[e.intelamt.state]:"<i>Desconhecido</i>")+u,i),a+=addDetailItem("Segurança",1==e.intelamt.tls?"Protegido usando TLS":"TLS não está configurado",i),""!=(a+=addDetailItem("Credenciais de administrador",null==e.intelamt.user||""==e.intelamt.user?"Não conhecido":"Conhecido",i))&&n.push({name:"Intel&reg; Active Management Technology (Intel&reg; AMT)",html:a,img:"amt64.png"})}if(t.identifiers){a="";var p=t.identifiers;if(p.bios_vendor&&(a+=addDetailItem("Fornecedor",EscapeHtml(p.bios_vendor),i)),p.bios_version&&(a+=addDetailItem("Versão",EscapeHtml(p.bios_version),i)),""!=a&&n.push({name:"BIOS",html:a,img:"chip64.png"}),a="",p.board_vendor&&(a+=addDetailItem("Fornecedor",EscapeHtml(p.board_vendor),i)),p.board_name&&(a+=addDetailItem("Nome",EscapeHtml(p.board_name),i)),p.board_serial&&""!=p.board_serial&&(a+=addDetailItem("Serial",EscapeHtml(p.board_serial),i)),p.board_version&&(a+=addDetailItem("Versão",EscapeHtml(p.board_version),i)),p.product_uuid&&(a+=addDetailItem("Identificador",EscapeHtml(p.product_uuid),i)),p.cpu_name&&(a+=addDetailItem("CPU",EscapeHtml(p.cpu_name).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i)),p.gpu_name)for(var l in p.gpu_name)a+=addDetailItem("GPU",EscapeHtml(p.gpu_name[l]).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i);""!=a&&n.push({name:"Placa-mãe",html:a,img:"motherboard64.png"})}if(t.windows&&t.windows.memory){a="";for(var l 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){d=t.windows.memory[l];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(d.BankLabel)+"</b></div>",d.Capacity&&(a+=addDetailItem("Capacidade / velocidade",format("{0} Mb, {1} Mhz",d.Capacity/1024/1024,d.Speed),i)),d.PartNumber&&(a+=addDetailItem("Número Parcial",EscapeHtml(d.Manufacturer&&"Undefined"!=d.Manufacturer?d.Manufacturer+", ":"")+EscapeHtml(d.PartNumber),i)),a+="</div>"}""!=(a+="</table>")&&n.push({name:"Memória",html:a,img:"ram64.png"})}if(t.identifiers&&p.storage_devices){a="";for(var l in p.storage_devices.sort(function(e,t){return e.Caption>t.Caption?1:e.Caption<t.Caption?-1:0}),a+="<table style=width:100%>",p.storage_devices){(d=p.storage_devices[l]).Size&&(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(d.Caption)+"</b></div>",d.Model&&d.Model!=d.Caption&&(a+=addDetailItem("Model",EscapeHtml(d.Model),i)),d.Size&&("string"==typeof d.Size&&parseInt(d.Size)==d.Size&&(d.Size=parseInt(d.Size)),"number"==typeof d.Size&&(a+=addDetailItem("Capacity",format("{0} Mb",Math.floor(d.Size/1024/1024)),i)),"string"==typeof d.Size&&(a+=addDetailItem("Capacity",EscapeHtml(d.Size),i))),a+="</div>")}""!=(a+="</table>")&&n.push({name:"Storage",html:a,img:"storage64.png"})}a="";for(var l in n)null==n[l].img?a+="<div class=DevSt style=margin-bottom:3px;margin-left:16px><b>"+n[l].name+"</b></div><div style=margin-bottom:10px;margin-left:16px>"+n[l].html+"</div>":(a+="<table style=width:100%><tr>",a+="<td style=width:64px;vertical-align:top><img src=images/details/"+n[l].img+" border=0 width=64 /></td>",a+="<td><div class=DevSt style=margin-bottom:3px;margin-left:16px><b>"+n[l].name+"</b></div><div style=margin-bottom:10px;margin-left:16px>"+n[l].html+"</div></td>",a+="</tr></table>");""==a?QH("p17info","Nenhuma informação para este dispositivo."):QH("p17info",a)}}function agentConsoleHandleKeys(e){if(e.ctrlKey||e.altKey)return!0;var t=0,o=Q("p15consoleText");if(e.key)if(13==e.keyCode&&0==consoleFocus)p15consoleSend(e),t=1;else if(8==e.keyCode&&0==consoleFocus){var n=o.value;o.value=n.substring(0,n.length-1),t=1}else if(27==e.keyCode)o.value="",t=1;else if(38==e.keyCode||40==e.keyCode){var i=consoleHistory.indexOf(o.value);38==e.keyCode&&consoleHistory.length-1>i?o.value=consoleHistory[i+1]:40==e.keyCode&&0<i?o.value=consoleHistory[i-1]:40==e.keyCode&&0==i&&(o.value=""),t=1}else 1===e.key.length&&(insertTextAtCursor(o,e.key),t=1);else 0!=e.charCode&&0==consoleFocus&&(o.value=o.value+String.fromCharCode(e.charCode),t=1);return 0<t?haltEvent(e):void 0}function insertTextAtCursor(e,t){if(document.selection)e.focus(),sel=document.selection.createRange(),sel.text=t;else if(e.selectionStart||"0"==e.selectionStart){var o=e.selectionStart,n=e.selectionEnd;e.value=e.value.substring(0,o)+t+e.value.substring(n,e.value.length),e.setSelectionRange(n+1,n+1)}else e.value+=myValue}var consoleServerText="";function setupConsole(){if(115==xxcurrentView){var e="server"==consoleNode;consoleNode="server",QH("p15deviceName","Console do meu servidor"),QE("p15consoleText",!0),QH("p15statetext",""),QH("p15coreName",""),QV("p15outputselecttd",!1),0==e&&(QH("p15agentConsoleText",consoleServerText),Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight)}else{e=consoleNode==currentNode,meshes[(consoleNode=currentNode).meshid];if(0!=(16&GetNodeRights(currentNode))){null==consoleNode.consoleText&&(consoleNode.consoleText=""),0==e&&(QH("p15agentConsoleText",consoleNode.consoleText),Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight);var t=0!=(1&consoleNode.conn)||0!=(16&consoleNode.conn),o=0!=(1&consoleNode.conn)?"Agente está online":"O agente está offline";0!=(16&consoleNode.conn)&&(o+=", O MQTT está online"),QH("p15statetext",o),QE("p15consoleText",t),QE("p15uploadCore",0!=(1&consoleNode.conn)),QV("p15outputselecttd",17==(17&consoleNode.conn))}else QH("p15statetext","Acesso Negado"),QE("p15consoleText",!1),QE("p15uploadCore",!1),QV("p15outputselecttd",!1)}}function p15consoleClear(){QH("p15agentConsoleText",""),Q("id_p15consoleClear").blur(),115==xxcurrentView?consoleServerText="":consoleNode.consoleText=""}var consoleHistory=[];function p15consoleSend(e){if(!e||13==e.keyCode){var t=Q("p15consoleText").value,o="<div style=color:green>&gt; "+EscapeHtml(t)+"<br/></div>";if(115==xxcurrentView?(consoleServerText+=o,meshserver.send({action:"serverconsole",value:t})):0==(16&consoleNode.conn)||2!=Q("p15outputselect").value&&0!=(1&consoleNode.conn)?(consoleNode.consoleText+=o,meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:t})):(o="<div style=color:orange>MQTT&gt; "+EscapeHtml(t)+"<br/></div>",consoleNode.consoleText+=o,meshserver.send({action:"sendmqttmsg",topic:"console",nodeids:[consoleNode._id],msg:t})),Q("p15agentConsoleText").innerHTML+=o,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight,Q("p15consoleText").value="",0<t.length){var n=consoleHistory.indexOf(t);0<=n&&consoleHistory.splice(n,1),consoleHistory.unshift(t),consoleHistory.splice(10)}}}function p15consoleReceive(e,t,o){"serverconsole"===e?(t="<div>"+EscapeHtml(t)+"</div>",consoleServerText+=t,"server"==consoleNode&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight)):(t="MQTT"==o?"<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){xxdialogMode||(1==e.shiftKey?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"}):1==e.altKey?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"}):1==e.ctrlKey?p15uploadCore2():setDialogMode(2,"Executar ação do agente",3,p15uploadCoreEx,addHtmlValue("Ação","<select id=d3coreMode style=width:230px><option value=1>Carregar núcleo do servidor padrão</option><option value=2>Limpe o núcleo</option><option value=6>Carregar núcleo de recuperação</option><option value=3>Carregar um arquivo principal</option><option value=4>Agente de desconexão suave</option><option value=5>Forçar desconexão do agente</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"})}function p15uploadCore2(){xxdialogMode||(Q("d3localmodeform").action="uploadmeshcorefile.ashx",Q("d3auth").value=authCookie,Q("d3attrib").value=currentNode._id,setDialogMode(3,"Carregar núcleo do agente de malha",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 account_managePhone(){var e;xxdialogMode||0==(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>Verified phone number</div><div style=font-size:20px>"+userinfo.phone+"</div>",setDialogMode(2,"Phone Notifications",3,account_managePhoneRemove,e+="<div style=margin:10px><label><input id=d2delPhone type=checkbox onclick=account_managePhoneRemoveValidate() />Remove phone number</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,"Phone Notifications",3,account_managePhoneAdd,e+='<br /><br /><div style=width:100%;text-align:center>Phone number: <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&&0!=(8388608&features)){var e=1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified;setDialogMode(2,"Autenticação do email",1,function(){e!=Q("email2facheck").checked&&meshserver.send({action:"otpemail",enabled:Q("email2facheck").checked})},"Quando ativado, em cada login, você terá a opção de receber um token de login na sua conta de email para aumentar a segurança.<br /><br /><label><input id=email2facheck type=checkbox "+(e?"checked":"")+"/>Habilite a autenticação de dois fatores por email.</label>")}}function account_manageAuthApp(){if(!xxdialogMode&&0!=(4096&features))return 1==userinfo.otpsecret?account_removeOtp():account_addOtp(),!1}function account_addOtp(){xxdialogMode||1==userinfo.otpsecret||0==(4096&features)||(setDialogMode(2,"Autenticador de aplicativo",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Carregando...</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||0==(4096&features)||setDialogMode(2,"Autenticador de aplicativo",3,function(){meshserver.send({action:"otpauth-clear"})},"Confirmar remoção do login do aplicativo autenticador em duas etapas?")}function account_manageOtp(e){return 2==xxdialogMode&&"otpauth-manage"==xxdialogTag&&dialogclose(0),xxdialogMode||0==(4096&features)||0<count2factoraAuths()&&meshserver.send({action:"otpauth-getpasswords",subaction:e}),!1}function account_manageHardwareOtp(){return 2==xxdialogMode&&"otpauth-hardware-manage"==xxdialogTag&&dialogclose(0),xxdialogMode||0==(4096&features)||meshserver.send({action:"otp-hkey-get"}),!1}function account_addhkey(e){if(3==e){var t="Digite o nome da chave a ser adicionada.<br /><br />";t+=addHtmlValue("Nome da chave",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="Minha chave" onkeyup=account_addhkeyValidate(event,2) />')}else if(2==e){t="Digite um nome de chave, selecione a caixa OTP e pressione o botão no YubiKey&trade;.<br /><br />";t+=addHtmlValue("Nome da chave",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="Minha chave" onkeyup=account_addhkeyValidate(event,1) />'),t+=addHtmlValue("YubiKey&trade; OTP","<input id=dp1key style=width:230px autocomplete=off onkeyup=account_addhkeyValidate(event,2) />")}setDialogMode(2,"Adicionar chave de segurança",3,account_addhkeyEx,t,e),Q("dp1keyname").focus()}function account_addhkeyValidate(e,t){null!=e&&13==e.keyCode&&(2==t?dialogclose(1):Q("dp1key").focus())}function account_addhkeyEx(e,t){var o=Q("dp1keyname").value;""==o&&(o="MyKey"),2==t?(meshserver.send({action:"otp-hkey-yubikey-add",name:o,otp:Q("dp1key").value}),setDialogMode(2,"Adicionar chave de segurança",0,null,"<br />Verificando ...<br /><br /><br />","otpauth-hardware-manage")):3==t&&meshserver.send({action:"webauthn-startregister",name:o})}function account_removehkey(e){meshserver.send({action:"otp-hkey-remove",index:e}),meshserver.send({action:"otp-hkey-get"})}var currentMesh,filetreelinkpath,loclist={af:"afrikaans",sq:"albanês",ar:"Árabe (padrão)","ar-dz":"Árabe (Argélia)","ar-bh":"Árabe (Bahrain)","ar-eg":"Árabe (Egito)","ar-iq":"Árabe (Iraque)","ar-jo":"Árabe (Jordânia)","ar-kw":"Árabe (Kuwait)","ar-lb":"Árabe (Líbano)","ar-ly":"Árabe (Líbia)","ar-ma":"Árabe (Marrocos)","ar-om":"Árabe (Omã)","ar-qa":"Árabe (Catar)","ar-sa":"Árabe (Arábia Saudita)","ar-sy":"Árabe (Síria)","ar-tn":"Árabe (Tunísia)","ar-ae":"Árabe (U.A.E)","ar-ye":"Árabe (Iêmen)",an:"Aragonês",hy:"Armênio",as:"Assamese",ast:"Asturiano",az:"Azerbaijão",eu:"Basco",bg:"Búlgaria",be:"Bielorrusso",bn:"Bengali",bs:"Bósnia",br:"Breton",my:"Birmanês",ca:"Catalão",ch:"Chamorro",ce:"Checheno",zh:"Chinês","zh-hk":"Chinês (Hong Kong)","zh-cn":"Chinês (PRC)","zh-sg":"Chinês (Singapura)","zh-tw":"Chinês (Taiwan)",cv:"Chuvash",co:"Corso",cr:"Cree",hr:"Croata",cs:"Tcheco",da:"Dinamarquês",nl:"Holandês (padrão)","nl-be":"Holandês (belga)",en:"Inglês","en-au":"Inglês (Austrália)","en-bz":"Inglês (Belize)","en-ca":"Inglês (Canadá)","en-ie":"Inglês (Irlanda)","en-jm":"Inglês (Jamaica)","en-nz":"Inglês (Nova Zelândia)","en-ph":"Inglês (Filipinas)","en-za":"Inglês (África do Sul)","en-tt":"Inglês (Trinidad Tobago)","en-gb":"Inglês (Reino Unido)","en-us":"Inglês (Estados Unidos)","en-zw":"Inglês (Zimbábue)",eo:"Esperanto",et:"Estoniano",fo:"O servidor remoto retornou um erro: (429) Too Many Requests.",fa:"Persa (persa)",fj:"Fijiano",fi:"Finlandês",fr:"Francês (Padrão)","fr-be":"Francês (Bélgica)","fr-ca":"Francês (Canadá)","fr-fr":"Francês (França)","fr-lu":"Francês (Luxemburgo)","fr-mc":"Francês (Mônaco)","fr-ch":"Francês (Suíça)",fy:"Frísio",fur:"Friuliano",gd:"Gaélico (escocês)","gd-ie":"Gaélico (irlandês)",gl:"Galego",ka:"Georgiano",de:"Alemão (Padrão)","de-at":"Alemão (Áustria)","de-de":"Alemão (Alemanha)","de-li":"Alemão (Liechtenstein)","de-lu":"Alemão (Luxemburgo)","de-ch":"Alemão (Suíça)",el:"Grego",gu:"Gujarati",ht:"Haitiano",he:"Hebraico",hi:"Hindi",hu:"Húngaro",is:"islandês",id:"Indonésia",iu:"Inuktitut",ga:"Irish",it:"Italiano (Padrão)","it-ch":"Italiano (Suíça)",ja:"japonês",kn:"Kannada",ks:"Caxemira",kk:"Cazaque",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"coreano","ko-kp":"Coreano (Coréia do Norte)","ko-kr":"Coreano (Coréia do Sul)",la:"Latim",lv:"letão",lt:"Lituano",lb:"Luxemburguês",mk:"FYRO Macedonian",ms:"Malaio",ml:"Malaiala",mt:"Maltês",mi:"Maori",mr:"Marathi",mo:"Moldavian",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"norueguês",nb:"Norueguês (Bokmal)",nn:"Norueguês (Nynorsk)",oc:"Occitânico",or:"Oriya",om:"Oromo","fa-ir":"Persa / Irã",pl:"polonês",pt:"Português","pt-br":"Português (Brasil)",pa:"Punjabi","pa-in":"Punjabi (Índia)","pa-pk":"Punjabi (Paquistão)",qu:"Quechua",rm:"Rhaeto-Romanic",ro:"Romena","ro-mo":"Romeno (Moldávia)",ru:"Russo","ru-mo":"Russo (Moldávia)",sz:"Sami (lapão)",sg:"Sango",sa:"Sanskrit",sc:"Sardinian",sd:"Sindhi",si:"Cingalês",sr:"Sérvia",sk:"Eslovaco",sl:"Esloveno",so:"Somani",sb:"Sorbian",es:"Espanhol","es-ar":"Espanhol (Argentina)","es-bo":"Espanhol (Bolívia)","es-cl":"Espanhol (Chile)","es-co":"Espanhol (Colômbia)","es-cr":"Espanhol (Costa Rica)","es-do":"Espanhol (República Dominicana)","es-ec":"Espanhol (Equador)","es-sv":"Espanhol (El Salvador)","es-gt":"Espanhol (Guatemala)","es-hn":"Espanhol (Honduras)","es-mx":"Espanhol (México)","es-ni":"Espanhol (Nicarágua)","es-pa":"Espanhol (Panamá)","es-py":"Espanhol (Paraguai)","es-pe":"Espanhol (Peru)","es-pr":"Espanhol (Porto Rico)","es-es":"Espanhol (Espanha)","es-uy":"Espanhol (Uruguai)","es-ve":"Espanhol (Venezuela)",sx:"Sutu",sw:"Suaíli",sv:"Sueco","sv-fi":"Sueco (Finlândia)","sv-sv":"Sueco (Suécia)",ta:"Tâmil",tt:"Tatar",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"turco",tk:"Turcomano",uk:"ucraniano",hsb:"Sorábio superior",ur:"urdu",ve:"Venda",vi:"vietnamita",vo:"Volapuk",wa:"valão",cy:"galês",xh:"Xhosa",ji:"Iídiche",zu:"Zulu"},loclistex={"zh-chs":"Chinês (simplificado)"};function account_showLocalizationSettings(){if(xxdialogMode)return!1;var e=getstore("loctag",0),t="",o='<select id=d2locselect style=width:240px><option value="*">Valor do navegador do usuário</option>';for(var n in loclist)o+='<option value="'+n+'"'+(e==n?" selected":"")+">"+n+" - "+loclist[n]+"</option>";if(o+="</select>",serverinfo.languages&&0<serverinfo.languages.length){t+="Alterar o idioma exigirá uma atualização da página.<br /><br />";var i='<select id=d2langselect style=width:240px><option value="*">Valor do navegador do usuário</option>';for(var n in serverinfo.languages){var a=serverinfo.languages[n];i+='<option value="'+a+'"'+(userinfo.lang==a?" selected":"")+">"+a+" - "+(loclist[a]?loclist[a]:loclistex[a])+"</option>"}t+=addHtmlValue("Língua",i+="</select>")}return t+=addHtmlValue("Datas e Horário",o),4294967295==userinfo.siteadmin&&""==domain&&(t+='<br /><a rel="noreferrer noopener" target="_blank" href="translator.htm">Ajude a traduzir o MeshCentral</a>'),setDialogMode(2,"Configurações de localização",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),o=Q("d2locselect").value;t!=o&&("*"!=o?args.locale=o:delete args.locale,putstore("loctag",args.locale),masterUpdate(4294967295))}function account_enableNotifications(){return Notification&&Notification.requestPermission().then(function(e){QV("accountEnableNotificationsSpan","granted"!=e)}),!1}function account_showAccountNotifySettings(){if(xxdialogMode)return!1;setDialogMode(2,"Configurações de notificação",3,account_showAccountNotifySettingsEx,"<div><label><input id=p2notifyPlayNotifySound type=checkbox />Som de notificação.</label></div><div><label><input id=p2notifyGroupName type=checkbox />Exibir nome do grupo de dispositivos</label></div><div><label><input id=p2notifyIntelDeviceConnect type=checkbox />Conexões de dispositivos.</label></div><div><label><input id=p2notifyIntelDeviceDisconnect type=checkbox />Desconexões de dispositivos.</label></div><div><label><input id=p2notifyIntelAmtKvmActions type=checkbox />Intel&reg; Área de trabalho AMT e eventos seriais.</label></div>");var e=getstore("notifications",0);return Q("p2notifyPlayNotifySound").checked=1&e,Q("p2notifyIntelDeviceConnect").checked=2&e,Q("p2notifyIntelDeviceDisconnect").checked=4&e,Q("p2notifyIntelAmtKvmActions").checked=8&e,Q("p2notifyGroupName").checked=16&e,!1}function account_showAccountNotifySettingsEx(){var e=0;e+=Q("p2notifyPlayNotifySound").checked?1:0,e+=Q("p2notifyIntelDeviceConnect").checked?2:0,e+=Q("p2notifyIntelDeviceDisconnect").checked?4:0,e+=Q("p2notifyIntelAmtKvmActions").checked?8:0,putstore("notifications",e+=Q("p2notifyGroupName").checked?16:0)}function account_showVerifyEmail(){return xxdialogMode||1==userinfo.emailVerified||1!=serverinfo.emailcheck||setDialogMode(2,"verificação de e-mail",3,account_showVerifyEmailEx,"Clique em ok para enviar um email de verificação para:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Aguarde alguns minutos para receber a verificação."),!1}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){if(xxdialogMode)return!1;var e="Mude o endereço de e-mail da sua conta aqui.<br /><br />";return setDialogMode(2,"Alteração de endereço de email",3,account_changeEmail,e+=addHtmlValue("Email","<input id=dp2email style=width:230px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />")),null!=userinfo.email&&(Q("dp2email").value=userinfo.email),account_validateEmail(),Q("dp2email").focus(),!1}function account_validateEmail(e,t){QE("idx_dlgOkButton",validateEmail(Q("dp2email").value)&&Q("dp2email").value!=userinfo.email),null!=e&&13==e.keyCode&&dialogclose(1)}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp2email").value})}function account_showDeleteAccount(){if(xxdialogMode)return!1;var e="Para excluir esta conta, digite a senha da conta nas duas caixas abaixo e pressione ok.<br /><br />";return e+="<form method=post><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><table style=margin-left:80px><tr>",e+="<td align=right>Senha:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr><tr><td align=right>Senha:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr></table><br /><div style=padding:10px;margin-bottom:4px>",e+="<input id=account_dlgCancelButton type=button value=Cancel style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>",e+='<input id=account_dlgOkButton type=submit value=OK style="float:right;width:80px" onclick=dialogclose(1)>',setDialogMode(2,"Deletar Conta",0,null,e+="</div><br /></form>"),account_validateDeleteAccount(),Q("apassword1").focus(),!1}function account_showChangePassword(){if(xxdialogMode)return!1;var e="Altere a senha da sua conta digitando a senha antiga e a nova senha duas vezes nas caixas abaixo.";if(e+="<br /><br />",e+="<table style=margin-left:60px>",e+="<tr><td align=right>"+nobreak("Senha 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 senha:")+"</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 senha:")+"</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>Dica de senha</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=[],o=0;for(var n in passRequirements)"reset"!=n&&"hint"!=n&&(t.push(n+":"+passRequirements[n]),o++);0<o&&(e+="<br /><span style=font-size:x-small>Requisitos:"+t.join(", ")+".</span>")}return setDialogMode(2,"Mudar senha",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)return!1;if(4294967295!=userinfo.siteadmin&&0!=(64&userinfo.siteadmin))return setDialogMode(2,"Novo grupo de dispositivos",1,null,"Esta conta não tem direitos para criar um novo grupo de dispositivos."),!1;if(!0!==userinfo.emailVerified&&1==serverinfo.emailcheck&&4294967295!=userinfo.siteadmin)return setDialogMode(2,"Segurança da Conta",1,null,'Não foi possível acessar um dispositivo até que um endereço de email seja verificado. Isso é necessário para a recuperação de senha. Vá para a guia "Minha conta" para alterar e verificar um endereço de email.'),!1;if(262144&features&&!(1==userinfo.otpsecret||0<userinfo.otphkeys||0<userinfo.otpkeys||33554432&features&&67108864&features&&null!=userinfo.phone||8388608&features&&1==userinfo.otpekey))return setDialogMode(2,"Segurança da Conta",1,null,'Não foi possível acessar um dispositivo até que a autenticação de dois fatores esteja ativada. Isso é necessário para segurança extra. Vá para a guia "Minha conta" e consulte a seção "Segurança da conta".'),!1;var e="Crie um novo grupo de dispositivos usando as opções abaixo.<br /><br />";return e+=addHtmlValue("Nome","<input id=dp2meshname style=width:230px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) />"),e+=addHtmlValue("Tipo","<div style=width:230px;margin:0;padding:0><select id=dp2meshtype style=width:100% onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) ><option value=2>Gerenciar usando um agente de software</option><option value=1>Intel&reg; Apenas AMT, nenhum agente</option></select></div>"),setDialogMode(2,"Novo grupo de dispositivos",3,account_createMeshEx,e+=addHtmlValue("Descrição","<div style=width:230px;margin:0;padding:0><textarea id=dp2meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>")),account_validateMeshCreate(),Q("dp2meshname").focus(),!1}function account_validateMeshCreate(e,t){1==t&&null!=e&&"Entrar"==e.key&&0<Q("dp2meshname").value.length&&Q("dp2meshtype").focus(),2==t&&null!=e&&"Entrar"==e.key&&Q("dp2meshdesc").focus(),QE("idx_dlgOkButton",0<Q("dp2meshname").value.length)}function account_createMeshEx(e,t){meshserver.send({action:"createmesh",meshname:Q("dp2meshname").value,meshtype:Q("dp2meshtype").value,desc:Q("dp2meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",0<Q("apassword1").value.length&&Q("apassword1").value==Q("apassword2").value)}function account_validateNewPassword(){var e="",t=0<Q("apassword0").value.length&&0<Q("apassword1").value.length&&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 o=checkPasswordStrength(Q("apassword1").value);e=80<=o?"<span style=color:green>Forte<span>":60<=o?"<span style=color:blue>Bom<span>":"<span style=color:red>Fraco<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,o={},n=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++)o[e[a]]=(o[e[a]]||0)+1,t+=5/o[e[a]];for(var s in i)n+=1==i[s]?1:0;return parseInt(t+10*(n-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 o=0,n=0,i=0,a=0,s=0;s<e.length;s++)/\d/.test(e[s])&&o++,/[a-z]/.test(e[s])&&n++,/[A-Z]/.test(e[s])&&i++,/\W/.test(e[s])&&a++;return!(t.numeric&&o<t.numeric)&&(!(t.lower&&n<t.lower)&&(!(t.upper&&i<t.upper)&&!(t.nonalpha&&a<t.nonalpha)))}function updateMeshes(){var e="",t=0,o=0;for(i in meshes){1<t&&(e+="</tr><tr>",t=0),t++,o++;var n=GetMeshRights(meshes[i]),a="Direitos parciais";4294967295==n?a="Administrador completo":0==n&&(a="Sem direitos"),e+="<div onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;width:431px;height:50px;padding-top:1px;padding-bottom:1px;float:left><div style=float:left;width:30px;height:100%></div><div tabindex=0 style=height:100%;cursor:pointer onclick=gotoMesh('"+i+"') onkeypress=\"if (event.key=='Enter') gotoMesh('"+i+"')\"><div class=mi style=float:left;width:50px;height:50px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:300px><div class=e1>"+EscapeHtml(meshes[i].name)+"</div><div>"+a+"</div></div><div class=g2 style=float:left></div></div></div></div>"}meshcount=o,QH("p2meshes",e),QV("p2noMeshFound",0==o)}function gotoMesh(e){return currentMesh=meshes[e],p20updateMesh(),go(20),!1}function server_showRestoreDlg(){if(xxdialogMode)return!1;var e="Restaurar o servidor usando um backup,  <span style=color:red>isso excluirá os dados existentes do servidor</span>. Faça isso apenas se você souber o que está fazendo.<br /><br />";return e+='<form action="/restoreserver.ashx" enctype="multipart/form-data" method="post"><div>',e+="<input type=hidden name=auth value="+authCookie+">",e+='<input id=account_dlgFileInput type=file name=datafile style=width:100% accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()>',e+="<input id=account_dlgCancelButton type=button value=Cancelar style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>",e+="<input id=account_dlgOkButton type=submit value=Ok style=float:right;width:80px onclick=dialogclose(1)>",setDialogMode(2,"Restaurar servidor",0,null,e+="</div><br /><br /></form>"),account_validateServerRestore(),!1}function account_validateServerRestore(){QE("account_dlgOkButton",1==Q("account_dlgFileInput").files.length)}function server_showVersionDlg(){return xxdialogMode||(setDialogMode(2,"Versão MeshCentral",1,null,"Carregando...","MeshCentralServerUpdate"),meshserver.send({action:"serverversion"})),!1}function server_showVersionDlgUpdate(){var e=Q("d2updateCheck1").checked,t=Q("d2updateCheck2").checked;QE("d2updateCheck1","Desconhecido"!=xxdialogTag.stable&&xxdialogTag.current!=xxdialogTag.stable&&0==t),QE("d2updateCheck2","Desconhecido"!=xxdialogTag.latest&&xxdialogTag.current!=xxdialogTag.latest&&0==e),QE("idx_dlgOkButton",e&&!t||!e&&t)}function server_showVersionDlgEx(e,t){Q("d2updateCheck1").checked&&meshserver.send({action:"serverupdate",tag:"stable",version:t.stable}),Q("d2updateCheck2").checked&&meshserver.send({action:"serverupdate"})}function server_showErrorsDlg(){return xxdialogMode||(setDialogMode(2,"MeshCentral Errors",1,null,"Carregando...","MeshCentralServerErrors"),meshserver.send({action:"servererrors"})),!1}function server_showErrorsDlgUpdate(){QE("idx_dlgOkButton",Q("d2clearErrorsCheck").checked)}function server_showErrorsDlgEx(){meshserver.send({action:"serverclearerrorlog"})}function d2CopyServerErrorsToClip(){saveAs(new Blob([Q("d2ServerErrorsLogPre").innerText],{type:"application/octet-stream"}),"servererrors.txt")}function p20updateMesh(){if(null!=currentMesh){var e=GetMeshRights(currentMesh),t=EscapeHtml(currentMesh.name);0==t.length&&(t="<i>Nenhum</i>"),0!=(1&e)&&(t='<span tabindex=0 title="Click here to edit the device group name" onclick=p20editmesh(1) onkeyup="if (event.key == \'Enter\') p20editmesh(1)" style=cursor:pointer>'+t+' <img class=hoverButton src="images/link5.png" /></span>'),QH("p20meshName",t);var o=format("Desconhecido # {0}",currentMesh.mtype);1==currentMesh.mtype&&(o="Intel&reg; Apenas AMT, nenhum agente"),2==currentMesh.mtype&&(o="Gerenciado usando um agente de software");var n="";if(0!=(8&args.hide)&&(n+=addHtmlValue("Nome",t)),n+=addHtmlValue("Descrição",addLinkConditional(currentMesh.desc&&""!=currentMesh.desc?EscapeHtml(currentMesh.desc):"<i>Nenhum</i>","p20editmesh(2)",0!=(1&e))),n+=addHtmlValue("Tipo",o),2==currentMesh.mtype){var i=[];currentMesh.flags&&(1&currentMesh.flags&&i.push("Remover automaticamente"),2&currentMesh.flags&&i.push("Sincronização de nome de host")),""==(i=i.join(", "))&&(i="<i>Nenhum</i>"),n+=addHtmlValue("Recursos",addLinkConditional(i,"p20editmeshfeatures()",1&e))}if(2==currentMesh.mtype){i=[];var a=0;currentMesh.consent&&(a=currentMesh.consent),serverinfo.consent&&(a|=serverinfo.consent),64&a&&8&a?i.push("Prompt da área de trabalho + barra de ferramentas"):64&a?i.push("Barra de ferramentas da área de trabalho"):8&a?i.push("Prompt da área de trabalho"):1&a&&i.push("Notificação na área de trabalho"),16&a?i.push("Prompt do terminal"):2&a&&i.push("Notificação - terminal"),32&a?i.push("Arquivos do prompt"):4&a&&i.push("Notificação arquivos"),7==a&&(i=["Notificar sempre"]),56==(56&a)&&(i=["Sempre alerta"]),""==(i=i.join(", "))&&(i="<i>Nenhum</i>"),n+=addHtmlValue("Consentimento do Usuário",addLinkConditional(i,"p20editmeshconsent(1)",1&e))}var s=0,r=[];if(userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify&&(s=userinfo.links[currentMesh._id].notify),2&s&&r.push("Conectar"),4&s&&r.push("Desconectar"),8&s&&r.push("Intel&reg; AMT"),0==r.length&&r.push("<i>Nenhum</i>"),n+=addHtmlValue("Notificações",addLink(r.join(", "),"p20editMeshNotify()")),16777216&features&&2==currentMesh.mtype){var l="<i>Nenhum</i>",d=!1;null!=currentMesh.invite&&(d=!0,l=currentMesh.invite.codes.join(", ")),n+=addHtmlValue("Códigos de convite",addLinkConditional(l,"p20editmeshInviteCode()",1&e||d))}var c="Nenhuma política";if(currentMesh.amt&&(1==currentMesh.amt.type?c="Deactivate Client Control Mode (CCM)":2==currentMesh.amt.type?(c="Modo de Controle de Cliente Simples (CCM)",2==currentMesh.amt.cirasetup&&(c+=" + CIRA")):3==currentMesh.amt.type&&(c="Modo de controle de administrador simples (ACM)",2==currentMesh.amt.cirasetup&&(c+=" + CIRA"))),n+=addHtmlValue("Intel&reg; AMT",addLinkConditional(c,"p20editMeshAmt()",1&e)),1&e&&(n+='<br><input type=button value=Notas title="Ver notas sobre este grupo de dispositivos" onclick=showNotes(false,"'+encodeURIComponentEx(currentMesh._id)+'") />'),n+="<br style=clear:both><br>",2&e&&(n+='<a href=# onclick="return p20showAddMeshUserDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar usuários</a>',null!=usergroups)){var u=0,p=!1;for(var m in usergroups)usergroups[m]._id.split("/")[1]==currentMesh._id.split("/")[1]&&(u++,null!=currentMesh.links&&null!=currentMesh.links[m]||(p=!0));0<u&&p&&(n+='<a href=# onclick="return p20showAddMeshUserDialog(2)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar grupo de usuários</a>')}4&e&&(1==currentMesh.mtype&&(n+="<a href=# onclick='return addCiraDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Adicione um novo Intel&reg; Computador AMT localizado na Internet."><img src=images/icon-installmesh.png border=0 height=12 width=12> Instalar CIRA</a>',n+="<a href=# onclick='return addDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Adicione um novo Intel&reg; AMT computer that is located on the local network."><img src=images/icon-installmesh.png border=0 height=12 width=12> Instalação local</a>',currentMesh.amt&&2==currentMesh.amt.type?n+="<a href=# onclick='return showCcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Execute a ativação do modo de controle do cliente Intel AMT (CCM)."><img src=images/icon-installmesh.png border=0 height=12 width=12> Ativação</a>':currentMesh.amt&&3==currentMesh.amt.type&&0!=(1048576&features)&&(n+="<a href=# onclick='return showAcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Execute a ativação do modo de controle de administração Intel AMT (ACM)."><img src=images/icon-installmesh.png border=0 height=12 width=12> Ativação</a>')),2==currentMesh.mtype&&(n+="<a href=# onclick='return addAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new computer to this device group by installing the mesh agent."><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar agente</a>',n+="<a href=# onclick='return inviteAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Invite someone to install the mesh agent on this device group."><img src=images/icon-addnew.png border=0 height=12 width=12> Convite</a>')),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>Autorizações de usuário</th><th scope=col style=text-align:left></th></tr>';var g=1,v=[];for(var m in currentMesh.links){var h=m.split("/")[2];currentMesh.links[m].name&&(h=currentMesh.links[m].name),m==userinfo._id&&(h=userinfo.name),null!=usergroups&&null!=usergroups[m]&&(h=usergroups[m].name),v.push({id:m,name:h,rights:currentMesh.links[m].rights})}for(var m in v.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0}),v){var f="",x=makeDeviceGroupRightsString(v[m].rights),k=2;v[m].id==userinfo._id||4294967295!=e&&0==(2&e)||(4294967295!=e&&4294967295==currentMesh.links[v[m].id].rights||(f="<a href=# onclick='return p20deleteUser(event,\""+encodeURIComponentEx(v[m].id)+'")\' title="Remova os direitos de usuário deste grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),x='<span tabindex=0 style=cursor:pointer onclick=p20viewuser("'+encodeURIComponentEx(v[m].id)+"\") onkeypress=\"if (event.key=='Enter') p20viewuser('"+encodeURIComponentEx(v[m].id)+"')\">"+x+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"),v[m].id.startsWith("ugrp/")&&(k=4);var b=EscapeHtml(decodeURIComponent(v[m].name));null!=usergroups&&v[m].id.startsWith("ugrp/")&&(b="<a tabindex=0 href=# onclick='gotoUserGroup(\""+encodeURIComponentEx(v[m].id)+"\");haltEvent(event);'>"+b+"</a>"),null!=users&&v[m].id.startsWith("user/")&&(b="<a tabindex=0 href=# onclick='gotoUser(\""+encodeURIComponentEx(v[m].id)+"\");haltEvent(event);'>"+b+"</a>"),n+="<tr style="+(g%2==0?";background-color:#DDD":"")+'><td style=width:30%><div title="Do utilizador" class=m'+k+"></div><div>&nbsp;"+b+"<div></div></div></td><td style=width:70%><div style=float:right>"+f+"</div><div>"+x+"</div></td></tr>",++g}n+="</tbody></table>",4294967295==e&&(n+="<div style=font-size:x-small;text-align:right><span><a href=# onclick=p20showDeleteMeshDialog() style=cursor:pointer>Excluir grupo</a></span></div>"),QH("p20info",n);var y="";if(0==(268435456&features)&&20<=xxcurrentView&&xxcurrentView<=29&&null!=currentMesh){for(var m in y="?viewmode="+xxcurrentView+"&gotomesh="+currentMesh._id.split("/")[2],urlargs)y+="&"+m+"="+urlargs[m];try{window.history.replaceState({},document.title,window.location.pathname+y)}catch(e){}}}}function p20editMeshAmt(){if(!xxdialogMode){var e="",t="";0!=(1048576&features)&&(t="<option value=3>Modo de controle de administrador simples (ACM)</option>"),1==currentMesh.mtype?e+=addHtmlValue("Tipo","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>Nenhuma política</option><option value=2>Modo de Controle de Cliente Simples (CCM)</option>"+t+"</select>"):e+=addHtmlValue("Tipo","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>Nenhuma política</option><option value=1>Desativar o modo de controle do cliente (CCM)</option><option value=2>Modo de Controle de Cliente Simples (CCM)</option>"+t+"</select>"),setDialogMode(2,"Intel&reg; Política da AMT",3,p20editMeshAmtEx,e+="<div id=dp20amtpolicydiv></div>"),currentMesh.amt&&(Q("dp20amtpolicy").value=currentMesh.amt.type),p20editMeshAmtChange(),(currentMesh.amt&&2==currentMesh.amt.type||3==currentMesh.amt.type)&&(Q("dp20amtpolicypass").value=currentMesh.amt.password,2==currentMesh.amt.type&&null!=currentMesh.amt.badpass&&(Q("dp20amtbadpass").value=currentMesh.amt.badpass),0==(1024&features)&&(Q("dp20amtcira").value=currentMesh.amt.cirasetup)),dp20amtValidatePolicy()}}function p20editMeshAmtChange(){var e=Q("dp20amtpolicy").value,t="";2<=e&&(t=addHtmlValue("Senha*","<input id=dp20amtpolicypass type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />"),t+=addHtmlValue("Senha*","<input id=dp20amtpolicypass2 type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />"),2==e&&2==currentMesh.mtype&&(t+=addHtmlValue("Senha incorreta","<select id=dp20amtbadpass style=width:230px><option value=0>Fazer nada</option><option value=1>Reativar Intel&reg;AMT</option></select>")),0==(1024&features)&&(t+=addHtmlValue('<span title="Acesso remoto iniciado pelo cliente">CIRA</span>',2==e?"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=1>Don't connect to server</option><option value=2>Conecte-se ao servidor</option></select>":"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=2>Conecte-se ao servidor</option></select>")),t+='<br/><span style="font-size:10px">* Deixe em branco para atribuir uma senha aleatória a cada dispositivo.</span><br/>',2==currentMesh.mtype&&(2==e?(t+='<span style="font-size:10px">Esta política não afetará os dispositivos com Intel&reg; AMT no modo ACM.</span><br/>',t+='<span style="font-size:10px">Esta não é uma política segura, pois os agentes estarão executando a ativação.</span>'):t+='<span style="font-size:10px">Durante a ativação, o agente terá acesso às informações da senha do administrador.</span>')),QH("dp20amtpolicydiv",t),setTimeout(dp20amtValidatePolicy,1)}function dp20amtValidatePolicy(){var e=!0,t=Q("dp20amtpolicy").value;if(2==t||3==t){var o=Q("dp20amtpolicypass").value;e=o===Q("dp20amtpolicypass2").value&&(""===o||passwordcheck(o))}QE("idx_dlgOkButton",e)}function p20editMeshAmtEx(){var e=parseInt(Q("dp20amtpolicy").value),t={type:e};2==e?(t={type:e,password:Q("dp20amtpolicypass").value},2==currentMesh.mtype&&(t.badpass=parseInt(Q("dp20amtbadpass").value)),t.cirasetup=0==(1024&features)?parseInt(Q("dp20amtcira").value):1):3==e&&((t={type:e,password:Q("dp20amtpolicypass").value}).cirasetup=0==(1024&features)?parseInt(Q("dp20amtcira").value):1),meshserver.send({action:"meshamtpolicy",meshid:currentMesh._id,amtpolicy:t})}function p20showDeleteMeshDialog(){if(xxdialogMode)return!1;var e=format("Tem certeza de que deseja excluir o grupo {0}? A exclusão do grupo de dispositivos também excluirá todas as informações sobre os dispositivos desse grupo.",EscapeHtml(currentMesh.name))+"<br /><br />";return setDialogMode(2,"Excluir grupo",3,p20showDeleteMeshDialogEx,e+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confirme</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 p20editmesh(e){if(!xxdialogMode){var t=addHtmlValue("Nome","<input id=dp20meshname style=width:230px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate(event) />");setDialogMode(2,"Editar grupo de dispositivos",3,p20editmeshEx,t+=addHtmlValue("Descrição","<div style=width:230px;margin:0;padding:0><textarea id=dp20meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>")),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(e){QE("idx_dlgOkButton",0<Q("dp20meshname").value.length),e&&"Enter"==e.key&&Q("dp20meshdesc").focus()}function p20editmeshconsent(e){if(!xxdialogMode){var t="",o=0,n="";1==e&&(o=currentMesh.consent?currentMesh.consent:0,n="Editar consentimento do usuário do grupo de dispositivos"),2==e&&(o=currentUser.consent?currentUser.consent:0,n="Edit User Consent"),3==e&&(o=currentNode.consent?currentNode.consent:0,n="Edit Device User Consent"),t+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px"><b>Área de Trabalho</b></div>',t+="<div><label><input type=checkbox id=d20flag1 "+(1&o?"checked":"")+">Notificar usuário</label></div>",t+="<div><label><input type=checkbox id=d20flag2 "+(8&o?"checked":"")+">Solicitar consentimento do usuário</label></div>",t+="<div><label><input type=checkbox id=d20flag7 "+(64&o?"checked":"")+">Mostrar barra de ferramentas de conexão</label></div>",t+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Terminal</b></div>',t+="<div><label><input type=checkbox id=d20flag3 "+(2&o?"checked":"")+">Notificar usuário</label></div>",t+="<div><label><input type=checkbox id=d20flag4 "+(16&o?"checked":"")+">Solicitar consentimento do usuário</label></div>",t+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Arquivos</b></div>',t+="<div><label><input type=checkbox id=d20flag5 "+(4&o?"checked":"")+">Notificar usuário</label></div>",setDialogMode(2,n,3,p20editmeshconsentEx,t+="<div><label><input type=checkbox id=d20flag6 "+(32&o?"checked":"")+">Solicitar consentimento do usuário</label></div>",e),serverinfo.consent&&(1&serverinfo.consent&&(Q("d20flag1").checked=!0),8&serverinfo.consent&&(Q("d20flag2").checked=!0),2&serverinfo.consent&&(Q("d20flag3").checked=!0),16&serverinfo.consent&&(Q("d20flag4").checked=!0),4&serverinfo.consent&&(Q("d20flag5").checked=!0),32&serverinfo.consent&&(Q("d20flag6").checked=!0),64&serverinfo.consent&&(Q("d20flag7").checked=!0),QE("d20flag1",!(1&serverinfo.consent)),QE("d20flag2",!(8&serverinfo.consent)),QE("d20flag3",!(2&serverinfo.consent)),QE("d20flag4",!(16&serverinfo.consent)),QE("d20flag5",!(4&serverinfo.consent)),QE("d20flag6",!(32&serverinfo.consent)),QE("d20flag7",!(64&serverinfo.consent)))}}function p20editmeshconsentEx(e,t){var o=0;Q("d20flag1").checked&&(o+=1),Q("d20flag2").checked&&(o+=8),Q("d20flag3").checked&&(o+=2),Q("d20flag4").checked&&(o+=16),Q("d20flag5").checked&&(o+=4),Q("d20flag6").checked&&(o+=32),Q("d20flag7").checked&&(o+=64),1==t&&meshserver.send({action:"editmesh",meshid:currentMesh._id,consent:o}),2==t&&meshserver.send({action:"edituser",id:currentUser._id,consent:o}),3==t&&meshserver.send({action:"changedevice",nodeid:currentNode._id,consent:o})}function p20editmeshfeatures(){if(!xxdialogMode){var e=currentMesh.flags?currentMesh.flags:0,t="<div><label><input type=checkbox id=d20flag1 "+(1&e?"checked":"")+">Remova o dispositivo ao desconectar</label><br></div>";setDialogMode(2,"Editar recursos do grupo de dispositivos",3,p20editmeshfeaturesEx,t+="<div><label><input type=checkbox id=d20flag2 "+(2&e?"checked":"")+">Sincronizar o nome do dispositivo do servidor com o nome do host</label><br></div>")}}function p20editmeshfeaturesEx(){var e=0;Q("d20flag1").checked&&(e+=1),Q("d20flag2").checked&&(e+=2),meshserver.send({action:"editmesh",meshid:currentMesh._id,flags:e})}function p20showAddMeshUserDialog(e,t){if(xxdialogMode)return!1;var o="";if(null==e||5==e)null==t&&(o+=null==e?"Permitir que os usuários gerenciem esse grupo de dispositivos e dispositivos neste grupo.":"Allow users to manage this device.",524288&features&&(o+=" Os usuários precisam fazer login neste servidor uma vez antes de poderem ser adicionados a um grupo de dispositivos."),o+="<br /><br />"),o+="<div style='position:relative'>",o+=addHtmlValue("User Identifiers",'<input id=dp20username style=width:230px maxlength=256 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() placeholder="user1, user2, user3" />'),o+="<div id=dp20usersuggest class=suggestionBox style='top:30px;left:130px;display:none'></div>",o+="</div><br>";else if(1==e){var n="";if(null==t){var i=getOrderedList(meshes,"name");for(var a in i)null!=currentUser.links&&null!=currentUser.links[i[a]._id]||(n+="<option value="+encodeURIComponentEx(i[a]._id)+">"+EscapeHtml(i[a].name)+"</option>")}else n+="<option value="+t+">"+EscapeHtml(meshes[decodeURIComponent(t)].name)+"</option>";o+=addHtmlValue("Grupo de dispositivos","<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog() id=dp2groupid style=width:100%"+(t?" disabled":"")+">"+n+"</select></div>")}else if(2==e){if(null==usergroups)return;n="";var s=getOrderedList(usergroups,"name");for(var a in s)currentMesh._id.split("/")[1]==s[a]._id.split("/")[1]&&(null!=currentMesh.links&&null!=currentMesh.links[s[a]._id]||(n+="<option value="+encodeURIComponentEx(s[a]._id)+">"+EscapeHtml(s[a].name)+"</option>"));o+=addHtmlValue("Grupo de usuários","<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog() id=dp2groupid style=width:100%>"+n+"</select></div>")}else if(6==e){if(null==usergroups)return;n="";if(null==t){s=getOrderedList(usergroups,"name");for(var a in s)currentNode._id.split("/")[1]==s[a]._id.split("/")[1]&&(null!=currentNode.links&&null!=currentNode.links[s[a]._id]||(n+="<option value="+encodeURIComponentEx(s[a]._id)+">"+EscapeHtml(s[a].name)+"</option>"))}else n+="<option value="+t+">"+EscapeHtml(usergroups[decodeURIComponent(t)].name)+"</option>";o+=addHtmlValue("Grupo de usuários","<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog() id=dp2groupid style=width:100%"+(t?" disabled":"")+">"+n+"</select></div>")}else if(3==e){n="";t=t&&decodeURIComponent(t);i=getOrderedList(meshes,"name");for(var a in i)null==t&&null!=currentUserGroup.links&&null!=currentUserGroup.links[i[a]._id]||(n+="<option value="+encodeURIComponentEx(i[a]._id)+(t==i[a]._id?" selected":" ")+">"+EscapeHtml(i[a].name)+"</option>");o+=addHtmlValue("Grupo de dispositivos","<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog("+e+") id=dp2groupid style=width:100%>"+n+"</select></div>")}else if(4==e||7==e){n="";var r=null,l=null;null!=t&&null!=(l=getNodeFromId(decodeURIComponent(t)))&&(r=l.meshid);i=getOrderedList(meshes,"name");for(var a in i)null!=i[a].links[userinfo._id]&&7&i[a].links[userinfo._id].rights&&(null==r&&(r=i[a]._id),n+="<option value="+encodeURIComponentEx(i[a]._id)+(r==i[a]._id?" selected":" ")+">"+EscapeHtml(i[a].name)+"</option>");o+=addHtmlValue("Grupo de dispositivos","<div style=width:230px;margin:0;padding:0><select onchange=p20changeMeshAddMeshUserDialog("+e+") id=dp2meshid style=width:100%>"+n+"</select></div>"),n="";var d=getOrderedList(nodes,"name");for(var a in d)d[a].meshid==r&&(n+="<option value="+encodeURIComponentEx(d[a]._id)+(l==d[a]?" selected":" ")+">"+EscapeHtml(d[a].name)+"</option>");o+=addHtmlValue("Dispositivo","<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog("+e+") id=dp2nodeid style=width:100%>"+n+"</select></div>")}else{var c=(e=decodeURIComponent(e)).split("/")[2];users&&users[e]&&(c=users[e].name),usergroups&&usergroups[e]&&(c=usergroups[e].name),userinfo._id==e&&(c=userinfo.name),e.startsWith("ugrp/")?o+=format("Permissões de grupo para {0}.",c)+"<br /><br />":o+=format("Permissões de grupo para o usuário {0}.",c)+"<br /><br />"}var u=-1,p=4!=e&&5!=e&&6!=e&&7!=e;if(o+='<div style="height:120px;overflow-y:scroll;border:1px solid gray">',p&&(o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Administrador completo</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Editar grupo de dispositivos</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Gerenciar usuários do grupo de dispositivos</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Gerenciar computadores do grupo de dispositivos</label><br>"),o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Controle remoto</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Somente visualização remota</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Somente entrada limitada</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nodesktop style=margin-left:12px>Sem acesso à área de trabalho</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>Sem acesso ao terminal</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>Sem acesso a arquivos</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>Nenhum Intel&reg; AMT</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Mesh Agent Console</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>Arquivos do servidor</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Reativar dispositivo</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Editar notas do dispositivo</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Mostrar apenas eventos próprios</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20chatnotify>Chat & Notificação</label><br>",o+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20uninstall>Desinstalar agente</label><br>",o+="</div>",null==e)setDialogMode(2,"Adicionar usuários ao grupo de dispositivos",3,p20showAddMeshUserDialogEx,o),QE("p20fulladmin",4294967295==GetMeshRights(currentMesh)),Q("dp20username").focus();else if(1===e)setDialogMode(2,null==t?"Add Device Group Permissions":"Editar permissões do grupo de dispositivos",t?7:3,p20showAddMeshUserDialogEx,o,e),null!=t&&(u=meshes[decodeURIComponent(t)].links[currentUser._id].rights),4294967295==u&&(Q("p20fulladmin").checked=!0,u=-1);else if(2===e)setDialogMode(2,"Adicionar grupo de usuários",3,p20showAddMeshUserDialogEx,o,e),QE("p20fulladmin",4294967295==GetMeshRights(currentMesh));else if(3===e)setDialogMode(2,null==t?"Adicionar grupo de dispositivos":"Editar grupo de dispositivos",t?7:3,p20showAddMeshUserDialogEx,o,e),QE("dp2groupid",null==t),null!=t&&(u=currentUserGroup.links[decodeURIComponent(t)].rights),4294967295==u&&(Q("p20fulladmin").checked=!0,u=-1);else if(4===e)setDialogMode(2,null==t?"Add Device Permissions":"Edit Device Permissions",t?7:3,p20showAddMeshUserDialogEx,o,e),QE("dp2meshid",null==t),QE("dp2nodeid",null==t);else if(7===e)setDialogMode(2,null==t?"Add Device Permissions":"Edit Device Permissions",t?7:3,p20showAddMeshUserDialogEx,o,e),QE("dp2meshid",null==t),QE("dp2nodeid",null==t),null!=t&&(u=currentUserGroup.links[decodeURIComponent(t)].rights,QE("dp20username",!1));else if(5===e)setDialogMode(2,t?"Edit User Device Permissions":"Add User Device Permissions",t?7:3,p20showAddMeshUserDialogEx,o,e),null!=t&&(t=decodeURIComponent(t),null!=users&&null!=users[t]?Q("dp20username").value=users[t].name:Q("dp20username").value=t.split("/")[2],u=currentNode.links[t].rights,QE("dp20username",!1)),Q("dp20username").focus();else if(6===e)setDialogMode(2,t?"Edit User Group Device Permissions":"Add User Group Device Permissions",t?7:3,p20showAddMeshUserDialogEx,o,e),null!=t&&(u=currentNode.links[decodeURIComponent(t)].rights);else{e.startsWith("ugrp/")?setDialogMode(2,"Editar permissões do grupo de dispositivos",7,p20showAddMeshUserDialogEx,o,e):setDialogMode(2,"Editar permissões do grupo de dispositivos do usuário",7,p20showAddMeshUserDialogEx,o,e);GetMeshRights(currentMesh);4294967295==(u=GetMeshRights(currentMesh,e))&&(Q("p20fulladmin").checked=!0,u=-1),QE("p20fulladmin",4294967295==GetMeshRights(currentMesh))}return-1!=u&&(p&&(1&u&&(Q("p20editmesh").checked=!0),2&u&&(Q("p20manageusers").checked=!0),4&u&&(Q("p20managecomputers").checked=!0)),8&u&&(Q("p20remotecontrol").checked=!0,65536&u&&(Q("p20nodesktop").checked=!0),256&u&&(Q("p20remoteview").checked=!0),512&u&&(Q("p20noterminal").checked=!0),1024&u&&(Q("p20nofiles").checked=!0),2048&u&&(Q("p20noamt").checked=!0),4096&u&&(Q("p20remotelimitedinput").checked=!0)),16&u&&(Q("p20meshagentconsole").checked=!0),32&u&&(Q("p20meshserverfiles").checked=!0),64&u&&(Q("p20wakedevices").checked=!0),128&u&&(Q("p20editnotes").checked=!0),8192&u&&(Q("p20limitevents").checked=!0),16384&u&&(Q("p20chatnotify").checked=!0),32768&u&&(Q("p20uninstall").checked=!0)),p20validateAddMeshUserDialog(e),!1}function p20changeMeshAddMeshUserDialog(e){var t="",o=decodeURIComponent(Q("dp2meshid").value);for(var n in nodes)nodes[n].meshid==o&&(t+="<option value="+encodeURIComponentEx(nodes[n]._id)+">"+EscapeHtml(nodes[n].name)+"</option>");QH("dp2nodeid",t),p20validateAddMeshUserDialog(e)}function p20setname(e){e=decodeURIComponent(e);var t=Q("dp20username").value.split(",");for(var o in t)t[o]=t[o].trim();return t[t.length-1]=e,Q("dp20username").value=t.join(", "),p20validateAddMeshUserDialog(),!1}function p20validateAddMeshUserDialog(e){var t,o=!0;if(4===e){var n=0,i=decodeURIComponent(Q("dp2nodeid").value);""!=i&&null!=currentUser.links&&null!=currentUser.links[i]&&(n=currentUser.links[i].rights),Q("p20remotecontrol").checked=0!=(8&n),Q("p20meshagentconsole").checked=0!=(16&n),Q("p20meshserverfiles").checked=0!=(32&n),Q("p20wakedevices").checked=0!=(64&n),Q("p20editnotes").checked=0!=(128&n),Q("p20remoteview").checked=0!=(256&n),Q("p20noterminal").checked=0!=(512&n),Q("p20nofiles").checked=0!=(1024&n),Q("p20noamt").checked=0!=(2048&n),Q("p20remotelimitedinput").checked=0!=(4096&n),Q("p20limitevents").checked=0!=(8192&n),Q("p20chatnotify").checked=0!=(16384&n),Q("p20uninstall").checked=0!=(32768&n),Q("p20nodesktop").checked=0!=(65536&n),o=""!=i}if(Q("dp20username")){var a=Q("dp20username").value.split(",");for(var s in a){var r=a[s]=a[s].trim();0==r.length?o=!1:0<=r.indexOf('"')&&(o=!1)}var l=!1,d=!1;if(null!=users){var c=a[a.length-1].trim(),u=c.toLowerCase(),p=[];if(0<c.length){for(var s in users){var m=users[s]._id.split("/");if((null==currentMesh||currentMesh.domain==m[1])&&(null==currentNode||currentNode.domain==m[1])){if(m[2]===u){d=!0;break}if(0<=users[s].name.toLowerCase().indexOf(u)&&(p.push([users[s]._id,users[s].name]),8<=p.length))break}}if(0==d&&0<p.length){var g="";for(var s in p){var v=p[s][0],h=p[s][1];v.split("/")[2]==h.toLowerCase()?g+="<div class=suggestionBoxItem onclick='p20setname(\""+encodeURIComponentEx(v.split("/")[2])+"\")'>"+EscapeHtml(h)+"</div>":g+="<div class=suggestionBoxItem onclick='p20setname(\""+encodeURIComponentEx(v.split("/")[2])+"\")'><div>"+EscapeHtml(h)+"</div><div class=suggestionBoxSubItem>"+EscapeHtml(v.split("/")[2])+"</div></div>"}QH("dp20usersuggest",g),l=!0}}}QV("dp20usersuggest",l)}QE("idx_dlgOkButton",o),null!=Q("p20fulladmin")?(t=!Q("p20fulladmin").checked,QE("p20editmesh",t),QE("p20manageusers",t),QE("p20managecomputers",t)):t=""!=i,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("p20nodesktop",t&&Q("p20remotecontrol").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)}function p20showAddMeshUserDialogEx(e,t){var o=0;if(null!=Q("p20fulladmin")&&1==Q("p20fulladmin").checked?o=4294967295:(null!=Q("p20fulladmin")&&(1==Q("p20editmesh").checked&&(o+=1),1==Q("p20manageusers").checked&&(o+=2),1==Q("p20managecomputers").checked&&(o+=4)),1==Q("p20remotecontrol").checked&&(o+=8),1==Q("p20meshagentconsole").checked&&(o+=16),1==Q("p20meshserverfiles").checked&&(o+=32),1==Q("p20wakedevices").checked&&(o+=64),1==Q("p20editnotes").checked&&(o+=128),1==Q("p20remoteview").checked&&(o+=256),1==Q("p20nodesktop").checked&&(o+=65536),1==Q("p20noterminal").checked&&(o+=512),1==Q("p20nofiles").checked&&(o+=1024),1==Q("p20noamt").checked&&(o+=2048),1==Q("p20remotelimitedinput").checked&&(o+=4096),1==Q("p20limitevents").checked&&(o+=8192),1==Q("p20chatnotify").checked&&(o+=16384),1==Q("p20uninstall").checked&&(o+=32768)),0==(8&o)&&(256&o&&(o-=256),512&o&&(o-=512),1024&o&&(o-=1024),2048&o&&(o-=2048),4096&o&&(o-=4096),65536&o&&(o-=65536)),1===t){var n=decodeURIComponent(Q("dp2groupid").value);null!=(a=meshes[n])&&meshserver.send({action:"addmeshuser",meshid:n,meshname:a.name,userids:[currentUser._id],meshadmin:o,remove:2==e})}else if(2===t){var i=decodeURIComponent(Q("dp2groupid").value);null!=(a=meshes[currentMesh._id])&&meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:i,meshadmin:o,remove:2==e})}else if(3===t){var a;n=decodeURIComponent(Q("dp2groupid").value);null!=(a=meshes[n])&&meshserver.send({action:"addmeshuser",meshid:n,meshname:a.name,userids:[currentUserGroup._id],meshadmin:o,remove:2==e})}else if(4===t){null!=(c=getNodeFromId(d=decodeURIComponent(Q("dp2nodeid").value)))&&meshserver.send({action:"adddeviceuser",nodeid:d,nodename:c.name,userids:[currentUser._id],rights:o,remove:2==e})}else if(5===t){var s=Q("dp20username").value.split(","),r=[];for(var l in s)r.push(s[l].trim());meshserver.send({action:"adddeviceuser",nodeid:currentNode._id,nodename:currentNode.name,usernames:r,rights:o,remove:2==e})}else if(6===t){i=decodeURIComponent(Q("dp2groupid").value);null!=currentNode&&meshserver.send({action:"adddeviceuser",nodeid:currentNode._id,nodename:currentNode.name,userids:[i],rights:o,remove:2==e})}else if(7===t){var d,c;null!=(c=getNodeFromId(d=decodeURIComponent(Q("dp2nodeid").value)))&&meshserver.send({action:"adddeviceuser",nodeid:d,nodename:c.name,userids:[currentUserGroup._id],rights:o,remove:2==e})}else if(null==t){s=Q("dp20username").value.split(","),r=[];for(var l in s)r.push(s[l].trim());meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:r,meshadmin:o,remove:2==e})}else meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userids:[t],meshadmin:o,remove:2==e})}function p20viewuser(e){if(!xxdialogMode){var t=decodeURIComponent(e),o=GetMeshRights(currentMesh),n=GetMeshRights(currentMesh,t);if(userinfo._id!=t&&(4294967295==o||0!=(2&o)&&4294967295!=n))p20showAddMeshUserDialog(e);else{var i=[];4294967295==n?i.push("Administrador Pleno (todos os direitos)"):(0!=(1&n)&&i.push("Editar grupo de dispositivos"),0!=(2&n)&&i.push("Gerenciar usuários do grupo de dispositivos"),0!=(4&n)&&i.push("Gerenciar computadores do grupo de dispositivos"),0!=(8&n)&&i.push("Controle remoto"),0!=(16&n)&&i.push("Console do agente"),0!=(32&n)&&i.push("Arquivos do servidor"),0!=(64&n)&&i.push("Reativar dispositivo"),0!=(128&n)&&i.push("Editar notas"),0!=(8&n)&&0!=(256&n)&&i.push("Somente visualização remota"),0!=(8&n)&&0!=(65536&n)&&i.push("No Desktop"),0!=(8&n)&&0!=(512&n)&&i.push("Sem terminal"),0!=(8&n)&&0!=(1024&n)&&i.push("Sem arquivos"),0!=(8&n)&&0!=(2048&n)&&i.push("Nenhum Intel&reg; AMT"),0!=(8&n)&&0!=(4096&n)&&0==(256&n)&&i.push("Entrada limitada"),0!=(8192&n)&&i.push("Somente Eventos Próprios"),0!=(16384&n)&&i.push("Chat & Notificação"),0!=(32768&n)&&i.push("Desinstalar")),0==i.length&&i.push("Sem direitos");var a=t.split("/")[2];users&&users[t]&&(a=users[t].name),userinfo._id==t&&(a=userinfo.name);var s=1,r=addHtmlValue("Nome de Usuário",EscapeHtml(decodeURIComponent(a)));t.split("/")[2]!=a&&(r+=addHtmlValue("Identificador do usuário",EscapeHtml(t.split("/")[2]))),r+=addHtmlValue("Permissões",i.join(", ")),userinfo._id!=t&&(4294967295==o||0!=(2&o)&&4294967295!=n)&&(s+=4),setDialogMode(2,"Usuário do grupo de dispositivos",s,p20viewuserEx,r,t)}}}function p20viewuserEx(e,t){if(2==e){var o=t.split("/")[2];users&&users[t]&&(o=users[t].name),usergroups&&usergroups[t]&&(o=usergroups[t].name),userinfo._id==t&&(o=userinfo.name),t.startsWith("user/")&&setDialogMode(2,"Remove User Permissions",3,p20viewuserEx2,format('Confirm removal of rights for user "{0}"?',EscapeHtml(decodeURIComponent(o))),t),t.startsWith("ugrp/")&&setDialogMode(2,"Remove User Group Permissions",3,p20viewuserEx2,format('Confirm removal of rights for user group "{0}"?',EscapeHtml(decodeURIComponent(o))),t)}}function p20deleteUser(e,t){return haltEvent(e),p20viewuserEx(2,decodeURIComponent(t)),!1}function p20viewuserEx2(e,t){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:t})}function p20editmeshInviteCode(){if(xxdialogMode)return!1;var e,t=GetMeshRights(currentMesh),o=serverinfo.name;(-1!=o.indexOf(".")&&0==(2&features)||(o=window.location.hostname),1==serverinfo.https)?e="https://"+o+(443==serverinfo.port?"":":"+serverinfo.port)+domainUrl+"invite":e="http://"+o+(80==serverinfo.port?"":":"+serverinfo.port)+domainUrl+"invite";if(1&t){var n="Quando ativado, os códigos de convite podem ser usados ​​por qualquer pessoa para associar dispositivos a este grupo de dispositivos usando o seguinte link público:<br /><br />";n+='<div style=width:100%;text-align:center><a target=_blank href="'+e+'">'+e+"</a></div><br />",n+="<div style=margin-bottom:5px><label><input id=agentJoinCheck type=checkbox onclick=p20editmeshInviteCodeValidate() />Ativar códigos de convite</label></div>",n+=addHtmlValue("Códigos de convite",'<input id=agentInviteCode style=width:236px onkeyup=p20editmeshInviteCodeValidate() placeholder="code1, code2, code3" />'),setDialogMode(2,"Códigos de convite",3,p20editmeshInviteCodeEx,n+=addHtmlValue("Tipo de instalação ","<select id=agentInviteType style=width:236px><option value=0>Segundo plano e interativo</option><option value=2>Apenas em segundo plano</option><option value=1>Apenas interativo</option></select>")),null!=currentMesh.invite&&(Q("agentJoinCheck").checked=!0,Q("agentInviteCode").value=currentMesh.invite.codes.join(", "),Q("agentInviteType").value=3&currentMesh.invite.flags),p20editmeshInviteCodeValidate()}else{n="Os códigos de convite podem ser usados ​​por qualquer pessoa para associar dispositivos a este grupo de dispositivos usando o seguinte link público:<br /><br />";n+='<div style=width:100%;text-align:center><a target=_blank href="'+e+'">'+e+"</a></div><br />",n+=addHtmlValue("Códigos de convite",currentMesh.invite.codes.join(", ")),setDialogMode(2,"Códigos de convite",1,null,n+=addHtmlValue("Tipo de instalação ",["Segundo plano e interativo","Apenas em segundo plano","Apenas interativo"][3&currentMesh.invite.flags]))}}function p20editmeshInviteCodeValidate(){var e=!0,t=Q("agentInviteCode").value.split(",");for(var o in t)t[o]=t[o].trim(),""==t[o]&&(e=!1);QE("agentInviteCode",Q("agentJoinCheck").checked),QE("agentInviteType",Q("agentJoinCheck").checked),QE("idx_dlgOkButton",0==Q("agentJoinCheck").checked||e)}function p20editmeshInviteCodeEx(){if(1==Q("agentJoinCheck").checked){var e=Q("agentInviteCode").value.split(",");for(var t in e)e[t]=e[t].trim();meshserver.send({action:"editmesh",meshid:currentMesh._id,invite:{codes:e,flags:parseInt(Q("agentInviteType").value)}})}else meshserver.send({action:"editmesh",meshid:currentMesh._id,invite:"*"})}function p20editMeshNotify(){if(xxdialogMode)return!1;var e=0;userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify&&(e=userinfo.links[currentMesh._id].notify);return"<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Conexões de dispositivos.</label></div>","<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Desconexões de dispositivos.</label></div>","<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; Área de trabalho AMT e eventos seriais.</label></div>",setDialogMode(2,"Configurações de notificação",3,p20editMeshNotifyEx,"As configurações de notificação também devem estar ativadas nas configurações da conta.<br /><br /><div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Conexões de dispositivos.</label></div><div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Desconexões de dispositivos.</label></div><div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel&reg; Área de trabalho AMT e eventos seriais.</label></div>"),Q("p20notifyIntelDeviceConnect").checked=2&e,Q("p20notifyIntelDeviceDisconnect").checked=4&e,Q("p20notifyIntelAmtKvmActions").checked=8&e,!1}function p20editMeshNotifyEx(){var e=0;e+=Q("p20notifyIntelDeviceConnect").checked?2:0,e+=Q("p20notifyIntelDeviceDisconnect").checked?4:0,e+=Q("p20notifyIntelAmtKvmActions").checked?8:0,meshserver.send({action:"changemeshnotify",meshid:currentMesh._id,notify:e})}function setupMeshSummaryStats(){var o=Chart.controllers.doughnut.prototype.draw;Chart.controllers.doughnut=Chart.controllers.doughnut.extend({draw:function(){o.apply(this,arguments);var e=this.chart.chart.ctx,t=e.fill;e.fill=function(){e.save(),e.shadowColor="blue",e.shadowBlur=10,e.shadowOffsetX=2,e.shadowOffsetY=2,t.apply(this,arguments),e.restore()}}}),window.meshPowerChart=new Chart(document.getElementById("meshPowerChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#20F","#40D","#60B","#809","#A07","#C05"]}]},options:{responsive:!0,legend:{position:"none"},animation:{animateScale:!0,animateRotate:!0},layout:{padding:{left:10,right:10,top:10,bottom:10}}}}),window.meshOsChart=new Chart(document.getElementById("meshOsChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#20F","#40D","#60B","#809","#A07","#C05"]}]},options:{responsive:!0,legend:{position:"none"},animation:{animateScale:!0,animateRotate:!0},layout:{padding:{left:10,right:10,top:10,bottom:10}}}}),window.meshConnChart=new Chart(document.getElementById("meshConnChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#20F","#40D","#60B","#809","#A07","#C05"]}],labels:["Não conectado","Agente","Intel AMT","Agente + Intel AMT"]},options:{responsive:!0,legend:{position:"none"},animation:{animateScale:!0,animateRotate:!0},layout:{padding:{left:10,right:10,top:10,bottom:10}}}})}function p21updateMesh(){if(null!=currentMesh){var e=GetMeshRights(currentMesh),t=EscapeHtml(currentMesh.name);0==t.length&&(t="<i>Nenhum</i>"),0!=(1&e)&&(t='<span tabindex=0 title="Click here to edit the device group name" onclick=p20editmesh(1) onkeyup="if (event.key == \'Enter\') p20editmesh(1)" style=cursor:pointer>'+t+' <img class=hoverButton src="images/link5.png" /></span>'),QH("p21meshName",t);var o={},n={},i=[0,0,0,0],a=!1,s=!1,r=!1;for(var l in nodes)nodes[l].meshid==currentMesh._id&&(nodes[l].agent&&(a=!0,null==o[nodes[l].agent.id]?o[nodes[l].agent.id]=1:o[nodes[l].agent.id]++),nodes[l].pwr&&(s=!0,null==n[nodes[l].pwr]?n[nodes[l].pwr]=1:n[nodes[l].pwr]++),0==nodes[l].conn?(r=!0,i[0]++):0!=(6&nodes[l].conn)?(r=!0,0!=(1&nodes[l].conn)?i[3]++:i[2]++):0!=(1&nodes[l].conn)&&(r=!0,i[1]++));var d=[],c=[],u=[],p=[];for(var l in o)d.push(o[l]),c.push(agentsStr[l]);for(var l in n)u.push(n[l]),p.push(powerStatetable[l]);window.meshPowerChart.config.data.datasets[0].data=u,window.meshPowerChart.config.data.labels=p,window.meshPowerChart.update(),2==currentMesh.mtype&&(window.meshOsChart.config.data.datasets[0].data=d,window.meshOsChart.config.data.labels=c,window.meshOsChart.update()),window.meshConnChart.config.data.datasets[0].data=i,window.meshConnChart.update();var m="",g=0;if(0<u.length){var v=[];for(var l in n)v.push([powerStatetable[l],n[l]]);for(var l in v.sort(function(e,t){return-(e[1]-t[1])}),m+='<table style="margin-top:10px;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>Estados de potência</th><th scope=col style=text-align:left></th></tr>',v)m+="<tr style="+(++g%2==0?"background-color:#DDD":"")+"><td><divclass=m2></div><div>&nbsp;"+v[l][0]+"<div></div></div></td><td><div style=float:right>"+v[l][1]+" </div><div></div></td></tr>";m+="</tbody></table>"}if(0<d.length&&2==currentMesh.mtype){g=0;var h=[];for(var l in o)h.push([agentsStr[l],o[l]]);for(var l in h.sort(function(e,t){return-(e[1]-t[1])}),m+='<table style="margin-top:10px;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>Tipos de agentes</th><th scope=col style=text-align:left></th></tr>',h)m+="<tr style="+(++g%2==0?"background-color:#DDD":"")+"><td><divclass=m2></div><div>&nbsp;"+h[l][0]+"<div></div></div></td><td><div style=float:right>"+h[l][1]+" </div><div></div></td></tr>";m+="</tbody></table>"}if(r){var f=[];for(l=g=0;l<4;l++)f.push([["Não conectado","Agente","Intel AMT","Agente + Intel AMT"][l],i[l]]);f.sort(function(e,t){return-(e[1]-t[1])}),m+='<table style="margin-top:10px;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>Conectividade</th><th scope=col style=text-align:left></th></tr>';for(l=0;l<4;l++)0<f[l][1]&&(m+="<tr style="+(++g%2==0?"background-color:#DDD":"")+"><td><divclass=m2></div><div>&nbsp;"+f[l][0]+"<div></div></div></td><td><div style=float:right>"+f[l][1]+" </div><div></div></td></tr>");m+="</tbody></table>"}""==m&&(m="<i>Nenhum dispositivo neste grupo de dispositivos.</i>"),QH("p21info",m),QS("meshPowerChartDiv").display=s?"inline-block":"none",QS("meshOsChartDiv").display=2==currentMesh.mtype&&a?"inline-block":"none",QS("meshConnChartDiv").display=r?"inline-block":"none"}}var sortorder,filetreelocation=[];function updateFiles(){if(QV("MainMenuMyFiles",0==(8&features)),0==(8&features)){for(var e,t="",o="",n='<a href=# style=cursor:pointer onclick="return p5folderup(0)">Raiz</a>',i="Root",a=filetree,s=1,r=[],l=filetreelinkpath,d=[],c=document.getElementsByName("fc"),u=0;u<c.length;u++)c[u].checked&&d.push(c[u].value);for(var u in filetreelinkpath="",filetreelocation){if(null==a.f||null==a.f[filetreelocation[u]])break;if(r.push(filetreelocation[u]),i+=" / "+filetreelocation[u],1==s){var p=filetreelocation[u].split("/");e=(""+window.location).split("?")[0]+p[0]+"files/"+p[2],filetreelinkpath+=filetreelocation[u]}else""!=filetreelinkpath&&(filetreelinkpath+="/"+filetreelocation[u],2<s&&(e+="/"+filetreelocation[u]));n+=' / <a href=# style=cursor:pointer onclick="return p5folderup('+s+')">'+(null!=(a=a.f[filetreelocation[u]]).n?a.n:filetreelocation[u])+"</a>",s++}filetreelocation=r;var m=i.toLowerCase().startsWith("root / "+userinfo._id+" / public"),g=p5sort_files(a.f);for(var u in g){var v,h=g[u],f=h.n;v=70<(v=f).length?'<span title="'+EscapeHtml(f)+'">'+EscapeHtml(f.substring(0,70))+"...</span>":EscapeHtml(f),f=EscapeHtml(f);var x="";if(null!=h.d)x=printDateTime(new Date(h.d))+"&nbsp;";var k="";null!=h.s&&(k=getFileSizeStr(h.s));var b="";if(h.t<3||4==h.t){b='<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value="'+f+'">&nbsp;<span style=float:right title="">'+(1==h.t||4==h.t?p5getQuotabar(h):"")+"</span><span><div class=fileIcon"+h.t+' onclick=p5folderset("'+encodeURIComponentEx(h.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p5folderset("'+encodeURIComponentEx(h.nx)+"\")'>"+v+"</a></span></div>"}else{var y=v,w="";m&&(w='<img src="images/link2.png" style=cursor:pointer title="Display public link" onclick=\'return p5showPublicLink("'+e+"/"+encodeURIComponentEx(h.nx)+'?download=1")\' width=10 height=10 /> <img src="images/link4.png" title="Copiar link para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(e+"/"+encodeURIComponentEx(h.nx)+"?download=1")+'") width=10 height=10>'),0<h.s&&(y=w+' <a rel="noreferrer noopener" target="_blank" download href="downloadfile.ashx?link='+encodeURIComponentEx(filetreelinkpath+"/"+h.nx)+'">'+v+"</a>"),b='<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value="'+h.nx+'">&nbsp;<span class=fsize>'+x+"</span><span style=float:right>"+k+"</span><span><div class=fileIcon"+h.t+"></div>"+y+"</span></div>"}h.t<3?t+=b:o+=b}if(QH("p5rightOfButtons",p5getQuotabar(a)),QH("p5files",t+o),QH("p5currentpath",n),QE("p5FolderUp",0!=filetreelocation.length),QV("p5PublicShare",m),l==filetreelinkpath){c=document.getElementsByName("fc");for(u=0;u<c.length;u++)c[u].checked=0<=d.indexOf(c[u].value)}p5setActions()}}function getNiceSize(e){return e<=0?"O limite de armazenamento excede":e<2048?format("{0} bytes restantes",e):e<2097152?format("{0} kilobytes restantes",Math.round(e/1024)):e<2147483648?format("{0} megabytes restantes",Math.round(e/1024/1024)):format("{0} gigabytes restantes",Math.round(e/1024/1024/1024))}function getNiceSize2(e){return e<=0?"Nenhum":e<2048?format("{0} b",e):e<2097152?format("{0} Kb",Math.round(e/1024)):e<2147483648?format("{0} Mb",Math.round(e/1024/1024)):format("{0} Gb",Math.round(e/1024/1024/1024))}function p5getQuotabar(e){for(;1<e.t&&4!=e.t;)e=e.parent;if(1!=e.t&&4!=e.t||null==e.maxbytes)return"";var t=Math.floor(e.s/1024),o=e.maxbytes-e.s;return'<span title="'+(1<e.c?format("{0} k em {1} arquivos. {2} k no máximo",t,e.c,Math.floor(e.maxbytes/1024/1024)):format("{0} k em 1 arquivo. {1} k no máximo",t,Math.floor(e.maxbytes/1024/1024)))+'">'+getNiceSize(o)+" <progress style=height:10px;width:100px value="+e.s+" max="+e.maxbytes+" /></span>"}function p5showPublicLink(e){return setDialogMode(2,"Link Público",1,null,'<input type=text style=width:350px value="'+e+'" readonly /> <img src="images/link4.png" title="Copiar link para a área de transferência" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponentEx(e)+'") width=10 height=10>'),!1}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=[],o=Q("p5sortdropdown").value;for(var n in e)e[n].nx=n,null==e[n].n&&(e[n].n=n),e[n].ln=e[n].n.toLowerCase(),t.push(e[n]);return sortorder=1,3<o&&(sortorder=-1,o-=3),1==o?t.sort(p5sort_filename):2==o?t.sort(p5sort_bysize):3==o&&t.sort(p5sort_timestamp),t}function p5setActions(){var e=getFileSelCount(),t=getFileCount(),o=getFileSelCount(!1);QE("p5DeleteFileButton",0<e&&0<filetreelocation.length),QE("p5NewFolderButton",0<filetreelocation.length),QE("p5UploadButton",0<filetreelocation.length),QE("p5RenameFileButton",1==e&&0<filetreelocation.length),QE("p5SelectAllButton",0<t),Q("p5SelectAllButton").value=0<e?"Selecione nenhum":"Selecionar tudo",QE("p5CutButton",0<o&&e==o),QE("p5CopyButton",0<o&&e==o),QE("p5PasteButton",null!=p5clipboard&&0<p5clipboard.length&&0<filetreelocation.length)}function getFileSelCount(e){for(var t=0,o=document.getElementsByName("fc"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function getFileCount(){return document.getElementsByName("fc").length}function p5selectallfile(){for(var e=0==getFileSelCount(),t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked=e;p5setActions()}function setupBackPointers(e){if(null!=e.f){var t=0,o=0;for(var n in e.f)setupBackPointers(e.f[n]),(e.f[n].parent=e).f[n].s&&(t+=e.f[n].s),e.f[n].c&&(o+=e.f[n].c),3==e.f[n].t&&o++;e.s=t,e.c=o}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,"Nova pasta",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=0<getFileSelDirCount()?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Exclusão recursiva</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Deletar",3,p5deletefileEx,1<e?format("Excluir {0} itens selecionados?",e)+t:"Excluir item selecionado?"+t)}function p5deletefileEx(){for(var e=[],t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:e,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){for(var e,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&(e=t[o].value);setDialogMode(2,"Renomear",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 t=/^[^\\/:\*\?"<>\|]+$/,o=/^\./,n=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(e){return t.test(e)&&!o.test(e)&&!n.test(e)&&"."!=e[0]}}();function p5uploadFile(){setDialogMode(2,"Subir arquivo",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="'+encodeURIComponentEx(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="p5updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value='+authCookie+" /><input type=submit id=p5loginSubmit style=display:none /><span id=p5confirmOverwriteSpan style=display:none><br /><label><input type=checkbox id=p5confirmOverwrite onchange=\"p5updateUploadDialogOk('p5uploadinput')\" />Confirmar substituição?</label></span></form>"),p5updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function p5updateUploadDialogOk(){var e=Q("p5uploadinput").files,t=[];for(var o in e)null!=e[o].size&&0!=e[o].size&&t.push(e[o]);var n=filetree,i=[],a=0;for(var o in filetreelocation)null!=n.f&&null!=n.f[filetreelocation[o]]&&(n=n.f[filetreelocation[o]]);if(QE("idx_dlgOkButton",0<e.length),0<e.length){if(null!=n.f){for(var o in n.f)i.push(o);for(o=0;o<e.length;o++)0<=i.indexOf(e[o].name)&&a++}QV("p5confirmOverwriteSpan",0<a),0<a?QE("idx_dlgOkButton",Q("p5confirmOverwrite").checked):(Q("p5confirmOverwrite").checked=!1,QE("idx_dlgOkButton",!0))}}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(e){var t=document.getElementsByName("fc");p5clipboard=[],p5clipboardCut=e,p5clipboardFolder=Clone(filetreelocation);for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&(console.log("yy",t[o].value),p5clipboard.push(t[o].value));p5updateClipview()}function p5pasteFile(){var e="";null!=p5clipboard&&0<p5clipboard.length&&(e=format("Confirme {0} da {1} entrada {2} para este local?",0==p5clipboardCut?"copy":"move",p5clipboard.length,1<p5clipboard.length?"s":"")),setDialogMode(2,"Colar",3,p5pasteFileEx,e)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:0==p5clipboardCut?"copy":"move",scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard}),p5folderup(999),1==p5clipboardCut&&(p5clipboardFolder=p5clipboard=null,p5clipboardCut=0,p5updateClipview())}function p5updateClipview(){var e="";null!=p5clipboard&&0<p5clipboard.length&&(e=format("Mantendo {0} entrada {1} para {2}",p5clipboard.length,1<p5clipboard.length?"s":"",0==p5clipboardCut?"Copiar":"Mover")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Limpo</a>.'),QH("p5bottomstatus",e),p5setActions()}function p5clearClip(){return p5clipboardFolder=p5clipboard=null,p5clipboardCut=0,p5updateClipview(),!1}function p5fileDragDrop(e){if(!xxdialogMode&&(haltEvent(e),QV("bigfail",!1),QV("bigok",!1),null!=e.dataTransfer)){var t=[];for(var o in e.dataTransfer.files)null!=e.dataTransfer.files[o].size&&0!=e.dataTransfer.files[o].size&&t.push(e.dataTransfer.files[o]);if(0!=t.length){var n=filetree,i=[],a=0;for(var o in filetreelocation)null!=n.f&&null!=n.f[filetreelocation[o]]&&(n=n.f[filetreelocation[o]]);if(null!=n.f){for(var o in n.f)i.push(o);for(o=0;o<e.dataTransfer.files.length;o++)0<=i.indexOf(e.dataTransfer.files[o].name)&&a++}0==a?p5PerformUpload(1,t):setDialogMode(2,"Subir arquivo",3,p5PerformUpload,format(1==a?"O upload substituirá 1 arquivo. Continuar?":"O upload substituirá {0} arquivos. Continuar?",a),t)}}}function p5PerformUpload(e,t){var o=0;p5uploadFile();try{Q("p5uploadinput").files=t}catch(e){o=1}if(0==o&&p5uploadFileEx(),setDialogMode(0),1==o){if(0==filetreelocation.length)return;for(var n=[],i=[],a=[],s=[],r=t.length,l=0,d=0;d<t.length;d++)l+=t[d].size;if(13e5<l)return void p5uploadFile();for(d=0;d<t.length;d++){var c=new FileReader,u=t[d];n.push(u.name),i.push(u.size),a.push(u.type),c.onload=function(e){s.push(e.target.result),0==--r&&(Q("p5fileDragName").value=n.join("*"),Q("p5fileDragSize").value=i.join("*"),Q("p5fileDragType").value=a.join("*"),Q("p5fileDragData").value=s.join("*"),Q("p5fileDragLink").value=encodeURIComponentEx(filetreelinkpath),Q("p5fileDragAuthCookie").value=authCookie,Q("p5loginSubmit2").click())},c.readAsDataURL(u)}}}var p5dragtimer=null;function p5fileDragOver(e){if(!xxdialogMode){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){xxdialogMode||(haltEvent(e),"p5filetable"!=e.target.id?(QV("bigfail",!1),QV("bigok",!1)):p5dragtimer=setTimeout(function(){QV("bigfail",!1),QV("bigok",!1),p5dragtimer=null},10))}function eventMouseHover(e,t){e.children[1].classList.remove("g1s"),e.children[2].classList.remove("style10s"),e.children[3].classList.remove("g2s"),1==t&&(e.children[1].classList.add("g1s"),e.children[2].classList.add("style10s"),e.children[3].classList.add("g2s"))}function eventsUpdate(){var e="",t=null;for(var o in events){var n=events[o],i=new Date(n.time);if(n.msg){null==n.h&&(n.h=Math.random()),printDate(i)!=t&&(null!=t&&(e+="</table>"),e+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+(t=printDate(i))+"</td></tr>");var a="si3";"ugrp"==n.etype&&(a="m4"),"user"==n.etype&&(a="m2"),"server"==n.etype&&(a="si3");var s=EscapeHtml(n.msg).split("(R)").join("&reg;");if(n.nodeid){var r=getNodeFromId(n.nodeid);null!=r&&(a="si"+r.icon,s="<a href=# onclick='gotoDevice(\""+n.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(r.name)+"</a> &rarr; "+s)}n.username&&(s=2&userinfo.siteadmin&&n.userid?"<a href=# onclick='gotoUser(\""+encodeURIComponentEx(n.userid)+"\");haltEvent(event);'>"+EscapeHtml(n.username)+"</a> &rarr; "+s:EscapeHtml(n.username)+" &rarr; "+s),"relay"!=n.etype&&"relaylog"!=n.action||(a="relayIcon16"),e+="<tr onclick=showEventDetails("+n.h+",2)  onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+a+"></div></td><td class=g1>&nbsp;</td><td class=style10>"+printTime(i)+" - "+s+"</td><td class=g2>&nbsp;</td></tr><tr style=height:2px></tr>"}}null!=t&&(e+="</table>"),""==e&&(e="<br><i>Nenhum evento encontrado</i><br><br>"),QH("p3events",e)}function refreshEvents(){meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)})}function p3showDownloadEventsDialog(e){if(!xxdialogMode){var t="Faça o download da lista de eventos com um dos formatos de arquivo abaixo.<br /><br />";t+=addHtmlValue("Formato CSV",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogCSV('+e+')">eventslist.csv</a>'),setDialogMode(2,"Exportação da lista de eventos",1,null,t+=addHtmlValue("Formato JSON",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogJSON('+e+')">eventslist.json</a>'),e)}}function p3downloadEventsDialogCSV(e){var t,o;for(var n in 1==e&&(o=currentDeviceEvents),2==e&&(o=events),3==e&&(o=currentUserEvents),t="utc, hora, tipo, ação, usuário, dispositivo, mensagem\r\n",o){var i="";if(o[n].nodeid){var a=getNodeFromId(o[n].nodeid);a&&a.name&&(i=a.name)}t+='"'+o[n].time+'","'+printDateTime(new Date(o[n].time))+'","'+o[n].etype+'","'+(null!=o[n].action?o[n].action:"")+'","'+(null!=o[n].username?o[n].username:"")+'","'+EscapeHtml(i)+'","'+(null!=o[n].msg?o[n].msg:"").split(",").join(" -")+'"\r\n'}return saveAs(new Blob([t],{type:"application/octet-stream"}),"eventslist.csv"),!1}function p3downloadEventsDialogJSON(e){var t,o=[];for(var n in 1==e&&(t=currentDeviceEvents),2==e&&(t=events),3==e&&(t=currentUserEvents),t)o.push(events[n]);return saveAs(new Blob([JSON.stringify(o,null,2)],{type:"application/octet-stream"}),"eventslist.json"),!1}function updateUsers(){if(QV("UserNewAccountButton",0==(4&features)&&0==serverinfo.domainauth),null!=users&&0==(4&features)){var e=[],t=100,o=0;for(var n in users)e.push(users[n]);e.sort(nameSort);var i=Q("UserSearchInput").value.toLowerCase(),a=i;i.startsWith("email:")?(i=null,a=a.substring(6)):i.startsWith("name:")?(a=null,i=i.substring(5)):i.startsWith("e:")?(i=null,a=a.substring(2)):i.startsWith("n:")&&(a=null,i=i.substring(2));var s="<table class=p3usersTable cellpadding=0 cellspacing=0>",r=!0;s+="<th>Nome<th style=width:80px>Grupos de dispositivos<th style=width:120px>"+nobreak("Último acesso")+"<th style=width:120px>Permissões";var l=[],d=document.getElementsByClassName("UserCheckbox");for(n=0;n<d.length;n++)d[n].checked&&l.push(d[n].value);for(var n in e){var c=e[n],u=null;null!=wssessions&&(u=wssessions[c._id]),null!=u&&(null!=i&&(""==i||0<=c.name.toLowerCase().indexOf(i))||null!=a&&null!=c.email&&0<=c.email.toLowerCase().indexOf(a))&&(0<t?(r&&(s+="<tr><td class=userTableHeader colspan=4>Usuários Online",r=!1),s+=addUserHtml(c,u),t--):o++)}for(var n in r=!0,e){c=e[n],u=null;null!=wssessions&&(u=wssessions[c._id]),null==u&&(null!=i&&(""==i||0<=c.name.toLowerCase().indexOf(i))||null!=a&&null!=c.email&&0<=c.email.toLowerCase().indexOf(a))&&(0<t?(r&&(s+="<tr><td class=userTableHeader colspan=4>Usuários offline",r=!1),s+=addUserHtml(c,u),t--):o++)}s+="</table>",1==o?s+="<br />Mais 1 usuário não mostrado, use a caixa de pesquisa para procurar usuários...<br />":1<o&&(s+="<br />"+format("{0} mais usuários não exibidos, use a caixa de pesquisa para procurar usuários ...",o)+"<br />"),100==t&&(s+="<br />Usuários não encontrados.<br />"),QH("p3users",s),d=document.getElementsByClassName("UserCheckbox");var p=encodeURIComponentEx(userinfo._id);for(n=0;n<d.length;n++)d[n].checked=0<=l.indexOf(d[n].value)&&d[n].value!=p;p3updateInfo(),null!=currentUser&&30==xxcurrentView&&gotoUser(encodeURIComponentEx(currentUser._id),!0)}else QH("p3users","")}function addUserHtml(e,t){var o="",n=" gray",i="",a=e._id!=userinfo._id,s="",r="";null!=t?(n="",a&&(i='<span style=float:right;margin-top:1px;margin-right:4px title=Chat><a href=# onclick=userChat(event,"'+encodeURIComponentEx(e._id)+'","'+encodeURIComponentEx(e.name)+"\")><img src='images/icon-chat.png' height=16 width=16 style=padding-top:2px /></a></span>",i+="<span style=float:right;margin-top:1px;margin-left:4px;margin-right:4px title=Notify><a href=# onclick='return showUserAlertDialog(event,\""+encodeURIComponentEx(e._id)+"\")'><img src='images/icon-notify.png' height=16 width=16 style=padding-top:2px /></a></span>"),s+=nobreak(1==t?"1 sessão":format("{0} sessões",t))):e.login&&(s+='<span title="'+format("Último login: {0}",printDateTime(new Date(1e3*e.login)))+'">'+printDate(new Date(1e3*e.login))+"</span>"),a&&(r+="<a href=# style=cursor:pointer onclick='return showUserAdminDialog(event,\""+encodeURIComponentEx(e._id)+"\")'>"),null!=e.siteadmin&&0!=(32&e.siteadmin)&&4294967295!=e.siteadmin&&(r+="Bloqueado,&nbsp;"),r+="<span title='Permissões do servidor'>";var l=4294967071&e.siteadmin;null==e.siteadmin||0==l?r+="Do utilizador":8==l?r+="Usuário + Arquivos":4294967295==e.siteadmin?r+="Administrador":r+=0!=(2&l)?"Gerenciador":"Parcial",null!=e.siteadmin&&4294967295!=e.siteadmin&&0!=(192&e.siteadmin)&&(r+="*"),r+="</span>",a&&(r+="</a>");var d=0;if(e.links)for(var c in e.links)c.startsWith("mesh/")&&d++;var u=EscapeHtml(e.name),p="";if(1==serverinfo.emailcheck&&(p=1!=e.emailVerified?' <b style=color:red title="Email is not verified">&#x2717;</b>':' <b style=color:green title="O email foi verificado">&#x2713</b>'),null!=e.email&&(0==(2097152&features)||e.email.toLowerCase()!=e.name.toLowerCase()?u+=', <a href="mailto:'+e.email+"\" '>"+e.email+"</a>"+p:u+=' <a href="mailto:'+e.email+'" \'><img src="images/mail12.png" height=9 width=12 title="Send email to user" style="margin-top:2px" /></a>'+p),null!=serverinfo.crossDomain){var m=e._id.split("/")[1];""!=m&&(u+=", <span style=color:#26F>"+m+"</span>")}return(0<e.otpsecret||0<e.otphkeys||1==e.otpekey&&8388608&features||null!=e.phone&&67108864&features)&&(u+=' <img src="images/key12.png" height=12 width=11 title="Autenticação de segundo fator ativada" style="margin-top:2px" />'),null!=e.phone&&(u+=' <img src="images/phone12.png" height=12 width=7 title="Verified phone number" style="margin-top:2px" />'),null!=e.siteadmin&&0!=(32&e.siteadmin)&&4294967295!=e.siteadmin&&(u+=' <img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" />'),o+="<tr tabindex=0 onmouseover=userMouseHover(this,1) onmouseout=userMouseHover(this,0) onkeypress=\"if (event.key=='Enter') gotoUser('"+encodeURIComponentEx(e._id)+"')\"><td>",o+="<div class=bar>",o+="<div class=baricon><input class=UserCheckbox value="+encodeURIComponentEx(e._id)+" onclick=p3updateInfo() type=checkbox"+(e._id==userinfo._id?" disabled":"")+'></div><div style=cursor:pointer onclick=gotoUser("'+encodeURIComponentEx(e._id)+'",false,event)>',o+='<div class=baricon><div class="m2'+n+'"></div></div>',o+="<div class=g1></div><div class=g2></div><div>",o+="<div><span>"+u+"</span>"+i+"</div></div><td style=text-align:center>"+d+"<td style=text-align:center>"+s+"<td style=text-align:center>"+r}function p3updateInfo(){for(var e=document.getElementsByClassName("UserCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;QE("UsersGroupActionButton",0<t),Q("UsersSelectAllButton").value=0<t?"Selecione nenhum":"Selecionar tudo"}function p3usersSelectallButtonFunction(){for(var e=encodeURIComponentEx(userinfo._id),t=document.getElementsByClassName("UserCheckbox"),o=0,n=0;n<t.length;n++)!0===t[n].checked&&o++;for(n=0;n<t.length;n++)t[n].checked=0==o&&t[n].value!=e;p3updateInfo()}function p3usersGroupActionFunction(){for(var e=document.getElementsByClassName("UserCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;if(0!=t){var n="Select an operation to perform on all selected users.<br /><br />";setDialogMode(2,"Ações do grupo",3,p3usersGroupActionFunctionEx,n+=addHtmlValue("Operação","<select style=width:240px id=d3groupop><option value=1>Bloquear conta</option><option value=2>Unlock account</option><option value=3>Deletar conta</option></select>"))}}function p3usersGroupActionFunctionEx(){for(var e=document.getElementsByClassName("UserCheckbox"),t=[],o=0;o<e.length;o++)!0===e[o].checked&&t.push(decodeURIComponent(e[o].value));var n=Q("d3groupop").value;if(1==n)for(var o in t){0==(32&(a=null==(i=users[t[o]]).siteadmin?0:i.siteadmin))&&(a+=32,meshserver.send({action:"edituser",id:i._id,siteadmin:a}))}else if(2==n)for(var o in t){var i,a;0!=(32&(a=null==(i=users[t[o]]).siteadmin?0:i.siteadmin))&&(a-=32,meshserver.send({action:"edituser",id:i._id,siteadmin:a}))}else if(3==n){"<label><input id=d3check type=checkbox onchange=p3usersGroupActionFunctionDelCheck() />Confirme</label>",setDialogMode(2,"Delete Accounts",3,p3groupActionFunctionDelExec,"Confirm delete selected account(s)?<br /><br /><label><input id=d3check type=checkbox onchange=p3usersGroupActionFunctionDelCheck() />Confirme</label>"),QE("idx_dlgOkButton",!1)}}function p3usersGroupActionFunctionDelCheck(){QE("idx_dlgOkButton",Q("d3check").checked)}function p3groupActionFunctionDelExec(e){for(var t=document.getElementsByClassName("UserCheckbox"),o=[],n=0;n<t.length;n++)!0===t[n].checked&&o.push(decodeURIComponent(t[n].value));for(var n in o){var i=users[o[n]];meshserver.send({action:"deleteuser",userid:i._id,username:i.name})}}function userMouseHover(e,t){var o=e.children[0].children[0].children[1];o.children[1].classList.remove("g1s"),o.children[2].classList.remove("g2s"),e.children[0].children[0].classList.remove("sbar"),1==t&&(o.children[1].classList.add("g1s"),o.children[2].classList.add("g2s"),e.children[0].children[0].classList.add("sbar"))}function userMouseHover2(e,t){var o=e.children[0].children[0];o.children[2].classList.remove("g1s"),o.children[3].classList.remove("g2s"),e.children[0].children[0].classList.remove("sbar"),1==t&&(o.children[2].classList.add("g1s"),o.children[3].classList.add("g2s"),e.children[0].children[0].classList.add("sbar"))}function userChat(e,t,o){haltEvent(e);var n="/messenger?id=meshmessenger/"+t+"/"+encodeURIComponentEx(userinfo._id)+"&title="+o;return null!=authCookie&&""!=authCookie&&(n+="&auth="+authCookie),window.open(n,"meshmessenger:"+t),meshserver.send({action:"meshmessenger",userid:decodeURIComponent(t)}),!1}function showSendSMS(e){xxdialogMode||(setDialogMode(2,"Send SMS",3,showSendSMSEx,"<textarea id=d2smsText maxlength=160 style=background-color:#fcf3cf;width:100%;height:100px;resize:none onKeyUp=showSendSMSValidate()></textarea><span style=font-size:10px><span>",e),Q("d2smsText").focus(),showSendSMSValidate())}function showSendSMSValidate(){QE("idx_dlgOkButton",0<Q("d2smsText").value.length)}function showSendSMSEx(e,t){0<Q("d2smsText").value.length&&meshserver.send({action:"smsuser",userid:decodeURIComponent(t),msg:Q("d2smsText").value})}function showSendEmail(e){if(!xxdialogMode){'<textarea id=d2emailText maxlength=10000 style="background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:auto" onKeyUp=showSendEmailValidate()></textarea>',setDialogMode(2,"Send Email",3,showSendEmailEx,'<input id=d2emailSubject style=background-color:#fcf3cf;width:100% placeholder="Subject"></input><textarea id=d2emailText maxlength=10000 style="background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:auto" onKeyUp=showSendEmailValidate()></textarea>',e),Q("d2emailSubject").focus(),showSendEmailValidate()}}function showSendEmailValidate(){QE("idx_dlgOkButton",0<Q("d2emailSubject").value.length&&0<Q("d2emailText").value.length)}function showSendEmailEx(e,t){0<Q("d2emailText").value.length&&meshserver.send({action:"emailuser",userid:decodeURIComponent(t),subject:Q("d2emailSubject").value,msg:Q("d2emailText").value})}function showUserAlertDialog(e,t){if(!xxdialogMode)return haltEvent(e),setDialogMode(2,format("Notificar {0}",EscapeHtml(users[decodeURIComponent(t)].name)),3,showUserAlertDialogEx,'Envie uma notificação de texto para este usuário.<textarea id=d2notifyText maxlength=2048 style="width:100%;height:184px;resize:none"></textarea>',t),Q("d2notifyText").focus(),!1}function showUserAlertDialogEx(e,t){meshserver.send({action:"notifyuser",userid:decodeURIComponent(t),msg:Q("d2notifyText").value})}function p4batchAccountCreate(){if(!xxdialogMode){setDialogMode(2,"Importação de conta de usuário",3,p4batchAccountCreateEx,'Crie várias contas ao mesmo tempo importando um arquivo JSON com o seguinte formato:<br /><pre>[\r\n {"user":"x1","pass":"x","email":"x1@x"},\r\n {"user":"x2","pass":"x","resetNextLogin":true}\r\n]</pre><input style=width:370px type=file id=d4importFile accept=".json" onchange=p4batchAccountCreateValidate() />'),QE("idx_dlgOkButton",!1)}}function p4batchAccountCreateValidate(){QE("idx_dlgOkButton",null!=Q("d4importFile").value)}function p4batchAccountCreateEx(){var e=new FileReader;e.onload=function(e){var t=null;try{t=JSON.parse(e.target.result)}catch(e){return void setDialogMode(2,"Importação de conta de usuário",1,null,format("Arquivo JSON inválido: {0}.",e))}if(null!=t&&Array.isArray(t)){var o=!0;for(var n in t)("string"!=typeof t[n].user||t[n].user.length<1||64<t[n].user.length)&&(o=!1),("string"!=typeof t[n].pass||t[n].pass.length<1||256<t[n].pass.length)&&(o=!1),0==checkPasswordRequirements(t[n].pass,passRequirements)&&(o=!1),null!=t[n].email&&("string"!=typeof t[n].email||t[n].email.length<1||128<t[n].email.length)&&(o=!1);0==o?setDialogMode(2,"Importação de conta de usuário",1,null,"Formato de arquivo JSON inválido."):meshserver.send({action:"adduserbatch",users:t})}else setDialogMode(2,"Importação de conta de usuário",1,null,"Formato de arquivo JSON inválido.")},e.readAsText(Q("d4importFile").files[0])}function p4downloadUserInfo(){if(!xxdialogMode){var e="Baixe a lista de usuários com um dos formatos de arquivo abaixo.<br /><br />";e+=addHtmlValue("Formato CSV","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoCSV()'>Lista de usuários.csv</a>"),setDialogMode(2,"Exportação da lista de usuários",1,null,e+=addHtmlValue("Formato JSON","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoJSON()'>Lista de usuários.json</a>"))}}function p4downloadUserInfoCSV(){var e="id, nome, email, criação, último login, grupos, fatores de autenticação\r\n";for(var t in users){var o=!1,n=[];(0<users[t].otpsecret||0<users[t].otphkeys)&&(o=!0,0<users[t].otpsecret&&n.push("AuthApp"),0<users[t].otphkeys&&n.push("SecurityKey"),0<users[t].otpkeys&&n.push("BackupCodes")),e+='"'+users[t]._id+'","'+users[t].name+'","'+(users[t].email?users[t].email:"")+'","'+(users[t].creation?new Date(1e3*users[t].creation):"")+'","'+(users[t].login?new Date(1e3*users[t].login):"")+'","'+(users[t].groups?users[t].groups.join(","):"")+'","'+(o?n.join(","):"")+'"\r\n'}return saveAs(new Blob([e],{type:"application/octet-stream"}),"Lista de usuários.csv"),!1}function p4downloadUserInfoJSON(){var e=[];for(var t in users)e.push(users[t]);return saveAs(new Blob([JSON.stringify(e,null,2)],{type:"application/octet-stream"}),"Lista de usuários.json"),!1}function showUserBroadcastDialog(e){if(!xxdialogMode){setDialogMode(2,"Mensagem de transmissão",3,showUserBroadcastDialogEx,'Transmita uma mensagem para todos os usuários conectados.<textarea id=broadcastMessage value="" maxlength="256"/></textarea>',e?decodeURIComponent(e):null),Q("broadcastMessage").focus()}}function showUserBroadcastDialogEx(e,t){meshserver.send({action:"userbroadcast",msg:Q("broadcastMessage").value,target:t})}function showCreateNewAccountDialog(){if(!xxdialogMode){var e="";if(serverinfo.crossDomain){var t="<select style=width:240px id=p4domain>";for(var o in serverinfo.crossDomain)t+="<option value="+o+">"+(""==serverinfo.crossDomain[o]?"Default":EscapeHtml(serverinfo.crossDomain[o]))+"</option>";e+=addHtmlValue("Domain",t+="</select>")}if(0==(2097152&features)&&(e+=addHtmlValue("<span id=p4hname>Nome de usuário</span>","<input id=p4name maxlength=64 autocomplete=username onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />")),e+=addHtmlValue("<span id=p4hemail>Email</span>",'<input id=p4email maxlength=256 autocomplete="email" inputmode="email" onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />'),e+=addHtmlValue("<span id=p4hp1>Senha</span>",'<input id=p4pass1 type=password maxlength=256 autocomplete="new-password" onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />'),e+=addHtmlValue("<span id=p4hp2>Senha</span>",'<input id=p4pass2 type=password maxlength=256 autocomplete="new-password" onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />'),e+="<div><label><input id=p4randomPassword onchange=showCreateNewAccountDialogValidate() type=checkbox />Randomize a senha.</label></div>",e+="<div><label><input id=p4removeEvents onchange=showCreateNewAccountDialogValidate() type=checkbox />Remova todos os eventos anteriores para este ID do usuário.</label></div>",e+="<div><label><input id=p4resetNextLogin onchange=showCreateNewAccountDialogValidate() type=checkbox />Forçar redefinição de senha no próximo login.</label></div>",serverinfo.emailcheck&&(e+="<div><label><input id=p4verifiedEmail onchange=showCreateNewAccountDialogValidate() type=checkbox />O email foi verificado.</label></div>",e+="<div><label><input id=p4invitationEmail type=checkbox title=Email verified and forced password reset required. />Enviar email de convite.</label></div>"),passRequirements){var n=[],i=0;for(var o in passRequirements)"reset"!=o&&"hint"!=o&&(n.push(o+":"+passRequirements[o]),i++);0<i&&(e+="<div style=font-size:x-small;padding:6px>"+format("Requisitos: {0}.",n.join(", "))+"</div>")}setDialogMode(2,"Criar conta",3,showCreateNewAccountDialogEx,e),showCreateNewAccountDialogValidate(),0==(2097152&features)?Q("p4name").focus():Q("p4email").focus()}}function showCreateNewAccountDialogValidate(){var e=validateEmail(Q("p4email").value),t=!0,o=0<Q("p4pass1").value.length&&Q("p4pass1").value==Q("p4pass2").value&&checkPasswordRequirements(Q("p4pass1").value,passRequirements);0==(2097152&features)&&(t=!Q("p4name")||0<Q("p4name").value.length&&-1==Q("p4name").value.indexOf(" "),QS("p4hname").color=t?"black":"#7b241c"),QS("p4hemail").color=e?"black":"#7b241c",serverinfo.emailcheck&&(QE("p4verifiedEmail",e),QE("p4invitationEmail",e&&Q("p4resetNextLogin").checked&&Q("p4verifiedEmail").checked),0==e&&(Q("p4verifiedEmail").checked=!1),0!=Q("p4resetNextLogin").checked&&0!=Q("p4verifiedEmail").checked||(Q("p4invitationEmail").checked=!1)),QE("p4pass1",!Q("p4randomPassword").checked),QE("p4pass2",!Q("p4randomPassword").checked),QS("p4hp1").color=o||Q("p4randomPassword").checked?"black":"#7b241c",QS("p4hp2").color=o||Q("p4randomPassword").checked?"black":"#7b241c";var n=t&e;0==Q("p4randomPassword").checked&&(n&=o),QE("idx_dlgOkButton",n)}function showCreateNewAccountDialogEx(){var e={action:"adduser",username:0==(2097152&features)?Q("p4name").value:Q("p4email").value,email:Q("p4email").value,pass:Q("p4pass1").value,resetNextLogin:Q("p4resetNextLogin").checked,randomPassword:Q("p4randomPassword").checked,removeEvents:Q("p4removeEvents").checked};serverinfo.emailcheck&&(e.emailVerified=Q("p4verifiedEmail").checked,e.emailInvitation=Q("p4invitationEmail").checked),serverinfo.crossDomain&&(e.domain=serverinfo.crossDomain[parseInt(Q("p4domain").value)]),meshserver.send(e)}function showUserGroupDialog(e,t){if(!xxdialogMode){haltEvent(e),t=decodeURIComponent(t);var o=users[t.toLowerCase()],n="";null!=o.groups&&(n=o.groups.join(", "));var i="Insira uma lista separada por vírgulas de nomes de regiões administrativas.<br /><br />";return setDialogMode(2,"Domínios Administrativos",3,showUserGroupDialogEx,i+=addHtmlValue("Realms",'<input id=dp4usergroups style=width:230px value="'+n+'" placeholder="Nome1, Nome2, Nome3" maxlength=256 onchange=p4validateUserGroups() onkeyup=p4validateUserGroups() />'),o),focusTextBox("dp4usergroups"),p4validateUserGroups(),!1}}function p4validateUserGroups(){var e=Q("dp4usergroups").value,t=0,o=e.indexOf('"')+e.indexOf("/")+e.indexOf(">")+e.indexOf("<")+e.indexOf("'"),n=e.split(",");for(var i in n)0==n[i].trim().length&&t++;QE("idx_dlgOkButton",""==e||-5==o&&t<1)}function showUserGroupDialogEx(e,t){var o=Q("dp4usergroups").value.split(","),n=[];for(var i in o){var a=o[i].trim();0<a.length&&n.push(a)}meshserver.send({action:"edituser",id:t._id,groups:n})}function showUserAdminDialog(e,t){if(!xxdialogMode){haltEvent(e),t=decodeURIComponent(t);var o=users[t.toLowerCase()];if(null!=o){var n=userinfo._id==o._id;return"<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fileaccess>Arquivos do servidor</label>, <input type=number onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>k max, blank for default<br><hr/>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fulladmin>Administrador completo</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverbackup>Backup do servidor</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverrestore>Restauração do servidor</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverupdate>Atualizações do Servidor</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusers>Gerenciar Usuários</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusergroups>Gerenciar grupos de usuários</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_managerecordings>Manage Recordings</label><br>","<hr/></div><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_lockedaccount>Bloquear conta</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nonewgroups>Não há novos grupos de dispositivos</label><br>","<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nomeshcmd>Sem ferramentas (MeshCmd / Roteador)</label><br>","</div>",setDialogMode(2,"Permissões do servidor",2+(n?0:1),showUserAdminDialogEx,"<div><div id=d2AdminPermissions><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fileaccess>Arquivos do servidor</label>, <input type=number onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>k max, blank for default<br><hr/><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fulladmin>Administrador completo</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverbackup>Backup do servidor</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverrestore>Restauração do servidor</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverupdate>Atualizações do Servidor</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusers>Gerenciar Usuários</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusergroups>Gerenciar grupos de usuários</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_managerecordings>Manage Recordings</label><br><hr/></div><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_lockedaccount>Bloquear conta</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nonewgroups>Não há novos grupos de dispositivos</label><br><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nomeshcmd>Sem ferramentas (MeshCmd / Roteador)</label><br></div>",o),o.siteadmin&&0!=o.siteadmin&&(Q("ua_fulladmin").checked=4294967295==o.siteadmin,Q("ua_serverbackup").checked=4294967295!=o.siteadmin&&0!=(1&o.siteadmin),Q("ua_manageusers").checked=4294967295!=o.siteadmin&&0!=(2&o.siteadmin),Q("ua_serverrestore").checked=4294967295!=o.siteadmin&&0!=(4&o.siteadmin),Q("ua_fileaccess").checked=4294967295!=o.siteadmin&&0!=(8&o.siteadmin),Q("ua_serverupdate").checked=4294967295!=o.siteadmin&&0!=(16&o.siteadmin),Q("ua_lockedaccount").checked=4294967295!=o.siteadmin&&0!=(32&o.siteadmin),Q("ua_nonewgroups").checked=4294967295!=o.siteadmin&&0!=(64&o.siteadmin),Q("ua_nomeshcmd").checked=4294967295!=o.siteadmin&&0!=(128&o.siteadmin),Q("ua_manageusergroups").checked=4294967295!=o.siteadmin&&0!=(256&o.siteadmin),Q("ua_managerecordings").checked=4294967295!=o.siteadmin&&0!=(512&o.siteadmin)),QE("ua_fulladmin",!n&&4294967295==userinfo.siteadmin),QE("ua_serverbackup",!n&&4294967295==userinfo.siteadmin),QE("ua_manageusers",!n&&4294967295==userinfo.siteadmin),QE("ua_manageusergroups",!n&&4294967295==userinfo.siteadmin),QE("ua_managerecordings",!n&&4294967295==userinfo.siteadmin),QE("ua_serverrestore",!n&&4294967295==userinfo.siteadmin),QE("ua_fileaccess",!n&&4294967295==userinfo.siteadmin),QE("ua_fileaccessquota",!n&&4294967295==userinfo.siteadmin),QE("ua_serverupdate",!n&&4294967295==userinfo.siteadmin),QV("d2AdminPermissions",4294967295==userinfo.siteadmin),QE("ua_lockedaccount",!n&&2&userinfo.siteadmin&&4294967295!=o.siteadmin&&userinfo._id!=o._id),QE("ua_nonewgroups",!n&&2&userinfo.siteadmin&&4294967295!=o.siteadmin&&userinfo._id!=o._id),QE("ua_nomeshcmd",!n&&2&userinfo.siteadmin&&4294967295!=o.siteadmin&&userinfo._id!=o._id),Q("ua_fileaccessquota").value=null!=o.quota?o.quota/1024:"",showUserAdminDialogValidate(),!1}}}function showUserAdminDialogValidate(){4294967295==userinfo.siteadmin&&(QE("ua_serverbackup",!Q("ua_fulladmin").checked),QE("ua_manageusers",!Q("ua_fulladmin").checked),QE("ua_serverrestore",!Q("ua_fulladmin").checked),QE("ua_fileaccess",!Q("ua_fulladmin").checked),QE("ua_serverupdate",!Q("ua_fulladmin").checked),QE("ua_lockedaccount",!Q("ua_fulladmin").checked),QE("ua_nonewgroups",!Q("ua_fulladmin").checked),QE("ua_nomeshcmd",!Q("ua_fulladmin").checked),QE("ua_manageusergroups",!Q("ua_fulladmin").checked&&Q("ua_manageusers").checked),QE("ua_fileaccessquota",Q("ua_fileaccess").checked&&!Q("ua_fulladmin").checked),QE("ua_managerecordings",!Q("ua_fulladmin").checked))}function showUserAdminDialogEx(e,t){var o=0,n=parseInt(Q("ua_fileaccessquota").value);1==Q("ua_fulladmin").checked?o=4294967295:(1==Q("ua_serverbackup").checked&&(o+=1),1==Q("ua_manageusers").checked&&(o+=2),1==Q("ua_serverrestore").checked&&(o+=4),1==Q("ua_fileaccess").checked&&(o+=8),1==Q("ua_serverupdate").checked&&(o+=16),1==Q("ua_lockedaccount").checked&&(o+=32),1==Q("ua_nonewgroups").checked&&(o+=64),1==Q("ua_nomeshcmd").checked&&(o+=128),1==Q("ua_manageusergroups").checked&&(o+=256),1==Q("ua_managerecordings").checked&&(o+=512));var i={action:"edituser",id:t._id,siteadmin:o};0==isNaN(n)&&(i.quota=1024*n),meshserver.send(i)}function onUserSearchInputChanged(){masterUpdate(16384)}function updateUserGroups(){var e=[],t="";if(usergroups)for(var o in usergroups)e.push(usergroups[o]);e.sort(nameSort);var n=[],i=document.getElementsByClassName("UserGroupCheckbox");for(o=0;o<i.length;o++)i[o].checked&&n.push(i[o].value);if(0==e.length)t+="<br />Nenhum grupo encontrado.<br />",QV("DuplicateUserGroupButton",!1);else{for(var o in t+="<table class=p3usersTable cellpadding=0 cellspacing=0>",t+="<th>Nome<th style=width:80px>Usuários<th style=width:80px>Grupos de dispositivos<th style=width:80px>Devices",e)t+=addUserGroupHtml(e[o]);t+="</table>",QV("DuplicateUserGroupButton",!0)}QH("p50groups",t),i=document.getElementsByClassName("UserGroupCheckbox");for(o=0;o<i.length;o++)i[o].checked=0<=n.indexOf(i[o].value);p50updateInfo(),null!=currentUserGroup&&51==xxcurrentView&&gotoUserGroup(encodeURIComponentEx(currentUserGroup._id),!0)}function addUserGroupHtml(e){var t=0,o=0,n=0;if(e.links)for(var i in e.links)i.startsWith("user/")&&t++,i.startsWith("mesh/")&&o++,i.startsWith("node/")&&n++;var a=EscapeHtml(e.name);if(null!=serverinfo.crossDomain){var s=e._id.split("/")[1];""!=s&&(a+=", <span style=color:#26F>"+EscapeHtml(s)+"</span>")}var r="<tr tabindex=0 onmouseover=userMouseHover2(this,1) onmouseout=userMouseHover2(this,0) onkeypress=\"if (event.key=='Enter') gotoUserGroup('"+encodeURIComponentEx(e._id)+"')\"><td style=cursor:pointer>";return r+="<div class=bar style=width:100%>",r+="<div class=baricon><input class=UserGroupCheckbox value="+encodeURIComponentEx(e._id)+" onclick=p50updateInfo() type=checkbox></div>",r+='<div class=baricon onclick=gotoUserGroup("'+encodeURIComponentEx(e._id)+'")><div class=m4></div></div>',r+='<div class=g1 onclick=gotoUserGroup("'+encodeURIComponentEx(e._id)+'")></div><div class=g2 onclick=gotoUserGroup("'+encodeURIComponentEx(e._id)+'")></div>',r+='<div onclick=gotoUserGroup("'+encodeURIComponentEx(e._id)+'")><span style=font-size:16px>'+a+"</span></div></div><td style=text-align:center>"+t+"<td style=text-align:center>"+o+"<td style=text-align:center>"+n}function p50updateInfo(){for(var e=document.getElementsByClassName("UserGroupCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;QE("UsersGroupsGroupActionButton",0<t),Q("UsersGroupsSelectAllButton").value=0<t?"Selecione nenhum":"Selecionar tudo"}function p50usersSelectallButtonFunction(){for(var e=encodeURIComponentEx(userinfo._id),t=document.getElementsByClassName("UserGroupCheckbox"),o=0,n=0;n<t.length;n++)!0===t[n].checked&&o++;for(n=0;n<t.length;n++)t[n].checked=0==o&&t[n].value!=e;p50updateInfo()}function p50usersGroupActionFunction(){for(var e=document.getElementsByClassName("UserGroupCheckbox"),t=0,o=0;o<e.length;o++)!0===e[o].checked&&t++;if(0!=t){var n="Select an operation to perform on all selected users.<br /><br />";setDialogMode(2,"Ações do grupo",3,p50usersGroupActionFunctionEx,n+=addHtmlValue("Operação","<select style=width:240px id=d50groupop><option value=1>Delete group</option></select>"))}}function p50usersGroupActionFunctionEx(){for(var e=document.getElementsByClassName("UserGroupCheckbox"),t=[],o=0;o<e.length;o++)!0===e[o].checked&&t.push(decodeURIComponent(e[o].value));if(1==Q("d50groupop").value){"<label><input id=d3check type=checkbox onchange=p50usersGroupActionFunctionDelCheck() />Confirme</label>",setDialogMode(2,"Delete User Groups",3,p50groupActionFunctionDelExec,"Confirm delete selected user groups(s)?<br /><br /><label><input id=d3check type=checkbox onchange=p50usersGroupActionFunctionDelCheck() />Confirme</label>"),QE("idx_dlgOkButton",!1)}}function p50usersGroupActionFunctionDelCheck(){QE("idx_dlgOkButton",Q("d3check").checked)}function p50groupActionFunctionDelExec(e){for(var t=document.getElementsByClassName("UserGroupCheckbox"),o=0;o<t.length;o++)!0===t[o].checked&&meshserver.send({action:"deleteusergroup",ugrpid:decodeURIComponent(t[o].value)})}function showCreateUserGroupDialog(e){if(!xxdialogMode){var t="",o="";if(2==e){if(usergroups)for(var n in usergroups)o+="<option value="+encodeURIComponentEx(n)+">"+EscapeHtml(usergroups[n].name)+"</option>";t+=addHtmlValue("Grupo de usuários","<div style=width:230px;margin:0;padding:0><select id=dp4groupid style=width:100%>"+o+"</select></div>")}if(1==e&&serverinfo.crossDomain){o="<select style=width:240px id=p4domain>";for(var n in serverinfo.crossDomain)o+="<option value="+n+">"+(""==serverinfo.crossDomain[n]?"Default":EscapeHtml(serverinfo.crossDomain[n]))+"</option>";t+=addHtmlValue("Domain",o+="</select>")}t+=addHtmlValue("Nome","<input id=p4name maxlength=64 onchange=showCreateUserGroupDialogValidate() onkeyup=showCreateUserGroupDialogValidate() />"),setDialogMode(2,1==e?"Criar grupo de usuários":"Grupo de usuários duplicados",3,showCreateUserGroupDialogEx,t+=addHtmlValue("Descrição",'<textarea id=p4desc value="" style=width:230px;height:60px;resize:none maxlength=1024 /></textarea>'),e),showCreateUserGroupDialogValidate(),Q("p4name").focus()}}function showCreateUserGroupDialogValidate(){QE("idx_dlgOkButton",0<Q("p4name").value.length)}function showCreateUserGroupDialogEx(e,t){var o={action:"createusergroup",name:Q("p4name").value,desc:Q("p4desc").value};2==t&&(o.clone=decodeURIComponent(Q("dp4groupid").value)),1==t&&serverinfo.crossDomain&&(o.domain=serverinfo.crossDomain[parseInt(Q("p4domain").value)]),meshserver.send(o)}var currentUserGroup=null;function gotoUserGroup(e,t){if(!xxdialogMode||t){var o=currentUserGroup=usergroups?usergroups[decodeURIComponent(e)]:null;if(null!=o){var n=EscapeHtml(o.name);0==n.length&&(n="<i>Nenhum</i>"),0!=(256&userinfo.siteadmin)&&(n='<span tabindex=0 title="Click here to edit the user group name" onclick=p51editgroup(1) onkeyup="if (event.key == \'Enter\') p51editgroup(1)" style=cursor:pointer>'+n+' <img class=hoverButton src="images/link5.png" /></span>'),QH("p51groupName",n);var i=0,a=0,s=0;if(o.links)for(var r in o.links)r.startsWith("user/")&&i++,r.startsWith("mesh/")&&a++,r.startsWith("node/")&&s++;var l=o.desc;l=null==l||""==l?"<i>Nenhum<i>":EscapeHtml(l);var d="<div style=min-height:80px><table style=width:100%>";if(0!=(8&args.hide)&&(d+="<br />"+addDeviceAttribute("Nome",n)),null!=serverinfo.crossDomain||0!=debugmode){var c=o._id.split("/")[1];d+=addDeviceAttribute("Domain",""!=c?EscapeHtml(c):"<i>Default</i>"),d+=addDeviceAttribute("Group Identifier",EscapeHtml(o._id))}0!=(256&userinfo.siteadmin)?d+=addDeviceAttribute("Descrição","<span onclick=p51editgroup(2) style=cursor:pointer>"+l+' <img class=hoverButton src="images/link5.png" /></span>'):d+=addDeviceAttribute("Descrição",l),d+=addDeviceAttribute("Usuários",i),d+=addDeviceAttribute("Grupos de dispositivos",a),d+=addDeviceAttribute("Devices",s),d+="</table></div><br />",0!=(256&userinfo.siteadmin)&&(d+='<input type=button value="Broadcast" title="Envie um aviso para todos os usuários deste grupo." onclick=showUserBroadcastDialog("'+encodeURIComponentEx(o._id)+'") />'),QH("p51group",d),d="<br />",0!=(256&userinfo.siteadmin)&&(d+='<a href=# onclick="return p51showAddUserDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar usuários</a>'),d+='<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>Membros do grupo</th><th scope=col style=text-align:left></th></tr>';var u=1,p=[];for(var r in currentUserGroup.links)if(0!=r.startsWith("user/")){var m=r.split("/")[2];currentUserGroup.links[r].name&&(m=currentUserGroup.links[r].name),r==userinfo._id&&(m=userinfo.name),p.push({id:r,name:m,rights:currentUserGroup.links[r].rights})}for(var r in p.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0}),p){var g="<a href=# onclick='return p51deleteUser(event,\""+encodeURIComponentEx(p[r].id)+'")\' title="Remova os direitos de usuário deste grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>',v=EscapeHtml(decodeURIComponent(p[r].name));null!=users&&(v="<a href=# onclick='gotoUser(\""+encodeURIComponentEx(p[r].id)+"\");haltEvent(event);'>"+v+"</a>"),d+="<tr "+(u%2==0?"style=background-color:#DDD":"")+'><td><div title="Do utilizador" class=m2></div><div>&nbsp;'+v+"<div></div></div></td><td><div style=float:right>"+g+"</div></td></tr>",++u}1==u&&(d+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhum membro</i><div></div></div></td><td></td></tr>"),d+="</tbody></table><br />";var h=0,f=!(u=1);for(var r in meshes)currentUserGroup._id.split("/")[1]==meshes[r]._id.split("/")[1]&&(h++,null!=currentUserGroup.links&&null!=currentUserGroup.links[r]||(f=!0));if(0<h&&f&&(d+='<a href=# onclick="return p20showAddMeshUserDialog(3)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar grupo de dispositivos</a>'),d+='<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>Grupos de dispositivos comuns</th><th scope=col style=text-align:left></th></tr>',currentUserGroup.links){var x=[];for(var r in currentUserGroup.links)r.startsWith("mesh/")&&null!=meshes[r]&&x.push(meshes[r]);for(var r in x=getOrderedList(x,"name")){var k=0,b=x[r],y=(g="",makeDeviceGroupRightsString(currentUserGroup.links[b._id].rights));userinfo.links&&null!=userinfo.links[b._id]&&null!=userinfo.links[b._id].rights&&(k=userinfo.links[b._id].rights);var w="<i>Grupo de dispositivos desconhecidos</i>";b&&(w="<a href=# onclick='gotoMesh(\""+b._id+"\");haltEvent(event);'>"+b.name+"</a>"),0!=(2&k)&&(g="<a href=# onclick='return p51removeMeshFromUserGroup(event,\""+encodeURIComponentEx(b._id)+'")\' title="Remova os direitos do grupo de usuários para este grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>',y='<span style=cursor:pointer onclick=p20showAddMeshUserDialog(3,"'+encodeURIComponentEx(b._id)+'")>'+y+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"),d+="<tr "+(++u%2==0?"style=background-color:#DDD":"")+'><td style=width:30%><div title="Grupo de dispositivos" class=m99></div><div>&nbsp;'+w+"<div></div></div></td><td style=width:70%><div style=float:right>"+g+"</div><div>"+y+"</div></td></tr>"}}if(1==u&&(d+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhum grupo de dispositivos em comum</i><div></div></div></td><td></td></tr>"),d+="</tbody></table>",u=1,d+="<br />",currentUserGroup._id.split("/")[1]==userinfo._id.split("/")[1]&&(d+='<a href=# onclick="return p20showAddMeshUserDialog(7)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar Dispositivo</a>'),d+='<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>Dispositivos comuns</th><th scope=col style=text-align:left></th></tr>',currentUserGroup.links){var C=[];for(var r in currentUserGroup.links){if(r.startsWith("node/"))null!=(D=getNodeFromId(r))&&C.push(D)}for(var r in C=getOrderedList(C,"name")){var D=C[r],Q=(g="",y=makeUserDeviceRightsString(currentUserGroup.links[D._id].rights),k=GetNodeRights(D),"<i>Dispositivo desconhecido</i>");D&&(Q="<a href=# onclick='gotoDevice(\""+D._id+"\");haltEvent(event);'>"+D.name+"</a>"),0!=(2&k)&&(g="<a href=# onclick='return p51removeDeviceFromUserGroup(event,\""+encodeURIComponentEx(D._id)+'")\' title="Remove user group rights to this device" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>',y='<span style=cursor:pointer onclick=p20showAddMeshUserDialog(7,"'+encodeURIComponentEx(D._id)+'")>'+y+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"),d+="<tr "+(++u%2==0?"style=background-color:#DDD":"")+'><td style=width:30%><div title="Grupo de dispositivos" class=m99></div><div>&nbsp;'+Q+"<div></div></div></td><td style=width:70%><div style=float:right>"+g+"</div><div>"+y+"</div></td></tr>"}}1==u&&(d+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhum dispositivo em comum</i><div></div></div></td><td></td></tr>"),d+="</tbody></table>",0!=(256&userinfo.siteadmin)&&(d+="<div style=font-size:x-small;text-align:right><span><a href=# onclick=p51showDeleteUserGroupDialog() style=cursor:pointer>Excluir grupo de usuários</a></span></div>"),QH("p51group2",d),go(51);var M="";if(0==(268435456&features)&&51<=xxcurrentView&&xxcurrentView<=59&&null!=currentUserGroup){for(var r in M="?viewmode="+xxcurrentView+"&gotougrp="+(serverinfo.crossDomain?currentUserGroup._id:currentUserGroup._id.split("/")[2]),urlargs)M+="&"+r+"="+urlargs[r];try{window.history.replaceState({},document.title,window.location.pathname+M)}catch(e){}}}else 51==xxcurrentView&&(setDialogMode(0),go(50))}}function p51removeDeviceFromUserGroup(e,t){if(!xxdialogMode){var o=getNodeFromId(decodeURIComponent(t));null!=o&&setDialogMode(2,"Remove Device Permissions",3,p51removeDeviceFromUserGroupEx,format('Confirm removal of access rights for device "{0}"?',o.name),o._id)}}function p51removeDeviceFromUserGroupEx(e,t){meshserver.send({action:"adddeviceuser",nodeid:t,userids:[currentUserGroup._id],rights:0,remove:!0})}function p51removeMeshFromUserGroup(e,t){if(!xxdialogMode){var o=meshes[decodeURIComponent(t)];null!=o&&setDialogMode(2,"Remove Device Group Permissions",3,p51removeMeshFromUserGroupEx,format('Confirm removal of access rights for device group "{0}"?',o.name),o._id)}}function p51removeMeshFromUserGroupEx(e,t){meshserver.send({action:"removemeshuser",meshid:t,userid:currentUserGroup._id})}function p51editgroup(e){if(!xxdialogMode){var t=addHtmlValue("Nome","<input id=dp51name style=width:230px maxlength=32 onchange=p51editgroupValidate() onkeyup=p51editgroupValidate(event) />");setDialogMode(2,"Editar grupo de usuários",3,p51editgroupEx,t+=addHtmlValue("Descrição","<div style=width:230px;margin:0;padding:0><textarea id=dp51desc maxlength=1024 style=width:100%;resize:none></textarea></div>")),Q("dp51name").value=currentUserGroup.name,currentUserGroup.desc&&(Q("dp51desc").value=currentUserGroup.desc),p51editgroupValidate(),2==e?Q("dp51desc").focus():Q("dp51name").focus()}}function p51editgroupEx(){meshserver.send({action:"editusergroup",ugrpid:currentUserGroup._id,name:Q("dp51name").value,desc:Q("dp51desc").value})}function p51editgroupValidate(e){QE("idx_dlgOkButton",0<Q("dp51name").value.length),e&&"Enter"==e.key&&Q("dp51desc").focus()}function p51showDeleteUserGroupDialog(){if(xxdialogMode)return!1;var e=format("Excluir grupo de usuários {0}?",EscapeHtml(currentUserGroup.name))+"<br /><br />";return setDialogMode(2,"Excluir grupo de usuários",3,p51showDeleteUserGroupDialogEx,e+="<label><input id=p51check type=checkbox onchange=p51validateDeleteGroupDialog() />Confirme</label>"),p51validateDeleteGroupDialog(),!1}function p51validateDeleteGroupDialog(){QE("idx_dlgOkButton",Q("p51check").checked)}function p51showDeleteUserGroupDialogEx(e,t){meshserver.send({action:"deleteusergroup",ugrpid:currentUserGroup._id})}function p51deleteUser(e,t){return haltEvent(e),p51viewuserEx(2,decodeURIComponent(t)),!1}function p51viewuserEx(e,t){if(2==e){var o=t.split("/")[2];users&&users[t]&&(o=users[t].name),userinfo._id==t&&(o=userinfo.name),setDialogMode(2,"Remove User Membership",3,p51viewuserEx2,format('Confirm membership removal of user "{0}"?',EscapeHtml(decodeURIComponent(o))),t)}}function p51viewuserEx2(e,t){meshserver.send({action:"removeuserfromusergroup",ugrpid:currentUserGroup._id,userid:t})}function p51showAddUserDialog(){if(xxdialogMode)return!1;var e="Permitir que os usuários gerenciem esse grupo de dispositivos e dispositivos neste grupo.";return 524288&features&&(e+=" Os usuários precisam fazer login neste servidor uma vez antes de poderem ser adicionados a um grupo de dispositivos."),e+="<br /><br /><div style='position:relative'>",e+=addHtmlValue("User Identifiers",'<input id=dp51username style=width:230px maxlength=32 onchange=p51validateAddUserDialog() onkeyup=p51validateAddUserDialog() placeholder="user1, user2, user3" />'),e+="<div id=dp51usersuggest class=suggestionBox style='top:30px;left:130px;display:none'></div>",setDialogMode(2,"Adicionar usuários ao grupo de usuários",3,p51showAddUserDialogEx,e+="</div><br>"),Q("dp51username").focus(),p51validateAddUserDialog(),!1}function p51setname(e){e=decodeURIComponent(e);var t=Q("dp51username").value.split(",");for(var o in t)t[o]=t[o].trim();return t[t.length-1]=e,Q("dp51username").value=t.join(", "),p51validateAddUserDialog(),!1}function p51validateAddUserDialog(){var e=!0;if(Q("dp51username")){var t=Q("dp51username").value.split(",");for(var o in t){var n=t[o]=t[o].trim();0==n.length?e=!1:0<=n.indexOf('"')&&(e=!1)}var i=!1,a=!1;if(null!=users){var s=t[t.length-1].trim(),r=s.toLowerCase(),l=[];if(0<s.length){for(var o in users){var d=users[o]._id.split("/");if(currentUserGroup.domain==d[1]&&d[2]===r){a=!0;break}if(0<=users[o].name.toLowerCase().indexOf(r)&&currentUserGroup.domain==d[1]&&(l.push([users[o]._id,users[o].name]),8<=l.length))break}if(0==a&&0<l.length){var c="";for(var o in l){var u=l[o][0],p=l[o][1];u.split("/")[2]==p.toLowerCase()?c+="<div class=suggestionBoxItem onclick='p51setname(\""+encodeURIComponentEx(u.split("/")[2])+"\")'>"+EscapeHtml(p)+"</div>":c+="<div class=suggestionBoxItem onclick='p51setname(\""+encodeURIComponentEx(u.split("/")[2])+"\")'><div>"+EscapeHtml(p)+"</div><div class=suggestionBoxSubItem>"+EscapeHtml(u.split("/")[2])+"</div></div>"}QH("dp51usersuggest",c),i=!0}}}QV("dp51usersuggest",i)}QE("idx_dlgOkButton",e)}function p51showAddUserDialogEx(e,t){if(null==t){var o=Q("dp51username").value.split(","),n=[];for(var i in o)n.push(o[i].trim());meshserver.send({action:"addusertousergroup",ugrpid:currentUserGroup._id,usernames:n})}else meshserver.send({action:"addusertousergroup",ugrpid:currentUserGroup._id,usernames:[t.split("/")[2]]})}var currentUser=null;function gotoUser(e,t,o){if((!xxdialogMode||t)&&(null==o||null==o.originalTarget||null==o.originalTarget.href)){var n=currentUser=users[decodeURIComponent(e)];if(null==n)return setDialogMode(0),void go(4);QH("p30userName",n.name),QH("p31userName",n.name);var i=n._id==userinfo._id,a=0;null!=wssessions&&wssessions[n._id]&&(a=wssessions[n._id]),Q("MainUserImage").classList.remove("gray"),0==a&&Q("MainUserImage").classList.add("gray");var s=n._id.split("/")[2];s.startsWith("~twitter:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/twitter64.png"):s.startsWith("~google:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/google64.png"):s.startsWith("~github:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/github64.png"):s.startsWith("~reddit:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/reddit64.png"):s.startsWith("~azure:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/azure64.png"):s.startsWith("~jumpcloud:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/jumpcloud64.png"):s.startsWith("~intel:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/intel64.png"):s.startsWith("~:")?(QV("p30userAuthServiceLogo",!0),Q("p30userAuthServiceLogo").src="images/login/generic64.png"):QV("p30userAuthServiceLogo",!1);var r=[],l="";null!=n.siteadmin&&0!=(32&n.siteadmin)&&4294967295!=n.siteadmin&&(l='<img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" /> ',r.push("Conta bloqueada")),null==n.siteadmin||0==(4294967071&n.siteadmin)?r.push("Sem direitos de servidor"):8==n.siteadmin?r.push("Acesso aos arquivos do servidor"):4294967295==n.siteadmin?r.push("Administrador completo"):r.push("Direitos parciais"),null!=n.siteadmin&&4294967295!=n.siteadmin&&0!=(192&n.siteadmin)&&r.push("Restrições");var d="<div style=min-height:80px><table style=width:100%>";0!=(8&args.hide)&&(d+="<br />"+addDeviceAttribute("Nome",n.name));var c=n.email?EscapeHtml(n.email):"<i>Não configurado</i>",u="";if(serverinfo.emailcheck&&(u=1==n.emailVerified?'<b style=color:green;cursor:pointer title="O email foi verificado">&#x2713</b> ':'<b style=color:red;cursor:pointer title="Email não verificado">&#x2717;</b> '),serverinfo.crossDomain||0!=debugmode){var p=n._id.split("/")[1];d+=addDeviceAttribute("Domain",""!=p?EscapeHtml(p):"<i>Default</i>"),d+=addDeviceAttribute("Identificador do usuário",EscapeHtml(n._id))}else n.name.toLowerCase()!=n._id.split("/")[2]&&(d+=addDeviceAttribute("Identificador do usuário",EscapeHtml(n._id.split("/")[2])));4294967295!=n.siteadmin||4294967295==userinfo.siteadmin?d+=addDeviceAttribute("Email",u+c+' <a href="mailto:'+n.email+'" \'><img class=hoverButton src="images/link1.png" /></a> <img class=hoverButton style=cursor:pointer src="images/link5.png" onclick=p30showUserEmailChangeDialog(event,"'+e+'") />'):d+=addDeviceAttribute("Email",u+c+' <a href="mailto:'+n.email+'" \'><img class=hoverButton src="images/link1.png" /></a>'),(33554432&features||null!=n.phone)&&(d+=addDeviceAttribute("Phone Number",(n.phone?n.phone:"<i>Nenhum</i>")+' <img class=hoverButton style=cursor:pointer src="images/link5.png" onclick=p30editPhone() />')),d+=addDeviceAttribute("Direitos do servidor",l+r.join(", ")+" <img style=cursor:pointer class=hoverButton onclick='return showUserAdminDialog(event,\""+e+'")\' src="images/link5.png" />'),n.quota&&(d+=addDeviceAttribute("Cota do servidor",EscapeHtml(parseInt(n.quota)/1024)+" k")),d+=addDeviceAttribute("Criação",printDateTime(new Date(1e3*n.creation))),n.login&&(d+=addDeviceAttribute("Último login",printDateTime(new Date(1e3*n.login)))),-1==n.passchange?d+=addDeviceAttribute("Senha","Será alterado no próximo login."):n.passchange&&(d+=addDeviceAttribute("Senha",format("Última alteração: {0}",printDateTime(new Date(1e3*n.passchange)))));var m=0,g="<i>Nenhum<i>";if(n.links){for(var v in n.links)v.startsWith("mesh/")&&m++;1==m?g="1 grupo":1<m&&(g=format("{0} grupos",m))}if(d+=addDeviceAttribute("Grupos de dispositivos",g),4294967295==userinfo.siteadmin||2&userinfo.siteadmin){var h="<i>Nenhum</i>";if(n.groups)for(var v in h="",n.groups)h+='<span class="tagSpan">'+n.groups[v]+"</span>";d+=addDeviceAttribute("Admin Realms",addLinkConditional(h,'showUserGroupDialog(event,"'+e+'")',4294967295==userinfo.siteadmin||null==userinfo.groups&&userinfo._id!=n._id&&4294967295!=n.siteadmin))}var f=[],x=0;n.consent&&(x=n.consent),serverinfo.consent&&(x|=serverinfo.consent),64&x&&8&x?f.push("Prompt da área de trabalho + barra de ferramentas"):64&x?f.push("Barra de ferramentas da área de trabalho"):8&x?f.push("Prompt da área de trabalho"):1&x&&f.push("Notificação na área de trabalho"),16&x?f.push("Prompt do terminal"):2&x&&f.push("Notificação - terminal"),32&x?f.push("Arquivos do prompt"):4&x&&f.push("Notificação arquivos"),7==x&&(f=["Notificar sempre"]),56==(56&x)&&(f=["Sempre alerta"]),""==(f=f.join(", "))&&(f="<i>Nenhum</i>"),d+=addDeviceAttribute("Consentimento do Usuário",addLinkConditional(f,"p20editmeshconsent(2)",!0));var k=0;if(0<n.otpsecret||0<n.otphkeys){k=1;var b=[];0<n.otpsecret&&b.push("Aplicativo de autenticação"),0<n.otphkeys&&b.push("Chave de segurança"),0<n.otpkeys&&b.push("Códigos de backup"),null!=n.phone&&67108864&features&&b.push("SMS"),d+=addDeviceAttribute("Segurança",'<img src="images/key12.png" height=12 width=11 title="Autenticação de segundo fator ativada" style="margin-top:2px" /> '+b.join(", "))}d+="</table></div><br />",d+='<input type=button value="Notas" title="Ver notas sobre este usuário" onclick=showNotes(false,"'+e+'") />',n.phone&&33554432&features&&(d+='<input type=button value="SMS" title="Send a SMS message to this user" onclick=showSendSMS("'+e+'") />'),"string"==typeof n.email&&!0===n.emailVerified&&64&features&&(d+='<input type=button value="Email" title="Send a email message to this user" onclick=showSendEmail("'+e+'") />'),!i&&0<a&&(d+='<input type=button value="Notificar" title="Enviar notificação do usuário" onclick=showUserAlertDialog(event,"'+e+'") />'),QH("p30html",d),drawUserPermissions();var y=null!=userinfo.siteadmin&&2&userinfo.siteadmin&&4294967295!=n.siteadmin||4294967295==userinfo.siteadmin;d="<div style=float:right;font-size:x-small>",y&&(d+="<a href=# style=cursor:pointer onclick='return p30showDeleteUserDialog()' title=\"Remove this user\">Deletar usuário</a>"),d+="</div><div style=font-size:x-small>",y&&0==(524288&features)&&"~"!=n._id.split("/")[2][0]&&(d+="<a href=# style=cursor:pointer onclick='return p30showUserChangePassDialog("+k+')\' title="Alterar a senha para este usuário">Mudar senha</a>'),d+="</div><br>",QH("p30html3",d),d="",1==a?d="1 sessão ativa":1<a&&(d=format("{0} sessões ativas",a)),QH("MainUserState",d),go(30),QH("p31events",""),refreshUsersEvents();var w="";if(0==(268435456&features)&&30<=xxcurrentView&&xxcurrentView<=39&&null!=currentUser){for(var v in w="?viewmode="+xxcurrentView+"&gotouser="+(serverinfo.crossDomain?currentUser._id:currentUser._id.split("/")[2]),urlargs)w+="&"+v+"="+urlargs[v];try{window.history.replaceState({},document.title,window.location.pathname+w)}catch(e){}}}}function p30editPhone(){if(!xxdialogMode){var e='<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>';e+="<td style=width:100%;text-align:center>SMS capable phone number for this user.<br />Leave blank for none.",setDialogMode(2,"Phone Notifications",3,p30editPhoneEx,e+='<br /><br /><div style=width:100%;text-align:center>Phone number: <input type=tel pattern="[0-9]" autocomplete="tel" value="'+(currentUser.phone?currentUser.phone:"")+'" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=p30editPhoneValidate() onkeypress="if (event.key==\'Enter\') p30editPhoneValidate(1)"></div></table>',"verifyPhone"),Q("d2phoneinput").focus(),p30editPhoneValidate()}}function p30editPhoneValidate(e){var t=""==Q("d2phoneinput").value||isPhoneNumber(Q("d2phoneinput").value);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function p30editPhoneEx(){meshserver.send({action:"edituser",id:currentUser._id,phone:Q("d2phoneinput").value})}function p30showUserEmailChangeDialog(e){if(xxdialogMode)return!1;var t="";return t+=addHtmlValue("Email","<input id=dp30email style=width:230px maxlength=32 onchange=p30validateEmail() onkeyup=p30validateEmail() />"),serverinfo.emailcheck&&(t+=addHtmlValue("Status","<select id=dp30verified style=width:230px onchange=p30validateEmail()><option value=0>Não verificado</option><option value=1>Verificado</option></select>")),setDialogMode(2,format("Alterar email para {0}",EscapeHtml(currentUser.name)),3,p30showUserEmailChangeDialogEx,t),Q("dp30email").focus(),Q("dp30email").value=currentUser.email?currentUser.email:"",serverinfo.emailcheck&&(Q("dp30verified").value=currentUser.emailVerified?1:0),p30validateEmail(),!1}function p30validateEmail(){var e=Q("dp30email").value,t=e.split("@");t=2==t.length&&0<t[0].length&&1<t[1].split(".").length&&2<t[1].length&&e.length<1024&&(e!=userinfo.email||1==serverinfo.emailcheck&&Q("dp30verified").value!=(userinfo.emailVerified?1:0)),QE("idx_dlgOkButton",t)}function p30showUserEmailChangeDialogEx(){var e={action:"edituser",id:currentUser._id,email:Q("dp30email").value};serverinfo.emailcheck&&(e.emailVerified=1==Q("dp30verified").value),meshserver.send(e)}function p30showUserChangePassDialog(e){if(!xxdialogMode){var t="";if(t+=addHtmlValue("Senha","<input id=p4pass1 type=password style=width:230px maxlength=256 onchange=p30showUserChangePassDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>"),t+=addHtmlValue("Senha","<input id=p4pass2 type=password style=width:230px maxlength=256 onchange=p30showUserChangePassDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>"),65536&features&&(t+=addHtmlValue("Dica de senha","<input id=p4hint type=text style=width:230px maxlength=256></input>")),passRequirements){var o=[],n=0;for(var i in passRequirements)"reset"!=i&&"hint"!=i&&(o.push(i+":"+passRequirements[i]),n++);0<n&&(t+="<div style=font-size:x-small;padding:6px>"+format("Requisitos: {0}.",o.join(", "))+"</div>")}t+="<div><label><input id=p4resetNextLogin type=checkbox />Forçar redefinição de senha no próximo login.</label></div>",1==e&&(t+="<div><label><input id=p4twoFactorRemove type=checkbox />Remova toda a autenticação do segundo fator.</label></div>"),setDialogMode(2,format("Alterar senha para {0}",EscapeHtml(currentUser.name)),3,p30showUserChangePassDialogEx,t,e),p30showUserChangePassDialogValidate(),Q("p4pass1").focus(),-1==currentUser.passchange&&(Q("p4resetNextLogin").checked=!0)}}function p30showUserChangePassDialogValidate(){var e=!0;""==Q("p4pass1").value&&""==Q("p4pass2").value||(Q("p4pass1").value!=Q("p4pass2").value?e=!1:passRequirements&&0==checkPasswordRequirements(Q("p4pass1").value,passRequirements)&&(e=!1)),QE("idx_dlgOkButton",e)}function p30showUserChangePassDialogEx(e,t){var o=!1;if(1==t&&1==Q("p4twoFactorRemove").checked&&(o=!0),Q("p4pass1").value==Q("p4pass2").value){var n={action:"changeuserpass",userid:currentUser._id,pass:Q("p4pass1").value,removeMultiFactor:o,resetNextLogin:Q("p4resetNextLogin").checked};65536&features&&(n.hint=Q("p4hint").value),meshserver.send(n)}}function p30showDeleteUserDialog(){xxdialogMode||(setDialogMode(2,format("Excluir usuário {0}",EscapeHtml(currentUser.name)),3,p30showDeleteUserDialogEx,format("Confirmar exclusão do usuário {0}?",EscapeHtml(currentUser.name))+"<br /><br /><label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirme</label>"),p10validateDeleteNodeDialog())}function p30showDeleteUserDialogEx(){meshserver.send({action:"deleteuser",userid:currentUser._id,username:currentUser.name})}function drawUserPermissions(){var e=1,t="",o=0,n=!1;for(var i in meshes)meshes[i]._id.split("/")[1]==currentUser._id.split("/")[1]&&(o++,null!=currentUser.links&&null!=currentUser.links[i]||(n=!0));if(0<o&&n&&(t+='<a href=# onclick="return p20showAddMeshUserDialog(1)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar grupo de dispositivos</a>'),t+='<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>Grupos de dispositivos comuns</th><th scope=col style=text-align:left></th></tr>',currentUser.links){var a=[];for(var i in currentUser.links)i.startsWith("mesh/")&&null!=meshes[i]&&a.push(meshes[i]);for(var i in a=getOrderedList(a,"name")){var s=0,r=a[i],l="",d=makeDeviceGroupRightsString(v=currentUser.links[r._id].rights);if(null!=r){userinfo.links&&null!=userinfo.links[r._id]&&null!=userinfo.links[r._id].rights&&(s=userinfo.links[r._id].rights);var c="<i>Grupo de dispositivos desconhecidos</i>";r&&(c="<a href=# onclick='gotoMesh(\""+r._id+"\");haltEvent(event);'>"+EscapeHtml(r.name)+"</a>"),currentUser._id!=userinfo._id&&0!=(2&s)&&(l="<a href=# onclick='return p30removeMeshFromUser(event,\""+encodeURIComponentEx(r._id)+'")\' title="Remova os direitos de usuário deste grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>',d='<span style=cursor:pointer onclick=p20showAddMeshUserDialog(1,"'+encodeURIComponentEx(r._id)+'")>'+d+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"),t+="<tr "+(++e%2==0?"style=background-color:#DDD":"")+'><td style=width:30%><div title="Grupo de dispositivos" class=m99></div><div>&nbsp;'+c+"<div></div></div></td><td style=width:70%><div style=float:right>"+l+"</div><div>"+d+"</div></td></tr>"}}}if(1==e&&(t+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhum grupo de dispositivos em comum</i><div></div></div></td><td></td></tr>"),t+="</tbody></table>",null!=usergroups){if(e=1,t+="<br />",0!=(256&userinfo.siteadmin)){var u=0,p=!1;for(var i in usergroups)usergroups[i]._id.split("/")[1]==currentUser._id.split("/")[1]&&(u++,null!=currentUser.links&&null!=currentUser.links[i]||(p=!0));0<u&&p&&(t+='<a href=# onclick="return p30showAddUserGroupDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar grupo de usuários</a>')}if(t+='<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>Membros do grupo de usuários</th><th scope=col style=text-align:left></th></tr>',currentUser.links){var m=[];for(var i in currentUser.links)i.startsWith("ugrp/")&&null!=usergroups[i]&&m.push(usergroups[i]);for(var i in m=getOrderedList(m,"name")){var g=m[i],v=currentUser.links[m[i]._id].rights,h=(l="","<i>Grupo de usuários desconhecidos</i>");null!=g&&(h=EscapeHtml(g.name),null!=usergroups&&(h="<a href=# onclick='gotoUserGroup(\""+encodeURIComponentEx(m[i]._id)+"\");haltEvent(event);'>"+h+"</a>")),0!=(256&userinfo.siteadmin)&&(l="<a href=# onclick='return p30RemoveUserGroup(event,\""+encodeURIComponentEx(m[i]._id)+'")\' title="Remover associação ao grupo de usuários" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),t+="<tr "+(++e%2==0?"style=background-color:#DDD":"")+'><td><div title="Grupo de usuários" class=m4></div><div>&nbsp;'+h+"<div></div></div></td><td><div style=float:right>"+l+"</div></td></tr>"}}1==e&&(t+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhuma participação no grupo de usuários</i><div></div></div></td><td></td></tr>"),t+="</tbody></table>"}if(e=1,t+="<br />",currentUser._id.split("/")[1]==userinfo._id.split("/")[1]&&(t+='<a href=# onclick="return p20showAddMeshUserDialog(4)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Adicionar Dispositivo</a>'),t+='<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>Dispositivos comuns</th><th scope=col style=text-align:left></th></tr>',currentUser.links){var f=[];for(var i in currentUser.links){if(i.startsWith("node/"))null!=(x=getNodeFromId(i))&&f.push(x)}for(var i in f.sort(nameSort),f){var x=f[i];v=currentUser.links[x._id].rights,l="",s=GetNodeRights(x);userinfo.links&&null!=userinfo.links[i]&&null!=userinfo.links[i].rights&&(s=userinfo.links[i].rights);var k=x?EscapeHtml(x.name):"<i>Dispositivo desconhecido</i>";0!=(2&s)&&(l="<a href=# onclick='return p30removeNodeFromUser(event,\""+encodeURIComponentEx(x._id)+'")\' title="Remova os direitos de usuário deste grupo de dispositivos" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>',d='<span style=cursor:pointer onclick=p20showAddMeshUserDialog(4,"'+encodeURIComponentEx(x._id)+'")>'+makeUserDeviceRightsString(v)+" <img class=hoverButton style=cursor:pointer src=images/link5.png></span>"),k="<a href=# onclick='gotoDevice(\""+x._id+"\",10);haltEvent(event);'>"+k+"</a>",t+="<tr "+(++e%2==0?"style=background-color:#DDD":"")+'><td style=width:30%><div title="Dispositivo" class=si'+x.icon+"></div><div>&nbsp;"+k+"<div></div></div></td><td style=width:70%><div style=float:right>"+l+"</div><div>"+d+"</div></td></tr>"}}1==e&&(t+="<tr><td><div style=padding:6px>&nbsp;<i>Nenhum dispositivo em comum</i><div></div></div></td><td></td></tr>"),t+="</tbody></table>",QH("p30html2",t)}function p30removeNodeFromUser(e,t){if(!xxdialogMode){var o=getNodeFromId(decodeURIComponent(t));setDialogMode(2,"Remove Device Permissions",3,function(e,t){meshserver.send({action:"adddeviceuser",nodeid:t._id,nodename:t.name,userids:[currentUser._id],rights:0,remove:!0})},format('Confirm removal of access rights for device "{0}"?',o.name),o)}}function p30removeUserFromNode(e,o){if(!xxdialogMode){var t=null,n="";(o=decodeURIComponent(o)).startsWith("user/")?(users&&null!=(t=users[o])&&(n=t.name),setDialogMode(2,"Remove User Permissions",3,function(e,t){meshserver.send({action:"adddeviceuser",nodeid:currentNode._id,nodename:currentNode.name,userids:[o],rights:0,remove:!0})},n?format('Confirm removal of access rights for user "{0}"?',n):"Confirm removal of access rights?",t)):o.startsWith("ugrp/")&&(usergroups&&null!=(t=usergroups[o])&&(n=t.name),setDialogMode(2,"Remove User Group Permissions",3,function(e,t){meshserver.send({action:"adddeviceuser",nodeid:currentNode._id,nodename:currentNode.name,userids:[o],rights:0,remove:!0})},n?format('Confirm removal of access rights for user group "{0}"?',n):"Confirm removal of access rights?",t))}}function p30RemoveUserGroup(e,t){if(!xxdialogMode&&null!=usergroups){var o=decodeURIComponent(t),n=usergroups[o];setDialogMode(2,"Remove User Group Membership",3,p30RemoveUserGroupEx,format('Confirm membership removal of user group "{0}"?',null!=n?EscapeHtml(n.name):"<i>Desconhecido</i>"),o)}}function p30RemoveUserGroupEx(e,t){meshserver.send({action:"removeuserfromusergroup",ugrpid:t,userid:currentUser._id})}function p30showAddUserGroupDialog(){if(!xxdialogMode&&null!=usergroups){var e="";for(var t in usergroups)usergroups[t]._id.split("/")[1]==currentUser._id.split("/")[1]&&(null!=currentUser.links&&null!=currentUser.links[t]||(e+="<option value="+encodeURIComponentEx(t)+">"+EscapeHtml(usergroups[t].name)+"</option>"));return setDialogMode(2,"Adicionar associação",3,p30showAddUserGroupDialogEx,addHtmlValue("Grupo de usuários","<div style=width:230px;margin:0;padding:0><select id=dp2groupid style=width:100%>"+e+"</select></div>")),Q("dp2groupid").focus(),!1}}function p30showAddUserGroupDialogEx(){meshserver.send({action:"addusertousergroup",ugrpid:decodeURIComponent(Q("dp2groupid").value),usernames:[currentUser._id.split("/")[2]]})}function p30removeMeshFromUser(e,t){if(!xxdialogMode){var o=meshes[decodeURIComponent(t)];null!=o&&setDialogMode(2,"Remove Device Group Permissions",3,p30removeMeshFromUserEx,format('Confirm removal of access rights for device group "{0}"?',o.name),o._id)}}function p30removeMeshFromUserEx(e,t){meshserver.send({action:"removemeshuser",meshid:t,userid:currentUser._id})}var currentUserEvents=null;function userEventsUpdate(){if(null!=currentUser){var e="",t=null;for(var o in currentUserEvents){var n=currentUserEvents[o],i=new Date(n.time);if(n.msg){null==n.h&&(n.h=Math.random()),printDate(i)!=t&&(null!=t&&(e+="</table>"),e+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+(t=printDate(i))+"</td></tr>");var a="si3";"user"==n.etype&&(a="m2"),"server"==n.etype&&(a="si3");var s=EscapeHtml(n.msg).split("(R)").join("&reg;");if(n.nodeid){var r=getNodeFromId(n.nodeid);null!=r&&(a="si"+r.icon,s="<a href=# onclick='gotoDevice(\""+n.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(r.name)+"</a> &rarr; "+s)}n.username&&n.username!=currentUser.name&&(s=2&userinfo.siteadmin&&n.userid?"<a href=# onclick='gotoUser(\""+encodeURIComponentEx(n.userid)+"\");haltEvent(event);'>"+EscapeHtml(n.username)+"</a> &rarr; "+s:EscapeHtml(n.username)+" &rarr; "+s),"relay"!=n.etype&&"relaylog"!=n.action||(a="relayIcon16"),e+="<tr onclick=showEventDetails("+n.h+",3)  onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+a+"></div></td><td class=g1>&nbsp;</td><td class=style10>"+printTime(i)+" - "+s+"</td><td class=g2>&nbsp;</td></tr><tr style=height:2px></tr>"}}null!=t&&(e+="</table>"),""==e&&(e="<br><i>Nenhum evento encontrado</i><br><br>"),QH("p31events",e)}}function refreshUsersEvents(){meshserver.send({action:"events",limit:parseInt(p31limitdropdown.value),user:currentUser.name})}var d3filetreelinkpath,p52recordings=null;function updateRecordings(){for(var e=[],t=document.getElementsByClassName("RecordingCheckbox"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);var n="<table class=p3usersTable cellpadding=0 cellspacing=0>";if(n+="<th>Session<th style=width:110px>"+nobreak("Start Time")+"<th style=width:110px>Duração<th style=width:110px>Tamanho",null!=p52recordings){var i=null;for(var o in p52recordings){var a=p52recordings[o],s=printDate(new Date(a.time));s!=i&&(n+="<tr><td class=userTableHeader colspan=4>"+(i=s)),n+=addRecordingHtml(o,a)}}n+="</table>",QH("p52recordings",n),t=document.getElementsByClassName("RecordingCheckbox");for(o=0;o<t.length;o++)t[o].checked=0<=e.indexOf(t[o].value);p52updateInfo()}function addRecordingHtml(e,t){var o="";t.lengthTime&&(o=pad2(Math.floor(t.lengthTime/3600))+":"+pad2(Math.floor(t.lengthTime%3600/60))+":"+pad2(Math.floor(t.lengthTime%60)));var n=printTime(new Date(t.time));t.sessionStart&&(n=printTime(new Date(t.sessionStart)));var i="";t.size&&(i=format("{0} Kb",Math.round(t.size/1024)));var a="<i>Desconhecido</i>";t.name&&t.meshname&&(a=null!=meshes[t.meshid]?"<a href=# onclick='gotoMesh(\""+t.meshid+"\")'>"+EscapeHtml(t.meshname)+"</a> - <a href=# onclick='gotoDevice(\""+t.nodeid+"\",10)'>"+EscapeHtml(t.name)+"</a>":EscapeHtml(t.meshname)+" - "+EscapeHtml(t.name));if(null!=t.userids&&0<t.userids.length)if(1<t.userids.length)a+=" - "+format("{0} users",t.userids.length);else{var s=null;null!=users&&(s=users[t.userids[0]]),a+=null!=s?" - <a href=# onclick='gotoUser(\""+t.userids[0]+"\")'>"+EscapeHtml(s.name)+"</a>":" - "+EscapeHtml(t.userids[0].split("/")[2])}var r="",l="m0";1==t.present&&(l="m1",r="<div style=cursor:pointer;float:right><a href=recordings.ashx?file="+encodeURIComponentEx(t.filename)+' download><img src=images/link4.png height=10 width=10 title="Download Recording" download></a>&nbsp;</div>');var d="<tr tabindex=0 onmouseover=userMouseHover2(this,1) onmouseout=userMouseHover2(this,0) onkeypress=\"if (event.key=='Enter') showRecordingDialog(event,'"+e+"')\"><td style=cursor:pointer>";return d+="<div class=bar style=width:100%>",d+="<div></div>",d+='<div class=baricon onclick=showRecordingDialog(event,"'+e+'")><div class='+l+"></div></div>",d+='<div class=g1 onclick=showRecordingDialog(event,"'+e+'")></div><div class=g2 onclick=showRecordingDialog("'+e+'")></div>',d+='<div onclick=showRecordingDialog(event,"'+e+'")>'+r+"<div style=font-size:16px>"+a+"</div></div></div><td style=text-align:center>"+n+"<td style=text-align:center>"+o+"<td style=text-align:center>"+i}function showRecordingDialog(e,t){if(!xxdialogMode&&"IMG"!=e.target.tagName&&"A"!=e.target.tagName){var o=p52recordings[t],n="";if(o.protocol){var i="Desconhecido";1==o.protocol&&(i="Terminal"),2==o.protocol&&(i="Área de Trabalho"),5==o.protocol&&(i="Arquivos"),100==o.protocol&&(i="Intel AMT WSMAN"),101==o.protocol&&(i="Intel AMT Redirection"),n+=addHtmlValue4("Protocolo",i)}if(n+=addHtmlValue4("Status",1==o.present?"Present on server":"Not on server"),o.name&&(n+=addHtmlValue4("Nome do Dispositivo",EscapeHtml(o.name))),o.meshname&&(n+=addHtmlValue4("Grupo de dispositivos",EscapeHtml(o.meshname))),o.size&&(n+=addHtmlValue4("Tamanho",format("{0} bytes",o.size))),o.startTime&&(n+=addHtmlValue4("Start Time",printTime(new Date(o.startTime)))),o.time&&(n+=addHtmlValue4("End Time",printTime(new Date(o.time)))),o.lengthTime&&(n+=addHtmlValue4("Duração",pad2(Math.floor(o.lengthTime/3600))+":"+pad2(Math.floor(o.lengthTime%3600/60))+":"+pad2(Math.floor(o.lengthTime%60)))),1==o.multiplex&&(n+=addHtmlValue4("Multiplexor","Enabled")),o.userids)for(var t in o.userids)n+=addHtmlValue4("Do utilizador",o.userids[t].split("/")[2]);setDialogMode(2,"Recording Details",9,null,n)}}function refreshRecodings(){meshserver.send({action:"recordings",limit:1e3})}function openRecodringPlayer(){xxdialogMode||window.open(window.location.origin+"{{{domainurl}}}player.htm","meshcentral-deskplayer")}function p52updateInfo(){for(var e=document.getElementsByClassName("RecordingCheckbox"),t=0;t<e.length;t++)!0===e[t].checked&&0}function d3init(){Q("d3localFile").value="",d3modechange()}function d3modechange(){var e=Q("d3uploadMode").value;QV("d3localmode",1==e),QV("d3servermode",2==e),1==e?d3setActions():d3updatefiles()}var d3filetreelocation=[];function d3updatefiles(){if(1!=Q("d3uploadMode").value){for(var e="",t="",o=filetree,n=1,i=[],a=[],s=document.getElementsByName("fc"),r=0;r<s.length;r++)s[r].checked&&a.push(s[r].value);for(var r in d3filetreelinkpath="",d3filetreelocation){if(null==o.f||null==o.f[d3filetreelocation[r]])break;if(i.push(d3filetreelocation[r]),1==n){var l=d3filetreelocation[r].split("/");publicPath=window.location+l[0]+"files/"+l[2],d3filetreelocation[r]===userinfo._id?d3filetreelinkpath+="self":d3filetreelinkpath+=l[0]+"/"+l[2]}else""!=d3filetreelinkpath&&(d3filetreelinkpath+="/"+d3filetreelocation[r],2<n&&(publicPath+="/"+d3filetreelocation[r]));o=o.f[d3filetreelocation[r]],n++}d3filetreelocation=i;var d=p5sort_files(o.f);for(var r in d){var c,u=d[r],p=u.n;c=70<(c=p).length?'<span title="'+EscapeHtml(p)+'">'+EscapeHtml(p.substring(0,70))+"...</span>":EscapeHtml(p),p=EscapeHtml(p);var m="";null!=u.s&&(m=getFileSizeStr(u.s));var g="";if(u.t<3){g='<div class=filelist file=999><span style=float:right title=""></span><span><div class=fileIcon'+u.t+' onclick=d3folderset("'+encodeURIComponentEx(u.nx)+'")></div>&nbsp;<a href=# style=cursor:pointer onclick=\'return d3folderset("'+encodeURIComponentEx(u.nx)+"\")'>"+c+"</a></span></div>"}else{var v=c;g='<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value="'+u.nx+'">&nbsp;<span style=float:right>'+m+"</span><span><div class=fileIcon"+u.t+"></div>"+v+"</span></div>"}u.t<3?e+=g:t+=g}QH("d3serverfiles",e+t),QE("p3FolderUp",0<d3filetreelocation.length),d3setActions()}}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"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);return e}function d3setActions(){1==Q("d3uploadMode").value?QE("idx_dlgOkButton",0<Q("d3localFile").value.length):QE("idx_dlgOkButton",1==d3getFileSel().length)}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("notificationCount",e),QS("notificationCount")["background-color"]=0==e?"lightblue":"orange",QV("notificationCount",0<e))}function drawNotifications(){var e=getstore("notifications",0),t="";if(0==notifications.length)t="<div style=margin:5px>Atualmente não há notificações</div>";else for(var o in notifications){var n=notifications[o],i="",a=new Date(n.time),s=0;if(null!=n.title&&(i="<b>"+n.title+"</b>: "),null!=n.nodeid){var r=getNodeFromId(n.nodeid);null!=r&&(s=r.icon,i=16&e?"<b>"+meshes[r.meshid].name+" / "+r.name+"</b>: ":"<b>"+r.name+"</b>: ")}t+='<div title="'+format("Ocorreu em {0}",printDateTime(a))+'" id="notifyx'+n.id+'" class=notification style="cursor:pointer;border-top:1px solid '+(""==t?"transparent":"orange")+'">',s&&(t+="<div class=j"+s+' onclick="notificationSelected('+n.id+')" style=margin:5px;float:left></div>'),t+='<div onclick="notificationDelete('+n.id+')" class=unselectable title="Clear this notification" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+n.id+')" style=margin:5px>'+i+n.text+"</div></div>"}var l="";1<notifications.length&&(l='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Clear all</div>'),QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+t+"</div>"+l)}function notificationSelected(e,t){var o=-1;for(var n in notifications)notifications[n].id==e&&(o=n);-1!=o&&(notificationSelectedEx(notifications[o],e),t&&notifications[o]&&(notifications[o].notification&&(notifications[o].notification.close(),delete notifications[o].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):null!=e.tag&&e.tag.startsWith("meshmessenger/")&&(window.open("/messenger?id="+e.tag+"&title="+encodeURIComponentEx(e.username),e.tag.split("/")[2]),notificationDelete(t))}function notificationDelete(e){var t=-1,o=Q("notifyx"+e);if(null!=o){for(var n in notifications)notifications[n].id==e&&(t=n);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),o.parentNode.removeChild(o),setNotificationCount(notifications.length),0==notifications.length&&QV("notifiyBox",!1),1==notifications.length&&QV("notifyRemoveAll",!1),0<notifications.length&&0==t)){var i=notifications[0];QS("notifyx"+i.id)["border-top"]="1px solid transparent"}}}function addNotification(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 o=null;if(Notification&&"granted"==Notification.permission){var n=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&&(o=16&t?new Notification("{{{title}}} - "+meshes[i.meshid].name+" - "+i.name,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+i.icon+".png"}):new Notification("{{{title}}} - "+i.name,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+i.icon+".png"}))}else{null==e.icon&&(e.icon=0);var a=e.title;a=null==a?"":" - "+e.title,o=new Notification("{{{title}}}"+a,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+e.icon+".png"})}o.id=e.id,o.xtag=e.tag,o.nodeid=e.nodeid,o.username=e.username,o.onclick=function(e){notificationSelected(e.target.id,!0)},e.notification=o}}function deleteAllNotifications(){notifications=[],setNotificationCount(0),drawNotifications(),QV("notifiyBox",!1)}function setupGeneralServerStats(){window.serverStatCpu=new Chart(document.getElementById("serverCpuChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Usava","Livre"]},options:{events:[],responsive:!0,legend:{position:"none"},animation:{animateScale:!0,animateRotate:!0},width:"60px"}}),window.serverStatMemory=new Chart(document.getElementById("serverMemoryChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Usava","Livre"]},options:{events:[],responsive:!0,legend:{position:"none"},animation:{animateScale:!0,animateRotate:!0},width:"60px"}})}var lastServerStats=null;function updateGeneralServerStats(e){if(null!=e?lastServerStats=e:e=lastServerStats,null!=e){var t={ServerState:"Estado do servidor",AgentErrorCounters:"Contadores de erros do agente",UnknownGroup:"Grupo desconhecido",InvalidPKCSsignature:"Assinatura PKCS inválida",InvalidRSAsiguature:"Siguatura RSA inválida",InvalidJSON:"JSON inválido",UnknownAction:"Ação desconhecida",BadWebCertificate:"Certificado da Web inválido",BadSignature:"Assinatura ruim",MaxSessionsReached:"Número máximo de sessões atingidas",UnknownDeviceGroup:"Grupo de dispositivos desconhecidos",InvalidDeviceGroupType:"Tipo de grupo de dispositivos inválido",DuplicateAgent:"Duplicate Agent",ConnectedIntelAMT:"Intel&reg; AMT conectado",RelayErrors:"Erros de retransmissão",UserAccounts:"Contas de usuário",DeviceGroups:"Grupos de dispositivos",AgentSessions:"Sessões do agente",ConnectedUsers:"Usuários conectados",UsersSessions:"Sessões de Usuários",RelaySessions:"Retransmissão de sessão ",RelayCount:"Contagem de relés"};if("object"==typeof e.cpuavg){var o=Math.min(e.cpuavg[0],1);window.serverStatCpu.config.data.datasets[0].data=[o,1-o],QH("serverCpuChartText",'<div style=margin-bottom:5px>Carga da CPU</div><div><b title="Carga da CPU no último minuto">'+Math.round(100*e.cpuavg[0])/100+'</b>, <b title="Carga da CPU nos últimos 5 minutos">'+Math.round(100*e.cpuavg[1])/100+'</b>, <b title="Carga da CPU nos últimos 15 minutos">'+Math.round(100*e.cpuavg[2])/100+"</b></div>"),QS("serverCpuChartView").display="inline-block",window.serverStatCpu.update()}"number"==typeof e.totalmem&&"number"==typeof e.freemem&&(window.serverStatMemory.config.data.datasets[0].data=[e.totalmem-e.freemem,e.freemem],QH("serverMemoryChartText","<div style=margin-bottom:5px>Memória</div><div><b>"+getNiceSize2(e.freemem)+"</b> livre, <b>"+getNiceSize2(e.totalmem)+"</b> total</div>"),QS("serverMemoryChartView").display="inline-block",window.serverStatMemory.update());var n="<div style=width:100% cellpadding=0 cellspacing=0>";if("object"==typeof e.values)for(var i in e.values)for(var a in n+="<div class=userTableHeader style=margin-bottom:4px;width:200px>"+(t[i]?t[i]:i)+"</div>",e.values[i])n+="<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>"+(t[a]?t[a]:a)+"</span><span style=float:right>"+e.values[i][a]+"</span></td><td class=h2></td></tr></table></div>";n+="</div>",QH("serverStatsTable",n)}}var serverTimelineStats=null,serverTimelineConfig={type:"line",data:{labels:[],datasets:[{label:"",backgroundColor:"rgba(255, 99, 132, .5)",borderColor:"rgb(255, 99, 132)",data:[],fill:!0}]},options:{animation:!1,responsive:!0,maintainAspectRatio:!1,elements:{line:{cubicInterpolationMode:"monotone"}},scales:{xAxes:[{type:"time",time:{tooltipFormat:"ll HH:mm"},display:!0,scaleLabel:{display:!1,labelString:""}}],yAxes:[{type:"linear",display:!0,scaleLabel:{display:!0,labelString:""}}]}}};function refreshServerTimelineStats(e){meshserver.send({action:"servertimelinestats",hours:720})}function pastDate(e){var t=new Date;return t.setTime(t.getTime()-36e5*e),t}function setServerTimelineStats(e){serverTimelineStats=e,updateServerTimelineStats()}function addServerTimelineStats(e){if(null!=serverTimelineStats){serverTimelineStats.push(e);var t=Q("p40type").value;0==t?(serverTimelineConfig.data.datasets[0].data.push({x:e.time,y:e.conn.ca}),serverTimelineConfig.data.datasets[1].data.push({x:e.time,y:e.conn.cu}),serverTimelineConfig.data.datasets[2].data.push({x:e.time,y:e.conn.us}),serverTimelineConfig.data.datasets[3].data.push({x:e.time,y:e.conn.rs}),null!=e.conn.am&&serverTimelineConfig.data.datasets[4].data.push({x:e.time,y:e.conn.am})):1==t&&(serverTimelineConfig.data.datasets[0].data.push({x:e.time,y:e.mem.external/1048576}),serverTimelineConfig.data.datasets[1].data.push({x:e.time,y:e.mem.heapUsed/1048576}),serverTimelineConfig.data.datasets[2].data.push({x:e.time,y:e.mem.heapTotal/1048576}),serverTimelineConfig.data.datasets[3].data.push({x:e.time,y:e.mem.rss/1048576})),updateServerTimelineHours()}}function updateServerTimelineHours(){serverTimelineConfig.options.scales.yAxes[0].type=Q("p40log").checked?"logarithmic":"linear",serverTimelineConfig.options.scales.xAxes[0].time={min:pastDate(Q("p40time").value)},window.serverMainStats.update()}function setupServerTimelineStats(){window.serverMainStats=new Chart(document.getElementById("serverMainStats").getContext("2d"),serverTimelineConfig)}function updateServerTimelineStats(){var e,t=Q("p40type").value,o=pastDate(Q("p40time").value);if(serverTimelineConfig.options.scales.xAxes[0].time={min:o},0==t){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Contagem de conexões",e={labels:[pastDate(0),o],datasets:[{label:"Agentes",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:!0},{label:"Usuários",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:!0},{label:"Sessões de Usuário",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:!0},{label:"Retransmissão de sessão ",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:!0},{label:"Intel AMT",data:[],backgroundColor:"rgba(134, 16, 158, .1)",borderColor:"rgb(134, 16, 158)",fill:!0}]};for(var n=0;n<serverTimelineStats.length;n++){new Date(serverTimelineStats[n].time);1==serverTimelineStats[n].first&&(e.datasets[0].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[1].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[2].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[3].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[4].data.push({x:serverTimelineStats[n].time-1,y:NaN})),serverTimelineStats[n].conn&&(e.datasets[0].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].conn.ca}),e.datasets[1].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].conn.cu}),e.datasets[2].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].conn.us}),e.datasets[3].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].conn.rs}),null!=serverTimelineStats[n].conn.am&&e.datasets[4].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].conn.am}))}}else if(1==t){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Megabytes",e={labels:[pastDate(0),o],datasets:[{label:"Externo",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:!0},{label:"Pilha usada",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:!0},{label:"Total da pilha",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:!0},{label:"RSS",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:!0}]};for(n=0;n<serverTimelineStats.length;n++)1==serverTimelineStats[n].first&&(e.datasets[0].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[1].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[2].data.push({x:serverTimelineStats[n].time-1,y:NaN}),e.datasets[3].data.push({x:serverTimelineStats[n].time-1,y:NaN})),e.datasets[0].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].mem.external/1048576}),e.datasets[1].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].mem.heapUsed/1048576}),e.datasets[2].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].mem.heapTotal/1048576}),e.datasets[3].data.push({x:serverTimelineStats[n].time,y:serverTimelineStats[n].mem.rss/1048576})}serverTimelineConfig.data=e,window.serverMainStats.update()}function p40downloadEvents(){for(var e="tempo, conn.agente, conn.usuários.usersessions, conn.relaysession, conn.intelamt, mem.externo mem.amontoado, mem.heaptotal, mem.rss\r\n",t=0;t<serverTimelineStats.length;t++)serverTimelineStats[t].conn&&serverTimelineStats[t].mem&&(e+=new Date(serverTimelineStats[t].time)+", "+serverTimelineStats[t].conn.ca+", "+serverTimelineStats[t].conn.cu+", "+serverTimelineStats[t].conn.us+", "+serverTimelineStats[t].conn.rs+", "+(serverTimelineStats[t].conn.am?serverTimelineStats[t].conn.am:"")+", "+serverTimelineStats[t].mem.external+", "+serverTimelineStats[t].mem.heapUsed+", "+serverTimelineStats[t].mem.heapTotal+", "+serverTimelineStats[t].mem.rss+"\r\n");saveAs(new Blob([e],{type:"application/octet-stream"}),"ServerStats.csv")}var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,serverTrace=[],serverTraceSources=[];function displayServerTrace(){var e="",t=parseInt(Q("p41limitdropdown").value);for(var o in serverTrace.length>t&&serverTrace.splice(t),serverTrace)e+="<div class=traceEvent>"+EscapeHtml(new Date(serverTrace[o].time).toLocaleTimeString())+" - <b>"+EscapeHtml(serverTrace[o].source.toUpperCase())+"</b>: "+EscapeHtml(serverTrace[o].args.join(", "))+"</div>";QH("p41events",e)}function clearServerTracing(){serverTrace=[],displayServerTrace()}function setServerTracing(){var e="";e+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Servidor Core</b></div>',e+="<div><label><input type=checkbox id=p41c1 "+(0<=serverTraceSources.indexOf("cookie")?"checked":"")+">Codificador de cookies</label></div>",e+="<div><label><input type=checkbox id=p41c2 "+(0<=serverTraceSources.indexOf("dispatch")?"checked":"")+">Despachante de mensagens</label></div>",e+="<div><label><input type=checkbox id=p41c3 "+(0<=serverTraceSources.indexOf("main")?"checked":"")+">Mensagens do servidor principal</label></div>",e+="<div><label><input type=checkbox id=p41c4 "+(0<=serverTraceSources.indexOf("peer")?"checked":"")+">Peering do servidor MeshCentral</label></div>",e+="<div><label><input type=checkbox id=p41c15 "+(0<=serverTraceSources.indexOf("agent")?"checked":"")+">Tráfego MeshAgent</label></div>",e+="<div><label><input type=checkbox id=p41c14 "+(0<=serverTraceSources.indexOf("agentupdate")?"checked":"")+">Atualização do MeshAgent</label></div>",e+="<div><label><input type=checkbox id=p41c16 "+(0<=serverTraceSources.indexOf("cert")?"checked":"")+">Certificado do servidor</label></div>",e+="<div><label><input type=checkbox id=p41c17 "+(0<=serverTraceSources.indexOf("db")?"checked":"")+">Banco de Dados do Servidor</label></div>",e+="<div><label><input type=checkbox id=p41c18 "+(0<=serverTraceSources.indexOf("email")?"checked":"")+">Email/SMS Traffic</label></div>",e+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Servidor web</b></div>',e+="<div><label><input type=checkbox id=p41c5 "+(0<=serverTraceSources.indexOf("web")?"checked":"")+">Servidor web</label></div>",e+="<div><label><input type=checkbox id=p41c6 "+(0<=serverTraceSources.indexOf("webrequest")?"checked":"")+">Solicitações de servidor Web</label></div>",e+="<div><label><input type=checkbox id=p41c7 "+(0<=serverTraceSources.indexOf("relay")?"checked":"")+">Encaminhador de soquete da Web</label></div>",e+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Intel AMT</b></div>',e+="<div><label><input type=checkbox id=p41c9 "+(0<=serverTraceSources.indexOf("webrelay")?"checked":"")+">Encaminhador de conexão</label></div>",e+="<div><label><input type=checkbox id=p41c10 "+(0<=serverTraceSources.indexOf("mps")?"checked":"")+">Servidor CIRA</label></div>",setDialogMode(2,"Rastreamento de servidor",7,setServerTracingEx,e+="<div><label><input type=checkbox id=p41c11 "+(0<=serverTraceSources.indexOf("mpscmd")?"checked":"")+">Comandos do servidor CIRA</label></div>")}function setServerTracingEx(e){var t=[],o=["cookie","dispatch","main","peer","web","webrequest","relay","webrelaydata","webrelay","mps","mpscmd","swarm","swarmcmd","agentupdate","agent","cert","db","email"];if(1==e)for(var n=1;n<19;n++)try{Q("p41c"+n).checked&&t.push(o[n-1])}catch(e){}meshserver.send({action:"traceinfo",traceSources:t})}function p41downloadServerTrace(){var e="hora, fonte, mensagem\r\n";for(var t in serverTrace)e+='"'+new Date(serverTrace[t].time).toLocaleTimeString()+'","'+serverTrace[t].source+'","'+serverTrace[t].args.join(", ")+'"\r\n';return saveAs(new Blob([e],{type:"application/octet-stream"}),"servertrace.csv"),!1}var xxcurrentView=-1;function setDialogMode(e,t,o,n,i,a){setSessionActivity(),QV("uiMenu",!1),xxdialogMode=e,xxdialogFunc=n,xxdialogButtons=o,xxdialogTag=a,QS("dialog").width=QS("dialog").top=QS("dialog").left=QS("dialog").right=QS("dialog").bottom=null,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&o),QV("idx_dlgCancelButton",2&o),QV("id_dialogclose",2&o||8&o),QV("idx_dlgDeleteButton",4&o),QV("idx_dlgButtonBar",7&o),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,o=xxdialogButtons,n=xxdialogTag;setDialogMode(),(8&o||e)&&t&&t(e,n)}function center(){setSessionActivity(),11==xxcurrentView?deskAdjust():10==xxcurrentView?masterUpdate(256):1==xxcurrentView&&masterUpdate(4)}function messagebox(e,t){setSessionActivity(),QH("id_dialogMessage",t),setDialogMode(1,e,1)}function statusbox(e,t){setSessionActivity(),QH("id_dialogMessage",t),setDialogMode(1,e)}function goBack(){setSessionActivity(),xxdialogMode||0==goBackStack.length||(fullscreen&&deskToggleFull(),go(goBackStack.pop()),goBackStack.pop())}function go(e,t){if(null!=pluginHandler&&pluginHandler.callHook("goPageStart",e,t),setSessionActivity(),!xxdialogMode)if(QV("uiMenu",!1),t&&1==t.shiftKey&&15!=e&&""=="{{{currentNode}}}".toLowerCase())10<=e&&e<=19?currentNode&&window.open(window.location.origin+"{{{domainurl}}}?gotonode="+currentNode._id.split("/")[2]+"&viewmode="+e+"&hide=16","meshcentral:"+currentNode._id):20<=e&&e<=29?currentMesh&&window.open(window.location.origin+"{{{domainurl}}}?gotomesh="+currentMesh._id.split("/")[2]+"&viewmode="+e+"&hide=16","meshcentral:"+currentMesh._id):30<=e&&e<=39?currentUser&&window.open(window.location.origin+"{{{domainurl}}}?gotouser="+(serverinfo.crossDomain?currentUser._id:currentUser._id.split("/")[2])+"&viewmode="+e+"&hide=16","meshcentral:"+currentUser._id):50<=e&&e<=59?currentUserGroup&&window.open(window.location.origin+"{{{domainurl}}}?gotougrp="+(serverinfo.crossDomain?currentUserGroup._id:currentUserGroup._id.split("/")[2])+"&viewmode="+e+"&hide=16","meshcentral:"+currentUserGroup._id):window.open(window.location.origin+"{{{domainurl}}}?viewmode="+e+"&hide=0","meshcentral:"+e);else if(xxcurrentView!=e){xxcurrentView<0||e<10?goBackStack=[]:50!=xxcurrentView&&Math.floor(xxcurrentView/10)==Math.floor(e/10)||goBackStack.push(xxcurrentView),11==xxcurrentView&&null!=desktop&&null!=desktop.m.recordedData&&deskRecordSession(),(4==e&&0==(2&userinfo.siteadmin)||0!=(4&features))&&(e=52);for(var o=0;o<53;o++)QV("p"+o,o==e);if(xxcurrentView=e,fullscreen&&deskToggleFull(),0==(268435456&features)&&0<xxcurrentView){var n="";for(var o in 10<=xxcurrentView&&xxcurrentView<=19?null!=currentNode&&(n="?viewmode="+xxcurrentView+"&gotonode="+currentNode._id.split("/")[2]):20<=xxcurrentView&&xxcurrentView<=29?null!=currentMesh&&(n="?viewmode="+xxcurrentView+"&gotomesh="+currentMesh._id.split("/")[2]):30<=xxcurrentView&&xxcurrentView<=39?null!=currentUser&&(n="?viewmode="+xxcurrentView+"&gotouser="+(serverinfo.crossDomain?currentUser._id:currentUser._id.split("/")[2])):51<=xxcurrentView&&xxcurrentView<=51?null!=currentUserGroup&&null!=currentUserGroup._id&&(n="?viewmode="+xxcurrentView+"&gotougrp="+(serverinfo.crossDomain?currentUserGroup._id:currentUserGroup._id.split("/")[2])):1<xxcurrentView&&(n="?viewmode="+xxcurrentView),urlargs)n+=(""==n?"?":"&")+o+"="+urlargs[o];try{window.history.replaceState({},document.title,window.location.pathname+n)}catch(e){}}var i=["MainMenuMyDevices","MainMenuMyAccount","MainMenuMyEvents","MainMenuMyFiles","MainMenuMyUsers","MainMenuMyServer"];for(var o in i)QC(i[o]).remove("fullselect"),QC(i[o]).remove("semiselect");var a=["LeftMenuMyDevices","LeftMenuMyAccount","LeftMenuMyEvents","LeftMenuMyFiles","LeftMenuMyUsers","LeftMenuMyServer"];for(var o in a)QC(a[o]).remove("lbbuttonsel"),QC(a[o]).remove("lbbuttonsel2");var s=e<9?"fullselect":"semiselect",r=e<9||115==e||40==e||41==e||42==e?"lbbuttonsel2":"lbbuttonsel",l=0;0<goBackStack.length&&(l=goBackStack[goBackStack.length-1]),1==e||1==l||0==l&&10<=e&&e<20?(QC("MainMenuMyDevices").add(s),QC("LeftMenuMyDevices").add(r)):2==e||2==l||0==l&&20<=e&&e<30?(QC("MainMenuMyAccount").add(s),QC("LeftMenuMyAccount").add(r)):3==e?(QC("MainMenuMyEvents").add(s),QC("LeftMenuMyEvents").add(r)):4==e||30<=e&&e<40||50==e||51==e||52==e?(QC("MainMenuMyUsers").add(s),QC("LeftMenuMyUsers").add(r)):5==e?(QC("MainMenuMyFiles").add(s),QC("LeftMenuMyFiles").add(r)):(6==e||115==e||40<=e&&e<50)&&(QC("MainMenuMyServer").add(s),QC("LeftMenuMyServer").add(r)),QV("ServerPlugins",null!=pluginHandler),webPageStackMenu&&10<=e?QC("column_l").add("room4submenu"):QC("column_l").remove("room4submenu"),QV("topbar",0!=e),0==e&&webPageFullScreen&&QC("body").add("arg_hide"),QV("MainSubMenuSpan",10<=e&&e<20),QV("UserDummyMenuSpan",51==e||e<10&&6!=e&&webPageFullScreen),QV("MeshSubMenuSpan",20<=e&&e<30),QV("UserSubMenuSpan",30<=e&&e<40),QV("ServerSubMenuSpan",6==e||115==e||40==e||41==e||42==e||43==e),QV("UsersSubMenuSpan",4==e||50==e||52==e);var d={4:"UsersGeneral",10:"MainDev",11:"MainDevDesktop",12:"MainDevTerminal",13:"MainDevFiles",14:"MainDevAmt",15:"MainDevConsole",16:"MainDevEvents",17:"MainDevInfo",19:"MainDevPlugins",20:"MeshGeneral",21:"MeshSummary",30:"UserGeneral",31:"UserEvents",6:"ServerGeneral",40:"ServerStats",41:"ServerTrace",42:"ServerPlugins",50:"UsersGroups",52:"UsersRecordings",115:"ServerConsole"};for(var o in d)QC(d[o]).remove("style3x"),QC(d[o]).remove("style3sel"),QC(d[o]).add(e==o?"style3sel":"style3x");11==e&&deskAdjust(),115==e&&QV("p15",!0),QV("p15uploadCore",115!=e),QV("p15BackButton",115!=e),15!=e&&115!=e||setupConsole(),1==e&&masterUpdate(4),2==e&&Notification&&QV("accountEnableNotificationsSpan","granted"!=Notification.permission),40==e&&null==serverTimelineStats&&refreshServerTimelineStats(),42==e&&refreshPluginLatest(),21==e&&p21updateMesh(),52==e&&(null==p52recordings&&refreshRecodings(),updateRecordings()),12==e&&null!=xtermfit&&(xtermfit.fit(),xterm.focus()),document.title=currentNode&&10<=e&&e<20?currentNode.name+(meshes[currentNode.meshid]?" - "+meshes[currentNode.meshid].name:"")+" - "+decodeURIComponent("{{{extitle}}}"):decodeURIComponent("{{{extitle}}}"),null!=pluginHandler&&pluginHandler.callHook("goPageEnd",e,t),QS("column_l").overflow=0<=[11,12].indexOf(e)?"hidden":null}}function updatePluginList(e){if(null!=pluginHandler){if(Array.isArray(e)&&e.forEach(function(e){updatePluginList(e)}),QV("pluginNoneNotice",0==installedPluginList.length),installedPluginList.length){if(null!=e&&(null==installedPluginList.version_info&&(installedPluginList.version_info=[]),installedPluginList.version_info[e.id]=e),(o=Q("p42tbl").querySelectorAll(".p42tblRow")).length)for(var t in Object.values(o))o[t].parentNode.removeChild(o[t]);var r={0:{text:"Disabled",color:"858483"},1:{text:"Installed",color:"00aa00"}},l={0:{install:"Install",delete:"Delete"},1:{disable:"Disable",upgrade:"Upgrade"}},d=Q("p42tbl");installedPluginList.forEach(function(e){var t=[];if(1==e.hasAdminPanel&&e.status?e.nameHtml="<a onclick=\"return goPlugin('"+e.shortName+"', '"+e.name.replace(/'/g,"\\'")+"');\">"+e.name+"</a>":e.nameHtml=e.name,e.statusText=r[e.status].text,e.statusColor=r[e.status].color,null==e.versionHistoryUrl&&t.push("downgrade"),e.status||(e.version=" - "),e.upgradeAvail="Verificando ...",null!=installedPluginList.version_info&&null!=installedPluginList.version_info[e._id]){var o=installedPluginList.version_info[e._id];o.hasUpdate?e.upgradeAvail='<a title="View Changelog" target="_blank" href="'+o.changelogUrl+'">'+o.version+"</a>":(t.push("upgrade"),e.status?e.upgradeAvail="Atualizado":e.upgradeAvail='<a title="View Changelog" target="_blank" href="'+o.changelogUrl+'">'+o.version+"</a>"),o.meshCentralCompat||(e.upgradeAvail+=' [ <span onclick="return setDialogMode(2, \'Compatibility Issue\', 1, null, \'This plugin version is not compatible with your MeshCentral installation, please upgrade MeshCentral first.\');" title="Version incompatible, please upgrade your MeshCentral installation first" style="cursor: pointer; color:red;"> ! </span> ]',t.push("install"),t.push("upgrade"))}e.actions="<select onchange=\"return pluginAction(this,'"+e._id+'\');"><option value=""> --</option>';var n=Object.entries(l[e.status]);for(var i in n)-1===t.indexOf(n[i][0])&&(e.actions+='<option value="'+n[i][0]+'">'+n[i][1]+"</option>");e.actions+="</select>";var a="<td><img style=margin-top:3px src=images/plugin24.png></td><td class=gradTable1>&nbsp;</td><td class=gradTable2>"+e.nameHtml+"</td><td class=gradTable2>"+e.description+'</td><td class=gradTable2 style=text-align:center><a href="'+e.homepage+'" target="_blank">Home</a></td><td class=gradTable2 style=text-align:center>'+e.version+'</td><td style=text-align:center class="pluginUpgradeAvailable gradTable2">'+e.upgradeAvail+'</td><td class=gradTable2 style="text-align:center;color:#'+e.statusColor+'">'+e.statusText+'</td><td class="pluginAction gradTable2" style=text-align:center>'+e.actions+"</td><td class=gradTable3>&nbsp;</td>",s=d.insertRow(-1);s.innerHTML=a,s.classList.add("p42tblRow"),s.setAttribute("data-id",e._id),s.setAttribute("id","pluginRow-"+e._id)})}else{var o=Q("p42tbl").querySelectorAll(".p42tblRow");for(var t in Object.values(o))o[t].parentNode.removeChild(o[t])}null==e&&refreshPluginLatest()}}function refreshPluginLatest(){null!=pluginHandler&&meshserver.send({action:"pluginLatestCheck"})}function distributeCore(){null!=pluginHandler&&(meshserver.send({action:"distributeCore",nodes:nodes}),QV("pluginRestartNotice",!1))}function pluginActionEx(){if(null!=pluginHandler){var e=Q("lastPluginAct").value,t=Q("lastPluginId").value,o=Q("lastPluginVersion").value;switch(e){case"upgrade":case"install":meshserver.send({action:"installplugin",id:t,version_only:!1});break;case"downgrade":Q("lastPluginVersion").querySelectorAll("option").forEach(function(e){e.value==o&&(pVers=e.text)}),meshserver.send({action:"installplugin",id:t,version_only:{name:pVers,url:o}});break;case"delete":meshserver.send({action:"removeplugin",id:t});break;case"disable":meshserver.send({action:"disableplugin",id:t})}QV("pluginRestartNotice",!0)}}function pluginAction(e,t){if(null!=pluginHandler){if("downgrade"==e.value)meshserver.send({action:"getpluginversions",id:t});else{var o=null;for(var n in installedPluginList)installedPluginList[n]._id==t&&(o=installedPluginList[n]);setDialogMode(2,"Ação do Plugin",3,pluginActionEx,format("Tem certeza de que deseja {0} o plug-in: {1}",e.value,o.name)+'<input id="lastPluginAct" type="hidden" value="'+e.value+'" /><input id="lastPluginId" type="hidden" value="'+t+'" /><input id="lastPluginVersion" type="hidden" value="" />')}e.value=""}}function goPlugin(e,t){null!=pluginHandler&&(null==e?Q("p43iframe").src="":(QH("p43title",t),Q("p43iframe").src="/pluginadmin.ashx?pin="+e,go(43)))}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)return 4294967295;var o=0,n=e.links[t];if(null!=n){if(4294967295==n.rights)return 4294967295;o=n.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!=(n=e.links[a])){if(4294967295==n.rights)return 4294967295;o|=n.rights}return o}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)return!0;var o=null;if(t==userinfo._id?o=userinfo:null!=users&&(o=users[t]),null!=o)for(var n in o.links)if(n.startsWith("ugrp/")&&null!=e.links[n])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 o=GetMeshRights(e.meshid,t);if(4294967295==o)return o;if(null!=e.links&&null!=e.links[t]&&(o|=e.links[t].rights),null!=e.links&&null!=userinfo.links)for(var n in e.links)n.startsWith("ugrp/")&&null!=userinfo.links[n]&&null!=e.links[n].rights&&(o|=e.links[n].rights);return o}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 o in e.links)if(o.startsWith("ugrp/")&&null!=userinfo.links[o]&&null!=e.links[o].rights)return!0;return!1}if("undefined"==typeof TextEncoder){window.TextEncoder=function(){},TextEncoder.prototype.encode=function(e){for(var t=e.length,o=-1,n="undefined"==typeof Uint8Array?new Array(1.5*t):new Uint8Array(3*t),i=0,a=0,s=0;s!==t;){if(i=e.charCodeAt(s),s+=1,55296<=i&&i<=56319){if(s===t){n[o+=1]=239,n[o+=1]=191,n[o+=1]=189;break}if(!(56320<=(a=e.charCodeAt(s))&&a<=57343)){n[o+=1]=239,n[o+=1]=191,n[o+=1]=189;continue}if(s+=1,65535<(i=1024*(i-55296)+a-56320+65536)){n[o+=1]=240|i>>>18,n[o+=1]=128|i>>>12&63,n[o+=1]=128|i>>>6&63,n[o+=1]=128|63&i;continue}}i<=127?n[o+=1]=0|i:(i<=2047?n[o+=1]=192|i>>>6:(n[o+=1]=224|i>>>12,n[o+=1]=128|i>>>6&63),n[o+=1]=128|63&i)}return"undefined"!=typeof Uint8Array?n.subarray(0,o+1):(n.length=o+1,n)},TextEncoder.prototype.toString=function(){return"[object TextEncoder]"};try{Object.defineProperty(TextEncoder.prototype,"encoding",{get:function(){if(TextEncoder.prototype.isPrototypeOf(this))return"utf-8";throw TypeError("Illegal invocation")}})}catch(e){TextEncoder.prototype.encoding="utf-8"}"undefined"!=typeof Symbol&&(TextEncoder.prototype[Symbol.toStringTag]="TextEncoder")}function joinPaths(){var e=[];for(var t in arguments){var o=arguments[t];if(null!=o&&""!=o){for(;o.endsWith("/")||o.endsWith("\\");)o=o.substring(0,o.length-1);for(;o.startsWith("/")||o.startsWith("\\");)o=o.substring(1);e.push(o)}}return e.join("/")}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]){var o={};try{for(var n=0,i=localStorage.length;n<i;++n){var a=localStorage.key(n);"_"!=a[0]&&(o[a]=localStorage.getItem(a),"desktopsettings"!=a&&"string"==typeof o[a]&&64<o[a].length&&delete o[a])}}catch(e){}meshserver.send({action:"userWebState",state:JSON.stringify(o)})}}function getstore(e,t){try{if("undefined"==typeof localStorage)return t;var o=localStorage.getItem(e);return null==o||null==o?t:o}catch(e){return t}}function addLink(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/link5.png></span>"}function addLinkConditional(e,t,o){return o?addLink(e,t):e}function haltEvent(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1}function addOption(e,t,o){var n=document.createElement("option");n.text=t,n.value=o,Q(e).add(n)}function passwordcheck(e){return 7<e.length&&/\d/.test(e)&&/[a-z]/.test(e)&&/[A-Z]/.test(e)&&/\W/.test(e)}function methodcheck(e){return!(!e||null==e||!e.Body||"SUCCESS"==e.Body.ReturnValueStr)&&(messagebox("Erro de chamada",e.Header.Method+": "+e.Body.ReturnValueStr.replace("_"," ")),!0)}function TableStart(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td width=200px><p><td>"}function TableStart2(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td><p><td>"}function TableEntry(e,t){return"<tr><td><p>"+e+"<td>"+t}function FullTable(e,t){var o=TableStart();for(i in e)i&&e[i]&&(o+=TableEntry(i,e[i]));return o+TableEnd(t)}function TableEnd(e){return"<tr><td colspan=2><p>"+(e||"")+"</table>"}function AddButton(e,t){return'<input type=button value="'+e+'" onclick="'+t+'" style=margin:4px>'}function AddButton2(e,t){return'<input type=button value="'+e+'" onclick="'+t+'">'}function AddRefreshButton(e){return'<input type=button name=refreshbtn value=Refresh onclick="refreshButtons(false);'+e+'" style=margin:4px '+(0==refreshButtonsState?"disabled":"")+">"}function MoreStart(){return'<a href=# style=cursor:pointer;color:blue id=morexxx1 onclick=QV("morexxx1",false);QV("morexxx2",true)>&#x25BC; Mais</a><div id=morexxx2 style=display:none><br><hr>'}function MoreEnd(){return'<a href=# style=cursor:pointer;color:blue onclick=QV("morexxx2",false);QV("morexxx1",true)>&#x25B2; Menos</a></div>'}function getSelectedOptions(e){for(var t,o=[],n=0,i=e.options.length;n<i;n++)(t=e.options[n]).selected&&o.push(t.value);return o}function getInstance(e,t){for(var o in e)if(e[o].InstanceID==t)return e[o];return null}function getItem(e,t,o){for(var n in e)if(e[n][t]==o)return e[n];return null}function guidToStr(e){return e.substring(6,8)+e.substring(4,6)+e.substring(2,4)+e.substring(0,2)+"-"+e.substring(10,12)+e.substring(8,10)+"-"+e.substring(14,16)+e.substring(12,14)+"-"+e.substring(16,20)+"-"+e.substring(20)}function getUrlVars(){for(var e,t=[],o=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),n=0;n<o.length;n++)0<(e=o[n].indexOf("="))&&(t[o[n].substring(0,e)]=o[n].substring(e+1,o[n].length));return t}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 addHtmlValue3(e,t){return"<div><b>"+e+"</b></div><div style=margin-left:16px>"+t+"</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 parseUriArgs(){var e=window.document.location.href;e.endsWith("#")&&(e=e.substring(0,e.length-1));var t,o={},n=e.split(/[\?&|\=]/);for(i in n.splice(0,1),n)switch(i%2){case 0:t=decodeURIComponent(n[i]);break;case 1:o[t]=decodeURIComponent(n[i]);var i=parseInt(o[t]);i==o[t]&&(o[t]=i)}return o}function focusTextBox(e){setTimeout(function(){Q(e).selectionStart=Q(e).selectionEnd=65535,Q(e).focus()},0)}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 isPrivateIP(e){return e.startsWith("10.")||e.startsWith("172.16.")||e.startsWith("192.168.")}function u2fSupported(){return window.u2f&&(0<navigator.userAgent.indexOf("Chrome/")||0<navigator.userAgent.indexOf("Firefox/")||0<navigator.userAgent.indexOf("Opera/")||0<navigator.userAgent.indexOf("Safari/"))}function findOne(t,e){return null!=t&&null!=e&&e.some(function(e){return 0<=t.indexOf(e)})}function copyTextToClip(e){var t=document.createElement("DIV");t.textContent=e,document.body.appendChild(t),function(e){if(document.selection)(t=document.body.createTextRange()).moveToElementText(e),t.select();else if(window.getSelection){var t;(t=document.createRange()).selectNode(e),window.getSelection().removeAllRanges(),window.getSelection().addRange(t)}}(t),document.execCommand("copy"),t.remove()}function copyTextToClip2(e){var t=document.createElement("DIV");t.textContent=decodeURIComponent(e),document.body.appendChild(t),function(e){if(document.selection)(t=document.body.createTextRange()).moveToElementText(e),t.select();else if(window.getSelection){var t;(t=document.createRange()).selectNode(e),window.getSelection().removeAllRanges(),window.getSelection().addRange(t)}}(t),document.execCommand("copy"),t.remove()}function capitalizeFirstLetter(e){return e.charAt(0).toUpperCase()+e.slice(1)}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 addDetailItem(e,t,o){return"<table style=width:100%><td>"+nobreak(e)+"<td style=text-align:right>"+t+"</table>"}function format(e){var o=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,t){return void 0!==o[t]?o[t]:e})}function addTextLink(e,t,o){var n=t.toLowerCase().indexOf(e.toLowerCase());return-1==n?t:t.substring(0,n)+'<a href="'+o+'">'+e+"</a>"+t.substring(n+e.length)}function getOrderedList(e,i){var t=[];for(var o in e)t.push(e[o]);return t.sort(function(e,t){var o=e[i].toLowerCase(),n=t[i].toLowerCase();return n<o?1:o<n?-1:0}),t}function capitalizeFirstLetter(e){return e.charAt(0).toUpperCase()+e.slice(1)}function nobreak(e){return e.split(" ").join("&nbsp;")}function pad2(e){var t="00"+e;return t.substr(t.length-2)}function encodeURIComponentEx(e){return encodeURIComponent(e).replace(/'/g,"%27")}function getUserName(e){return users&&null!=users[e]?users[e].name:e.split("/")[2]}</script>