var Guacamole=Guacamole||{};Guacamole.ArrayBufferReader=function(a){var b=this;a.onblob=function(a){a=window.atob(a);for(var d=new ArrayBuffer(a.length),c=new Uint8Array(d),f=0;f=a.length)return a[0];var b=0;a.forEach(function(a){b+=a.length});var c=0,d=new f(b);a.forEach(function(a){d.set(a,c);c+=a.length});return d};a.ondata=function(a){h.push(new f(new f(a)));if(a=k(h)){for(var b= Number.MAX_VALUE,m=a.length,p=Math.floor(.02*e.rate),p=Math.max(e.channels*p,e.channels*(Math.floor(a.length/e.channels)-p));pF?t(F)*t(F/3):0;v+=E*F}c[p]=v*k;e+=d.channels}return c},v=function(){f({audio:!0},function(a){q=c.createScriptProcessor(2048,d.channels,d.channels);q.connect(c.destination);q.onaudioprocess=function(a){g.sendData(u(a.inputBuffer).buffer)}; p=c.createMediaStreamSource(a);p.connect(q);m=a},function(){g.sendEnd();if(e.onerror)e.onerror()})};g.onack=function(a){if(a.code!==Guacamole.Status.Code.SUCCESS||m){p&&p.disconnect();q&&q.disconnect();if(m)for(var b=m.getTracks(),c=0;c=a.size){if(b.oncomplete)b.oncomplete(a)}else{var f;a:{f=c;var g=c+e.blobLength,l=(a.slice||a.webkitSlice||a.mozSlice).bind(a),n=g-f;if(n!==g){var m=l(f,n);if(m.size===n){f=m;break a}}f=l(f,g)}c+=e.blobLength;d.readAsArrayBuffer(f)}};d.onload=function(){e.sendData(d.result);e.onack=function(d){if(b.onack)b.onack(d); if(!d.isError()){if(b.onprogress)b.onprogress(a,c-e.blobLength);g()}}};d.onerror=function(){if(b.onerror)b.onerror(a,c,d.error)};g()};this.sendEnd=function(){e.sendEnd()};this.oncomplete=this.onprogress=this.onerror=this.onack=null};Guacamole=Guacamole||{}; Guacamole.Client=function(a){function b(a){if(a!=c&&(c=a,d.onstatechange))d.onstatechange(c)}function e(){return 3==c||2==c}var d=this,c=0,f=0,g=null,h={0:"butt",1:"round",2:"square"},k={0:"bevel",1:"miter",2:"round"},l=new Guacamole.Display,n={},m={},p=[],q=[],t=[],u=new Guacamole.IntegerPool,v=[];this.exportState=function(a){var b={currentState:c,currentTimestamp:f,layers:{}},d={},e;for(e in n)d[e]=n[e];l.flush(function(){for(var c in d){var f=parseInt(c),e=d[c],g=e.toCanvas(),h={width:e.width, height:e.height};e.width&&e.height&&(h.url=g.toDataURL("image/png"));if(0a&&delete n[a]},distort:function(a){var b=parseInt(a[0]),c=parseFloat(a[1]),d=parseFloat(a[2]),f=parseFloat(a[3]),e=parseFloat(a[4]),g=parseFloat(a[5]);a=parseFloat(a[6]);0<=b&&(b=r(b),l.distort(b,c,d,f,e,g,a))},error:function(a){var b=a[0];a=parseInt(a[1]);if(d.onerror)d.onerror(new Guacamole.Status(a,b));d.disconnect()},end:function(a){a= parseInt(a[0]);var b=q[a];if(b){if(b.onend)b.onend();delete q[a]}},file:function(a){var b=parseInt(a[0]),c=a[1];a=a[2];d.onfile?(b=q[b]=new Guacamole.InputStream(d,b),d.onfile(b,c,a)):d.sendAck(b,"File transfer unsupported",256)},filesystem:function(a){var b=parseInt(a[0]);a=a[1];d.onfilesystem&&(b=t[b]=new Guacamole.Object(d,b),d.onfilesystem(b,a))},identity:function(a){a=r(parseInt(a[0]));l.setTransform(a,1,0,0,1,0,0)},img:function(a){var b=parseInt(a[0]),c=parseInt(a[1]),f=r(parseInt(a[2])),e= a[3],g=parseInt(a[4]),h=parseInt(a[5]);a=q[b]=new Guacamole.InputStream(d,b);var m=new Guacamole.DataURIReader(a,e);m.onend=function(){l.setChannelMask(f,c);l.draw(f,g,h,m.getURI())}},jpeg:function(a){var b=parseInt(a[0]),c=r(parseInt(a[1])),d=parseInt(a[2]),f=parseInt(a[3]);a=a[4];l.setChannelMask(c,b);l.draw(c,d,f,"data:image/jpeg;base64,"+a)},lfill:function(a){var b=parseInt(a[0]),c=r(parseInt(a[1]));a=r(parseInt(a[2]));l.setChannelMask(c,b);l.fillLayer(c,a)},line:function(a){var b=r(parseInt(a[0])), c=parseInt(a[1]);a=parseInt(a[2]);l.lineTo(b,c,a)},lstroke:function(a){var b=parseInt(a[0]),c=r(parseInt(a[1]));a=r(parseInt(a[2]));l.setChannelMask(c,b);l.strokeLayer(c,a)},mouse:function(a){var b=parseInt(a[0]);a=parseInt(a[1]);l.showCursor(!0);l.moveCursor(b,a)},move:function(a){var b=parseInt(a[0]),c=parseInt(a[1]),d=parseInt(a[2]),f=parseInt(a[3]);a=parseInt(a[4]);0=a||127<=a&&159>=a?65280|a:0<=a&&255>=a?a:256<=a&&1114111>=a?16777216|a:null}function d(){var a=B();if(!a)return!1;var b;do b=a,a=B();while(null!==a);return b.defaultPrevented}var c=this;this.onkeyup= this.onkeydown=null;var f=function(){var a=this;this.timestamp=(new Date).getTime();this.defaultPrevented=!1;this.keysym=null;this.reliable=!1;this.getAge=function(){return(new Date).getTime()-a.timestamp}},g=function(a,d,e,g){f.apply(this);this.keyCode=a;this.keyIdentifier=d;this.key=e;this.location=g;if(e=this.keysym=b(e,g)||r(n[a],g))e=this.keysym,e=!(0<=e&&255>=e||16777216===(e&4294901760));e&&(this.reliable=!0);if(e=!this.keysym)d?(e=d.indexOf("U+"),-1===e?e=!0:(e=parseInt(d.substring(e+2),16), e=a!==e||65<=a&&90>=a||48<=a&&57>=a?!0:!1)):e=!1;e&&(this.keysym=b(d,g,c.modifiers.shift));d=!c.modifiers.ctrl&&!(navigator&&navigator.platform&&navigator.platform.match(/^mac/i));if(!c.modifiers.alt&&c.modifiers.ctrl||d&&c.modifiers.alt||c.modifiers.meta||c.modifiers.hyper)this.reliable=!0;t[a]=this.keysym};g.prototype=new f;var h=function(a){f.apply(this);this.charCode=a;this.keysym=e(a);this.reliable=!0};h.prototype=new f;var k=function(a,c,d,e){f.apply(this);this.keyCode=a;this.keyIdentifier= c;this.key=d;this.location=e;this.keysym=t[a]||r(n[a],e)||b(d,e);this.reliable=!0};k.prototype=new f;var l=[],n={8:[65288],9:[65289],12:[65291,65291,65291,65461],13:[65293],16:[65505,65505,65506],17:[65507,65507,65508],18:[65513,65513,65027],19:[65299],20:[65509],27:[65307],32:[32],33:[65365,65365,65365,65465],34:[65366,65366,65366,65459],35:[65367,65367,65367,65457],36:[65360,65360,65360,65463],37:[65361,65361,65361,65460],38:[65362,65362,65362,65464],39:[65363,65363,65363,65462],40:[65364,65364, 65364,65458],45:[65379,65379,65379,65456],46:[65535,65535,65535,65454],91:[65515],92:[65383],93:null,96:[65456],97:[65457],98:[65458],99:[65459],100:[65460],101:[65461],102:[65462],103:[65463],104:[65464],105:[65465],106:[65450],107:[65451],109:[65453],110:[65454],111:[65455],112:[65470],113:[65471],114:[65472],115:[65473],116:[65474],117:[65475],118:[65476],119:[65477],120:[65478],121:[65479],122:[65480],123:[65481],144:[65407],145:[65300],225:[65027]},m={Again:[65382],AllCandidates:[65341],Alphanumeric:[65328], Alt:[65513,65513,65027],Attn:[64782],AltGraph:[65027],ArrowDown:[65364],ArrowLeft:[65361],ArrowRight:[65363],ArrowUp:[65362],Backspace:[65288],CapsLock:[65509],Cancel:[65385],Clear:[65291],Convert:[65313],Copy:[64789],Crsel:[64796],CrSel:[64796],CodeInput:[65335],Compose:[65312],Control:[65507,65507,65508],ContextMenu:[65383],DeadGrave:[65104],DeadAcute:[65105],DeadCircumflex:[65106],DeadTilde:[65107],DeadMacron:[65108],DeadBreve:[65109],DeadAboveDot:[65110],DeadUmlaut:[65111],DeadAboveRing:[65112], DeadDoubleacute:[65113],DeadCaron:[65114],DeadCedilla:[65115],DeadOgonek:[65116],DeadIota:[65117],DeadVoicedSound:[65118],DeadSemivoicedSound:[65119],Delete:[65535],Down:[65364],End:[65367],Enter:[65293],EraseEof:[64774],Escape:[65307],Execute:[65378],Exsel:[64797],ExSel:[64797],F1:[65470],F2:[65471],F3:[65472],F4:[65473],F5:[65474],F6:[65475],F7:[65476],F8:[65477],F9:[65478],F10:[65479],F11:[65480],F12:[65481],F13:[65482],F14:[65483],F15:[65484],F16:[65485],F17:[65486],F18:[65487],F19:[65488],F20:[65489], F21:[65490],F22:[65491],F23:[65492],F24:[65493],Find:[65384],GroupFirst:[65036],GroupLast:[65038],GroupNext:[65032],GroupPrevious:[65034],FullWidth:null,HalfWidth:null,HangulMode:[65329],Hankaku:[65321],HanjaMode:[65332],Help:[65386],Hiragana:[65317],HiraganaKatakana:[65319],Home:[65360],Hyper:[65517,65517,65518],Insert:[65379],JapaneseHiragana:[65317],JapaneseKatakana:[65318],JapaneseRomaji:[65316],JunjaMode:[65336],KanaMode:[65325],KanjiMode:[65313],Katakana:[65318],Left:[65361],Meta:[65511,65511, 65512],ModeChange:[65406],NumLock:[65407],PageDown:[65366],PageUp:[65365],Pause:[65299],Play:[64790],PreviousCandidate:[65342],PrintScreen:[64797],Redo:[65382],Right:[65363],RomanCharacters:null,Scroll:[65300],Select:[65376],Separator:[65452],Shift:[65505,65505,65506],SingleCandidate:[65340],Super:[65515,65515,65516],Tab:[65289],Up:[65362],Undo:[65381],Win:[65515],Zenkaku:[65320],ZenkakuHankaku:[65322]},p={65027:!0,65505:!0,65506:!0,65507:!0,65508:!0,65511:!0,65512:!0,65513:!0,65514:!0,65515:!0,65516:!0}; this.modifiers=new Guacamole.Keyboard.ModifierState;this.pressed={};var q={},t={},u=null,v=null,r=function(a,b){return a?a[b]||a[0]:null};this.press=function(a){if(null!==a){if(!c.pressed[a]&&(c.pressed[a]=!0,c.onkeydown)){var b=c.onkeydown(a);q[a]=b;window.clearTimeout(u);window.clearInterval(v);p[a]||(u=window.setTimeout(function(){v=window.setInterval(function(){c.onkeyup(a);c.onkeydown(a)},50)},500));return b}return q[a]||!1}};this.release=function(a){if(c.pressed[a]&&(delete c.pressed[a],window.clearTimeout(u), window.clearInterval(v),null!==a&&c.onkeyup))c.onkeyup(a)};this.reset=function(){for(var a in c.pressed)c.release(parseInt(a));l=[]};var w=function(a){a=Guacamole.Keyboard.ModifierState.fromKeyboardEvent(a);c.modifiers.alt&&!1===a.alt&&(c.release(65513),c.release(65514),c.release(65027));c.modifiers.shift&&!1===a.shift&&(c.release(65505),c.release(65506));c.modifiers.ctrl&&!1===a.ctrl&&(c.release(65507),c.release(65508));c.modifiers.meta&&!1===a.meta&&(c.release(65511),c.release(65512));c.modifiers.hyper&& !1===a.hyper&&(c.release(65515),c.release(65516));c.modifiers=a},B=function(){var a=l[0];if(!a)return null;if(a instanceof g){var b=null,d=[];a.reliable?(b=a.keysym,d=l.splice(0,1)):l[1]instanceof h?(b=l[1].keysym,d=l.splice(0,2)):l[1]&&(b=a.keysym,d=l.splice(0,1));if(0=b||97<=b&&122>=b)&&(255>=b||16777216===(b&4278190080))&&(c.release(65507),c.release(65508),c.release(65513),c.release(65514));var f=!c.press(b);t[a.keyCode]=b;c.modifiers.meta&& 65511!==b&&65512!==b&&c.release(b);for(b=0;bd.width?a:d.width,b>d.height?b:d.height)}var d=this,c=document.createElement("canvas"),f=c.getContext("2d");f.save();var g=!0,h=!0,k=0,l={1:"destination-in",2:"destination-out",4:"source-in",6:"source-atop",8:"source-out",9:"destination-atop",10:"xor",11:"destination-over",12:"copy",14:"source-over",15:"lighter"},n=function(a,b){a=a||0;b=b||0;var e=64*Math.ceil(a/64),h=64*Math.ceil(b/64);if(c.width!==e||c.height!==h){var m=null; g||0===c.width||0===c.height||(m=document.createElement("canvas"),m.width=Math.min(d.width,a),m.height=Math.min(d.height,b),m.getContext("2d").drawImage(c,0,0,m.width,m.height,0,0,m.width,m.height));var p=f.globalCompositeOperation;c.width=e;c.height=h;m&&f.drawImage(m,0,0,m.width,m.height,0,0,m.width,m.height);f.globalCompositeOperation=p;k=0;f.save()}else d.reset();d.width=a;d.height=b};this.autosize=!1;this.width=a;this.height=b;this.getCanvas=function(){return c};this.toCanvas=function(){var a= document.createElement("canvas");a.width=d.width;a.height=d.height;a.getContext("2d").drawImage(d.getCanvas(),0,0);return a};this.resize=function(a,b){a===d.width&&b===d.height||n(a,b)};this.drawImage=function(a,b,c){d.autosize&&e(a,b,c.width,c.height);f.drawImage(c,a,b);g=!1};this.transfer=function(a,b,c,h,k,l,n,w){var m=a.getCanvas();if(!(b>=m.width||c>=m.height)&&(b+h>m.width&&(h=m.width-b),c+k>m.height&&(k=m.height-c),0!==h&&0!==k)){d.autosize&&e(l,n,h,k);a=a.getCanvas().getContext("2d").getImageData(b, c,h,k);b=f.getImageData(l,n,h,k);for(c=0;c=m.width||c>=m.height||(b+h>m.width&&(h=m.width-b),c+k>m.height&&(k=m.height-c),0!==h&&0!==k&&(d.autosize&&e(l,n,h,k),a=a.getCanvas().getContext("2d").getImageData(b, c,h,k),f.putImageData(a,l,n),g=!1))};this.copy=function(a,b,c,h,k,l,n){a=a.getCanvas();b>=a.width||c>=a.height||(b+h>a.width&&(h=a.width-b),c+k>a.height&&(k=a.height-c),0!==h&&0!==k&&(d.autosize&&e(l,n,h,k),f.drawImage(a,b,c,h,k,l,n,h,k),g=!1))};this.moveTo=function(a,b){h&&(f.beginPath(),h=!1);d.autosize&&e(a,b,0,0);f.moveTo(a,b)};this.lineTo=function(a,b){h&&(f.beginPath(),h=!1);d.autosize&&e(a,b,0,0);f.lineTo(a,b)};this.arc=function(a,b,c,g,k,l){h&&(f.beginPath(),h=!1);d.autosize&&e(a,b,0,0);f.arc(a, b,c,g,k,l)};this.curveTo=function(a,b,c,g,k,l){h&&(f.beginPath(),h=!1);d.autosize&&e(k,l,0,0);f.bezierCurveTo(a,b,c,g,k,l)};this.close=function(){f.closePath();h=!0};this.rect=function(a,b,c,g){h&&(f.beginPath(),h=!1);d.autosize&&e(a,b,c,g);f.rect(a,b,c,g)};this.clip=function(){f.clip();h=!0};this.strokeColor=function(a,b,c,d,e,k,l){f.lineCap=a;f.lineJoin=b;f.lineWidth=c;f.strokeStyle="rgba("+d+","+e+","+k+","+l/255+")";f.stroke();g=!1;h=!0};this.fillColor=function(a,b,c,d){f.fillStyle="rgba("+a+ ","+b+","+c+","+d/255+")";f.fill();g=!1;h=!0};this.strokeLayer=function(a,b,c,d){f.lineCap=a;f.lineJoin=b;f.lineWidth=c;f.strokeStyle=f.createPattern(d.getCanvas(),"repeat");f.stroke();g=!1;h=!0};this.fillLayer=function(a){f.fillStyle=f.createPattern(a.getCanvas(),"repeat");f.fill();g=!1;h=!0};this.push=function(){f.save();k++};this.pop=function(){0=c.scrollThreshold){do c.onmousedown&&(c.currentState.down=!0,c.onmousedown(c.currentState)),c.onmouseup&&(c.currentState.down=!1,c.onmouseup(c.currentState)),g-=c.scrollThreshold;while(g>=c.scrollThreshold);g=0}b(a)}var c=this;this.touchMouseThreshold=3;this.scrollThreshold=53;this.PIXELS_PER_LINE=18;this.PIXELS_PER_PAGE=16*this.PIXELS_PER_LINE;this.currentState=new Guacamole.Mouse.State(0,0,!1,!1,!1,!1,!1);this.onmouseout=this.onmousemove= this.onmouseup=this.onmousedown=null;var f=0,g=0;a.addEventListener("contextmenu",function(a){b(a)},!1);a.addEventListener("mousemove",function(d){b(d);if(f)f--;else if(c.currentState.fromClientPosition(a,d.clientX,d.clientY),c.onmousemove)c.onmousemove(c.currentState)},!1);a.addEventListener("mousedown",function(a){b(a);if(!f){switch(a.button){case 0:c.currentState.left=!0;break;case 1:c.currentState.middle=!0;break;case 2:c.currentState.right=!0}if(c.onmousedown)c.onmousedown(c.currentState)}}, !1);a.addEventListener("mouseup",function(a){b(a);if(!f){switch(a.button){case 0:c.currentState.left=!1;break;case 1:c.currentState.middle=!1;break;case 2:c.currentState.right=!1}if(c.onmouseup)c.onmouseup(c.currentState)}},!1);a.addEventListener("mouseout",function(d){d||(d=window.event);for(var f=d.relatedTarget||d.toElement;f;){if(f===a)return;f=f.parentNode}b(d);if(c.currentState.left||c.currentState.middle||c.currentState.right)if(c.currentState.left=!1,c.currentState.middle=!1,c.currentState.right= !1,c.onmouseup)c.onmouseup(c.currentState);if(c.onmouseout)c.onmouseout()},!1);a.addEventListener("selectstart",function(a){b(a)},!1);a.addEventListener("touchmove",e,!1);a.addEventListener("touchstart",e,!1);a.addEventListener("touchend",e,!1);a.addEventListener("DOMMouseScroll",d,!1);a.addEventListener("mousewheel",d,!1);a.addEventListener("wheel",d,!1);var h=function(){var a=document.createElement("div");if(!("cursor"in a.style))return!1;try{a.style.cursor="url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX///+nxBvIAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg\x3d\x3d) 0 0, auto"}catch(l){return!1}return/\burl\([^()]*\)\s+0\s+0\b/.test(a.style.cursor|| "")}();this.setCursor=function(b,c,d){return h?(b=b.toDataURL("image/png"),a.style.cursor="url("+b+") "+c+" "+d+", auto",!0):!1}}; Guacamole.Mouse.State=function(a,b,e,d,c,f,g){var h=this;this.x=a;this.y=b;this.left=e;this.middle=d;this.right=c;this.up=f;this.down=g;this.fromClientPosition=function(a,b,c){h.x=b-a.offsetLeft;h.y=c-a.offsetTop;for(a=a.offsetParent;a&&a!==document.body;)h.x-=a.offsetLeft-a.scrollLeft,h.y-=a.offsetTop-a.scrollTop,a=a.offsetParent;a&&(b=document.body.scrollTop||document.documentElement.scrollTop,h.x-=a.offsetLeft-(document.body.scrollLeft||document.documentElement.scrollLeft),h.y-=a.offsetTop-b)}}; Guacamole.Mouse.Touchpad=function(a){var b=this;this.scrollThreshold=20*(window.devicePixelRatio||1);this.clickTimingThreshold=250;this.clickMoveThreshold=10*(window.devicePixelRatio||1);this.currentState=new Guacamole.Mouse.State(0,0,!1,!1,!1,!1,!1);this.onmousemove=this.onmouseup=this.onmousedown=null;var e=0,d=0,c=0,f=0,g=0,h={1:"left",2:"right",3:"middle"},k=!1,l=null;a.addEventListener("touchend",function(a){a.preventDefault();if(k&&0===a.touches.length){a=(new Date).getTime();var c=h[e];if(b.currentState[c]){b.currentState[c]= !1;if(b.onmouseup)b.onmouseup(b.currentState);l&&(window.clearTimeout(l),l=null)}if(a-f<=b.clickTimingThreshold&&gb.currentState.x?b.currentState.x=0:b.currentState.x>=a.offsetWidth&&(b.currentState.x=a.offsetWidth-1);0>b.currentState.y?b.currentState.y=0:b.currentState.y>=a.offsetHeight&&(b.currentState.y=a.offsetHeight-1);if(b.onmousemove)b.onmousemove(b.currentState); d=h.clientX;c=h.clientY}else if(2===e&&Math.abs(k)>=b.scrollThreshold){m=0=h.clickMoveThreshold}function f(a){a=a.touches[0]; k=!0;l=a.clientX;n=a.clientY}function g(){window.clearTimeout(m);window.clearTimeout(p);k=!1}var h=this,k=!1,l=null,n=null,m=null,p=null;this.scrollThreshold=20*(window.devicePixelRatio||1);this.clickTimingThreshold=250;this.clickMoveThreshold=16*(window.devicePixelRatio||1);this.longPressThreshold=500;this.currentState=new Guacamole.Mouse.State(0,0,!1,!1,!1,!1,!1);this.onmousemove=this.onmouseup=this.onmousedown=null;a.addEventListener("touchend",function(a){k&&(0!==a.touches.length||1!==a.changedTouches.length? g():(window.clearTimeout(p),e("left"),c(a)||(a.preventDefault(),h.currentState.left||(a=a.changedTouches[0],d(a.clientX,a.clientY),b("left"),m=window.setTimeout(function(){e("left");g()},h.clickTimingThreshold)))))},!1);a.addEventListener("touchstart",function(a){1!==a.touches.length?g():(a.preventDefault(),f(a),window.clearTimeout(m),p=window.setTimeout(function(){var c=a.touches[0];d(c.clientX,c.clientY);b("right");e("right");g()},h.longPressThreshold))},!1);a.addEventListener("touchmove",function(a){k&& (c(a)&&window.clearTimeout(p),1!==a.touches.length?g():h.currentState.left&&(a.preventDefault(),a=a.touches[0],d(a.clientX,a.clientY)))},!1)};Guacamole=Guacamole=Guacamole||{}; Guacamole.Object=function(a,b){var e=this,d={};this.index=b;this.onbody=function(a,b,e){var c=d[e];if(c){var f=c.shift();0===c.length&&delete d[e];e=f}else e=null;e&&e(a,b)};this.onundefine=null;this.requestInputStream=function(b,f){if(f){var c=d[b];c||(c=[],d[b]=c);c.push(f)}a.requestObjectInputStream(e.index,b)};this.createOutputStream=function(b,d){return a.createObjectOutputStream(e.index,b,d)}};Guacamole.Object.ROOT_STREAM="/";Guacamole.Object.STREAM_INDEX_MIMETYPE="application/vnd.glyptodon.guacamole.stream-index+json"; Guacamole=Guacamole||{}; Guacamole.OnScreenKeyboard=function(a){var b=this,e={},d={},c=[],f=function(a,b){a.classList?a.classList.add(b):a.className+=" "+b},g=function(a,b){a.classList?a.classList.remove(b):a.className=a.className.replace(/([^ ]+)[ ]*/g,function(a,c){return c===b?"":a})},h=0,k=function(a,b,c,d){this.width=b;this.height=c;this.scale=function(f){a.style.width=b*f+"px";a.style.height=c*f+"px";d&&(a.style.lineHeight=c*f+"px",a.style.fontSize=f+"px")}},l=function(a){a=b.keys[a];if(!a)return null;for(var c=a.length- 1;0<=c;c--){var d=a[c],f;a:{f=d.requires;for(var g=0;g=b?b:256<=b&&1114111>=b?16777216|b:null):b=null);this.keysym=b;this.modifier=a.modifier;this.requires=a.requires||[]};Guacamole=Guacamole||{};Guacamole.OutputStream=function(a,b){var e=this;this.index=b;this.onack=null;this.sendBlob=function(b){a.sendBlob(e.index,b)};this.sendEnd=function(){a.endStream(e.index)}}; Guacamole=Guacamole||{}; Guacamole.Parser=function(){var a=this,b="",e=[],d=-1,c=0;this.receive=function(f){4096=c&&(b=b.substring(c),d-=c,c=0);for(b+=f;d=c){f=b.substring(c,d);var g=b.substring(d,d+1);e.push(f);if(";"==g){f=e.shift();if(null!=a.oninstruction)a.oninstruction(f,e);e.length=0}else if(","!=g)throw Error("Illegal terminator.");c=d+1}f=b.indexOf(".",c);if(-1!=f){g=parseInt(b.substring(d+1,f));if(isNaN(g))throw Error("Non-numeric character in element length.");c=f+1;d=c+g}else{c=b.length; break}}};this.oninstruction=null};Guacamole=Guacamole||{};Guacamole.RawAudioFormat=function(a){this.bytesPerSample=a.bytesPerSample;this.channels=a.channels;this.rate=a.rate}; Guacamole.RawAudioFormat.parse=function(a){var b,e=null,d=1;if("audio/L8;"===a.substring(0,9))a=a.substring(9),b=1;else if("audio/L16;"===a.substring(0,10))a=a.substring(10),b=2;else return null;a=a.split(",");for(var c=0;ca?w(a,d-1,c):c>f&&de.code||255=a)c=0,d=1;else if(2047>=a)c=192,d=2;else if(65535>=a)c=224,d=3;else if(2097151>=a)c=240,d=4;else{b(65533);return}var e=d;if(g+e>=f.length){var h=new Uint8Array(2*(g+e));h.set(f);f=h}g+=e;e=g-1;for(h=1;h>=6;f[e]=c|a}function e(a){for(var c=0;ca.readyState)){var m;try{m=a.status}catch(D){m=200}d||200!==m||(d=h());if(3===a.readyState||4===a.readyState)if(e(),1===p&&(3!==a.readyState||c?4===a.readyState&&c&&clearInterval(c):c=setInterval(b,30)),0===a.status)k.disconnect();else if(200!==a.status)f(a);else{var t;try{t=a.responseText}catch(D){return}for(;l=n){m=t.substring(n,l);var u=t.substring(l,l+1);q.push(m);if(";"===u){m=q.shift();if(k.oninstruction)k.oninstruction(m,q);q.length=0}n=l+1}m= t.indexOf(".",n);if(-1!==m){u=parseInt(t.substring(l+1,m));if(0===u){c&&clearInterval(c);a.onreadystatechange=null;a.abort();d&&g(d);break}n=m+1;l=n+u}else{n=t.length;break}}}}}var c=null,d=null,m=0,l=-1,n=0,q=[];a.onreadystatechange=1===p?function(){3===a.readyState&&(m++,2<=m&&(p=0,a.onreadystatechange=b));b()}:b;b()}function h(){var a=new XMLHttpRequest;a.open("GET",n+k.uuid+":"+r++);a.withCredentials=u;a.send(null);return a}var k=this,l=a+"?connect",n=a+"?read:",m=a+"?write:",p=1,q=!1,t="",u= !!b,v=null;this.sendMessage=function(){function a(a){a=new String(a);return a.length+"."+a}if(k.state===Guacamole.Tunnel.State.OPEN&&0!==arguments.length){for(var b=a(arguments[0]),d=1;dMath.abs(e-d)&&64<=c-f?a.menu.shown=!1:(a.menu.scrollState.left-=g,a.menu.scrollState.top-=h);return!1};a.clientDrag=function(b,c,d,f,e,g,h){64>=c?10>Math.abs(e-d)&&64<=f-c&&(a.menu.shown=!0):a.client.clientProperties.emulateAbsoluteMouse&&(a.client.clientProperties.scrollLeft-=g,a.client.clientProperties.scrollTop-=h);return!1};var E=null,F=0,L=0;a.clientPinch=function(b,c,d,f, e){if(!a.client.clientProperties.emulateAbsoluteMouse)return!1;if(!b)return E=null,!1;E||(E=a.client.clientProperties.scale,F=(f+a.client.clientProperties.scrollLeft)/E,L=(e+a.client.clientProperties.scrollTop)/E);b=E*d/c;b=Math.max(b,a.client.clientProperties.minScale);b=Math.min(b,a.client.clientProperties.maxScale);a.menu.autoFit=!1;a.client.clientProperties.autoFit=!1;a.client.clientProperties.scale=b;a.client.clientProperties.scrollLeft=F*b-f;a.client.clientProperties.scrollTop=L*b-e;return!1}; a.$watch("menu.inputMethod",function(b){a.showOSK="osk"===b;a.showTextInput="text"===b});a.$watch("menu.shown",function(b,c){!b&&c&&a.$broadcast("guacClipboard",a.client.clipboardData);a.client.clientProperties.keyboardEnabled=!b});a.$watch("client.thumbnail.canvas",function(a){q.setIcons(a)});a.$watch("client.clipboardData",function(b){a.menu.shown||n.setLocalClipboard(b);for(var c in G)D[c]=b});a.$watch("client.tunnel.uuid",function(b){b&&u.getSharingProfiles(b).success(function(b){a.sharingProfiles= b})});a.share=function(b){c.createShareLink(a.client,b)};a.isShared=function(){return c.isShared(a.client)};a.getShareLinkCount=function(){var b=0,c;for(c in a.client.shareLinks)b++;return b};a.$on("guacKeydown",function(b,c,f){G[c]=!0;d()&&(c=Object.keys(G),_.isEmpty(_.pick(v,c))||_.isEmpty(_.pick(r,c))||_.isEmpty(_.pick(w,c))||(b.preventDefault(),G={},f.reset(),a.$apply(function(){a.menu.shown=!a.menu.shown})))});a.$on("guacKeyup",function(b,c,d){(b=D[c])&&!a.menu.shown&&n.setLocalClipboard(b); delete D[c];delete G[c]});a.$watch("client.title",function(b){a.page.title=b});var K=function(a){l.updateCurrentToken(k.search())["finally"](function(){p.showStatus(a)})};a.$watch("client.clientState.connectionState",function(b){p.showStatus(!1);if(b){var c;c=A?[A,H,z]:[H,z];var d=a.client.clientState.statusCode;b===f.ConnectionState.CONNECTING||b===f.ConnectionState.WAITING?p.showStatus({title:"CLIENT.DIALOG_HEADER_CONNECTING",text:{key:"CLIENT.TEXT_CLIENT_STATUS_"+b.toUpperCase()}}):b===f.ConnectionState.CLIENT_ERROR? (b=d in x?d.toString(16).toUpperCase():"DEFAULT",d=d in C?J:null,K({className:"error",title:"CLIENT.DIALOG_HEADER_CONNECTION_ERROR",text:{key:"CLIENT.ERROR_CLIENT_"+b},countdown:d,actions:c})):b===f.ConnectionState.TUNNEL_ERROR?(b=d in y?d.toString(16).toUpperCase():"DEFAULT",d=d in I?J:null,K({className:"error",title:"CLIENT.DIALOG_HEADER_CONNECTION_ERROR",text:{key:"CLIENT.ERROR_TUNNEL_"+b},countdown:d,actions:c})):b===f.ConnectionState.DISCONNECTED?K({title:"CLIENT.DIALOG_HEADER_DISCONNECTED", text:{key:"CLIENT.TEXT_CLIENT_STATUS_"+b.toUpperCase()},actions:c}):(b===f.ConnectionState.CONNECTED&&n.getLocalClipboard().then(function(b){a.$broadcast("guacClipboard",b)}),p.showStatus(!1))}});a.formattedScale=function(){return Math.round(100*a.client.clientProperties.scale)};a.zoomIn=function(){a.menu.autoFit=!1;a.client.clientProperties.autoFit=!1;a.client.clientProperties.scale+=.1};a.zoomOut=function(){a.client.clientProperties.autoFit=!1;a.client.clientProperties.scale-=.1};a.changeAutoFit= function(){a.menu.autoFit&&a.client.clientProperties.minScale?a.client.clientProperties.autoFit=!0:(a.client.clientProperties.autoFit=!1,a.client.clientProperties.scale=1)};a.autoFitDisabled=function(){return 1<=a.client.clientProperties.minZoom};a.disconnect=function(){a.client&&a.client.client.disconnect();a.menu.shown=!1};a.clientMenuActions=[{name:"CLIENT.ACTION_DISCONNECT",className:"danger disconnect",callback:a.disconnect}];a.filesystemMenuContents=null;a.hideFilesystemMenu=function(){a.filesystemMenuContents= null};a.showFilesystemMenu=function(b){a.filesystemMenuContents=b};a.isFilesystemMenuShown=function(){return!!a.filesystemMenuContents&&a.menu.shown};a.$watch("isFilesystemMenuShown()",function(){var b=a.filesystemMenuContents;b&&g.refresh(b,b.currentDirectory)});a.getPath=function(a){for(var b=[];a&&a.parent;)b.unshift(a),a=a.parent;return b};a.changeDirectory=function(a,b){g.changeDirectory(a,b)};a.uploadFiles=function(b){if(a.client)for(var d=0;da.client.clientProperties.maxScale&&(a.client.clientProperties.scale=a.client.clientProperties.maxScale))},v=function(a){a= new Guacamole.Mouse.State(a.x/k.getScale(),a.y/k.getScale(),a.left,a.middle,a.right,a.up,a.down);h.sendMouseState(a)},r=function(a){h&&k&&(k.showCursor(!g),v(a))},w=function(a){if(h&&k){k.showCursor(!0);var b=a.x+n.offsetLeft-m.scrollLeft,c=a.y+n.offsetTop-m.scrollTop,d=m.offsetWidth,f=m.offsetHeight;m.scrollLeft+=b>d?b-d:0>b?b:0;m.scrollTop+=c>f?c-f:0>c?c:0;v(a)}};a.$watch("client",function(b){n.innerHTML="";b&&(h=b.client,k=h.getDisplay(),k.scale(a.client.clientProperties.scale),l=k.getElement(), n.appendChild(l),k.getElement().onclick=function(a){a.preventDefault();return!1})});a.$watch("client.clientProperties.scrollLeft",function(b){m.scrollLeft=b;a.client.clientProperties.scrollLeft=m.scrollLeft});a.$watch("client.clientProperties.scrollTop",function(b){m.scrollTop=b;a.client.clientProperties.scrollTop=m.scrollTop});a.$watch("client.managedDisplay.size",function(){a.$evalAsync(u)});a.$watch("client.managedDisplay.cursor",function(a){a&&(g=p.setCursor(a.canvas,a.x,a.y))});a.$watch("client.clientProperties.emulateAbsoluteMouse", function(a){var b;a?(a=q,b=t):(a=t,b=q);a&&(b&&(b.onmousedown=b.onmouseup=b.onmousemove=null,a.currentState.x=b.currentState.x,a.currentState.y=b.currentState.y),a.onmousedown=a.onmouseup=a.onmousemove=w)});a.$watch("client.clientProperties.scale",function(b){b=Math.max(b,a.client.clientProperties.minScale);b=Math.min(b,a.client.clientProperties.maxScale);m.style.overflow=b===a.client.clientProperties.minScale?"hidden":"auto";k&&k.scale(b);b!==a.client.clientProperties.scale&&(a.client.clientProperties.scale= b)});a.$watch("client.clientProperties.autoFit",function(b){b&&(a.client.clientProperties.scale=a.client.clientProperties.minScale)});a.mainElementResized=function(){if(h&&k){var b=f.devicePixelRatio||1,c=m.offsetWidth*b,b=m.offsetHeight*b;k.getWidth()===c&&k.getHeight()===b||h.sendSize(c,b)}a.$evalAsync(u)};p.onmousedown=function(a){document.body.focus();r(a)};p.onmouseup=p.onmousemove=r;p.onmouseout=function(){k&&k.showCursor(!1)};a.$on("guacClipboard",function(b,d){h&&(c.setClipboard(a.client, d),a.client.clipboardData=d)});a.$on("guacKeydown",function(b,c,d){a.client.clientProperties.keyboardEnabled&&!b.defaultPrevented&&(h.sendKeyEvent(1,c),b.preventDefault())});a.$on("guacKeyup",function(b,c,d){a.client.clientProperties.keyboardEnabled&&!b.defaultPrevented&&(h.sendKeyEvent(0,c),b.preventDefault())});a.$on("guacSyntheticKeydown",function(a,b){h.sendKeyEvent(1,b)});a.$on("guacSyntheticKeyup",function(a,b){h.sendKeyEvent(0,b)});n.addEventListener("dragenter",d,!1);n.addEventListener("dragover", d,!1);n.addEventListener("drop",function(b){b.preventDefault();b.stopPropagation();if(a.client){b=b.dataTransfer.files;for(var d=0;da.lastPage&&(d=Math.max(1, d-b+a.lastPage),b=a.lastPage);for(a.pageNumbers=[];d<=b;d++)a.pageNumbers.push(d)},d=function(){var c=a.items(),d=a.pageSize()||10;b=[];if(c)for(var e=0;e=a.firstPage&&b<=a.lastPage};a.isSelected=function(b){return b===a.currentPage};a.hasMorePagesBefore=function(){return a.pageNumbers[0]!==a.firstPage};a.hasMorePagesAfter=function(){return a.pageNumbers[a.pageNumbers.length-1]!==a.lastPage};a.$watchCollection(a.items,function(){d()});a.$watch(a.pageSize,function(){d()});a.$watch(a.pageCount,function(){e()})}]}}]); angular.module("home").directive("guacRecentConnections",[function(){return{restrict:"E",replace:!0,scope:{rootGroups:"\x3d"},templateUrl:"app/home/templates/guacRecentConnections.html",controller:["$scope","$injector",function(a,b){var e=b.get("ActiveConnection"),d=b.get("ClientIdentifier"),c=b.get("RecentConnection"),f=b.get("guacClientManager"),g=b.get("guacHistory");a.activeConnections=[];a.recentConnections=[];a.hasRecentConnections=function(){return!(!a.activeConnections.length&&!a.recentConnections.length)}; var h={},k=function n(a,b){h[d.toString({dataSource:a,type:d.Types.CONNECTION_GROUP,id:b.identifier})]=b;b.childConnections&&b.childConnections.forEach(function(b){h[d.toString({dataSource:a,type:d.Types.CONNECTION,id:b.identifier})]=b});b.childConnectionGroups&&b.childConnectionGroups.forEach(function(b){n(a,b)})};a.$watch("rootGroups",function(b){a.activeConnections=[];a.recentConnections=[];h={};b&&angular.forEach(b,function(a,b){k(b,a)});var d=f.getManagedClients(),n;for(n in d)b=d[n],n in h&& a.activeConnections.push(new e(h[n].name,b));g.recentConnections.forEach(function(b){b.id in h&&!(b.id in d)&&a.recentConnections.push(new c(h[b.id].name,b))})})}]}}]); angular.module("element").directive("guacResize",["$document",function(a){return{restrict:"A",link:function(b,e,d){var c=b.$eval(d.guacResize),f=e[0],g=a[0].createElement("object"),h=f.offsetWidth,k=f.offsetHeight,l=function(){if(f.offsetWidth!==h||f.offsetHeight!==k)c&&b.$evalAsync(function(){c(f.offsetWidth,f.offsetHeight)}),h=f.offsetWidth,k=f.offsetHeight};g.onload=function(){g.contentDocument.defaultView.addEventListener("resize",l);l()};g.className="resize-sensor";g.type="text/html";g.data= "app/element/templates/blank.html";f.insertBefore(g,f.firstChild)}}}]);angular.module("element").directive("guacScroll",[function(){return{restrict:"A",link:function(a,b,e){var d=a.$eval(e.guacScroll),c=b[0];a.$watch(function(){return d.left},function(a){c.scrollLeft=a;d.left=c.scrollLeft});a.$watch(function(){return d.top},function(a){c.scrollTop=a;d.top=c.scrollTop})}}}]); angular.module("settings").directive("guacSettingsConnectionHistory",[function(){return{restrict:"E",replace:!0,scope:{},templateUrl:"app/settings/templates/settingsConnectionHistory.html",controller:["$scope","$injector",function(a,b){var e=b.get("ConnectionHistoryEntryWrapper"),d=b.get("FilterToken"),c=b.get("SortOrder"),f=b.get("$filter"),g=b.get("$routeParams"),h=b.get("$translate"),k=b.get("csvService"),l=b.get("historyService");a.dataSource=g.dataSource;a.historyEntryWrappers=null;a.searchString= "";a.dateFormat=null;a.order=new c(["-startDate","-duration","username","connectionName","remoteHost"]);h("SETTINGS_CONNECTION_HISTORY.FORMAT_DATE").then(function(b){a.dateFormat=b});a.isLoaded=function(){return null!==a.historyEntryWrappers&&null!==a.dateFormat};a.isHistoryEmpty=function(){return a.isLoaded()&&0===a.historyEntryWrappers.length};a.search=function(){a.historyEntryWrappers=null;var b=d.tokenize(a.searchString),c=[];angular.forEach(b,function(a){switch(a.type){case "LITERAL":c.push(a.value); case "WHITESPACE":break;default:c.push(a.consumed)}});l.getConnectionHistory(a.dataSource,c,a.order.predicate.filter(function(a){return"startDate"===a||"-startDate"===a})).success(function(b){a.historyEntryWrappers=[];angular.forEach(b,function(b){a.historyEntryWrappers.push(new e(b))})})};a.downloadCSV=function(){h("SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST SETTINGS_CONNECTION_HISTORY.FILENAME_HISTORY_CSV".split(" ")).then(function(b){var c= [[b["SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME"],b["SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE"],b["SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION"],b["SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME"],b["SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST"]]];angular.forEach(f("orderBy")(a.historyEntryWrappers,a.order.predicate),function(b){c.push([b.username,f("date")(b.startDate,a.dateFormat),b.duration/1E3,b.connectionName,b.remoteHost])}); saveAs(k.toBlob(c),b["SETTINGS_CONNECTION_HISTORY.FILENAME_HISTORY_CSV"])})};a.search()}]}}]); angular.module("settings").directive("guacSettingsConnections",[function(){return{restrict:"E",replace:!0,scope:{},templateUrl:"app/settings/templates/settingsConnections.html",controller:["$scope","$injector",function(a,b){var e=b.get("ConnectionGroup"),d=b.get("GroupListItem"),c=b.get("PermissionSet"),f=b.get("$location"),g=b.get("$routeParams"),h=b.get("authenticationService"),k=b.get("connectionGroupService"),l=b.get("dataSourceService");b.get("guacNotification");b=b.get("permissionService"); h=h.getCurrentUsername();a.dataSource=g.dataSource;a.rootGroups=null;a.permissions=null;a.filteredConnectionProperties=["name","protocol"];a.filteredConnectionGroupProperties=["name"];a.isLoaded=function(){return null!==a.rootGroup&&null!==a.permissions};a.canCreateConnections=function(){return a.permissions?c.hasSystemPermission(a.permissions,c.SystemPermissionType.ADMINISTER)||c.hasSystemPermission(a.permissions,c.SystemPermissionType.CREATE_CONNECTION)?!0:!1:!1};a.canCreateConnectionGroups=function(){return a.permissions? c.hasSystemPermission(a.permissions,c.SystemPermissionType.ADMINISTER)||c.hasSystemPermission(a.permissions,c.SystemPermissionType.CREATE_CONNECTION_GROUP)?!0:!1:!1};a.canCreateSharingProfiles=function(){return a.permissions?c.hasSystemPermission(a.permissions,c.SystemPermissionType.ADMINISTER)||c.hasSystemPermission(a.permissions,c.SystemPermissionType.CREATE_SHARING_PROFILE)?!0:!1:!1};a.canManageConnections=function(){return a.permissions?a.canCreateConnections()||a.canCreateConnectionGroups()|| a.canCreateSharingProfiles()||c.hasConnectionPermission(a.permissions,c.ObjectPermissionType.UPDATE)||c.hasConnectionPermission(a.permissions,c.ObjectPermissionType.DELETE)||c.hasConnectionGroupPermission(a.permissions,c.ObjectPermissionType.UPDATE)||c.hasConnectionGroupPermission(a.permissions,c.ObjectPermissionType.DELETE)?!0:!1:!1};a.canUpdateConnection=function(b){return a.permissions?c.hasSystemPermission(a.permissions,c.SystemPermissionType.ADMINISTER)||c.hasConnectionPermission(a.permissions, c.ObjectPermissionType.UPDATE,b)?!0:!1:!1};a.canUpdateConnectionGroup=function(b){return a.permissions?c.hasSystemPermission(a.permissions,c.SystemPermissionType.ADMINISTER)||c.hasConnectionGroupPermission(a.permissions,c.ObjectPermissionType.UPDATE,b)?!0:!1:!1};var n=function p(b){if(b.type===d.Type.CONNECTION_GROUP){var c=b.children;if(!b||a.canUpdateConnectionGroup(b.identifier))a.canCreateConnections()&&c.push(new d({type:"new-connection",dataSource:a.dataSource,weight:1,wrappedItem:b})),a.canCreateConnectionGroups()&& c.push(new d({type:"new-connection-group",dataSource:a.dataSource,weight:1,wrappedItem:b}))}else b.type===d.Type.CONNECTION&&(c=b.children,(!b||a.canUpdateConnection(b.identifier))&&a.canCreateSharingProfiles()&&c.push(new d({type:"new-sharing-profile",dataSource:a.dataSource,weight:1,wrappedItem:b})));angular.forEach(b.children,p)};a.rootItemDecorator=function(a){angular.forEach(a,n)};b.getPermissions(a.dataSource,h).success(function(b){a.permissions=b;c.removeConnectionGroupPermission(a.permissions, c.ObjectPermissionType.UPDATE,e.ROOT_IDENTIFIER);a.canManageConnections()||f.path("/");l.apply(k.getConnectionGroupTree,[a.dataSource],e.ROOT_IDENTIFIER,[c.ObjectPermissionType.UPDATE,c.ObjectPermissionType.DELETE]).then(function(b){a.rootGroups=b})})}]}}]); angular.module("settings").directive("guacSettingsPreferences",[function(){return{restrict:"E",replace:!0,scope:{},templateUrl:"app/settings/templates/settingsPreferences.html",controller:["$scope","$injector",function(a,b){var e=b.get("PermissionSet"),d=b.get("$translate"),c=b.get("authenticationService"),f=b.get("guacNotification"),g=b.get("languageService"),h=b.get("permissionService"),k=b.get("preferenceService"),l=b.get("userService"),n={name:"SETTINGS_PREFERENCES.ACTION_ACKNOWLEDGE",callback:function(){f.showStatus(!1)}}, m=c.getCurrentUsername(),p=c.getDataSource();a.preferences=k.preferences;a.languages=null;a.changeLanguage=function(){d.use(a.preferences.language)};a.newPassword=null;a.newPasswordMatch=null;a.canChangePassword=null;a.updatePassword=function(){a.newPasswordMatch!==a.newPassword?f.showStatus({className:"error",title:"SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR",text:{key:"SETTINGS_PREFERENCES.ERROR_PASSWORD_MISMATCH"},actions:[n]}):a.newPassword?l.updateUserPassword(p,m,a.oldPassword,a.newPassword).success(function(){a.oldPassword= null;a.newPassword=null;a.newPasswordMatch=null;f.showStatus({text:{key:"SETTINGS_PREFERENCES.INFO_PASSWORD_CHANGED"},actions:[n]})}).error(function(a){f.showStatus({className:"error",title:"SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR",text:a.translatableMessage,actions:[n]})}):f.showStatus({className:"error",title:"SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR",text:{key:"SETTINGS_PREFERENCES.ERROR_PASSWORD_BLANK"},actions:[n]})};g.getLanguages().success(function(b){a.languages=b});h.getPermissions(p,m).success(function(b){a.canChangePassword= e.hasUserPermission(b,e.ObjectPermissionType.UPDATE,m)}).error(function(b){a.canChangePassword=!1});a.isLoaded=function(){return null!==a.canChangePassword&&null!==a.languages}}]}}]); angular.module("settings").directive("guacSettingsSessions",[function(){return{restrict:"E",replace:!0,scope:{},templateUrl:"app/settings/templates/settingsSessions.html",controller:["$scope","$injector",function(a,b){var e=b.get("ActiveConnectionWrapper"),d=b.get("ConnectionGroup"),c=b.get("SortOrder"),f=b.get("$filter"),g=b.get("$translate"),h=b.get("$q"),k=b.get("activeConnectionService"),l=b.get("authenticationService"),n=b.get("connectionGroupService"),m=b.get("dataSourceService"),p=b.get("guacNotification"); b=l.getAvailableDataSources();a.wrappers=null;a.wrapperOrder=new c(["activeConnection.username","startDate","activeConnection.remoteHost","name"]);a.filteredWrapperProperties=["activeConnection.username","startDate","activeConnection.remoteHost","name"];var q=null,t=null,u=null,v={},r=function z(a,b){angular.forEach(b.childConnections,function(b){t[a][b.identifier]=b});angular.forEach(b.childConnectionGroups,function(b){z(a,b)})},w=function(){q&&t&&u&&(a.wrappers=[],angular.forEach(q,function(b,c){angular.forEach(b, function(b,d){a.wrappers.push(new e({dataSource:c,name:t[c][b.connectionIdentifier].name,startDate:f("date")(b.startDate,u),activeConnection:b}))})}))};m.apply(n.getConnectionGroupTree,b,d.ROOT_IDENTIFIER).then(function(a){t={};angular.forEach(a,function(a,b){t[b]={};r(b,a)});w()});m.apply(k.getActiveConnections,b).then(function(a){q=a;w()});g("SETTINGS_SESSIONS.FORMAT_STARTDATE").then(function(a){u=a;w()});a.isLoaded=function(){return null!==a.wrappers};var B={name:"SETTINGS_SESSIONS.ACTION_ACKNOWLEDGE", callback:function(){p.showStatus(!1)}},x={name:"SETTINGS_SESSIONS.ACTION_CANCEL",callback:function(){p.showStatus(!1)}},C={name:"SETTINGS_SESSIONS.ACTION_DELETE",className:"danger",callback:function(){y();p.showStatus(!1)}},y=function(){var b=[];angular.forEach(v,function(a,c){a=Object.keys(a);a.length&&b.push(k.deleteActiveConnections(c,a))});h.all(b).then(function(){a.wrappers=a.wrappers.filter(function(a){return!(a.activeConnection.identifier in(v[a.dataSource]||{}))});v={}},function(a){p.showStatus({className:"error", title:"SETTINGS_SESSIONS.DIALOG_HEADER_ERROR",text:a.translatableMessage,actions:[B]})})};a.deleteSessions=function(){p.showStatus({title:"SETTINGS_SESSIONS.DIALOG_HEADER_CONFIRM_DELETE",text:{key:"SETTINGS_SESSIONS.TEXT_CONFIRM_DELETE"},actions:[C,x]})};a.canDeleteSessions=function(){for(var a in v)for(var b in v[a])return!0;return!1};a.wrapperSelectionChange=function(a){var b=v[a.dataSource];b||(b=v[a.dataSource]={});a.checked?b[a.activeConnection.identifier]=a:delete b[a.activeConnection.identifier]}}]}}]); angular.module("settings").directive("guacSettingsUsers",[function(){return{restrict:"E",replace:!0,scope:{},templateUrl:"app/settings/templates/settingsUsers.html",controller:["$scope","$injector",function(a,b){var e=b.get("ManageableUser"),d=b.get("PermissionSet"),c=b.get("SortOrder"),f=b.get("$location"),g=b.get("$translate"),h=b.get("authenticationService"),k=b.get("dataSourceService");b.get("guacNotification");var l=b.get("permissionService"),n=b.get("userService");b=h.getCurrentUsername();var m= h.getAvailableDataSources();a.manageableUsers=null;a.newUsername="";a.permissions=null;a.filteredUserProperties=["user.lastActive","user.username"];a.dateFormat=null;a.order=new c(["user.username","-user.lastActive"]);g("SETTINGS_USERS.FORMAT_DATE").then(function(b){a.dateFormat=b});a.isLoaded=function(){return null!==a.dateFormat&&null!==a.manageableUsers&&null!==a.permissions};a.getDefaultDataSource=function(){if(!a.permissions)return null;for(var b in a.permissions){var c=a.permissions[b];if(d.hasSystemPermission(c, d.SystemPermissionType.ADMINISTER)||d.hasSystemPermission(c,d.SystemPermissionType.CREATE_USER))return b}return null};a.canCreateUsers=function(){return null!==a.getDefaultDataSource()};var p=function(){if(!a.permissions)return!1;if(a.canCreateUsers())return!0;for(var b in a.permissions){var c=a.permissions[b];if(d.hasUserPermission(c,d.ObjectPermissionType.UPDATE)||d.hasUserPermission(c,d.ObjectPermissionType.DELETE))return!0}return!1};k.apply(l.getPermissions,m,b).then(function(b){a.permissions= b;p()||f.path("/");(a.canCreateUsers()?k.apply(n.getUsers,m):k.apply(n.getUsers,m,[d.ObjectPermissionType.UPDATE,d.ObjectPermissionType.DELETE])).then(function(c){var f={};a.manageableUsers=[];angular.forEach(m,function(g){angular.forEach(c[g],function(c){f[c.username]||(d.hasSystemPermission(b[g],d.ObjectPermissionType.ADMINISTER)||d.hasUserPermission(b[g],d.ObjectPermissionType.UPDATE,c.username)||d.hasUserPermission(b[g],d.ObjectPermissionType.DELETE,c.username)||(g=a.getDefaultDataSource()),f[c.username]= c,a.manageableUsers.push(new e({dataSource:g,user:c})))})})})})}]}}]);angular.module("list").directive("guacSortOrder",[function(){return{restrict:"A",link:function(a,b,e){var d=a.$eval(e.guacSortOrder),c=a.$eval(e.guacSortProperty);b.addClass("sortable");a.$watch(function(){return d.primary===c},function(a){b.toggleClass("sort-primary",a)});a.$watch(function(){return d.descending},function(a){b.toggleClass("sort-descending",a)});b[0].addEventListener("click",function(){a.$evalAsync(function(){d.togglePrimary(c)})})}}}]); angular.module("textInput").directive("guacTextInput",[function(){return{restrict:"E",replace:!0,scope:{needsFocus:"\x3d?"},templateUrl:"app/textInput/templates/guacTextInput.html",controller:["$scope","$rootScope","$element","$timeout",function(a,b,e,d){var c={65027:!0,65288:!0,65289:!0,65293:!0,65307:!0,65360:!0,65361:!0,65362:!0,65363:!0,65364:!0,65367:!0,65380:!0,65470:!0,65471:!0,65472:!0,65473:!0,65474:!0,65475:!0,65476:!0,65477:!0,65478:!0,65479:!0,65480:!0,65481:!0,65505:!0,65506:!0,65507:!0, 65508:!0,65513:!0,65514:!0,65535:!0};a.sentText=[];a.altPressed=!1;a.ctrlPressed=!1;var f=e.find(".target")[0],g=!1;f.onfocus=function(){g=!0;p(4)};f.onblur=function(){g=!1;f.focus()};var h=!1;f.addEventListener("compositionstart",function(a){h=!0},!1);f.addEventListener("compositionend",function(a){h=!1},!1);var k=function(a){b.$broadcast("guacSyntheticKeydown",a);b.$broadcast("guacSyntheticKeyup",a)},l=function(a){if(10===a)k(65293),m();else if(a=31>=a||127<=a&&159>=a?65280|a:0<=a&&255>=a?a:256<= a&&1114111>=a?16777216|a:null)k(a),m()},n=function(b){for(var c="",f=0;fc.length){var d=4-f.selectionStart; for(b=0;bb.touches.length&&(b.stopPropagation(),d&&a.$apply(function(){!1===d(!1,c,f,g,h)&&b.preventDefault()}),c=null)},!1)}}}]); angular.module("element").directive("guacUpload",["$document",function(a){return{restrict:"A",link:function(b,e,d){var c=b.$eval(d.guacUpload);e=e[0];var f=a[0].createElement("form"),g=a[0].createElement("input");g.type="file";g.multiple=!0;f.appendChild(g);g.addEventListener("change",function(){b.$apply(function(){c&&0=d&&(e=4294967295<<32-d)}for(var d=0,c=1;4>=c;c++){var f=parseInt(b[c]);if(255b;b++)if(c.addressGroups[b]!==(a.addressGroups[b]&a.netmaskGroups[b]&c.netmaskGroups[b]))return!1;return!0}},b=function(a){var b=[];for(a=Math.min(128,a);16<=a;)b.push(65535),a-=16;for(0=a&&b.push(65535&65535<<16-a);8>b.length;)b.push(0);return b},e=function(a){var b=[];a=a.split(":");angular.forEach(a,function(a){a=parseInt(a|| "0",16);b.push(a)});return b};a.parse=function(d){d=/^([0-9a-f]{0,4}(?::[0-9a-f]{0,4}){0,7})(?:\/([0-9]{1,3}))?$/.exec(d);if(!d)return null;var c=d[1];d=(d=d[2])?b(parseInt(d)):b(128);var f=c.indexOf("::");if(-1===f)c=e(c);else{for(var g=e(c.substring(0,f)),c=e(c.substring(f+2)),f=8-g.length-c.length;0k.status?h.resolve():"application/json"===k.getResponseHeader("Content-Type")?h.reject(angular.fromJson(k.responseText)):400<=k.status&&500>k.status?h.reject(new b({type:b.Type.STREAM_ERROR,statusCode:Guacamole.Status.Code.CLIENT_FORBIDDEN, message:"HTTP "+k.status})):h.reject(new b({type:b.Type.STREAM_ERROR,statusCode:Guacamole.Status.Code.INTERNAL_ERROR,message:"HTTP "+k.status})))};k.open("POST",a,!0);k.send(g);return h.promise};return a}]); angular.module("rest").factory("User",[function(){var a=function(a){a=a||{};this.username=a.username;this.password=a.password;this.lastActive=a.lastActive;this.attributes={}};a.Attributes={FULL_NAME:"guac-full-name",EMAIL_ADDRESS:"guac-email-address",ORGANIZATION:"guac-organization",ORGANIZATIONAL_ROLE:"guac-organizational-role"};return a}]); angular.module("rest").factory("UserCredentials",["$injector",function(a){var b=a.get("$window"),e=a.get("Field"),d=function(a){a=a||{};this.expected=a.expected;this.values=a.values};d.getQueryParameters=function(a){var b=[];angular.forEach(a.expected,function(c){if(c.type===e.Type.QUERY_PARAMETER){c=c.name;var d=a.values[c];b.push(encodeURIComponent(c)+"\x3d"+encodeURIComponent(d))}});return b.join("\x26")};d.getLink=function(a){var c=b.location.origin+b.location.pathname+"#/";(a=d.getQueryParameters(a))&& (c+="?"+a);return c};return d}]); angular.module("navigation").factory("userPageService",["$injector",function(a){var b=a.get("ClientIdentifier"),e=a.get("ConnectionGroup"),d=a.get("PageDefinition"),c=a.get("PermissionSet"),f=a.get("$q"),g=a.get("authenticationService"),h=a.get("connectionGroupService"),k=a.get("dataSourceService"),l=a.get("permissionService"),n=a.get("translationStringService");a={};var m=new d({name:"USER_MENU.ACTION_NAVIGATE_HOME",url:"/"}),p=function(a){var c=null,f;for(f in a){var g=a[f],h=g.childConnections|| [],g=g.childConnectionGroups||[],k=h.length+g.length;if(null===c&&1===k)h=h[0],g=g[0],h&&(c=new d({name:h.name,url:"/client/"+b.toString({dataSource:f,type:b.Types.CONNECTION,id:h.identifier})})),g&&g.type===e.Type.BALANCING&&_.isEmpty(g.childConnections)&&_.isEmpty(g.childConnectionGroups)&&(c=new d({name:g.name,url:"/client/"+b.toString({dataSource:f,type:b.Types.CONNECTION_GROUP,id:g.identifier})}));else if(1<=k){c=null;break}}return c||m};a.getHomePage=function(){var a=f.defer();k.apply(h.getConnectionGroupTree, g.getAvailableDataSources(),e.ROOT_IDENTIFIER).then(function(b){a.resolve(p(b))});return a.promise};var q=function(a){var b=[],f=[],h=[],k=[],l=[];angular.forEach(g.getAvailableDataSources(),function(b){var d=a[b];d&&(d=angular.copy(d),c.removeConnectionGroupPermission(d,c.ObjectPermissionType.UPDATE,e.ROOT_IDENTIFIER),c.removeUserPermission(d,c.ObjectPermissionType.UPDATE,g.getCurrentUsername()),(c.hasSystemPermission(d,c.SystemPermissionType.ADMINISTER)||c.hasSystemPermission(d,c.SystemPermissionType.CREATE_USER)|| c.hasUserPermission(d,c.ObjectPermissionType.UPDATE)||c.hasUserPermission(d,c.ObjectPermissionType.DELETE)||c.hasUserPermission(d,c.ObjectPermissionType.ADMINISTER))&&f.push(b),(c.hasSystemPermission(d,c.SystemPermissionType.ADMINISTER)||c.hasSystemPermission(d,c.SystemPermissionType.CREATE_CONNECTION)||c.hasSystemPermission(d,c.SystemPermissionType.CREATE_CONNECTION_GROUP)||c.hasConnectionPermission(d,c.ObjectPermissionType.UPDATE)||c.hasConnectionGroupPermission(d,c.ObjectPermissionType.UPDATE)|| c.hasConnectionPermission(d,c.ObjectPermissionType.DELETE)||c.hasConnectionGroupPermission(d,c.ObjectPermissionType.DELETE)||c.hasConnectionPermission(d,c.ObjectPermissionType.ADMINISTER)||c.hasConnectionGroupPermission(d,c.ObjectPermissionType.ADMINISTER))&&h.push(b),c.hasSystemPermission(d,c.SystemPermissionType.ADMINISTER)&&(l.push(b),k.push(b)))});l.length&&b.push(new d({name:"USER_MENU.ACTION_MANAGE_SESSIONS",url:"/settings/sessions"}));angular.forEach(k,function(a){b.push(new d({name:["USER_MENU.ACTION_VIEW_HISTORY", n.canonicalize("DATA_SOURCE_"+a)+".NAME"],url:"/settings/"+encodeURIComponent(a)+"/history"}))});f.length&&b.push(new d({name:"USER_MENU.ACTION_MANAGE_USERS",url:"/settings/users"}));angular.forEach(h,function(a){b.push(new d({name:["USER_MENU.ACTION_MANAGE_CONNECTIONS",n.canonicalize("DATA_SOURCE_"+a)+".NAME"],url:"/settings/"+encodeURIComponent(a)+"/connections"}))});b.push(new d({name:"USER_MENU.ACTION_MANAGE_PREFERENCES",url:"/settings/preferences"}));return b};a.getSettingsPages=function(){var a= f.defer();k.apply(l.getPermissions,g.getAvailableDataSources(),g.getCurrentUsername()).then(function(b){a.resolve(q(b))});return a.promise};var t=function(a,b){var c=[];a=p(a);b=q(b);(a===m||b.length)&&c.push(a);b.length&&c.push(new d({name:"USER_MENU.ACTION_MANAGE_SETTINGS",url:b[0].url}));return c};a.getMainPages=function(){var a=f.defer(),b=null,c=null,d=function(){b&&c&&a.resolve(t(b,c))};k.apply(h.getConnectionGroupTree,g.getAvailableDataSources(),e.ROOT_IDENTIFIER).then(function(a){b=a;d()}); k.apply(l.getPermissions,g.getAvailableDataSources(),g.getCurrentUsername()).then(function(a){c=a;d()});return a.promise};return a}]);angular.module("rest").factory("UserPasswordUpdate",[function(){return function(a){a=a||{};this.oldPassword=a.oldPassword;this.newPassword=a.newPassword}}]); angular.module("rest").factory("userService",["$injector",function(a){var b=a.get("$http");a.get("$q");var e=a.get("authenticationService"),d=a.get("cacheService"),c=a.get("UserPasswordUpdate");return{getUsers:function(a,c){var f={token:e.getCurrentToken()};c&&(f.permission=c);return b({cache:d.users,method:"GET",url:"api/session/data/"+encodeURIComponent(a)+"/users",params:f})},getUser:function(a,c){var f={token:e.getCurrentToken()};return b({cache:d.users,method:"GET",url:"api/session/data/"+encodeURIComponent(a)+ "/users/"+encodeURIComponent(c),params:f})},deleteUser:function(a,c){var f={token:e.getCurrentToken()};return b({method:"DELETE",url:"api/session/data/"+encodeURIComponent(a)+"/users/"+encodeURIComponent(c.username),params:f}).success(function(){d.users.removeAll()})},createUser:function(a,c){var f={token:e.getCurrentToken()};return b({method:"POST",url:"api/session/data/"+encodeURIComponent(a)+"/users",params:f,data:c}).success(function(){d.users.removeAll()})},saveUser:function(a,c){var f={token:e.getCurrentToken()}; return b({method:"PUT",url:"api/session/data/"+encodeURIComponent(a)+"/users/"+encodeURIComponent(c.username),params:f,data:c}).success(function(){d.users.removeAll()})},updateUserPassword:function(a,g,h,k){var f={token:e.getCurrentToken()};return b({method:"PUT",url:"api/session/data/"+encodeURIComponent(a)+"/users/"+encodeURIComponent(g)+"/password",params:f,data:new c({oldPassword:h,newPassword:k})}).success(function(){d.users.removeAll()})}}}]);