From 6d1e216115d5ab84dafed0c91c40f58f7857c877 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Wed, 12 Jan 2011 18:09:54 -0600 Subject: [PATCH] fork noVNC, rename to websockify, cleanup. Split of wsproxy from noVNC and rename it websockify. --- .gitignore | 3 +- LICENSE.txt | 4 +- Makefile | 11 + README.md | 318 ++--- docs/TODO | 34 - docs/browsers.md | 126 -- docs/links | 70 - docs/rfb_notes | 147 -- docs/rfbproto-3.3.pdf | Bin 110778 -> 0 bytes docs/rfbproto-3.7.pdf | Bin 165552 -> 0 bytes docs/rfbproto-3.8.pdf | Bin 143840 -> 0 bytes include/VT100.js | 919 +++++++++++++ include/black.css | 122 -- include/canvas.js | 783 ----------- include/des.js | 273 ---- include/keysym.js | 99 ++ include/plain.css | 97 -- include/playback.js | 90 -- include/rfb.js | 1622 ----------------------- include/ui.js | 420 ------ include/util.js | 2 +- include/vnc.js | 53 - include/webutil.js | 2 +- {utils => include}/wstelnet.js | 0 {utils => other}/Makefile | 11 +- {utils => other}/launch.sh | 0 {utils => other}/md5.c | 0 {utils => other}/md5.h | 0 {utils => other}/md5_test.c | 0 {utils => other}/websocket.c | 0 {utils => other}/websocket.h | 0 utils/wsproxy.c => other/websockify.c | 0 utils/wsproxy.js => other/websockify.js | 0 {utils => other}/wswrap | 0 {utils => other}/wswrapper.c | 0 {utils => other}/wswrapper.h | 0 utils/rebind => rebind | 0 utils/rebind.c => rebind.c | 0 tests/canvas.html | 147 -- tests/cursor.html | 135 -- tests/face.png | Bin 2303 -> 0 bytes tests/face.png.js | 1 - tests/input.html | 62 - tests/keyboard.html | 67 - tests/vnc_perf.html | 197 --- tests/vnc_playback.html | 128 -- tests/wsecho.html | 177 ++- {utils => tests}/wsecho.py | 3 +- tests/wsencoding.py | 2 +- tests/wstest.html | 253 +++- tests/wstest.py | 172 ++- utils/README.md | 163 --- utils/VT100.js | 1 - utils/include | 1 - utils/web.py | 55 - utils/wsecho.html | 176 --- utils/wstest.html | 252 ---- utils/wstest.py | 171 --- vnc.html | 30 - vnc_auto.html | 116 -- utils/websocket.py => websocket.py | 80 +- utils/wsproxy.py => websockify | 0 utils/wstelnet.html => wstelnet.html | 6 +- 63 files changed, 1821 insertions(+), 5780 deletions(-) create mode 100644 Makefile delete mode 100644 docs/browsers.md delete mode 100644 docs/links delete mode 100644 docs/rfb_notes delete mode 100644 docs/rfbproto-3.3.pdf delete mode 100644 docs/rfbproto-3.7.pdf delete mode 100644 docs/rfbproto-3.8.pdf create mode 100644 include/VT100.js delete mode 100644 include/black.css delete mode 100644 include/canvas.js delete mode 100644 include/des.js create mode 100644 include/keysym.js delete mode 100644 include/plain.css delete mode 100644 include/playback.js delete mode 100644 include/rfb.js delete mode 100644 include/ui.js delete mode 100644 include/vnc.js rename {utils => include}/wstelnet.js (100%) rename {utils => other}/Makefile (64%) rename {utils => other}/launch.sh (100%) rename {utils => other}/md5.c (100%) rename {utils => other}/md5.h (100%) rename {utils => other}/md5_test.c (100%) rename {utils => other}/websocket.c (100%) rename {utils => other}/websocket.h (100%) rename utils/wsproxy.c => other/websockify.c (100%) rename utils/wsproxy.js => other/websockify.js (100%) rename {utils => other}/wswrap (100%) rename {utils => other}/wswrapper.c (100%) rename {utils => other}/wswrapper.h (100%) rename utils/rebind => rebind (100%) rename utils/rebind.c => rebind.c (100%) delete mode 100644 tests/canvas.html delete mode 100644 tests/cursor.html delete mode 100644 tests/face.png delete mode 100644 tests/face.png.js delete mode 100644 tests/input.html delete mode 100644 tests/keyboard.html delete mode 100644 tests/vnc_perf.html delete mode 100644 tests/vnc_playback.html mode change 120000 => 100644 tests/wsecho.html rename {utils => tests}/wsecho.py (97%) mode change 120000 => 100644 tests/wstest.html mode change 120000 => 100755 tests/wstest.py delete mode 100644 utils/README.md delete mode 120000 utils/VT100.js delete mode 120000 utils/include delete mode 100755 utils/web.py delete mode 100644 utils/wsecho.html delete mode 100644 utils/wstest.html delete mode 100755 utils/wstest.py delete mode 100644 vnc.html delete mode 100644 vnc_auto.html rename utils/websocket.py => websocket.py (88%) rename utils/wsproxy.py => websockify (100%) rename utils/wstelnet.html => wstelnet.html (95%) diff --git a/.gitignore b/.gitignore index 6c1a93c..1a9d961 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ *.pyc *.o -wsproxy -tests/data_*.js +*.so diff --git a/LICENSE.txt b/LICENSE.txt index a2eb8eb..c8242fe 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,10 +1,8 @@ -noVNC is licensed under the LGPL version 3 (see docs/LICENSE.GPL-3 and +websockify is licensed under the LGPL version 3 (see docs/LICENSE.GPL-3 and docs/LICENSE.LGPL-3) with the following exceptions: include/base64.js : Dual GPL-2 or LGPL-2.1 - incluee/des.js : Various BSD style licenses - include/web-socket-js/ : New BSD license. Source code at http://github.com/gimite/web-socket-js diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7dc1bc4 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +TARGETS=rebind.so +CFLAGS += -fPIC + +all: $(TARGETS) + +rebind.so: rebind.o + $(CC) $(LDFLAGS) $^ -shared -fPIC -ldl -o $@ + +clean: + rm -f rebind.o rebind.so + diff --git a/README.md b/README.md index 3e1eb60..20f8e79 100644 --- a/README.md +++ b/README.md @@ -1,207 +1,165 @@ -## noVNC: HTML5 VNC Client +## websockify: WebSockets support for any application/server + +websockify was formerly named `wsproxy` and was part of the +[noVNC](https://github.com/kanaka/noVNC) project. + +At the most basic level, websockify just translates WebSockets traffic +to normal socket traffic. websockify accepts the WebSockets handshake, +parses it, and then begins forwarding traffic between the client and +the target in both directions. WebSockets payload data is UTF-8 +encoded so in order to transport binary data it must use an encoding +that can be encapsulated within UTF-8. websockify uses base64 to encode +all traffic to and from the client. Also, WebSockets traffic starts +with '\0' (0) and ends with '\xff' (255). Some buffering is done in +case the data from the client is not a full WebSockets frame (i.e. +does not end in 255). + + +### Additional websockify features + +These are not necessary for the basic operation. + +* Daemonizing: When the `-D` option is specified, websockify runs + in the background as a daemon process. + +* SSL (the wss:// WebSockets URI): This is detected automatically by + websockify by sniffing the first byte sent from the client and then + wrapping the socket if the data starts with '\x16' or '\x80' + (indicating SSL). + +* Flash security policy: websockify detects flash security policy + requests (again by sniffing the first packet) and answers with an + appropriate flash security policy response (and then closes the + port). This means no separate flash security policy server is needed + for supporting the flash WebSockets fallback emulator. + +* Session recording: This feature that allows recording of the traffic + sent and received from the client to a file using the `--record` + option. + +* Mini-webserver: websockify can detect and respond to normal web + requests on the same port as the WebSockets proxy and Flash security + policy. This functionality is activate with the `--web DIR` option + where DIR is the root of the web directory to serve. + +* Wrap a program: see the "Wrap a Program" section below. + + +### Implementations of websockify + +The primary implementation of websockify is in python. There are two +other implementations of websockify in C, and Node (node.js) in the +`other` directory. + +Here is the feature support matrix for the the websockify +implementations: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProgramLanguageMultiprocessDaemonizeSSL/wssFlash Policy ServerSession RecordWeb ServerProgram Wrap
websockifypythonyesyesyes 1yesyesyesyes
other/websockifyCyesyesyesyesnonono
other/websockify.jsNode (node.js)yesnononononono
-### Description +* Note 1: to use SSL/wss with python 2.5 or older, see the following + section on *Building the Python ssl module*. -noVNC is a VNC client implemented using HTML5 technologies, -specifically Canvas and WebSockets (supports 'wss://' encryption). -noVNC is licensed under the -[LGPLv3](http://www.gnu.org/licenses/lgpl.html). -Special thanks to [Sentry Data Systems](http://www.sentryds.com) for -sponsoring ongoing development of this project (and for employing me). +### Wrap a Program -Notable commits, announcements and news are posted to -@noVNC +In addition to proxying from a source address to a target address +(which may be on a different system), websockify has the ability to +launch a program on the local system and proxy WebSockets traffic to +a normal TCP port owned/bound by the program. +The is accomplished with a small LD_PRELOAD library (`rebind.so`) +which intercepts bind() system calls by the program. The specified +port is moved to a new localhost/loopback free high port. websockify +then proxies WebSockets traffic directed to the original port to the +new (moved) port of the program. -### Screenshots +The program wrap mode is invoked by replacing the target with `--` +followed by the program command line to wrap. -Running in Chrome before and after connecting: + `./websockify 2023 -- PROGRAM ARGS` -  +The `--wrap-mode` option can be used to indicate what action to take +when the wrapped program exits or daemonizes. -See more screenshots here. +Here is an example of using websockify to wrap the vncserver command +(which backgrounds itself) for use with +[noVNC](https://github.com/kanaka/noVNC): + `./websockify 5901 --wrap-mode=ignore -- vncserver -geometry 1024x768 :1` -### Projects/Companies using noVNC +Here is an example of wrapping telnetd (from krb5-telnetd).telnetd +exits after the connection closes so the wrap mode is set to respawn +the command: -* [Sentry Data Systems](http://www.sentryds.com): uses noVNC in the - [Datanex Cloud Computing Platform](http://www.sentryds.com/products/datanex/). + `sudo ./websockify 2023 --wrap-mode=respawn -- telnetd -debug 2023` -* [Ganeti Web Manager](http://code.osuosl.org/projects/ganeti-webmgr): - Feature [#1935](http://code.osuosl.org/issues/1935). +The `wstelnet.html` page demonstrates a simple WebSockets based telnet +client. -* [Archipel](http://archipelproject.org): - [Video demo](http://antoinemercadal.fr/archipelblog/wp-content/themes/ArchipelWPTemplate/video_youtube.php?title=VNC%20Demonstration&id=te_bzW574Zo) -* [openQRM](http://www.openqrm.com/): VNC plugin available - by request. Probably included in [version - 4.8](http://www.openqrm.com/?q=node/15). [Video - demo](http://www.openqrm-enterprise.com/news/details/article/remote-vm-console-plugin-available.html). +### Building the Python ssl module (for python 2.5 and older) +* Install the build dependencies. On Ubuntu use this command: -### Browser Requirements + `sudo aptitude install python-dev bluetooth-dev` -* HTML5 Canvas: Except for Internet Explorer, most - browsers have had Canvas support for quite some time. Internet - Explorer 9 will have Canvas support (finally). +* Download, build the ssl module and symlink to it: -* HTML5 WebSockets: For browsers that do not have builtin - WebSockets support, the project includes - web-socket-js, - a WebSockets emulator using Adobe Flash. + `cd websockify/` -* Fast Javascript Engine: noVNC avoids using new Javascript - functionality so it will run on older browsers, but decode and - rendering happen in Javascript, so a slow Javascript engine will - mean noVNC is painfully slow. + `wget http://pypi.python.org/packages/source/s/ssl/ssl-1.15.tar.gz` -* I maintain a more detailed list of browser compatibility here. + `tar xvzf ssl-1.15.tar.gz` + `cd ssl-1.15` -### Server Requirements + `make` -Unless you are using a VNC server with support for WebSockets -connections (only my [fork of libvncserver](http://github.com/kanaka/libvncserver) -currently), you need to use a WebSockets to TCP socket proxy. There is -a python proxy included ('wsproxy'). One advantage of using the proxy -is that it has builtin support for SSL/TLS encryption (i.e. "wss://"). + `cd ../` -There a few reasons why a proxy is required: + `ln -sf ssl-1.15/build/lib.linux-*/ssl ssl` - 1. WebSockets is not a pure socket protocol. There is an initial HTTP - like handshake to allow easy hand-off by web servers and allow - some origin policy exchange. Also, each WebSockets frame begins - with 0 ('\x00') and ends with 255 ('\xff'). - - 2. Javascript itself does not have the ability to handle pure byte - arrays. The python proxy encodes the data as base64 so that the - Javascript client can decode the data as an integer array. - - -### Quick Start - -* Use the launch script to start a mini-webserver and the WebSockets - proxy. The `--vnc` option is used to specify the location of - a running VNC server: - - `./utils/launch.sh --vnc localhost:5901` - -* Point your browser to the cut-and-paste URL that is output by the - launch script. Enter a password if the VNC server has one - configured. Hit the Connect button and enjoy! - - -### Advanced usage - -* To encrypt the traffic using the WebSocket 'wss://' URI scheme you - need to generate a certificate for the proxy to load. By default the - proxy loads a certificate file name `self.pem` but the `--cert=CERT` - option can override the file name. You can generate a self-signed - certificate using openssl. When asked for the common name, use the - hostname of the server where the proxy will be running: - - `openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem` - -* `tightvnc` provide a nice startup script that can be used to run - a separate X desktop that is served by VNC. To install and run the - server under Ubuntu you would do something like this: - - `sudo apt-get install tightvncserver` - - `vncserver :1` - - The VNC server will run in the background. The port that it runs - on is the display number + 5900 (i.e. 5901 in the case above). - -* `x11vnc` can be used to share your current X desktop. Note that if - you run noVNC on the X desktop you are connecting to via VNC you - will get a neat hall of mirrors effect, but the the client and - server will fight over the mouse. - - `sudo apt-get install x11vnc` - - `x11vnc -forever -display :0` - - Without the `-forever` option, x11vnc will exit after the first - disconnect. The `-display` option indicates the exiting X display to - share. The port that it runs on is the display number + 5900 (i.e. - 5900 in the case above). - -* To run the python proxy directly without using launch script (to - pass additional options for example): - - `./utils/wsproxy.py source_port target_addr:target_port` - - `./utils/wsproxy.py 8787 localhost:5901` - -* To activate the mini-webserver in wsproxy.py use the `--web DIR` - option: - - `./utils/wsproxy.py --web ./ 8787 localhost:5901` - - -* Point your web browser at http://localhost:8787/vnc.html. On the - page enter the location where the proxy is running (localhost and - 8787) and the password that the vnc server is using (if any). Hit - the Connect button. - -* If you are using python 2.3 or 2.4 and you want wsproxy to support - 'wss://' (TLS) then see the - [wsproxy README](http://github.com/kanaka/noVNC/blob/master/utils/README.md) - for instructions on building the ssl module. - - -### Integration - -The client is designed to be easily integrated with existing web -structure and style. - -At a minimum you must include the `vnc.js` and `ui.js` scripts and -call UI.load(). For example: - - - - - - -
Loading
- - - - -See `vnc.html` and `vnc_auto.html` for examples. The file -`include/plain.css` has a list of stylable elements. - -The `vnc.js` also includes other scripts within the `include` -sub-directory. The `VNC_uri_prefix` variable can be use override the -URL path to the `include` sub-directory. - - -### Troubleshooting - -You will need console logging support in the browser. Recent Chrome -and Opera versions have built in support. Firefox has a nice extension -called "firebug" that gives console logging support. - -First, load the noVNC page with `logging=debug` added to the query string. -For example `vnc.html?logging=debug`. - -Then, activate the console logger in your browser. With Chrome it can -be activate using Ctrl+Shift+J and then switching to the "Console" -tab. With firefox+firebug, it can be activated using Ctrl+F12. - -Now reproduce the problem. The console log output will give more -information about what is going wrong and where in the code the -problem is located. - -If you file a issue/bug, it is very helpful for me to have the last -page of console output leading up the problem in the issue report. -Other helpful issue/bug information: browser version, OS version, -noVNC git version, and VNC server name/version. diff --git a/docs/TODO b/docs/TODO index c64cace..1166e5e 100644 --- a/docs/TODO +++ b/docs/TODO @@ -1,35 +1 @@ -Short Term: - -- Keyboard layout/internationalization support - - convert keyCode into proper charCode - -- Test on IE 9 preview 3. - -- Status bar menu/buttons: - - Explanatory hover text over buttons - - - Configuration menu: - - Tunable: speed vs. bandwidth selection - - Tunable: CPU use versus latency. - - Scaling - - - Keyboard menu: - - Ctrl Lock, Alt Lock, SysRq Lock - - Highlight menu icon when keys are locked - - - Clipboard button -> popup: - - text, clear and send buttons - - wstelnet: support CSI L and CSI M - -Medium Term: - -- VNC performance and regression playback suite. - -- Viewport support - -- Touchscreen testing/support. - -- wswrapper: - - epoll_* support - diff --git a/docs/browsers.md b/docs/browsers.md deleted file mode 100644 index ad52fd3..0000000 --- a/docs/browsers.md +++ /dev/null @@ -1,126 +0,0 @@ -## noVNC: Browser Support - -### Ubuntu Karmic (9.10) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BrowserStatusPerformance/Notes
Chrome 7.0.510.0BrokenWebKit render bug (see note 3)
Chrome 5.0.375.29ExcellentVery fast. Native WebSockets.
Firefox 4.0 Beta 6ExcellentFast. Native WebSockets. SSL cert hassle (see note 2)
Firefox 3.6.1GoodSlowed by web-socket-js overhead. Local cursor causes segfault.
Arora 0.10.1FairSlow due to broken putImageData and web-socket-js.
Opera 10.60Poorweb-socket-js problems, mouse/keyboard issues (see note 1)
Konqueror 4.3.2Brokenweb-socket-js never loads
- - -### Ubuntu Jaunty (9.04) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BrowserStatusPerformance/Notes
Chrome 5.0.375.29ExcellentVery fast. Native WebSockets.
Firefox 3.5GoodSlowed by web-socket-js overhead.
Firefox 3.0.17FairWorks fine but is slow.
Arora 0.5FairSlow due to broken putImageData and web-socket-js.
Opera 10.60Poorweb-socket-js problems, mouse/keyboard issues (see note 1)
Konqueror 4.2.2Brokenweb-socket-js never loads
- - -### Windows XP - - - - - - - - - - - - - - - - - - - - - - - -
BrowserStatusPerformance/Notes
Chrome 5.0.375.99ExcellentVery fast. Native WebSockets.
Safari 5.0ExcellentFast. Native WebSockets.
Firefox 3.0.19GoodSome overhead from web-socket-js.
IE 6, 7, 8Non-starterNo basic Canvas support. Javascript painfully slow.
- - -* Note 1: Opera interacts poorly with web-socket-js. After two - disconnects the browser tab or Flash often hang. Although Javascript - is faster than Firefox 3.5, the high variability of web-socket-js - performance results in overall performance being lower. Middle mouse - clicks and keyboard events need some work to work properly under - Opera. Also, Opera does not have support for setting the cursor - style url to a data URI scheme, so cursor pseudo-encoding is - disabled. - -* Note 2: Firefox 4.0 Beta does not provide a direct way to accept - SSL certificates via WebSockets. You can work around this by - navigating directly to the WebSockets port using 'https://' and - accepting the certificate. Then return to noVNC and connect - normally. - -* Note 3: Browsers using WebKit build 66396 through 68867 - (Chrome/Chromium build 57968 through 61278) have a Canvas rendering - bug. The WebKit bug is #46319. - The noVNC bug is #28. - - diff --git a/docs/links b/docs/links deleted file mode 100644 index 8cb4da1..0000000 --- a/docs/links +++ /dev/null @@ -1,70 +0,0 @@ -New tight PNG protocol: - http://wiki.qemu.org/VNC_Tight_PNG - http://xf.iksaif.net/blog/index.php?post/2010/06/14/QEMU:-Tight-PNG-and-some-profiling - -RFB protocol and extensions: - http://tigervnc.org/cgi-bin/rfbproto - -Canvas Browser Compatibility: - http://philip.html5.org/tests/canvas/suite/tests/results.html - -WebSockets API standard: - http://www.whatwg.org/specs/web-apps/current-work/complete.html#websocket - http://dev.w3.org/html5/websockets/ - http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-00.txt - -Browser Keyboard Events detailed: - http://unixpapa.com/js/key.html - -ActionScript (Flash) WebSocket implementation: - http://github.com/gimite/web-socket-js - -ActionScript (Flash) crypto/TLS library: - http://code.google.com/p/as3crypto - http://github.com/lyokato/as3crypto_patched - -TLS Protocol: - http://en.wikipedia.org/wiki/Transport_Layer_Security - -Generate self-signed certificate: - http://docs.python.org/dev/library/ssl.html#certificates - -Cursor appearance/style (for Cursor pseudo-encoding): - http://en.wikipedia.org/wiki/ICO_(file_format) - http://www.daubnet.com/en/file-format-cur - https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property - - -RDP Protocol specification: - http://msdn.microsoft.com/en-us/library/cc240445(v=PROT.10).aspx - - -Related projects: - - guacamole: http://guacamole.sourceforge.net/ - - - Web client, but Java servlet does pre-processing - - jsvnc: http://code.google.com/p/jsvnc/ - - - No releases - - webvnc: http://code.google.com/p/webvnc/ - - - Jetty web server gateway, no updates since April 2008. - - RealVNC Java applet: http://www.realvnc.com/support/javavncviewer.html - - - Java applet - - Flashlight-VNC: http://www.wizhelp.com/flashlight-vnc/ - - - Adobe Flash implementation - - FVNC: http://osflash.org/fvnc - - - Adbove Flash implementation - - CanVNC: http://canvnc.sourceforge.net/ - - - HTML client with REST to VNC python proxy. Mostly vapor. diff --git a/docs/rfb_notes b/docs/rfb_notes deleted file mode 100644 index 643e16c..0000000 --- a/docs/rfb_notes +++ /dev/null @@ -1,147 +0,0 @@ -5.1.1 ProtocolVersion: 12, 12 bytes - - - Sent by server, max supported - 12 ascii - "RFB 003.008\n" - - Response by client, version to use - 12 ascii - "RFB 003.003\n" - -5.1.2 Authentication: >=4, [16, 4] bytes - - - Sent by server - CARD32 - authentication-scheme - 0 - connection failed - CARD32 - length - length - reason - 1 - no authentication - - 2 - VNC authentication - 16 CARD8 - challenge (random bytes) - - - Response by client (if VNC authentication) - 16 CARD8 - client encrypts the challenge with DES, using user - password as key, sends resulting 16 byte response - - - Response by server (if VNC authentication) - CARD32 - 0 - OK - 1 - failed - 2 - too-many - -5.1.3 ClientInitialisation: 1 byte - - Sent by client - CARD8 - shared-flag, 0 exclusive, non-zero shared - -5.1.4 ServerInitialisation: >=24 bytes - - Sent by server - CARD16 - framebuffer-width - CARD16 - framebuffer-height - 16 byte PIXEL_FORMAT - server-pixel-format - CARD8 - bits-per-pixel - CARD8 - depth - CARD8 - big-endian-flag, non-zero is big endian - CARD8 - true-color-flag, non-zero then next 6 apply - CARD16 - red-max - CARD16 - green-max - CARD16 - blue-max - CARD8 - red-shift - CARD8 - green-shift - CARD8 - blue-shift - 3 bytes - padding - CARD32 - name-length - - CARD8[length] - name-string - - - -Client to Server Messages: - -5.2.1 SetPixelFormat: 20 bytes - CARD8: 0 - message-type - ... - -5.2.2 FixColourMapEntries: >=6 bytes - CARD8: 1 - message-type - ... - -5.2.3 SetEncodings: >=8 bytes - CARD8: 2 - message-type - CARD8 - padding - CARD16 - numer-of-encodings - - CARD32 - encoding-type in preference order - 0 - raw - 1 - copy-rectangle - 2 - RRE - 4 - CoRRE - 5 - hextile - -5.2.4 FramebufferUpdateRequest (10 bytes) - CARD8: 3 - message-type - CARD8 - incremental (0 for full-update, non-zero for incremental) - CARD16 - x-position - CARD16 - y-position - CARD16 - width - CARD16 - height - - -5.2.5 KeyEvent: 8 bytes - CARD8: 4 - message-type - CARD8 - down-flag - 2 bytes - padding - CARD32 - key (X-Windows keysym values) - -5.2.6 PointerEvent: 6 bytes - CARD8: 5 - message-type - CARD8 - button-mask - CARD16 - x-position - CARD16 - y-position - -5.2.7 ClientCutText: >=9 bytes - CARD8: 6 - message-type - ... - - -Server to Client Messages: - -5.3.1 FramebufferUpdate - CARD8: 0 - message-type - 1 byte - padding - CARD16 - number-of-rectangles - - CARD16 - x-position - CARD16 - y-position - CARD16 - width - CARD16 - height - CARD16 - encoding-type: - 0 - raw - 1 - copy rectangle - 2 - RRE - 4 - CoRRE - 5 - hextile - - raw: - - width x height pixel values - - copy rectangle: - CARD16 - src-x-position - CARD16 - src-y-position - - RRE: - CARD32 - N number-of-subrectangles - Nxd bytes - background-pixel-value (d bits-per-pixel) - - ... - -5.3.2 SetColourMapEntries (no support) - CARD8: 1 - message-type - ... - -5.3.3 Bell - CARD8: 2 - message-type - -5.3.4 ServerCutText - CARD8: 3 - message-type - - - - - diff --git a/docs/rfbproto-3.3.pdf b/docs/rfbproto-3.3.pdf deleted file mode 100644 index 56b876436a9b18e3fbc0001efa9c3dba498e3558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110778 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
  • soRRg(4fNFaOUHNL^!mU2PjY+6DhGfn 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 UdT@3HIk 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 diff --git a/docs/rfbproto-3.8.pdf b/docs/rfbproto-3.8.pdf deleted file mode 100644 index 8f0730fb7f947147e53d2a3eadd453408ab0ff05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143840 zcma&NQ;=xOvIW|7&WqD z&YYz3!lJZ{bSzM$BbPDxP^<(D1h$42P&_>J(k3=$PQMA*es&b;Ma`|8OdJU4MXd~+ zOoUC0Y>iELd7&Jg983(Xq1-aBG$kC3Sz&nXF7)nX6Y)j(XeKhE8LWT@(Axh1+d)V` z=s2Op<0bpXbUJC(ygQpJ_9BEYE-G*O)YF_L7`wj~EdV=leOCC&(V5=h1Ydu+6nDhD ze7|0%U>XNhe{r^*Zfh|pToS;5WnQ51O^@rJMur8#Hb3}(YhI$EH`p%a=P-Nz)sK2B zTj3d1x;?MV!Il!@uZTtphJ)h~el&P9pos^3)XmESIG399c1&6mCMj7?>kxn`tj2mq zwyC!h)_tmmVvG&BLC-;<)h9S1utWsI?>sv`1*@WTiCCcFT?d>~cTT|IH1m?5m|W0j zIcI||t^%Csx9W&_P{x~$ZLchkR}eEi3?q>E1Gq?If_pYPNKnFKjp8s~vFzPuO?K2< zD?#k!$iG~B>fl6HocK_gt~}FLhWmS@*NbjljtWiuTqB#WU7SRP7k4Tra^i5?EhCaU zhQ-fW{jg3RKtz~_1(c7C+(bTeAv#a!*=s;FUzsk;-* zWs3=c-ya}sF64vKcQ?(rgym1AeHfwnH;sLmIZ&J_@Af&Ca#zWPw$kk@|1E6))v%U< zZ7VWulrUnfF}2YLA?6M1xW0PYY?iC&3@o5@rb*jJNR$NUphm6clPXH-4;?+Qd^lyV zFs>PM03%uUVJ6<++&G=l864iku=ZA3PRMn?LQwqJKwAtp^dEaptO%z#DFEk*3WRm| zWeVhx^SHy?4LyRZY{l&lfa9O2qVo->pUBV+;egF(Q8|r;$69g7Q{qL`d(o}SFP2d- z1@9>k$Dhi%lDE$p2}MoTIkW-;m6{?yD^S4scO`}S$BpOpA>RX3hr5}$u}SNZaHMI9 z7ZPOF$A|%NR}%rH1r!%@37s7Aku^l_B{YN(0!|WhlnfXkSL^u!mRQN9gu6{AyyG_t z*~qc;**JxYDLdl!diRrxwRkdUx8GC+_{a?}f0dSmg)FV#r8}jW*kff?O~NW1j<%f< zGEH_LvRjYk27-vZ-w8%fRisAEts-U=;n0#x5fNtuSDrj_Y=B~$KlMzVa8>~6W(b<3 z6Wx?>MzN-=wQ1!oHlbKKZ?@pGP9de%OBUE~>npGwg~in?##Hzysz`L7-&7JOuIQO0tRJxH-TX z;UIU*T1#{Z0c3;Sts(6N!iodbgW#P9O}3=Vpn2&;{H#&G_77_SjDPZP?EK|L8UNBk zxYk`*Zq?Hoe@FRR=>{8>&G-5OQ3-&CsU8iDP#nNG`jAp$vY>j^gH?KTI8h;j|NFL3 zL1MDzUE=t4bP#6li=5F-e_y&SsLd$P#dMyy82x-kOM#uPhP3)2bTnhLM`BNm!L@gD zZSltB8qviN)@QpGnSqxQTP{+yE5j2Pi!c1Hsd8jSbI5D0yyQ`F(J0?o@5ZK|r_KNU zdk5h9x>+wfw~q9*gy>*gX4at#<&Pfia|`E@lNBXCFz_1Z4twq00_e7blPFQNLU#Dp?5aNpPZxGSaLX<*vKf^8&Q4aI*h^PGorJ1J z&yzm*JR9En9-b_M6&7BH79SsjCohA2@hrvY{BxP={^rvOy(`z zfomsm&TPXR-Qb(ItHliQ4F`%*L+psycj|3Smd+D+#F`rO#I8%v6u;I6AOak(3wq`` zEsW1bUAnjTEhc2@G%QL$#62#gAAY0+&LqM-=ch>b?h>#TAgm3XJ+aXdV@xA(0NKWr zeJI!Ic~y?_N7hPS=JGQ4xRcJ<5MWWpX2T}zS@U=Ea%5k*?OW-BCv4&lXo$0WO&`9v zB1%q^EVo{nJzyIZ1BiO03RvMo&pBH*7I%)K^t{}M8_)0UQX=ZvWlsS6au}L&@AxL-N*UlUtT^yyk|`Y2&zi*D50I@1hQu z$CbjNkB`06bK=pHHKx8m0Ju$!CN{?ZZQ(yp|Fr#on*Bd3BPTmM)PMIF+5gv_fRW?> zbSX&RvE5)p7}@z$JB_0vi01k7xk|TLZLgZzOo8(}oo8b(rI$Id(fNMEBOT(JkG}*F zwQLDM42qXS8JgL;n@FgE?lU3WFZuNS!Q1sZd?F)_!l$=qV(n3S8BFB;#!!VPvmlPX z@US0>;@H+S0NgeySw>Ek8#8>0lagg6m^mBzD&p1R3H-eqMLRe*%b>?VDFAG5wMNHL zSM@jGaDbtij23oYh_p|PbsjJU@ptC;A`Cn@K|thyWws33I%RdE%m|Q)gLzS}Jr50) zNoxyO&JC*O+H|-*E_|fC=z%{CH6#&S5w7U_&;^Hb6nxq08zm;bmKR0QF)xOkb#lx_ zL%)`b$n_(gE+nBFPmhO0I}Npwl^4|T1k}u3uC^5xPIvoVPNHAhw0cz4DFzUOib6=mqRv@)u;A_|nAt!)2W8hO{W4-tl(4tdhKnToPx`+QDmFHQ zvHPxp>y7}}Sdthw1d$C2#*Bs_@@9-LI1K6>eUSoeT%}Y->_n7tkdI^c^99zx^1EevS#4MVaP1JEth|G*FQ+jV zpz7BRH@LaR@8)-H)!sCF=2#P&$JV8fwA$CPPFn3O?ql%2?aF*ft`UuTMt;4q>y+ef zQPJMkE$%ffkL^EmlV}Qh=5%3b0Gwu9O2AXtjX$JdwZ$pGBHJZeQv+5m%vMuA^4fex zyG;;HVf)S5ezd@GT~=)&9U416)e=i7K0AcTouGn)lk-}Nv1Mw73OhY7$%FmX08+S# z-l#+EV*U+m72*SJquvWj-L^S@hP2c3ZA9Pn%zDuUDT$L5SJh^lj+I!t*r!elURK(E*n~0P*fB*9C z)Q2+s*?>h$9h~?j2z8l#55ajvC$UF-w`9$P(J~Ix3e{9_#r3 z{#WAXQz2zBc~Whlhh7yx82i?13UU%Gn%SXa-rIe2-Nly6KDclrUw*_FSwH1u&sfrh z@~W%#n-q2P%j(?@#2>rGZ6bg07mG~7jlQfYvzglmNW$!U_Wz}P|4Q1w(#Ocb^gq(a z#Pq+UkBRyJBz@i+(Z(b8xrCQWzuuss)SRt>NIU#Wtt&JM^{4YI<49DIs$zyTYbEX&l4Nn#;i5Z}#(isL##DBy`mxjnvZn95_D@ zoZ+8TaPfFxG|X5eNi@!Yr>7e-Hqe|p&S4jh^%dTn*Q5isp`&!@Yf+Q{B>F4V(}v&y z9a%fIuxaf`p>%hjkI?BIjxwdH(cliI2=ItFZjFbYwvY{oe@n}jqsJgm1=_n(c*UGZ z3~b6aBff!+6P8JKv>5rja+7Ixd+;+yvd6a@V$$A}y+cibMHl1Bg~8S(qy~cg zorM8`G&;HbEqB+O-<%}GKYv&b2L$()({aYWOvTol6?mK&*c~e0!2mPJ?Lv^2c5O}gEv88P?hQC15qX_ zRk_%2ncw?~dQ8PFSU8KM$XZ1~(2iZ63R1+D)F!WMpsUeI3E@oluv~p^6sVI=`-+&* zHb9Y7*c%HPFd(+VcbRC5HNU2*`{NQ1g#1?wi*7pWV$Ky6xz32U&sy$Bb_sk_mC>w>2eHEnvFK z6?Bdj+1fM-XqL}R%v4-1Gl|fArZ6m_*4=D%iC&`$4Rw(C6wD~J zA3b9^X_UDlJ@%#%X(+(80hR<#<7F&NALH_$03^OQ?65l;8C>PGa6+!VCCgab>W0$e zchReuw2|_#1*QdOTYdoO^d~R#LMFXaxg+(=H?bv>gh)@~BfX|;7#7Ikzaq_uB?%Hc z;i%aBJh?*oYav7aC6Ng;Z9c5>UW0IhQVFZ>fDDi2{EUQJt>(vxk6RGy>Xw+2yQBgD zBb>1~_09lGCnq+t?;O8=m3?}iFso^?Ma~I;etsGcp~)dScIjG$Tc{8$PGEci6%;ha z8astx|3We%QyEU06i@ZC?dLgQjHH?%x?#MaC{y2L&WEHyDk)Vq;;xhkHn6iT3QV8L z^+|t>YCqPs1P#Xr&S0Dq^qO{Q4WDMhs1>!2(iShMRt~#XzG4>krAY1_?OtI#a<6($ zJ*G)K3ju{)w~V==_X`>JL}yncsjN2%4cFpd~r4m>%j z4HR-N+ndnr5)7IhvK^R-Ae773IB80P6W6i5nF;o}6@BevIu3J^%3gG@wpn)Z;czMg zISq&kq-{0EM>_`tx@c01RV6%)4X`a0towWlwT4y`OK%ydTHhZSb0NNbk*DYtVj$=wCbuhnM4P3o;>y76>~e7p3D$Uk3p4&C zA)W9N0i=$ARuZUdK;IF#akQqrW&lAORj`pv(N&}^2(1AW{XXZgHg#}D1tPKZe9Cn>}t9 zW>ziUuFm^L;CbIpjodzlcD}9xzag_NA9o8<-d94CdOl=cp7p-& z^}cV%^gj0zc6NPzBEMfN_&&J5PL$xk?%)V_JZ?+A{bS+1GHktTsCSNQejUzqPu1`o z=7oG@gk;8i(J%99eqJU#(koPSq41~t8Dl@=-$I#{DAB*;=a$+OGA??MK*jKHSORz< z?h~I@0Qk7^l>~k1;d_g4PM=dy^l;kjl9nK?_mqfrb);9Yb~u^6rw@wt3jk^E)9nW>-+f$b9qy0-nX5yQ-ssn6m;=B82 zv7Y?qEoJo8YOq%^`nqVp%dwp7DaYok#QxUWdI{P4V%P*6Anmiw)N^y9`n5>e4#guT zDwp2b7-60^n@-O!NPe@_yM}R78jRN00c{=V8WWr51N-P7+G&Z;)SSq{qK9Mp-cQa) zI!Pv~wR{1<0CA>$pDIM827UegMHVwK=&|mlm?J$p2ttO;WC$f83!bNGtG>8Y`6#OD z!mv=2$BUrAkb`J6ajfKPpL$gh@J*#OU$>n)gHiZ!d{F$n>?IoZSonI#8!Ydn85|n{ z?FXl5-c@FW&ahTiANb!;USTk`7<0}e2DJ4i3iZYkDbLhxr_3Pct#}nt9~hs4URPV1 z@iL-DGNx=hMZdYvnJDgCwgq`_o9&OP_Gh;7@I0hat#!>m2qZEWUpC1R>l1GO2t!D8 z0OW;Rh-8pyAPeiFG+nL8Ew zf-H9Yhp%I;f7iTo#_qF!L&%tkt@}w!MsW6V zhgw4W z>moQ2)G@Q6)oWta*FM9B+K7gf(tN{qW^$wem*;%?--BN)IR=KmOn8gr$VgOhj}H%v zLB)$6o9lIY2i0+e=H80+guDrea9&e?!mxK1WLQYKBO^T3__yTl4+=Nde=*6H6OI$! zNd&DdkZ{J79ed*ll`qmNtg{ne>ERr`_d4Eg z+swLHa|p#xro?)Bw7`F`bU2Y|vtacG2#reA--F#BAwnZeAqd0P(;G$>s>|+F&IBFR z9!d7kEB*M|$VE(cXnM;Su)0x3HMu4Agg1Y+y;vI7&nj~UCwEZAc+*{Mk4acKgJMxB zqAEnomJe^TVUCr|QtDGvJ<*m{U2MBrWnw^4DHXzI?l;7IWDjZEZri1tks0x|#5AgH z9%9*Ml1<8Aa~}X0`u6=+{;r`orErm3ajT=kr-vZ%*|SfV0UqDpR}O2$O3 zI_GMJfe}Ha>Kcx$UG!Mm!7=qLc`IaMr~S6BTfwMwtmam0-U46wB`sS*JD{4uA}-NF z$fuGu#b3%*B3Y3?tvY;gTRE-sZ;AmXk(dT$kVe+(S!Y?2G54EJA1xvVMzzzL!(~jP zHwh*%KgluCYb0F|llG;bCPIyy5+reDj5EL&8dj7#Zq%9RQXr3+?fTu0s&Z5x*GW5WhnU0^17}us+`RRuYdz#^;d*hP^10Op`#1Ua zV0^dHM6bMZo}$GhgjAi_=afM+yKTS4jIY)eBiKcyNv4|ROIK~Ay#trd*I-6$PQ^1s zk@{~|V8Zjv3+qs>5~{@fY3qOMAc(k_iikE*+QT{d~kttvI^;og^A3%oFr3)9KOn%^aN>T#;ZwkK$Gite3xR)9Z+s4o6tn(nqZSFipp!h^MRpq3n{U z%yH#kIP@`pyqsefFI!IiMXOplf3bze`H7eC)hX1@7rC{-%GwTft8O1( zjcrVmm0yw{i5K76ca@}FZg`(1b9Y??k#_MP-j`wi0Lv-=53pJ1JjRZ!DyBWOI2Zv= zHaVhO1slX6VP}`va}aq>*6M_blCB;QOGnymicXx%LkK!H-2V_=Wh=sE1kr`P0MX0) zMp-Amq}arF&$O|FFpHKY;dzV(?8igK^p6Kzb+Sb0KmU55PjKekN>X-e`%e_kJ8QUN zt6OfWw^M&*i%88axSr5$csj7>H5$ZKOrQH`ME{9mk|K|7Xmm;NSK+*gk_Ks;N93u) ze+Yh#*T5ZJ+c6fod*N}?9?!yx`wq>Xwgr2poh4YktHBiETB?LGbhXwJg(~Wln2Nkm6MRlub@*0$`Fb6%p2Hon8*Lxf3^SEZ}c#A zw{4e&im z%-eiW`X4k~D=dGGdzt({$GydhM|H$Ui;@N8EK{R!qx3ph?y!OoM z0iyOw@^**pi&Zr~SYef|D(4?UwpgNiF?T5qNoS`ge+F+fUH@^Krnx`T{12V}8aQ&f z$?&13>+O#7p=v$_k8`$IF>&c}C;&_RLS$xJl!Pn^?0$~LTEeIvzgCbrWEg_Ic)arMO@jW9rEppT||axZ`{#1vE}T7ve9*Y5WL z!FlcDPnx5f#r*R{46kBZ*gPlVU);o>rP2s}SvPfKsfrmej67Ss$g^KN*+V;Y{jTB#p&&U3hWC(|Zd{TYg28_2mBcpIo# z3Jf6-tb7mTQ$qk1ieOcLcLAD|yrW(DdADWpaC-p15|h2{_4)UB|NOhs#|6~jTiJv^ z^S8NIdvs47jItnqm7z^_r#P(%gijk~JIYb)YWugH(6);_jd|L>JUHOfP1#y=@q?Q@K4J?4HJausqlMIV7q$^C5G<3x!}(>T&FF z%V7+0RZzyElX9L@tESYQ@fB+?IA{kd8DJq~l43Y#cTzM@NYeTvl|UgVJ)$nl7{aV8 z^$KKBW53yGn5joM-Oawps1KT9=16jFp?8}wDIYj*^~1EzzOx*GJqw~4mK6yWeobGZ z-0CF!z8ALra`ztiT36F$G`*4GqOx|;%Lc!EVL~86BBA0#FK9}C$jiqh@(Cgl?18;1 z5kEJe{g2p4T6-lY1iE^4)0vnc*5?HC+W?9t5v-AlQoVB4+Gly2?mNj57|=kPU|ABS zX9v3D>(qS`%(W!`w%+3lz0nzTb;2g=nvCxE?L-t84GFM^#c)*^#}K8ny}ZfxVhCU z*8_IP%0~hCOb@ZZ9~1z0@#NqW;sPWeffO-RYPb8+eMd|cphE>v5HV5IGz#Dd?Gyhw z1?>YOb*vr`idO|#eo#9YrI19XQp$6qNs4>N=@=rAKd}}(pA3m3GwQvs?$BmbR}ZWR%Eo0~b7BxY_4-E$hOHzs zG?Q*X{50bfM8aC#tfg&$q%?mzt%cL??%F$PQ32jD{QwzXj*{Rs(bZJq_jv`?tJ ziBmj*AO^%S78sDn{^C@Af!k-%R@>#`JWD@#i%h#Ynr`-$W3X#}s+yX-(P;IJ$@Uqm zH%VAjnfVoTq=uS7(heN2)FuCBe$lOF(Wgr1B%3p3S&z~+>lX)&9veS_?fjNxJ ztYHS4@Dd(H*=K$Vr8z{a?%Tz}n#oW3<+1O?7b2Va)q%?ZQ9F?a{3qtAqlDh(0Wc6E z`C$r5^$+29z0#;|uykOmAO@rff%YIYol?iV!q9{l(_pD`wBqn>^rtsyIFs|rq@j&^ zs_ZDlnd_CWQ%!^n*H$|M5--`jNyi!Z00;V=>j;yvVx!V1`Mk!)TvRUOp)7q!23-he zC1k%_Z~7aAnFjAQXEsq3p;D3ftuqy*EX4s!EZ`00Vg?F2qaEUbZygPF2N@j&X6G9AhP0*eFCrz#X0#_ z?m4FTl^0!NW3GUPsv(kO^DFcm$=^A`49uK4bxXP^L4n)ql0HC)aB2qGnboD2^90 zAoi@n$Jo9IvPou$D!ZTnmMO@bd&LeMVZ4O9-B~^bH^JWJp)>cc02cWCE?&B z$YbLLhzxS(0O<}!8^Rf>g({t2&{t(oPzi7_-h(zUPIcNuulMyi9UvIw@SG77^_fnS z{LL~^5JKQ*e0-TN)Yq?#U!>rNk8WruWBn7C{VFs4&35t97#Qf#hR0bD76bshz9?s5 z_RNxuv=G=qWMYHmw<|F#i#j;BD_M$qrvlmKww+| zT2Z1gJ|RmVgA!`=xo)31L93e=hOv?0%U5rKUlm}}AD;-Em3&@KT7 z=bp$qVPcKWCtD=JAp-RcL(ON$;@9jx42!K$K z#sWmey|O!B{m4~(qN^UUVFY+%eJn#5{IS6)@J$hW8e@N%U!uad(suV1j5bKx5DG-r zo#J6+OI!A^ht1qt$ z#(wyzpNg34-dcRG0lKQG-E`JEHDU*@GBGdcuhH*DqHBTjJN+t%3g#Gc{@%E#ii!gc z1PBVgKbD~YEdo`TLM4vL%5B&Thsw=RR1-pta5TmrNRn9)g|2eBt!JM#_$3mB2)-@2 z3UT#Me}TS-&(6v)H7_*CF%-xo%C++TGzNUdFVvmeuo-@|kL~2Nd7^|UjQa)|k9dM~ ziNP$!-+KYTvF0;VpgYNJqqN%VA>kP3_S!j{Mu0tN%@D1Tk7u+X4UlMTutY&}c~+49 z&;!XwX<;b2h6c!ZcfvT3KyZjc%7c*Rb}$Zg_msQ^PWu(X|8y|F8nGfdbzv_7Mn%dQ zCUfr~65VGIB+&%B;yJSNGfo-^BQ|&+UMmV&wpM*KMO=2;ODvoleixW}-Huq8y^YY; zekyJx_laHQ1tm|gTvvr^umw;$Mmgy3Uq&;#ZZ|)hlS4&88T+2hm`Ghrj;%e$$X___ z1H_Z1fqU)uT~TWDMb~GXNVj=hf~`Bm(-2;%6d?V?NTD!=H^?Jpp1%Sf*kG;?T5meF z{1CGRnuAcau{a_&KwIVP!m9f6>E}v>z8oHnn_h>eCN@%5=%0(^?V}P?!U7lr^Q5Cy zSYu-oMw@QI9l<1gn%&(1m5y*gLZ?R1Q;7sh%!>G(6KB2g>&s2F%d~^zGEwMM)8<$%~9I8I2@aV2-YSG_2I& z6#FW`N@Vf5nCY&oF^cl5Yj>BQi540DUt@_3JwvO%2&T9FG zcF@m}eS8f^5vSQ0rnm8vM`Z)f9K+@Y5ddcWEYRk`A!pU(nQE z>pxv9p*JMC^BIyspSf*{_Ds^`-sF;sD+`u5Aw%Z~{keGVA{O4Qy&bP6`0|*LJgifC-on&#AStzRi$aYVYE#8 zH@kA1RvGZTk`>vRR$eV^fT%Pp>qX%@TZxrV!N{T+BP#rgeP7APxC6tF06 z`~KEyY>3G%!D7E8Tfxc0Hu0b_qv5j+h)^S)Qia@%2n@ZP?3s*EkVARUoQ)EVt*Uy7 ztuq*2;FKa7*Z6kN_$A}JAyVY(TmI)1ZCZtg2?AA0mKlp^=|#o@eEF1vX2*SO9zr%i zA8AUf>5HRn%XuYEEg`ohtiIkwbm2C^kfi@s7zZ81TAEEV&O@H0M9lUw{gQQ` zl}5>ire$+$s z1AiKn~+aA z?o4X~UTjHYeM`k}Pb-?6TY_X6ycQXX7*eG+k{D&t@LNn#bU*nC5LUFsU>yd`Oy9c3 zxd(PnE|r!Pb+bp+VeC`M8<;!pC0!UjH=pM6^5exHFYGii+7|n6uN+s0VBD8U>b}Lc zOf%yfO&P7Ld%BxLw%bKYQ;$~E^&x{Qr3y$4%X!_aqoAS-o%Nv`4{1{#w*ZUKeW+3u ze##IoPJOE>n&hMzI-q)CX)VKV$2-T>Ow%Y@%x7_-pl7^$#&@1E|` z$`V2Ss0kGCZ2BL6ToqgOFgKB5AlPhXv&rwf=f^jB)f3=4wJV*O$phTU`m)7}^{0E- z#%Ad46eq1!FfUYjyM>}(ZLf6q{@j@KU0>3XbF~+1z4sO44(Kek+Z<^+$1A)W1**}} z??DX^I%gJ^ErkM!*pt$?e?!-dv?3^O+NwnSs0pL#UutQ>B5e9X952yU2%8*01SJcr zpo{Zjq_JL`b^n&?ck1#_79}H~a3NKBU(Jc=v!e7ow$z?O+CawFd$^xOiQ6|FR@#nT zyCz-6StrE0mLD_=w&QNm67M~!>`qg9UOy$^M<(n{?IYM*)@BA*O>NTz%+YFq;x+Da z6V&3Ua|vuBLeku{zqzYK;rl3JKx81hG5fJ*9z%t;F~jqvX;&~aBMBS!#mo-@>BCSF za@0ZA?1e?_)~jgu2WyX039z2lZrqd`LGvW_J3$oyCp${a;XEc@>OWfvh?RGRgo?4` zLzj3g1O?vHR$j)?eu#?uE*@vBTs%vP^iVAby5Gz&q0l|3WQETQD9rTOoz}Z;%MQF; zfbPB2t+i#F9!*)hP<( zo;q`l?xLrtpBxZ`yp-*rF$5UkwF>c|WerltAo32qjKhSmAz&&6j@Zr%cTCaS(4}t4 z3JwHq6Y>5jQqR?1`2wss6p%378RJ6ZsFbASz{AFL9af0wEx$jS`lJFvOmIi`kW}?d zKVD?gH`_X6{Oa_d{Nf+DHM9g>@SOxi{Kb2-I>Jm@;5(o;dw$!HJ2S}27ZzxzA}X*H zt9aQJ#NJD8V3qk=jyyP$p}weYk`({`lshEGjtA5Njf&rKVUa0-FyYzVF+fMQ6~9tK zX7DU1P;F!!IG55FN+~$!WD_bxgV9}=vBnO0 zQfag7Z!|Y7EYcbNoMBcG=%6(QqOIv~LT}sVBAD!)^fWHS-cp8J)eOl#qE0L_x;4XL z0baaLo40^wz3MMMRL1zE|20qc@0{2_^JJXtjI96fJQ?TznkQps_`l4Pb!ltF;Izeo zx$OLrF5%mj%ZfD9%k3XgWQn)H;LINy{X5;{`+zU+_@8uP>%6Rt^OwiqoxKQD27uNjMXfFuZ{kql(v*7{o~#qgl|2A0!Jp^ateIQMQld_NH%8fUCs-c z-U0-HF0O3Lg)Q$GD7kAw(8#xI5bb2GN%PY|`xE!mvX0kf5XWZi2>$9?Cl3^G119hT zomIqNY`{p)&M~Em0dMWOwlx5IK{?*g#^wy+*bq6ZxR}<^KWTxSwKCqlbG-s)Qgk{t zD{Y+Kt|JVX^ntP)MH0F-Mz+N6^Xk*0(?Rdg7p5-{Pm!9{4>HmtmKE~CLwh@_s$B!b zkIZ(dcQW)C&*^7Sw={*`u;!(xz3bAB@`3m*opNf=^I~{*ov@@ zo^F%6UL4Ei0x_KaprpX2!sACI)`jv@iihU;EMB1#)ZVR~v_byc%)OP*URgP}G<_}< z-C2&?0kolp{T}XV$H4Zxhgqk_NftpQ-N~aii$bJ9Nxj zDe)4XQoN|);Y^^u7%}Z2B~)!6#+&QdYX8)J-OkK)Qa19m46>12k$1nVec+!g95Kp3 znFi%hggNQv7;9dTEPPDnW97$dOEE0s;S3+?eBkm=OGdPWDvyP~9Me?Dm?U_kg9DuS z{$Z*bA-7IVbPoQFI?@tO<>@s;a^Ro^D_7wY2?DeNeK4_NMs{z#KdoJv0IBR^j88xJ z4M7gYYcKefj#&d&^VV_b_#m{)7R^Wh7g@Tq$(Z$Px*dwPPF20F!n3AP- z_j7l0`!R|xBZz+5m;FP)uz-Tr2n%k=$dLEjlyw3*EAlqfrCQhP`*Nt~1K^JCrCX-)K&D4rvs(!_~y ztRlRPy*B&M98%*ud3XrvuoIiUoJ?_miI8XpOtJx!^qV!f`SU*Y)%EzWQ4xS;)(m4e z!MP1!PS#w4QbI2@V~k<$Y)ONUf9pi&pq_={5|$hDXZu>LvT(=kv5g?Aoc%Ac9Gk@% zY54*jqVIf-LG?S<+sIEGki}XxU{`QjFG}fDgCunz)K(p!opTHQnn+{X?n22+$xc}E zvZQzYg1sK96sQG}VB(d-vI)c!*q*_eVX__e!tq7^s|_9+ zh}`D^YOj@p)8vx zWDteYkFm*w#&Mti`<4!>J~(!rKDl|414l`h9FEf3{N8?7hYz(z*y(^8w7=*MUR12E zP&pa0>WP$a`oS*_KlhS8P@gtoOgbl4r8O1+v0O;IaIT!lvVV4nz!NzS6R4h~aaeK* zqN+ZjdEe}n_=x}A#eWfcrC8wn1jlS~Uc?fx$BeL|)>h>n7jT@lpje`ebS>JyE6ba& z);AP~i3??J&ZtmssXnOqTc;(P>sSbe3$QQ;Mn$@Q%qbETuBZcl$p%Ry z+^ydYBrPRjX-pg)b)HCYrMGDEF-e1c_dKFA)1P`)nl)}e51I9rjoy=KAC-Y{B{16Y zO3+`A+qWgavAq&)e`QQbuoq37K0pO~c<`#y4q@~$`jSBW6@8$!MT!&S9c9CWt;fB1 zpKAt<4Zx+JIuaB|`AtU5>qezl?6=JGz_>}YCYYV1iuz7z%ACvL)F6YKYz72?KvUhI zcLh)W6e6vb97*cuP-8MNCYQUYL_>l9#h{*I>40O?vjgsiq*66<^s?gaK9?X+JQOl; zhK|u&;*LYc7B#H%b9J{GC3W;VCvI{qlrN8Sc)Xa?2dBMMXtP(eR#n!aTvYEsVuLUa}j@ zHxLmQXHi_4YA`&(O)C`mM2?bokXi)=trfo-3WK9%&ViXTkmt#iM1LbKsxuZ)-p~No zY1$7CWztPW6KQ5+(V>;(UBneDrZzSU??oKD`bzl>odw9lOy%erLVyoyESX2nbPG z_Aa))r10egqHVEd>!TEi;0%g~T1V62?3FYU?e)4I zl48}T++>VaNunm09KB0`?Ip{c47q`al%5wxUNWT&@yptjmDIu_(tlH9^i!W~xEKu@ zWzrZ7-LV_y>mL}*)+ErT%dz;qe||JU8Y%zd7ituDIi=16ODjNBL6_MAkkR0$9O35; zP>pYqc9y-1)XNcqS(j{9yIuKrn@thJ+LWI&_ReXP@LTQwcC|giAZBu1R4ki=^>@I#F><*W>0@F zl~c)~m)aubd@$@Z6+AZnKC;d?PUpKk8*@|ZTt%-@%JK+)T`KIIhf!BT2`XpNIAkCg zBWk;4Bh4Q?q>&Sz6P#{2TT?9s9}Ug|@92rESF&%bhnRgXLA{q1Z4ubEPGcS6ljIBL zg4)%h>Zi~}8$O;@t^s^-lw{y%xug+{WL-5ObPSIQrUCQfsm^2bo$j~6ljxcJ?wyb; zAqJiQeXbZ9bd_>*?ZA&Wf1k=1V^kH$@P3P|MDECUYVMIjdwiX8ds6MBRqGxMX?WaH zAi(4kFQvjHH1@8dAO5tJO+=vei4(rAM4wBa=_%v|K&a*E>pR?3qD%8#tlLO{bJ>}; zQeny?fmwm4U*4w<0|cted>%1Se4p53NG5j=}L;M8Hjhbex1yf%*W3E7}DYd+b>#pv;{r@obPF zwr$(CZQEFB+s<5R+qP}nwr$^4bz9YW*bnFYf%y`%jWK$Uh_4s*AB1Zyb!Sys)&QU( zc!P*bQGhzYndTT{&MUyZizbYIT}*O8wHYY76@d*q1Z!KiK~P#H@1kgVs_=*3qcnzE$y zV6w{b&Z*w&Ad*WS31Z};G>KrPB;ePgsDjO=XFy)V=#1)>dR!FJwb783UZV^qRems)vN^ZO zRUlN)Zi>}fqa-_8TnRR5fw!CWc%{WOzd*eE+fxE91f%}e!>jA42v_)T$W9to;%#eX znC$4*W|Kq{Skd|^E}EkA_k#OyyTg;-ZQmLpV!Bt-4cRjq+C%5S8ZU(5E6z8$%sKtbw7;VcNA_ z&tVuoLgZJ|`<3Ja6rTxY3a%Di$sZY=0^!@;;&>=^h)XK4v8iE|Y2wV%Ybk@9qFfB! z+u*pNWjwBD-!SZZS6|~0vz^Qi25T(Gs&x8Qxeh|zXCXxQHZptCJh9#DPP94yz?YA3fBIataw!_DDoNoBR-e+%MP{MUb)!%<Uy+`=g#3AMQD{kWlxk%zM$rJk@+E-&$%~}D1rjPLt4Gi zvD|UE1Erl76tm4Qfi`KHd=Mqz3@O-%o4AUzbivm`9N!^iyQ;KAERnX=(}GXBFxnec zfwj(X8rB}^uxkt%MIhhsm1+#xUZ^(6UQDjrtDq60z z_KtG^XQKqBtGUQ4c0_<}D|bX^2!pnI%kSNgq1kQ~(X(biJ{;cfRlEOK_7iWYEZU<8 zyl_t2)2e`UIW%;II*bU;zp5svk8dx&H2IE3swXwN6Rjw+REasWhM>$A&v4f{G%E2l z&;V!iui@0{aNlYWQmSO5&sWE_N7D7q-?{yz-3j@^#jK z{$xy-bakhUv;DW$nmPFw?}dEw!JQv}Q>+ME&t1{4Lw9qWs+!v6t4TGfjQZj9PccO z<1h}Ye)mjb-~FhH?e?`)TUh%i6lu?Z2%NV3w5y$Lbt-5n>lu%vYW6!0iUxghWLLJv z2Sl&ye7TIv@>VdBlzD|%aZ=XBDL@=AM3U2S%=Dz^-MdOpMJR4SLr&s2~2GW<3BB6j=za&NxU-DeI7(KIa?!>lJ>w zt-;_w+}{6oasSKhWo2bz{2#ZMndLv--v8n&{aa}%bTyWC6&K{zui7Bi_9mGH3z@le7fHkVBuG&#)n1ZzAld^ z>nvQAAtnKdDWUC^$C#N%6t&R}ha}g_)935Ia2J2Bv#_hp2BQX_S>&vcq#E{*1qb*s z)CX_j2Vz38*|u=fFliY=%=@yW`O^2P-zc*Z#pX+Q@oL&L#BQ$cSQ}7vDkS0jG%4){ zjEmbPNH!$+zGf0B-d69#`3cY46l~r`7G-es;($Fe;NE|?zsMxOR`@tW|3Vs>sxO2q zO6W!sdOd4daB~rKph1}w3N*C}JReH2b`8$AIjvmmqsj>dA`IPa{5GMPdF1HV&fW?T zsKv>(?cY`+q?B5)$knRdj2;sA*!ai8;*U+<-h*<=PLzlAvIUrvEYS>YQ{ok z6D}tF_1b>#1a=}2i9g_1i^x4S)(B)ww1OeuqhZKyOQ0=UXy-+tQkCeBt;37}#|xow zr?RbJjk{!^A8*$n=R(Nl#K&4pu~Nwcw4CaE>4HoRdvOd+U+A4ig+LWzM0J+rpiUY; z=k*&-H?52vSMo~(87wT)XW`Y^a%AC9UzLfLf^79^!;6n|F?++#{<395!oX&e(zaya zIVEm&e5)y6Ti4_Sr^}G^3_n-oc`jMo$MAEaeq%U2orNzJFtHEUgfpsDU7;j%#XMiilhhGgWpATRji)NnRC2<~wmR3oVkoUHW z9Ih8k94&;SIWBSwzf9(50dh9ek~brb%1vTaKWl%cT6w|S1&6mnp>KCO7o!vrUM*FG7S`NFzNSsi$Ox8TQvMhqLBNGjivY}t zKa=FW0f+_|+q*c~G-v16RtO1F{yf+QtU4lL(I{YUFoeMytoObC&Cha^8?B=OU~Kz) z{LX)d{RGdUXqMK@z?xO!h{R?$va5z&mpmw(Saj^VRTk`Ed4ZC;bTb!4&;Q|jkkY=t zjEvH@xKHj6U?sz^fUT@uF*FbSUkC3UM-*_Czo;y7cmTzcaZdzC$AWL+w>`N=F!4^@ z!t=~g8kz1AZ1JP?A@)kAu^|^86;)uPqs39dM6h5?j=A(4oPHceW zIO5)R0C4v67z>gPoSJ*6fkCI;6RiVde9y#|SSYf;+&4;9Jmzpe23+u1(V<9x~igvu^Frlotu) z9$cNrkiHVgb(#;!9>O>!R-uX5z6KFlp81Gbf@BGxc?0)4enIU$*Bu+vK?!*e@;pWX z&gpxnjq4+4wV+}rTW+ts^djyjgE=&H^4e^yX{J{exB1Z*-yC(}r=sW)g;lf&fy5GG zEudY7NSyx-D*+4TwFN-ZTv>;nRS|t^q!L=Fhj=?ciot;uhx&U5hiZ)%2t_7j0S5wv zV*Pu#ncslMirL^4=FtljSHM;lwwV=Z#6Q55hj`zCuKTisHjf_LS?K~XKO$WhJWex` zb{PtqwaMKV2ak>D>Ju1{m*D25DAkZ2dfZY2Q;0PRIz`&d$kj3G&mwtLU_#%jHxEKy z`+%*4Ttwu@=*+E^av@tbFj}`9&7=Q=b>NYfIBs9Q1&)jJ71875d0B0I2A)fvIvYE? zUN*15*_Er|(qK&wG`%D>U2%Z}S_dNf;A4dC9)LW-F=;X)2Uqg!9pMau^M%t_#&pl^=Wl90C z@b8!VoYhg{qNYsiz^Jty!QP*ni;PD_Mr^X*Kpbk%zu_g`dFe;mA8}y}#No3){C5my z%~cMT?7f6s{)V7^LK+izJe;fP0PgFKaiE9xnX*+*v3x4vW`e_G!{N{!L9QIXqy*!T zVhcOs?~KoUS;**CQ({G6@#wvyxsFQbkT&7f~{h^VOhE(!m- zV&Usixchd0kM+aP@0&`-hGKB`1ju9awMAH3`gq2IB?oFq$+NBp>--zpg=fmxJB4N#LtFO<37$^D6w-cBPliyt=JHRL$k^aB|1;H>6D6w*N`fGAM1sKr(3>!L&yN_i5OKE)&ZeOdBLS#Qt7kW!W~~`HL@dPxa7jLNQg7xwkp?n$$cZ4)a>^TKP-?1@rV^Ex z!BdVXQv)&m*fY?Eq<2dQsu3ZE$!CA`C3w6(y%!=sB(7g?lv6Gv<-s$^7f~4z$Vg^I zVK8k@W_>MB&=+Tb^aKwmZp-8^kpa7{cjP=KP_UV5aRTmEwxjah9K|_xOCoS$t8V@9 zz58m1y_$^!Wa2b+3t4jNlG!jCnjvm=(J)wP)ABq*tsk$EKu?*#oWWJcEu!UE$FM#dIHkBps?~5aXeVbQujD1OG!DY*rM>w|wJgWKXuhgvsX(^1W zQ`nCbt#Vt!-VVMu$OkO0=UlK@m!s9Tp5!8NIF4PC&h(r3f3jVVxSaaz|1c_HXXh`q zgvG`{EL2Rmfr!5Dtp8i_4K+DBgmRLsj*@L^} zu8Dnw2WPoYyX=8>LgZ5BiFBMjp1NLxsY?w8eo#&nUOkCOhfc`!`w{`Fp82~fszGZ+ z39+J$n%Au+hvt8|K%36`$~KzU8-Y3l^D|HVv>@{*8*Du2VA{%hBYf+O2-u;Y;pvb8^t=+E+Gvt9GF42$c6#*@f%Q!CMOB zOrBbxw-(wFvqV!1rX7ngWpWH(C{TcgvJzn4N1I$cOFqXpuS(vx*lNLLfU1*IQ07hr zMQP&c`)}3Q{^+ao8cv4}y~VyeHZt)*pj2>@xac*cLGilK1U4#PIkG?h7_@{59x-A~Qn&BC$>c(;3ODS}4-OQM6kaX+yZU|@En}#)-6W-!|5d#%?a#uP5l+YLqFdG@tt_ueT zUom-X8a813ECjvqJY;sA+ZZuoU&ULnwNUEM1IofT=4I~P!j+Yf+$5nf2fTLiYc!Fb zWOc&Y<{%P9jf0PO$OQB8ly+8*3j@{Y>pbNdGW3mU%M^_&9;UX$ms=Z3`*;yj@6cjv z40NHHz@dqDNadDew6bEVQ(M%>O*e-ApSu^SKtpExS@t;9!Gg>(iQDZOOj@~%)7~;| zYV4lr-5eKxb=rW6S_vsTpB!Y+*-j|vm?)n!`6 z&RsBWA0vxvoBSS9b_Mwlt=mnn0sKRONe~}5oJIqZA3OJI#mxUPPsaW92)QIn{ZKVH zjQ{T5O}mo*g>DDc?>nkwvY!uTbY1K;UR+)SXto;G=fU=QwDt0wiF z*;mexIL!FOyrWSAumXcHA~p@tZZ5rP&Q2ZGomYh;XVEtZHo$()H1!qr$6q;n3tf-v z#tLv^sFG5N^df=E5SOkLBK|TkOR8x5@w1_}Ike+Mu24U}M}dNKCw3iScd`*blB;ce z5lAu5@2^GNl+aL+&dB$FWa^+w-Zb(OPf6g&EkFKve>^p*yCP>>=!k$fE>)0#=dDJH z2O?5zsXt{uAaOY)qTzHQaI(R<*6}P3UD-Xo4^%ns9xzZs&5I(vnSch#pEXJrYAV@} zp=t@FK-}WO7@lpc>Ooi+Z|;>Sj5Oe)Y( zbpyV}{gcJY650qjpk)eZN!aDfnw3!z?K2M2KU3$paPtOfVlB%2-?z8x>x zNc)M7+Uee3VXPo@2S}GU`mf#UH?3A!~fS1zNjxI=iToef%T^@GJ7&%^{mvGI24E?-)aTqHy zaQXqwWhyUQi(BP3e)~mgu?TV>GfBeq3iRBj(3O-~Ivh?V12X$W2$zZQI&SW0~(O35jtjkGhQnI;v!rcy;OP%88b0z9hy5C8`(_ zR$nnaJf_V!Gq84y?vb;y+f<4Gr;LrIEaltAb61W_f#Be>zKN1}KgRV4;Y5F#%LK?} zK_T`ObIER))1Z!Z>r+_(b#|d%ZclH&IhZGOL{~Ie>=Ze-ASIyQ0%&{~N%5%nw$*rH znup1ZsR~?rXY0byJbWB}}7MFuSZZw;i}G16)G zBdhiCeHA*oT&p5>hiBg{-+9Z${6~+^(~bOne!pP(l;0Nr zY2Ez~@|=Z}mE(V{yZ;>2Wchy@)U4Lrv_la`NOs?S4?pM=iv;ml ztEy)nuL1P>a~F5yrR|}gh*6Y0+MtjwYr4F4 zcFKBC2rW^TQzn*tph<5B9u;EU(hLmi}xk0v~|0UT^FNdxnsrK zj%mUq+iu|&r9d@8$+_n*ZGV!*kL7+HicT<#4k0XW%LB#>r7Vdy3V)m$%;Gd-B!;l6 zQ))_xO-;}xMc7!;A*Wxg&yRQJs|#)FkVI+bW{M=zRCi2A6GD)A;F;wt$Z+cV_S%!| z6PQR{yFeH;`0p>L?yj>Gy^E zYdSuvd5Y-bfM&kTWBqd((iGx2U@)LeSWXjmF{&X#0XgP;m@pKg#=lwe3T}GwBQauZ zvT&sVUWPyI&LRQ&zZ5gWC;+Lbiq|y-3|}B)c#FM3*uyU24lNjq$&*C-lsK|={ko%9 z`ACe=ses4?1^Ws=QS(3+*eDG@bhW*;2MtOxEW}%X7;)e_58-@XDQNLZqc)MY0O#s^ zaN%yfQ#8p`AJ(5bP9?((kP{s=jq3D7b(9%@*uBblhHnPBPj8?@UohLY3l$0zr}*%u zgh+YBwcRv(#CJ(Z=0gK+VNw16NVlOd0&K2v*z; zQqV>Q(E&K*Dubog-0;?%;PL^txFE;LgwVu#Ag02a@VGuI*CBQD;L|EUrldNhqCVts0e0ZBgHM-SB1~tX!bb*>xl_l!e4{@3(TDISJU+QN z7HknBmBi2nSrs~zcy}ENgD{T7`h>5UiqlLsC2>d>K*7$c!~~szJVrR;f-D_?io^H@ z1%Afu%SbHL9mYHav?M5egBcXz`5rm)uxwC(SPl3dYkYQw>YMS#@EpovJXm^_wW1yQ z`O>^w`^tTYke6bcD<5w$aghVO^9~(*{i>GTER(CPelddYq5Pv@ZH=5VC z)ArHd6!qMbW%N=mev_QS^gL(w`#dnZHDZV#-Ar~~EgWLQ0uS`p_j%mLn{6E|_f0xq zrAxUJC#g(|sr<~H(1g&2f?B!193PtJ=V^>XwC^eCPvSzU3GP>>S^(@Yw^9@A1lNGa zhv2wTVT;A9?U~-Ijc6A^q{x7|7-)8|*PaOegD!yNN>=5W@`B8!e=WQ25mI6fHdGJH z@>-c*(hEPnJce7ryOQ|`qT`P+YU?=RyFrDyge6OGK%BBlcP0tdCmYz#O&ke3NhG3a(PVO#!u1n@Ngzg0nNl z`e802@T4H*90LOf!%n180z>CJoOLaqn$~=8dB{V2Fh6}3duWNd|IUT(=AJ{L%Djrl zt#$(aHbX&lqR;~~+e^P;AIs4)OqKK<2{xrjhEvk<$&EBQ#9|DRZ5Kmi*gSqo+=*!I zhsd{9>hI0^@iSsQ{l~@r-xv0O6MZ=u+5YEZXJ!14o*e6cL4NG6F^~}ms z8#i%a*J3YoIIvGJZoJIy?wh7^4H0zfZN+YWlFoGD>aRMFCxoXQevZ!mPbY<7jgtE_$ zdvP=eLqWh%zwu-0gPGdTn$sYhG>h~Gg&|^9-SIL`OFTv4LGwcg{yd(f@|lF5gF4gH zJjeMP5Pdlw>pv>>-xc_;N-;At|8JrG2SxvXl4w}}3q=2aE!4G^v=h!KY|m}&+JhzA zarV=vLle@Z2M49L*|E{FKmfYzdXyVdkA==p;8WHTE zMKLqk8F$Ro?=+MWR%v@-Y8j23Yczg#JJP+>vZiENYV}JDV{93VAD}}eOj7U1>ASbt z{rlO$L-|Tpih3b!VspK(&$~DEBsIp+y|SKLHEUDR%PiZU03?I>mil)#UTWiz^OJ;; z%Lg5pU$bK4OHwL9A2n+B*Mr{KpA=m%IYh;R$%fuzq@N9|!#2Nxz1**gq^Ip>*Zi2f z1+7gs4rs4Gj4u~^**n7)yf_1+T(Lph~7@pdfUkA+eoyv4(VhdrfF|4`qT=z z)qkds2^>=Kj9EI`#eKveux%Uj?RRjT;~T0IH|S@3^s~PA%{vB92U*yMdY}t3W;|p^ zX2BbOq(j-+k5Z|lA^)V<=q1cgCO1_hyq%`M8ps{@ImLFrmRl%Stm`xTSZ-O{T^$?j z>26Tw8!S)LQ(N{iPpATw31Ksr24=Y3&v}YwHQznwId-Pc_tINsk?GBRR={j(;A$PB ziugrt;7d$wRm0FQYYYQ3i5pJz*+je!tO!yd^7JhCkbL& z1;yz$-H!9157$7U@ZVo)x?w4$Y2ii{V5v3%{xu*Ms7#7AgtywF20{btW~EGy*DYHs zR;sX0e8k26zC$L`bXDub=srrzKpBv+5sv_QW(u18{HnNpBy|Xdok~*W3XZd>IlfuH zV%u~=lcF#+rbuI%0sN5J>8j8Tx+--^2VcOY04`UP)10o(idKtq!2&4o3#XiW`DF?jHnL z3R7fmzvaUAf3k{Q+Nvo@F!D+;cO+auAc*fOJrFVJ{AQ8)tZ)VAKnwKm;S%QWc-OVj zVv}wtDc+QL_{WsW0|Yd} zVq*svt~$tB`toUQ@9;<^R_jzt$5Yvzz0wA4vBXMyAXr124(msotZLeaG~kBl(n-(< z@PfVLrLI4oSR4{pfLU_V5)p1y3>qZ0bB2IyC~*KMZ&e)Y1&0mmgPx8kOW}}7iKIeaS07{1l@0wD$KUh zuv3v#fH_9cV>QqkQ7d<-AGkl`gNLu5lY*82@SLloSN2NAq~{@auD`L?Ka|_ajym5K z#4FjO*OKMn2^;MR7m-`mK+!`VbmpjOzKjkF$&!z94sE9_;_S#ScBt;p2Yja+{biZV zH;TqYw%t2AHtM?f`9MJu!UZX!YJ|<}T5;8^n`Qu>taxAwJ89uSJ>iq#YFL2T6pJHv zRjFK*X~O=j3nW9`B0txJa2W*MCwYC3mj2}68lXh#Y%N@Ol5fv9vu(-bMKb`F1pXHD z84DN;6+bS?#DV}gF0Y!CulX!lSO8zDk>v)i&!2O7w>blN4a4{6#R;~gj}ielbv}yO z^CA*f@7SJNrkU|-QjOQUZ$txSSOmc0%co!%3H=COVs+i4Va>6RbY}o4$kaVu9ozFy zT{!}Tv`r=R)cTlQB{<{_uHR?+fk>b8SaUMd^aj3HOZ`i{0cXoBK1cdai&x@2zPoXN zeWxMEZxbq+kBz&Y^vcOg9PLMkW8uEgL*w9B#xalqd5{5gK_zshUwpEm3=VS;ZIFU#sSy)-QxuQe~|_^^oXZke|;`swl3L#9X)os3J!2 zr_m+7!=5fb;w=aLstLvNglB4_hKB}}UpXt{Sl=;=Y7Bmr9pllVmcS4Qg&ePOJa=Cp zL#>E^)HOY^k?1MWA6eudc+HT;=+1eZ48bMg z(|wL&myVfy8y!Ym-VRzJ#MR>Q`|jn?Qu%sl?TRh-C^oU}kmpN63v(~T3kW$NhCmqdo#K$0#5<0k zEO6ej$c~?Yr7J{3?vp?wKyr$t*f88EK%slOM)x@~T%QsS1b}LuxkewmGj>hT=T1anNH7$sm<9 zaA7tlw2AW}A9ch{RDHS$j4`dLoF&rK9EV zIiDaP+LFuKU-P&gs;_c3asf*SA4vDH2xc{RZbMPgynnH9cY6+X`|fUkQ>=&mDlC9E zcA$8r%Px%7Q4<_HE84ehPc#m6YZ4~-W1x;JXgINp#aR!b`v*Uu3nNj>$@%bHm=Z^M zB_os$t#xt0y?)sxW(gQ|DViD3Z|!H%`048Ob$tD!8O3q4K z=6BwpStyY`G&2bL88UkXhnC+`MuhfJTx*D@Qr>-oe9f;~Q{iuJRe2AUbTJxiYP z&{pC^-pY?5p&#L}BCQP5P16i0>+DN!y}=IuPV%x)1hjWWXWclSYGX#3c3r&YV0(>O zQZP&j@3gbwyeNQ5HAj^Z0_&xI7%~Ls!WZg(|B1nvlY#MDO*}pnTvwh12k`}uy<&*p zqD`%R1;F8Vl`O}ev{d8lXERxnjfHE7jE?kGQ7>FW;pD}_gT9m;_Q7@w4)y3BhEOcj z8S(TSQx@%3uKyQz_wZIGj}L?mojj7Nkh#y33^}sjPs5rYot5K`MKJukqEMO~Y9)re zu2EGf@6XjxLr#z#3MUVCamVD?F&Hp}fr=mD%p_pnhm&M?1IK*^SX3DLRUvWeC*DCH z>->q> zD@hNouDC8+o7BdL#3W-={T1JMmn%7*zblmqx-+%#?k+(#4dROnc*l;mQAC0OAOY|o z<@zf{rPc>OQNMayRXz zzc~E8Sp2=aHUZ%zI#3%JZ?E@{#h24ntYU_qyEZK{fAuKWzXzWILfe|QSAQ}gB}FpA zpr#MqOumLgH}#aohvpNr%2)dEXMfOCz@!LMxRODA7FoYqPKAy?>I;1b6r}FgXw^$v z87wAE?URC8+p?@&mgHs&BHJgHU5`1?SD z>*e}%a(y0N-sl&O*dr#Q6JJ+Orzme~EBx%!Ui{rqeT8f85s%&?6ohwkxoGo%N5TAp zAo1H)nD>;BdiLo}0gAvfAIxFi8dVx)Q4LG>2dTp6GdyqHVr^pNSfZ zdNMoCqV~?TU{IkFZI6ard0#|nZCk!M;<(?;!QB>bWx+CHKV>8S8Jth<;Yco1i zcAF+HWPab}HABLn&s$8DdwA1Ij3oWYwabzLrD`%RvJS;Y$*ZAh8;jyRUy@OatHnxd zeybWG!Mlga$h9!1@$qL(|0iH)9>15@*N4sXwiLkb<*r(i^719?9@e^adygihsq<`T z==a4Z=MW3*F9L}dXo5~aC!lLR;xxq)RL zC?HCKU`>7qG+h3dbAMVBgAd`_y4a?krbaC%|3xT3m1oS<=W-~}7RuhZ;?g?5O-0Yi zsKXusp&Lh(1IhkegNhKHVOMf{uzn1f&MN1Qzl~qap;+^ zcp*y@)1v_ehrPz!aHpTW4kNTVvx=38g>7Tw6ai zM~p1QZl{Luh5lP1F?Ha4-q9In1Ru$n^NO-A2*ge$z|rf8p98&VqLPf9lu7YMJ_u|U zc!@*T$fPiUW#>r6$2bDOY>yTWlhZm{+fK4^X&&v0#n6*%{h^PtsNe>vj(k$#Th}Jw zF-R$1R_|~VBs%^i8BtinS-L7F>wye|n&+&7Mo^feXROMDK(&%ypdh+@aKD}o_lkqf zldLQ>S?Oj*{??GyrbdY@O(1UNLBy~WjUaBE3#U^Y)rLWwLuzZuUQ3+v`r@ADt(Jj5 zm2)A8a9tgLBrHjfH$)oaKvU!_60)>WH9peI7$*e`^8#O0MDq;}LD!(BXLe;) zFw^Q`xF6DB!tfhR)=Y1JKEjLGhnoVV^YPLHNYZnxCIPHq^Y%HlL(|(P|E0FH^PfEIMy@{~^tq)j3j0H# z#&7GAVVUk^ibev01s{3+rRf+{uDOpq<$NWE2m2ZutYJkXH5w1;Oc#aF^4DR-*Fq!K zheSj(`w^kUXpYBH?88Pu8>T?8u`t|2914VqzQd!TO}$ja#2{6BzDj3iC@DT`76XE# zl?G+$i)U!}$L9nDw)C%`f-|0U>qc{q-e1kERS5~hie)BS3m~b#+W7vO z4-PsSksNZ`-VWtM!iYJ*12-_~KacChzT%ifYI78U*` zbi2(bjFvvTp#&yLC{2(&${d2goI-@8bfes z)4{U7qfQGBalql*rd_P4tVA@8pw4a?f>~ypB3u`Y8+?^jUrzRbw;}5SBQ(00rc@4& zeB*d2VFw2 z(w9T+C;(=Qs`ci{bW-QLLE;`>kr2g~#t9$eaz=N}IOVOt?t*)2I;o4gSarfH)|4pc z>~Gf=(aohq@l**}bMBS`FX9QK*;f+kF{vW<#G@eqSf;lP@0>AC{U>n8g<_I)_6d~e z5GO+Ar_FAgLEB} zLk6?L)j|Vy2Q<*SkWZEXN@9=y*JyUhSv-7L0}2#u=^;sI>TY36y}U2xvCid8Xd2mG z8vq(fDFzC>y%ZGxub(af#FAqw?24h8rbXD!AVdR2T%`n0W>{if+J=gO{Tf~Mp`hBt zsZivvy%N!SeZEUa6S4525x#MmVnVoeCgYRupx~*@BGZ(qx!E!YyYHcjS*|IR?5zHt zQ89s0!$G9tc;;*O=@=l*k*y<8w1exOZP!d{X4ne{SZ0_uKC8YdpAo*+v&iP6v_UkV zF{DjhjiQiEfH(<{(I1Tgb9N4u?Z~n+kF1?L_Kc2ydtU7Irsol0=zFdsnRs|L(!+0u z_N=^I4v(!FMdMJoZm_l|Gn@J>OpDSb_)nqQZFMBfC_(Uua2`D-r*w@b z%CAFb{|1@Bci<;$;Y+I-o!%cY=|Hp?)i0nT(>gV9WID#Btj%FQb3SaQcN3=@AKHnE zZfCc)MKtv4x?YY2c}`gt0Scecr$?BNmKrej87uo98{~BwfUxSeK`Mm(4VqG+g(NG4 zO#*#BGL|U}tu*Njs~k*_e2;X1hY$g8NTg+GCu!#y!cnTStzkwAVt|^WqCrp0_Na3e znkUHoyc-hG-1Z=7Uln6ds5LOfb45X+i%{BMC26Ja@qkSotYY`OQA#U@Y1URV;8V48 z^o$?AsaeT(f8gF*kid`YH-(y7fwkE+(du26txnmr{mpYfC>C+!58piwfe1($%Pw*% zEma3$i=^0U6nRy+uy+ubzCG-WpSAA#eXg6S8g2no~T!~d+o?gn0{={nvZaOTdholDjSv%(C+?ANq6 zBF`M+N@DoW3b@81Pq#N#F*!kQl>~Hvi4c;ulBZGvIgHsIp8Sy~V{IuF3^9VrBX2G0 zhgmRY;Z4~mmi}3Jwp03JkFzX}pg^Y;BIU$AHx?K{F`BZl*UbBl%3%t$jFbT(W&PK^b-uQ(@-XjxQS$&8#NY z#8^E@P69Rq5boc0dSL6V1H3mMOIs>#U~#BbUGB&?BX{RV2E|tBsmJ*MnR1~Qr{M40 z?QCFZG4F4I)=lkjn-OEv5P9`o5~|mAg5nO6Zb{cdvzjIBN!1|ykeyyBgyc4kRVf7N zdR48CiwoD$mw4F8-+Ck2uC$lqi@O{+>-*X{5QSo72TJt|%UA3fK_dwq%ZSr#jx;+c zG;BVMj8gaF{Y~wqrx`fZA|WiAI2|#>VPXvvg%aW&D6^-v2>PpzjSf>ax1Nji#`Fdz z82vd3(3g$M<|lP4)vIcrLV4(4i*-2IGG1;Z3hdj;KsRt1YS=oIvgj7|y9m4T6z@H1 z0>*n>i$enku5@ofNPpXjVAec?D0q23@B}68X^~kl?Zi`_!yS*MMmUT}C-3yRTm1uX z^oDfz9}4ZimDm5@Na6h7{9d;Ik!}B{lfw4@l;7K}vH2I79ie)nu-6FByuwJdx)TpF ze=LLql%p${$6qt0e66$2TIlVwiLOPQtA-bO!+j-kbvX?X41@WDGkzew$kkF zi+81uksg2>$tbX36QRl@=!g~ZgOwi_^#MP`8H&?jD|@Lt`I|sA1RgOhfJZD{-fIcN z^at}ctbyaFs><3(@z0~|S1GhOqoY2LlghE<>__5J-b9|xLUJZIpqXZa3Mf#H$uCEW zXq{+KpLb^Oc9E%-p~x|5#ZDH1Mzxgu1T$C+*bvM0uJR}skU@6_82p_$|7`d{_vxya z*Wh_QMcgvwZV>rNn7EY;$}BwLX1Fva5URk|Q|48Ueh{q)2KH=~GVHOHpTBR9u~qQ8 ze=NB~QG#>_43f+!*gg>}9t|MlO>>z{0?30QyqM4!x z(GBJ@0JD@3Np-LZH_0t+tB_QCG4s<*67_`$tED!Whg|reK+6o{6}rv-$I7%1g~*EE~VBhN1WI{hlHG)#q$Tk zUJBiF@pWT&4WYy5NkK&!uRbbq7$t+`A|Fs;6|=;uS*~}7M)U^@aM%tRrU>|giiiiN z98Px+qkubG`i>Okd}(VIdF-NY(YLj*Mg}A(JWynmiAm?2( zEZL8o{oZtD7P(44Rp!yiL4(?ze~wnXbwS2(Y5{6XIrZo9;enC&HrW@$ASZlJAhv%x zv?~P!G_i}8pQuhj1_g*eeb2w^Nj_`C$7~x>sW%2)w4}{1X%<^ul_S8c|CAv=M&Nb) z5ih6@#g!r9x{gB_xo#IJEHP=_LGn^Xy{+NSPXjLAlrKgVL0RA~w?(1ox@L+SRH;^= z*EVtq-Phn1GN5m2B!}P*rNYF2o>^VBLVOw2F)=gTE)r*TbIRh0A9~@w*qDsP`2QID zhA6?>B+9gH+qP}1(yFvGD{b4hZQHhO+o-fByXSPz;-5t?-}-wIaU;%!u>>?6%q+rL zV#uYRvan=mjg#*5V+i}JBpsE{PO&wmIFc3MXHWHgJx7HR#^XuBRbuNz~2OmK0 zHVSFVH3}bpNswo5P;NWcm3bZ_Khzx+A*9A0>JW@wP?j}&`*qq}n{(=fR{|4L76jC# z=v}8-wiTCmQx#s*#e$E*S^bR7>C(?(7|8|U8%6sP9aF*=^1cWuGucWliMdYDw_LOt zwl~TQ;HS;*_|duF-~yC7M>b{ak`dFjvmnOYSGGi7@-& zp=J4i5J!%Q+60so+P7n`?21Sw+s498?(!DQZgA|>t^fA!>Mi1sxn1$ETyFY%<(!B{LVtGs}!FAI98)&GE| z?u1D;uc>Y`MAF!JJ#n49S3FmYn+O$+?SlR4;KZ>TnRS#KUU{`|0D@C8ihmB3e+`R& z^C(!E{!5T#|7S8X`~Q@TJf*IY@H14rpKDS_(v&Mpog&zk6aq7UMhXD@v@XZpHBt@a z(2ry=9kc29cDMsOKA*yf@bT5@;^MVoABGC=tMNNqo37ilj=sJ0VSQ;(DCyZ zhaZ^a)kTRNZQ^nH0`T~_^A^@uYh1PlgpfZEZBSari_N1K6ed`Z2Lz$?U9c49L?*hi zr|)1$Wda5Ol__PE(aX+~lErc4uxDm8aVGJQ5w?x_I6^iked4p!GP&JZroyARyHQGv z)e}i>PS{5ZXRE2kq%21j$BJ$WQHx^qA<&JCh@_c`z`Dibfx+WahI>+fMO5sg$Nrv1 zL!uN@2xWeHC?L1N^>0{;Mc*?jco4+#S58E=!HHk_A7opL)5{mN%9E}dJ{GgE(Tc5P z;$^5MXX)anS2Z21iy74RUzwRX2@Yx3P_d8ROk~wlrjr}a!hdB{t`g4Vs93s294Kph zT65NRNC}m~HGY`rq_GXj;GQzv?Q1?Z14hst%X{T$yScVzu|$JWE=nO4fTl{W#dYeg zROmzp@b)zl!=e>ik7G_j_W2}c>dsWjzPk#VWU|JjMrY&$>LNeuC4$bcNCiJFG+eKC z%}#X+5SvFx?lvXVC$3J*@`)gj2cZsc(+*ds(ybT|wO0D7vdCo_tPFSbvuc!jn1Yaz zzNC$lGC*kh^PN$)D+&)FdTNh;k-<}O(gjDtPXdIMgu*a zv%LiEmj%WWW6i{4@O4QxmcBxN`(YwDCjx}@{o1WIZaCCnOik0p#Ce`Fz{c%GCb}eWod|E2%=PX3%*zd0q;ox+GEtU@cUIYz5&eS6M^^8s zB*BlNVhw%^)gJhMDkB0$mdZX_nX9`O6bv|0MUr`9;skh4q9U(W_bpM0KXXy>@Sw3& z-=yf`yGahR5UqOYV!2Hh*N6i3MEWu?BZ#NU@WS>n018_tg+-zOq;j2W@w#?gT35Yw z!?aaT&L=MxG53Ma;Tpv8=80P&=%Q}Lu{+*vEl(GPD3RERIkh*jnR94u*niuv%Q~`~ z<8A&VNZcqB+VgJJjyO`Y-DHr6kY8gSNv1ODB(j(_?97^43A0u<1n*JDCML4QsBf-* zO+#&ZYas*R6~=`XkO3n}G<+E_#2=1q1e1{3mF!iLDz=W0ZOIYWU}qL|;!R>E*jSk* z*C3tjG4aB6u~tt6R)g0~@beivH_-tsY1vA}w6OUGm0_|(`t9Zs_svLp3Zv?yD;n=9 z;CvkHhfg4R{DdP2*J?70{iv=3(*g#fU0E{U+JWa}Iawd0ObYuX5N#|l6=I|X3{?B= ze=`*Jksw|ZsnCevjkQty&PKX9GU|jPG&o@#vJD4s~1&A!p*7n`WFx)K#qgVbA(g%X zwWBNz!u6#+Ff7&lSdIB2fYy5dqk!ka4`jd!HGVu18opXo7odHI^Q$i@88Z`p-~n*` zTih^vchm%gYZx~j!tcb98;EF$E8Bo@pn233dSsmu{_M?clGvOTC?m{gmvN@!mNMRb z^=flTI7}O|K-v9eXt)zCY?G^y8YS#%IxDV}hb;U3Rj?)?_%8>rc{r-gm35}8`}9Sx z(y5$7_MTFcgD%diNDue8HCw6t(-oL(jGK-PbbxczU@EkhZxj<~`f;00JqhQ|bY~Dc z3e?R63QZq|Cx5&AZ$HK?xm7fehxA5Y?sc~FNA$+3&KdsUTU%}BKM;KDADh5<94QzD zVz;(Km;8e*VranKFIb!=42>vbmY;4=-?*Fg0i*yofb8eH0RvUM^x7|hodq!NV4ed% zuABu~{*Dx_cal>2uM3h=x_lY%_2{+n-dK9DTm%X zMBn_YUb!~Jy2~*+&xFr$c6=0hmQimhkhrg|-v)Q=d5okX|Co6Ho@D=?cx)X1^=@YW z=NiTSKdn(t3UzY8j4)d_)J(_0(9TxmcTnXBG78avgvG#A!BUC+y+5AE<>#7^qKcX5 zC$C*C4hXY?Iw210&gd7HZ0~TJO;@rl7q&LGA%^Si6Laa|!Z5J}?RQ-Pxul4OhEkb| zTZqEDy>!x$y+ctO*J~wsm-%rZUZJ14<$1Pu@Sl3{KqQggD)cBCzMn~61S-?}_*H|W zi1oi`%m~N6irK`Ml;ZKx@pIk??MeAVVn|%9$?S_0;$)?fUzxVqCQP7EDvpxTx#T!e zqDsDO_voKYSwdO4P}AJNq);x`U`g^w>Ue&`LlWu_?+cSk2x+g5f`KqZwVf4|f)4g9 zVId=+@Y9~>h|a74eKU-QNn1^OH+BZ5ywk^I>j`(087J%s9h$bKL$`(BkJavO78eyEQj353 zZ_3*%^c+hUcHGr^ECLcL09zS^mak%@Y;RzwLgOOqcP|291NY0D*X{DOx30^fO|THz zbo0T6jT`=MJCxvXTdM8_p_QW6Cg=w!ndhxu*aCE^sW#l#f|M23UOF~%Ehcy2W)}V6 zkmdM*-|0!p!nbX&2#1D~kmCk%Oa@^DJ2EeXkY-M z8iWFPI;+)6+nBj-+c-@q8u|(6f`Yw9RX#|*T0l78`Ccea3N&G;No-#Xks_&tZN_M7irD$81g01oQv6|?ChF$~#BvLYn;VpyU zjstO(rsvXvHwq)A8h#IY%8Q5qJ~=i_6PCS_kvf(8iUK_7%o7bW4JZ}h`Hv((Txu!K zhR&G{;elyOL0qxY_ULhe`RQ$=FVfk&c4*J2^Fv{>^x}n0j4EEndPnAya!{NfPQ|w} z&QhYty}fOM?73H!Xb6NJ&uqSAs_v4pbuvIduG) zp!zW!kXcP9I3b@tGtMbC7LG@{f4qNz^h=3^*(zwyUtOL7@U@*N zR+iY-W;@i(w~}8!|K<7x;FOO|@Q-@=cOm?%iLo=W{I_2I*~2*grye$>zG1T=hTwIg zc59~*xY70dZMj%*E}sHR3swQcO`&KIjfyggcI9@*w7RdQi_t$GXan?&{lHwZWtOt&fgZrK@u3{fvd$cP#*^nuA=Le!gyJ4aVcN#83ih z0nM`${eg_4iq;jyuWH@Pa%uxCFm_#uDM(b=i>?wmPW!dSTLI=WRPvhsC=@AXQQdx^ zv#$E|55N>{iawgQP$lxFpTtDty)K7fn%RE-4AoLSPnzqfkL;(z@o|HRLuvcJSNka_ zOdvx%@Ps9vcbb^eSwBb}XQ(7S4s*ILOBG9U&u&XfHft_+=8;8MSoO_OQg|Ci@q1kPmU0NCgxwsT7Jy%GH+ z+3NalH^SMTFuB?xec=~f80O5E(VY&2CS!5eu%wQQ*pFm#VW3^k&-^bu(oX(|p(*?e z*b-<&%UU6do)-c!INU_xz7cvuQF6!0AP@3M_hp2c2s-3C`jcKB+Gf)J62b5tKM`tX z0Wed8jZg*Y4ru1QYrfe6mH-j8Q3%K|m7qyC zG_w+fL}6nFbDg+sCtU|+vwSdwq9opSezPk=(XsNfaV4*T>p0J8?R|N?;!CZBURmH@w1q-Mx z{jSDhHcg<#RFEwQ7u)e%50X*`weX!1cL@4ojq_T_p+Kk|@DW<(S=1&)K3_JFW$8!; z$E7@v<^d57LNcSUS#i{oL6%THjOJbC9$Z?wR z+LTP}yxDO3i*X2_$fAXMewTyH6S^j}TU7iUSwNBkHwBp+<+{}n+s#tSHwNkH8{soT z3g#jN6N>ppYXLyjy=KK}0N<%DgrNAitX4#lnqvK<7YlI6r^$;jr%%yRLZxem)o1?CO88YW!FEO9*a{Z>S z69dV~Uh^Y%X6&n`ya}>b##{;bCOW&~K#c_y^@v~I^8Ann2{ zE))vyAEq4MxVCdZ_g{zdv55gI^=_<3_*qQGCvpf?&FAz*9A|cjI#`*I?KWD&XVeEJ z+{gPcW92FJJPaPG8LR0`-4%?PsKq_+G{kH)+q^%sB4pREPI!c&GVU5 z2%L1{MH(gnFO3-1uR1O-=}ICi@1pIQvJ02)B<0?(svT2;HhovPP1PHIG5mF8Cn7kv z6~nxsSU7Ny>*!aCwojCBms&jiG>h{Z2%fMF79Y#IF}2#a0)cI+`*p@JrmOZ1xE|IJ z^Usd`AB4lm%=TZw3gQXNDf__}XUnw=ju zsFcQ?jlSoGGgiPNiWf5x4F>j*gR?0i_(O5!#8-ABnH0QkC&p{#oXy4X%)44!!y-2- zp%dE#5G)tH@S+p8U(+1jg$!^kO89a#PnMn7{En?szW07}tHCF~w0i1gI$v)28dFmR{)o-o3x?ybQ^P7&XQYZNqmCS}dFBQ-``mmn_O5 z1UG3~{uzeCja@ZX1x}Af9?zKQG4tG#hw0&c_q7Xo5;{yMH=5V1X8SBx=5k`aNL}1v zaL}K13Sxh$NlsQu2JMulVz~zF7=HCk{c6m;rSMXPq7w*j@+%I`Ni*7lV$3x8z0!~+ z1ij?}6-Kc$?@5!nv-Qhw)!X~>3BE3&U#4DA)F^% zE?KNNi}0_ZqQn_DRou5WB*@%FY)c9w+}A52=1f87l?&UP8saMAeSg<-xxJ)PHdSM! zb$f1<(BA4s>05U_Bziw6u9rEKAm=6Oj;+J;of4IG&SV^%8iRT zw~^w<+DcEYa9u98LhRB?YaV(8_W8Bz^B~;uS3!W}%RD6|(qRGE z054{xO3XhO)hERTf^6N5ER2P_ryl!83PWC2P01$JH)egR1WYkEfHs_#QodM?Ds~jz zwE7GR@NA1j=JTtSkHAKQ(kJ;>y&uP%2cJiU`$BA2&9md=cfoV&V=Y(eS!of^%yY-{ z!z;L$_@AeL)cwEf`Cmwllj*y&)Yxu)G~ovMr9oZvFQHIy@0{{Hb_raypt61LV%@1z;XulQd7|tj3e>Pda(e z+tayW!MfUm&yuH^o~_x$$lqeGW`dGgpnp|AdP-D0BL_vFwF)?0BHF z-9jg7^{)pcR!sz?4!&WE0LcB2YBi-141eUBG4RH@akXPncQNa%;qfm=`)|q)j0%|} z`{e8-6*JgaegpvM_s|4xDuwaz-^HOd9l99=tQtOeJT$pc`=nYL{sDLD+0fl3xMF90 z5o*Fb5$jo+FWz^CCdsY85Rn?%XlAiaj6>Ut5iz17=W)P%N6zN*3Trm-s$iy-)>K1+ zQcvR)%Khbdaza-t>E|QD=5kw)Jg+h4fFpuABAcBxnQIb{CPeRx86TY9*~cbhrIc@# z3_TVI6rR{FX)}&532E_|l9vlys)$h?7o}t;SoFrC66=v797<9G_fLimI8LCrk`*e7;vU`mEdhL z(N^DJCU2#uJU82;82n-i%GS=u!1JAZGYX>_a2p{gZ| zGu#ADMXouiH|f#`<&@`eV zC86onfoJK7*}O%6DXNqv72qN2u311uBHOs7*x@%;bI%x?WEKg&^dpkVuR(aqkWxjs zpd;hyDl);Gh3HQ}&^gJC&oInn_Bh(4UdPfsXzH#_5A=Dt5aT8!Cq;j~7R@W~rFaYD zXkQllt;eLnV6~{Tbf;VMbohBzaG7?A@$(p@p9PI>QfC-Mf4A+;vpSQMpfq-mufVp9 zkaT?Zy%xWsLu~*3`_F##UmU`~{$Cuz$nZ}f!pQJHA(1JZwP>6c#?YN7(jJCCX^=eD z+aZ2DqhZDzx0HYU0h;wsZ>17`W|BFH)>qtzO}T_~!>Gx#wk0V-;MGz6SUWx1`;fnr zXW#Abw^vt}$3EZ=*SGU_{LczY> zzt+eI{Yd7evY@4E!*SYb7quO_sqjAfpG7hyOS`J;IqR3r>zTzA*Uz44@(Mb+Cj@B{ zv1jR-EQC!Map&RoW@;BcFN6B4yU(;ZZ83bn6Ar?RuQIhndKhzIg8n}IcjdBBn_Tbd ziGJ|0()-cK;Z!4snriV$;7(W4L)MY=tE9TTw0^Pf$Jg7RxOxHZV@@Tu`XKtmx~%(r z5@K?r##c_d0ZtuL+NjIjnTV#vEM~0LC!@(wnQS?d>d|l;ej>DS57HERwOYUgfqr)C z9k(HkZ_|@Ne|~soU=37+rHdnn_H~mS$n9R;(`j3C^pzYPo$oWP@dNDs6|cH8O{xWr zKeu+NLMA-ZdU118Ql-;WF|9`NR@n)^vxke4bgy&b_Btg*1SrD&fSv8Y))CG=(Nk&k z|5zq($a*el28)bAUnd|y2{gR`BUA_ygR%gTJ#b%+me)Y6o!t+}_?HmN^xwYwRs_9j zFOPy@NgPFhLg$V4_Gs9F+Cu%3jRk06_q2cvzeoQ2L1l9-n8E}`oA02{UEw4j|7V?} zo1~*>Oe7;!5OxevrtVgE3Wc^+T0;7!uzBcyfX8?+k>f}BjHNv9e9p*>?yzQFWE>b`G3g9_1Cg8ROKV|rz;S+N$mAoeOLvG?k}=&D=MOXSk%{Um z%n5xzfOCtk%polpS`oky)kHtJtx(Tf0T?jUrM?}%m%%X^mFoM9gosb}VOON@|0t-B z09=&tD1}^_M$~#U>K>ztLsPfs{o4NHwwydKhB|?&=X-*<4dR4`#M=PohPz6e!ml{@ zN}9h4{Bv;M1O>mfQxvd%Mh6-#AiTfTWYL1a7i&?-a#;-`PNFU zQ&NckVnvXFV9o(?nJ8K4FUT_(T-i!q=!Jy-tc}8id&m)4frot16~$D9Iod)=gQXD% zbpMB{6Q#bl2E))3gX8w@acM;jY8Z`QIJ0=M-%P<(AH9Qm$XDARo_M3;&#`}--Dsb_ zjAjEvxQljiY=DR{3Il^IQn7=nI90JC8OW$Dp0_kmlvf5Au>B^`3tp~(PoOI-aC#ct z<=2_3MxvtWPtI=~ghUt^ z5RMAKKK)&75KDtA2uQ>-cz8)CTp;syj+3i+xszuD04jj8 zQyNgSQ_?J(QtM{l?#GwuFfr940dL9Gf!wKpbT`G3H@t&CX6DNxyK~#5VP#&fNq#6F z+R(#u&MM0u$qAE|q0SW4z?7e)m4RD?;~XhTz#^m$Cxl$R(ol2U$43p9@)GL|$P&0l zl}cfCEbOdnk;~_kGA6Y-_i=^4jmdn{(>`W+-t6!`X?TRVijw&cA)oJ0 zQ(o@`y+3$nx>CezLPp|nj0-Kt+6AI1<{jcL{1U+rMHolr%Q9nIf%^xkeBh+5&K@#0 zc=)X$=ZbR;J{V>=M9UW=+h*Z@xeAj|#%kyiNUURSdK%Fhp$rzz=DPpRxF7eXUW@L2H#1K;5Q(R&mej7xk|55R-@RSSJYs;G$38#v z@c-RwOU-p7{^1PVqeaTK#Yq>81TV>EhQS(l++_{%KtK!Z-z1_#AOO;Le-x6Q!plmP zfk>{kM@V2YXMTKJi_gi+12be?h|V4+amIKHO<=oBLI(68dj62EE-bs$=`j&Vu|H^<;wTe0gdfQ}&mvyZJ% zF$v1ooB$mtL>3i?2KAJ~i=M9G8V@N<2NJJ33nB%C%*OH8ry60*-CCL@rN3rSv5D7e)tCwl!M@RIrn}39}cQ>gy2U1%CXuzYOpQ`ff z9H<>*1(J?f$BanK`YPd#(|AZ+g|{dU?@F!O>w&mL7S~_=G5TH+DaNJDMjsvI3Jy#O)}-2SR*Pm?>N+CXWl?%{FPIf^N23(47ENk> z?lP-62px7*FeoZJqY(^1V>1j(V(sU!y$s<3y-+8%4RsyO=YGXtrWmSdDd_78nGdqo z2wv?|pH>VR2**NxVd>%o$ei4a?j^dY(Ac4 z(vQ_K3NJTF0mR2svxE^B>UymfiznlNh@lMdx{PmP`-B3;GMksYb#uz;k1@H5F^n}v z;_zQAV;m51*eyK+trZV`;eW3cwKi+7vclv9YPE0!_rjqDO_ke5UgtxJtnbKD^KoJ;v|92c|GL^Ek76Nsd`IFTYg)}*)>;sR7@vmOnYCsJfNp7qJs8Ny>;Bsfs9<7q%MXG;1QB^P?-_nOnM%3^pZm zO{NzEnn)V9I)wcTlVkZ3D;PDhz8Kdiy3D+^%rCpk!7XYmt*e$lmT?q8lTx`qZlO~S zveA7Tqkt@b%D1-KiubZ?U!_)7BOm(IJ6R~&a6rpk=>>x)d+@#ZqwUMer^il%RH|M$ z%JrBei&KcI`lkN!nWiUx_#Ig6NltoVr8jG6&(33&`sPv!NW!c-U`|jw=!|j%65FOFEUDvZnU=gj$m|> z$!_&z))odbVEF7$fbqN>7yDFiemM8!q3JDpEKV%N-1Vbm$h#)6Ur8!i$fwN(Vd6a0 zm7-pS6?SKa8j}0tzMcR457G)M=Xp%cc0}22UB@^_0xF{IkOjQ)tzxR&jh?7#rSH-7 z1?JOs+=!J5h0-VKk*27rf7~teWjvQ%B{xu8^vUVaY{;$;Dd zm{&~^W{}$A>SEAZ)`=dnGijpj>m&TVk3A)E(St-UzXl+!{gG z;DpLY+I~PII^pdzf2NvNi)GGIcPk3NWuv{Bn7m*E$xvUDwjDVnmSLr6qUdS8reEZX zwkViu<}HTfQxdOO>nMO*(9q2RlnpGC5B1%bb;ak}i5a_tYG?~S#O05ut%N<&lR1E4 z2s;SCK)M>h`QQ*6_>ta^L5ba*p@T6r`9`AIrgeJBEa{^^AK7?va`hI74<(1q1DMQd z;W_)QvSb-t?HJda4S~Ydu*QH+`lJ0?~cLSf_@JGO_n%)jwu}vbE6o7v* z)KK7f*Yz#E0Ugc!230P)>u)rI@YkSpK*K&j>0IV+J|3mGo-R|~ta^{=|+S2%o zHz?`I7Kqww9rA=D!Rw_^@Z!<%;5 zu?b46X-rTQvQrG?wKi$DXQIZb<0 z@MvcRq(J{>q?9Pg@yUTenKjEL{~{L;)Tzv}hICUjYOJqzeuG8`7G(xk5#m{2V<_-B zD!iZ``C#m~r`pcp1x{aQ2*y7Tl81!)_+lelp6oldvoB; zpQmMjafXBX*0sZv>TTQRmky|bnY$35;=+gR()chzK!9f=Jpqod#17g1XI}GcwbU?A z1Ksm#WrOYrfhKIu8FcD*U@_Q~(t)96K6kjYT{&nSubio^j_zhNIU}ICOKMa}1eM*} zk$J!9>HfX;RVg4)x#M5x5kv=XyX;KhyR}LUh5}m%N`Fp9}=0 zN(!%R)NRr2v1!^-@fRlDm;ZKg+4g*GsDO*XR_q$y893eoix*t_UdyVeX*N5g2B52q zU3zjRcKr#tAC*w$hFEF^7jn?yJZPKkUe9LlVbX&BKqzGDZ7t700D4|;_;Vp4b{LVq;|c|W5) zZrvfQgP#N%cpT&@JoBZ<4_JHbn>`Sps4DA zZ!}(vfaT3ROTV#*BWgZ6pd8D%wFRufIRGGspI`YcTKZ(phl%c#dwHR~iBBAzmbD1Y&9TnwD6*#l_2A@jmgwqrUj{ zbO}IgW{Cm9B*(gwPQP^B?EJncYhb>J?2jc9nS9tEfLcY#2v&a+p&(Dfb-~ctlvH@_ z05s>^{EpZP-YEmAu-wC&;wz8%9OTbiWo=9#wZ3GE9K?tVtTy&xb!S(_C^&Ay=3K&C zGzTC+l>l&lIl(J&R21cHaYHM*)B~c|meWlTSSrafe%JgnGG9jgxuPXMrx8rGv11$C z!kmo40wvdGe{VwlPYuKLfL=4{fXgnKMW{^)c#mAzLoYG7@b&DsT;N>OvNm)8P(lZN z6u!o*2!381(Sdc@c|N&C5-Z}q6xO;KG$HdtyEdc_N@Yz!Ye?q&n_^>^H-+#4&z!IO@pCdrmaez?sW;S z0WnX%%0dP+pmQkt9HFVdtx?J7#oVa2Mt*=v3VOF>6<6@p$ID=oNccNuFvJW;M-EXI z57`o2t7MZ{SLHhTn>{gTG;HeK{iEZPU#bI3-#OSxum%Hcqi8BRQ$({!QVb$q35UX~ zm#7*C^i(76b6wZ-TnWf*KF1tVLN;rnkjFNTmQ)4PfX)&iDwWJD}_XG zg+#%1a7O&153)|#ua1d}Mk`8C?_tQji91ZNp9CeD^f3N4%^5kjCw~H4=;{C2(f-}1 z{>=nsWd5)Afsyf_!ETI<|5LJClZLbdHakrAnPQJY%%)rusl@G));dqI^?K*xL+n|f zot5}6NoSlP*|!Vm_zq2lj`cx%uCz$=a3DYUUT_3&wJ|U%%40ZGi=aiaaNz=2f)$SG{ZbWuEWhXnPZ=QCwPAXtw556BNAyvx~9<~?%F+a&_%~SCeFrAo@ zto;KcI?A=m_uGj^6P(IZo(!)KLIG@NxHK)hu- z0QyNpU#Xp%dn8Dg*XRctwO->ChOc!ap|5`)Yvms2(}^l;G^VTHHSLuU#vn|m=2+!| zE#Oe%#6l)NETFL0t$OXOh&17@{b5xE3BG0g?|uCmFlWr7A;^76`DffB6}L`$1q+xt z+@Wwll|fj*OM))ob_d(@2?OqH*#^(*zT2WNqlZ!Wbe}1Qb3Jr`?V8pML+`P8vIIz{ zXP#QCU<>)*1lqZLtq}Dhg>xFnf+c-MqJ1!)nQQo3AT%=nh8LpIF-q={mt60oDnvQb zc^s{zW099xH>!x1qK3+QP5&M3TAMjHdN@{f3tz>uCW~YPtg9Q1veD<*HbX9Ln5V-2 zY;;}>2h}LniL==F>|c0$^Z_1}1KcOAlhN}f2@OrS0SGOzday>h#3Oeu%&?@sOUB)Y zto?EJ9V!vFS|)g6TYUC5x>QRUii@;cWNq00A?kN?6rZFp7WYLPXFssidvQxF=-`_h zkmrSG-_ty1_On zICbF`f2ImH+sSGQfr1vQ5z^)*K zwrjbbsWNWNXw86CE|V5#K1~c2fHMB-8VF(KOc!3E&z@(FF0DEvRcSj!UFokSh$H)_ z#G}(#z}J9)6qF<0$OKBK19DDl;h*Y)Qt+zZei#)s`yHzAU3YV=J02snJ?jUfs zf!gxOcO<xwtgEKfmC2e3XB6;0iD+OKBO!`u`%rwye_%HA0REh>TJea?gNGjD*! zG>n?;=Ak@? zI_&-Zru1-x7d&=I&hUJm3zPkTz?*P~2$(_!u#n~vEgE=H$eBlgORNa9(IiOa$8t=RF_cuciuzS^rfF9<9TH80#!AL zQ;kDas2EH#X$ESNHD5mE(C-+2`x#7Vm|+fH?!t(6{TJKS34Ao-12}0fR~#23W2?)N zdXYhcZMXNe8nRZ!pnhvmiB}?!&V^p~vnp$>7w3z^1t0)owHn| zlDt4euFLVFyq`vzj@Ua{xv!3avU4bNw7UlPD@4)iY*(*4=pPZs(M5c`d>>Y>8in5l z6Nl@~!ybb9c1{z5#PclTrUa0O3FB5saMwPb$L5`2SgXnEt1g zXGn7+8hZp0bf4WD6yMa}cK%spzgbdbB?3bG`eSz8o5U ze>uS>OvcX#Q}icaY=D|q{`jKR#v`S#8?%drnGGsQFCgeAUwrQC6j=cIs1K7?VJX&B zHbo&8zhOr@SOz68MYw~`$WRSe)NC?0EMutf!XF4BDSE*!P$Ea3TIkfI)<(sG;g#9I zs4I3s1&E!VSG{A!1xgDxux>8~v-nGD{4mLXT+s~r!zE3V%XQ!MCEFU;5?eV?(??ED zHyYA6#D3{`adxu3?ZaRA1eOYIh8EG410uDfKz-EFz!M4+lALkU2vh2s4x#?pJva)V z7^Z-XwSFTgyk%h_>Q}*Q@!_Ng*&V0=_CIvGl`!uszxrdg#IS=wR=%Y&8D zZ$8xZTM-F#V8twaCkz=(0DdrZOiZylCt* zGA0yI>q4M<4+GsLq<#W|O?Wy2AbVtFgB*LvtB+r@g!xGM(Y$R{l&yq?r8aY$;6@)U z=B$xJV7#VQ4-*n%u()~!fKUnsTH;UU_7E5?!O~g0ze^}xNMk?$ur+Ns4RNm4oY{-I z5eFUWb8D0NO~Q=k`%3e63r`EA+9=rDC>AFpFdY$YCU%a+Px{<5R#v%A1M|Ei6f>BB zV=QiXBWL<%%6j7G!y6Bxez0Bs2|?b!#ZuAzU9u0(u~u!dQ@tnv8QM(rc4Tbf3l9}P zH0lp8WJ$#Qe8)U~*@479$1qp%o8sBisw!?EwjwXJ#1n!P%_6c!(9NDVaEq07goLkn z-0-D1Z=r~e!E2>{AhC$fdz;#+3+C=jkk&kt>F$iM4R-EX6zkCUNFml!*q6U>k}{;< z=Or{WA_L$Yu!8_@GVKZ&#`ib~-P3AGOxJ)PM%X*yrSTIOiO_8Pr#qn)1I#ia!J44g zs+;pB=x~Vgkv52#>?#Ef^x(=6=LtCRDk5?6LKuB?3uWT(v7E1lSeF{`wKGO0mTL>! zeSj~U?yQV%srO?BwU4vdE()l^tKB}iA)vk>a4d)&`4()bfn;k@H*%H#@B?pd@$s3_ zggrnXlWYEpCUf@EPzu84#lriRX$-{eX^psE!9nN0xiFO<%BHA$*DG_0-=eXlsQNPW zjhlg}frn@Xt&VA)KT}$mn^vKwl|r)8&jM3-T?{S>PjBox%w^d<+Wn%)l!1wSTLbd{ z>6}-`tEcZx3lDO}yo;heA*O4yF|xb@5i3#Rm|}{#;TFJ@3$qp+uA2$2-72MVnSV!Tvf1(Rh@Y(Uk=W&3wZc(C z?UXxFmpbb=crQDDhj|~DY#Oh7452)TSs1cLvS9Af?R#FD&gH$=!d0d|GKV#%pPN!w z`-aR1KcQ0p_09=HP!wOGeLFsf}3=rgCbHa4=bSLSnvsi&RYD=O} z@AnRMR|5IYv;jpU7{1~sfWqZl84vR?GxQ1ntz69$FdHJ=07r_=`mL@}U{uxIq7Q8{ zsL?bZ=0(v%%iZ)u57QKlW70JLrm12mE^6 z*8bHZs{MC;LO;fe1tsjNl~L=Z2zpm)SM@`$qlIJ58dtu$>L9osBe^(s(llo|x zuyDH~Y_t>c?C~CfXRx6rYdBhTl_hKlb*M@$9DAPf0jjB-o$?KW+|E*>KUd>NYDF*p zUuxwWLh|@N?L&Qb`|1z{QGL=hkC$in(`GnkM94K7A3MC{PbzLbkU<{!CM4JiR}As# zle`Ni9xmY!Hk+_Kj7jBGD$PC(Q+rE6@-qKtXY`~0{SnegYT4!XgFKIXl7dsH=hqo?&zF5e1sz0+onMc)yF=X68@b ziOji5m_JN2vjwrabvFIsbcGJ6lQ$Z!^L`?kdRZBOk_I{K-6bFB?MXd_WJqpCC#vH% zG72w%v>d7#E}-ZvSuf5mZwvT~=PFp}0D}TX6V7?bU=sfiW9QT)TG%D&vR!q` zwr$(CZQHhO+qP}nwr!m`(-DJ+{x14%|A04ktd%SCNv0U=YtdPk_<;(4%Os9>z7#J( zD(Jm2>}aC1r1^iP0o|L(lR8!=+zYo=O9t7tvF>-$H!Uia@TO)Wfo{8z2evB(5!L-0 z$9fqq2;L5VQ}X%g8|6n2KQDKnF%l zjWO)g+M_6ZhOO-VE;f32rH|Y*ey5m?%t(GQEDrPL#GS7sDZJGwPCf5znBH@0P|3@YiDHwjmjax_mFC#`xzP= zZe_+j_MK5v>~#R(S|Qk~>{fhbO68*=-}poh?GH_M0D6s&#&vi)F9uQTu{x(DvB>_qq7LrrrN7oH4R7|KIo_ z1LJ=X&KUnk!r8yM*b%!8vF7o}cZ7Skv=Lbwv#tB&(2?YXy`kkH>KZ&0rJ~|G5~(9{ z`c9meJ!T39Gbn>#q~yl2gB=JfrWZTg7T|lnK9+6zZr!gL=jnJo93)0M=mr$2kOGs|ZMg4ZGQHI(4pi%NIhWeS`c8{G)njt@S zf$llXIiOp=kYgoI`pRD~u3>wE76e;;?{){-EuBA%u|bCOzCnlD{`#dmc5Xo0 z;FE`BY&jxSn|)&f(4{^nWeg+5K)UDewpJS8f)%e{`7#m(WI$X6-5Q-gTIj0UlxpF` zC)m-_dlPMZ)+JXkY&U98ofE@&Z+!rZtcZ;YtNR$pL~hH$^O?^dUzEq~aRqw|<+B_YVoq z8A8f2?*A;$2hd1`Q7BL#FDAIX zCz>=AegConki`D4dSirccbTGpj=)|Xl#Y2HfK5Kho1TkC3@1#c2q#3@*`Mc8l1mCg^8btxGgua~; zj!NV}e0hlm8i z!#g_+ELTlH+Kh8d=>7kpVpPlUGz*PZ{p4@Z5)4ZYPBIC!B7WtzAWoVU{TmZ+M+%}t z<~s_7sR=U7@A}H4gx^P0md9^`cST8fU{Bk9y^3EIwYXtW5;2?RCathb7n85Tb&|t; z*O5Hr+>s{W_3^vsZKav6z95fg@z?iDMJ4$X9UtNcBV@LN`G4w>Y-KUOVt^W*PbnhZ zbtS|{SCtrf@jq?`yD51fOM;w-u|%nk0ddc zKijH0$xZaoo&9FFLZATtqcd}IMH-^;E{Z%=cI2*^kvi8rNxq>c*4Ch=xATXh31#~a zyr{6=>0B-&2Vw{1P?QYxD6;g(VJ;-L>0OxxUV^{-ImJaT9Q*^y>2b2ZWGMwY{q)VC z=~?@e09*_&4^*iCgshb~g0yw63`L{krN#T8F~~SSkZwXID@GHINg~ z6dDx~kyB|h%SjE%?LHUwvG>o==bwTCh7<|fwZJ8udDQ?U<{;AC9W58|Va&CYN!EVF zx$l+dGs^5orjfnvLX_ZQh0vd%NSEDV--xcT`S}F8C2OC?g4V=qiZ2H=;?$0mhS(&W zLAKsWLvC88AUuONWHT@fBFj07^#!*jz>5M$5koNId`R6$B!B3HE93NKFehot4FN8Y z6|vdEkg@?qBigmdqtj+4Y#>7>K#jCZig(b6hNy)tjD8|X&&fpSab!j>(c$2tr!Eu8YlMR|q)Q;n z!Ztr)^3ikUMY@9}kW(e!7&eDWayqI;jTrdM_Kv$O^Qv3eVEeL9aN3-32AB(5hS*im zb$Wlz`DO=cyL9b;X(Q3m>@<1+OKm-`Uh|Y8FxP&48sJT1s_PbN`qZdX2|Gx1`(!91 z(eu0_+X{`$KSsJotD29kRmWA1fna=|5ko~(r}slB_B9?gr6pgQ;~9;)p@*mRh@-qe zy5zqt^NPfhxM4J;(|Qz~H1Pde;fx7V{;+tzW^mee)4gTcvH5Fe%3;j{V2;4%)(Sgq zi(AWco{T08ovv(Nx&OpY4M9q>MSf7hhTpXx!)9^b+Sw~)Ybn_Poe&X{)}d`YEPab& z=NyGv3}b2nb_-d>dVoAEPME!$IG244*ZrUt72{Cdfmi^?;h#)XXm|L??En0vI{kfC z<}ScSrN#7}Miv7Heb2EB4>}rW!a)(A-CkcD;5#dQ0j;q6p8bF#H%5Y%4j5#9v_=U8 zZYJj#IzyGM2cT9J7epbSesiyq0@f3fYqyykh*y6ZF1FK}NngO+ zLQHHxV5|@f9;J^}6wyywW;!~rN??0nuK;{T`nCM*@m2I@COsm_P>+g8?Jdh^koe65 zG_v8mRR%S}W{>vfMGWne0`@~i;TE;7_~5~|{n?5+QLo}X3FPq*f{VkJa`Ctwfl4x+ zalfuwOu0N}pi?iS(%DD7$aL68n_VM5R6nl4hj(f!rRLtxt8~jk41T+yd#bMXB>r3G z?|AA7Jkqi(b>p0K>RuwYS}gn5murBOtsPn@0W}@LWHjLn&BBy3sNn0L4N6~;Xh!k& z7z|^I=imFo{(A8mxjtZj)Q0~TIKcfaoFU`{9=AXVvpC*hPyU^mCpObBnU=iz-XoPS zr$4svk!@3_{-sRQ$e5~Dr)}CGOuQDO(WGk%5#a;QQN;AqTuN_>`>jk22}QiSYs>lz ztlCk!_a8>k|0B&ZvT*!giVp+he~@OG{zua64%UVvwg_Y3*vG%ViVc0wuG`8n9)FXd z9oT7Vx=?TfjmLiRM~2bxy1nVj%iHQI7TkeA$S|QAMORhTU9p#{m-(g_|G$TGW^7e_ zd<<7tY*hw77~g%mJ(>*g^|5@pJJo+Xf$_UctMQ)u*Se}!=DDgui~*BULpxrYN5M9x zS`=FGigoU6Rpq#PF!s^LLJW22*tE{H?MiNb!L9~5ER^3yOrhtrEoeLE9x}MhYHoQU zuM}Y$zu5elXg~BjcTA^Bu1Xs3$EEE8B5(N&79^K^Lh4{G5hNQy#*$)iJSS2vdtcX+ z_c?*r9Yc&SZuNXM7z(t3kP?_IguP?UzNSRmcj=dWRL5j=zg^$v`c?L~_R$?#!h>r{ zLZ8@k8{?5t6VLoZ86wT7n$HjBu4?3aR-lAkHJ}Vk<>(59gKv3B4BcbG;#VCvbmHCY zx}BHv4?a4;0U;xAyI_NwtVX-qlHb&XQ=dORqQ76FkNcW}^%O^Skz$oJV?jmZPA8^+ z>n*4AJJnE*v;q^lKfuyX=*i2-A0wOFFIkXHd%g@?zLu0Kv)q#Vf5eipj+g6^+a{TQ z-UGWIxT~GakPVT1XTp9RhKS>bnL<5LM6*y{MqnIa@D%f>x0J#M}-Iuu+sj~w8`6+-HmwSqI`EhU&&Yrb zp8$y$bZbdHwRMNvD^UR90Vb)U^K;IF)dTyuyT)CCY0G!$$k0q(Au95<2c2SR{#>VS z=sEL5v?K}DlR{%V{7PY5-_C%&oMm^}(AuGUYSgj-+VoFWSZyr=4>}WO7m{uB%kx5% zV~&a_LsVJ#+a7-MUgGVZ$-`3g)3+-C+yrun^?c(_g zyddFm!D1T<4XHp0^sZQS^p_77M9Wnv0w&17p$H`9C?MjFWR?DdNb_WD5hg8hLd>`t z1Xu=tN#k03l)y`U0*~w&4QNk3?eyY8NqQOKXdtSRGUA9DW z2zP9E2aO3mpm7GtA${?;EXO2}Nom)oCxhK`Ql4^r5cT{R2Zc`IXi=Jog{|QV!*3Pp zYEsc<4PJ~<*a!c&0$oQ&hP1PWNX`lESVYj{1YV&bvjNT9@Ju{-S+AF?sG<9h?daGDPwQ{c`Hi`)4qrRp%>uyMjGt+ zIG5wtyZ1MX3l!o2cO5wBxXYozbn$CFGh>@Ob^6jD-SM%!*Kix2K=4~~j1-W3p_ zQg#)89C*`uBuVDrUX+Tb1M-D;&4UX=k(?Dhy7L<_!4@-z-pJ4q(6#Rv^TugvU*jZu zClDZuVXvkXgYif-4Y==11Lu-JX)Gzlr>;3)AIwzdnj=b>!7c2Gp2wFF0R z5hcdHN4UN=VzwZkXuoHWoMrE~Y&I^xitKSZdX|Hh3 zL-@G3Ve~gen8G^!Amt~w=oG4=a)4=uXg&qEu)tVq5IM~9-??W*0eFljJ2;YXFp(oK zu=K|7#Pib4mme+Bi3tsep`Bm4kbV9Mc-U`$9W%Fb_*WfF_n9&nq*RfAO1a>qm5#Qk4*)dbn0Snb$uh)-^+?)^l5?HWGKGO` zq;K3}5hV5zIXth3H~DNcJdSn+3DTgCAz}z}wV5eKBI+*);gi_`E*QEv79HG-{g>Ay zEsPBz5f4Ke1bD6VN&PU6x!uH8#SE7~J)bU*axJM8?|@r18&#A0J{|x$(GUPqxEQcF zh5vX$_}aVJgtnHFU{cj-c{My6Bek=d=VlK(9QSSA&Gozkb;^~G8LfsqcV^DpE}V>Z zJ}oQWOq0G-RfWMdGTPiZE0VeG;6p5F>NL0@VI>m~qz((}{t99S>P0IuLfdkFx*{%A z4UN*UGXr8ZBT%s znhI`KAOHm8CZZ$CeipuM3zD7?JDHk=LUSM-M6x}d$m&cwfrzMw(a~B{$_^h5AGK*GUzLt9C>ibt#v2){naIw?MX*nO zmUL$LQyGIv{~~PiqhL%>ea0x^fq(zHG?-hk82Ca|(_ZSCpzay=pI<(8n8gW|y&Bs+ z_3-!g=Vy;`Bn9E|Sc9VWyd)kNQ%R4*dMPBHeuV?;1Rwd_9dTQ zLsT}CDdvFBlmfF`WaH7CnGbLqKtMuKDJVX2G!kt%aUx2jzj7}h$a@ns_z6JYD=0ZJ72*bTB8K_8`J#Ln^?;#3n_Zbi}K9C4y`*eu0{KN$S&Z4|aU$ zHe~e6%O%nAS0s;je_X%0d(znq!Q)Cd2-v<_8aJUtwY74odhlU>lG{GT5NqOV2*xqW zqkCAkN=53)-Iiu`Gb)Ha3OUG>Ry)0Zgp0>A8^+zJBW|j7`i7@jDyhESBsE3XmeJ`c zov+Z1mEzr(H^(-Esb%s7Oh17r1RD`vDJ_9Iq0%q7mW?JN#!I=cU(7>3S_$l&Q{c>Q$)vrT_g z4Ls+=%MY_c4m<0ei5(S6f*WhBL8$z^pB-H;6FF+bd_y1#y%Et{gNK>)h8dPp3%0pK zy9W`Z%PF_(P>+P+T|X52BLsghUYWZi-zC7zRgir8(J;I~w2w@ey$4*~PC#cafUnOU zV_y08oE%^Ie6{%&9VR8?wI>vB-19uZr%}tNBawgNb0-ouo=wu0-Tdkk%q$6v`>NSd z-KXU_NBKhpK8VHOS(CB5Yi1CQCx%Y+Q{SoHM1hH%IIr#YoJ@z3@an>TT3@i*A1d5E zc4(mVk1c>^o&$Z6*Gyy34eO|Y%4wIihM695*s^g%=$u_d%J=FC2bFg3CDZp~CIEloHtz3=I!%-kULtU7(Jp_O<{L$ox zCp*OWYGhv(_(GH$X+*@= zAQY3M8|~KQLQmhd&LH=LyB`kxzn!kY_EL00@gDp=`W5ZRG)aYRz;m62QH;QGFeR`F z8{i?v3jOn- z_=aYL2S^p(>3D`LDN-T|g=OL8pZ%4|Mfg@y`d%KSZ>*~D<4@vh7`x)jAcPK7+{Ho= zGaeue%;8d!IMmRQMLOJZ31B1_e(u!J_b2N)+>#>4HpU=;`5?^9v_^#$2y?;7J^z*6 z7c%j^agE(Th^r!r#F=@4*gYsYn#`Tth|AAji`AzhIq#lDIYoj#Q%Dn>qF8AQ0QG7A zz(3CpqyP7X?Z4Kr|9vxHVy6Fp@d2j)a5G@~AKeUEv^C<0M-Wr5+dLlh%qJ2nTF)JK z!%Q>=Sx2qz0izp8uETUp&Dvz&cs~8`n zaIQXLL;gPQ&E3}ez9j7Mc=?RD-VOYntL<$+Y#5^b`*Cgi)@5~m?3(>HP2bSf+hf?{ zCQ6wr$~fuRhqcMB)U&B^<5{|W`+0l0G<%Kl{f|EGu~zjn;I+qf(zz$p^{lJ0<5SPq z-!v~eeyiY)y31wO>88}RDDC1Ga{CWwXzkX+2XW$6g2U~&#icIt*0y|}e8US@$1qc@ znjQVHu-l*uS<@wVXs!vxbZL*kNj>H47crA5bt93+{SQZRdM3Ta<#pjTW%IWCyna6N zSNktV0aQD~9B^d>iFX;y{1Iq~JU)bpkL-|r>==hQk=MJ2TYRURDDaf6CaJPJSgiO` zPaj%kn_~N|1-<|Wnev-yTm#HHdxg#0%kG;lg@wZ&8hV_Q$uUTe;9ICvSJ&_U91NnwC&9URa_}*x*KZNR1rTx>H!j=c3E+O^jsa_rGrZB`&1?R8HoW;RKPWAH zvG?j!on}T7_yA$Bh12vO4=#inOq{T~6Wh;ws)EQftApg|?P(VFV1W;Jw3FP(^%`AI zY3F!)1qX<(e|O8$NbY~#wQ^nDd}Tk$KKy6g^b%1Xeql^=m zsgo1}>+7`yEc#L-b&&N;dvJej)ncQ(K6xVhZ7D>Oe1i3YT? z9ceUjAH8;+bb!N%`0Ew8fCo0{e!Uv3-by;^V>$^5uaiDSkuMps>$otkJu?Q804nU30wGO(Ns0Ksi|cmGg1PmnSFlG(`*%no@-VJ*Tt9 zDM9dnSV}j_2~>GRtjd3K7%f+e72!x81#J*^OxJ3iDyZi<%RuL4aX^G22p}e;TujfU z0j_v2tlppa3z!5=K*RnB2a-pDc%2_v6FLF83P&Y4-RmYol*N2Xqr0%v(>*dbG4)jc zZ8pAxq06O@SGC!JA;oO)3#TnHe?{npMM-rgk{gmULVT*xFTEw@j%wQG9cXr-;8Ck3 z3Oj{g-DQUHMh`_7q!~E%?Q9d>H6~Y1+zqA>^g)tkqW{YOjvG=%)>su zDDJhW;YiaKaZTYVZD}SwLOeRRRHJ>F*zD8&QzRPubrc$*s2S!q_9$ryafl^{HT=O) zAI3b8R5!T7SR51Hz9%F+SMNI!wyW1XVST~ySue;OmAgu&T6l$<;OYD_4;<1N#9Fj#Mn`}#)OV53q>{Mv^FzGxXJQVMa{opjzeWvi?&_BQ>+gmJD zx(6;MmC{M`+S8yh>j(Zxxkj$XsW;d4oZdl_!#}opePNi@#t8*K*ffa{f7ua;KF+G| zv@)T>sI7S<+)q*3&C>2+l1Anaf5TpvZS;c~H4$CLD@z?;M#{3nDg^_lKQN}~TFL1gEwx*8ZQgkyFt2rv zl@4+IM2Gw&R9HilLY6ZJ+)4f0h9DQgV}C>Jcclj=uEjm+U*4B!H(kW5Pn)bzkS3%R zQ9y`WNE$Th6ZD&3P{rLtjwcF(|7?AQhtD3GbjLjGoxVp||dHnQx8iVHh}2+)ufrAfF}ubl#7 z=Mrz!BHi`DbHM*Q#};^m%9RtI@-^{yYYGlS;9>W6ffe0^qi->p(g_RGVFU|6;0BK4 z-J??Ip0KqzJWgo=ig-XK0Ebcll%*yOP0?G}8%4JxkT!uV;j_Q@<0^)>O^xzT#xsvH zo1wHW{i~-lyA{m*DD)-AbhrUS5PZh{T8g-a<|d?oX;;tswh%5+FF}eA@)&lEGdiPK zZM6RdL8b|Y(c^1Ho*_s!&g!-lelEx!3Txpz z<`SNYC1|3rH?lG{&hh95c{b`Z*Q73!wwWu&$)xffxcWspI0acTewcnj%y11kod_l2Xty;~r-J z!Y3Nr0>b*?i(Q1(lq1^EX3IGnMe~G?Fr1@d+o|}@S~g=T_@>-B6~qOutQMO@W3()6 zwAi~%h!qF5Zt&H`Q1FXj`#6S(^C=l@va?>Ot@CjsKO4w8`V`HBOMopyw=T5Kk(8Wm zjk7mFC#+K$v3LN;tuv*6C7vKaSiU#Nl_?6E&|?cZ>+DA{z%M$vE^V67cPzm!QZJe? zTG3lec%_PCM4ZLE5+y|&fgeH!)xa-A!wdjT=%*E+<)a}WK9v~hVF7>+t*p?Ze}3DJ ziIyxzwMf+mNZ11AFeHv2#~&^LkiP(g%85{aN^CenfF=zk4QR-xbVEG>$kC!?W_aX> zTY;LhJ=CG)VK0^d;jv@~?)L5M1Pg>dExG&>W3qN3<>XSQy<@t|(3ySm1tPW`OoX$e zopzOn?YE%6>Ys{;8SXh@Yn&F;y;lj!vL}|D&gk#vCnlA0mpS_RY9}n)4zVFQt(U@r zIBUV5-XLCPg1rt>;dc_{a!O8#yD=#1=IEZtx8s*wLPEBq!FmEysJh2q-TgHR}z>(i$R7lLaum3!*- z`&!g`SWvF|XCX2R;1m~UcHk*{S6+iBnV_5&(~ba~5^ufH5?;V=D=0taPv#R(+Jy0m zrNbaaVcJr%YHdOG%-dVD!lqVv^2*x^&cn?0RImpz;xkZ zEP~1Tb%Vh?_Hqxr%{|=f=XC+dDYwSPfz!MA4s$|Rd+CIY4Ot|Yq234A`yBs z>;P*Rqqzl-od;1j0`JBPX&>D4v+^me691t?p-6QDLIZ1RS10;M?nO!Zt`|ZN-Fui# z?^S+<7$zg_&_#S$`bT+-6AQ?34jB+=t9LY6vQa8wB=X4nyC3Z|;K?)IkL)u%6)WJa z#pUfWXuQGg%%#Ml4lVv!fkTXFD9q!WZtF8G(8W(BJ@~REi!jCNARRu0jAlU!aExRg zHz7cPKTfG}Wo8)CJW2nU;M#xn(dhaV2;n)#sZf5p{qvR`gPv^M%8pz zG;s8cOaf=4Vq+2?6aVIdw$}vBA&HaKCs4p~Bjz*zq|#zZRY@EX0}}y3b<6n3F$)D; z&wP=bSf&=iv*_Z}7!cvZqh4Im;w_>ArUo9>sx}FUnQ0UK*ItQ1G+W@rAs50i`Q<-o zHm7eAv||%?iZS9GD7RUFM2W286#bAGxX=N#EW1jCFN7|p)~({#pouq5w=@$j;Kh!_ z-?znj6@P^M?h8c0XVjD-XWy~gF`Q!{A7?TlSQM_yZ6es}gQwG(Z!mUDeJ%A%fDPDK zb^MX-)+&cWEIY^z7d4{xxJ;VS@j99yHVwF!b|;bCwGWBBUFI7frI9ECPxx6m>;<5u zSP{o9QU{l_K0~S;$(hO+3>&h7Ssa~k7s2^rujV+w8fBV=@_Y(^9wcXac<_( zZ}T9@5DCqWF|l zV^E;=)PbOpMLY}j-DowK#MRu9owZNG2^RP+y=$j%=+X3jE8W=DPZP+*Dmx_ADq;O# z$mrCp3ue_JcasOhAo(7#T9_tELr3-3T?k`2RV83>xY1@=8i5M7oC< z3_g$;rxTjr7Ce`5BSZ4f%(FbYo#>*X8zlY5iJwq_lstR#Wi9rO-f`;}(qBW=Ll9&++-c5e;e8tBs%1lv_=S z3VRO)^GQbliLsEO?TL5_8jEO7WSxJjxOuyI*?V8&tL7|y>H}>GPLTw~h<)dvZE5|+ z?dlAMS00EiFtKx;6V8QO87*_V4*z_`l6EelW;*WZS9xj*#O(@)sdP2|BihfFhDR=T z49AM2J=;r@5{odZ?Cl8$ZZu@8Xfx?0WS+C?7`Ib)h9q>TDG!vYRQ^$39 z%qhOOit+wgT8A!hVaRFKDAT5lsOJGbKU~<}O$j_Z5Z>iJ?v`#g^6)-JqTI|3A9%jM z4zFi2q>)ii_~hE6z|ZI@sEe;dkS!g4zonlU*lmnUkE7EZ8t{?^pG^;J&O;!ho^Ce$ zINMO}`4lXux^}767)E*1=YK#)U7|;~Zp%)fdQ)5^-T3y~A{ju|e6q%3{*-=kNvBPc zA9OvPNM@{KVeKn@^7d17hI!DV@9~V93_{t&7&GJ21f9n;wtkT)G--BB1gA8*Q?LEd z!2Y{C8!JIMSaj3wo!GvmalYz)-hO#(8Xx%0`Auts_C}B=RA~@98engeQO*jAsGE=4 z5jQPvzDQP#NN(}6Llb&}QSnA^Yu@S7in(edEA}Pa;WWyZ}bdBp%Yj)???$6{$z*KE+qAUlXjCj?Iu#BS>WA;m=IsMj^i(;W9FKkPe2}@7gMW19hS*D> zr`6NwywzP4DB#E87b8(`jL3|6Ju-;i|_$(>BEdqs}^Gs=Nk_3yW-mV&sy%6Z| z1ku?{1Z6{>!4a=37VU}h0LO=RJ&sP?`6>YkYSoWcZq9nspa`053#Q<7ERiX)pWv`4 zqe#whhC4Vdm3OH9Vvpt38{7c750mu)4O$2tKYppmmf0EAH>7iEj~aNMy4H#=nl(x3 z^--@zxzruc{^dy$5xJi(V_j~90Q2?=S}8{#c$vkq8!{O)9;!z{snF^ZPtuOo zHN7yg^X4(pQn;JyR<;x(=_pvrQ#6Pj%6ptFw@GbC0HTX)i;kpV?n1!XgL4CODRJ`6 z+WRr-D9zP$JD1h_81k)!YvcNJen7c zOj;Sag*78))DtnXL|rcFMbfZtantro;w9rl3zi~@5m zAlG*Cukz;o&H2@76cXbGB|Gfhhq4AuMS0rmsl2@lH!u^Z|Dm>D`3@R9Vt0lguy8pq z4vsJv0q2)vP{y-uhVyCn3%d$%2@Jr1I#u3&68JFB9#mM~u5>hsJfc6OkLYa=)(Jap z+zI=Y=W-@Bmg(X|^ZOMgDDpbB}P3#4{3Fo3>L!*(`~gvdU;P zr_`w~Vy_9Q$ED(pQ(N)S{psU!5Ml2?s9Fv>s3g);shMW&85LCCC_1_)5@Y&hcr~WS zTs3KhC*FMQl^X+i-!B+tApB1OU@KZ~Sm!Aa_M!$BtD0VPz zUvyQ<%SVdgik*RJz|iW^&^m->j`=W~Ymf`Pd%yHg2py7nej%pi0qh;q5m|^QVAMhc z7Gl$b?@(Qp2}aL;B`fH9RPW8@m6GY?QMb;&E6(kzr(|B#NTcFX9J;Tup*B8B?Gy|I zL005J1^1M;>XHUa0vXLGXE^K7Q zixOwn)1=Z7W_g_f-H7k##O{iNHFAzOihu)>`N(i0V3~(Qp#X2PgD%~I2VTfO0J;J_Ke@dz zZeT|Iq?JJ(tzyX4_3D~v6;#CG26JAakF3g|wNiz4h9~9srU7TqD36G5%-Qga1v@YI zHpWE zUPOHe(}5`BUi{n*gL&;SnQU|zn7J1;w7_4WZ=EEQPC-MJYNn!w9tYd7|Ms^c@I}|JPFK?$Y3z_D5*`cl$67)E z3?woC3eH<*|4j8YkV#l`LB@wb*;j!Lj{WS?YbXbQ2Nla}{$#vK|-P=RMgBFuGAm~>}Qtls!n$=XQ0<(@c8`9;5DZUHX}DRf1Fszbsj>0A^) zS#a8LAl*4DO)0&HOMOOB%ggW#NceMYsNJ&7YjSHp;9z19{Bh#AkV)_+6&ND zApHN5hXH7j)}a8Vj06OjFFrxGsNL0X+)a_ z9H{$VO3%;yf`p1j-M{QdLrCxNvIE%MV1beov_ftl%EtLl;{V7THBlC^E<1fwX5l-1 zi&`D#uxuk{(w^$3Lz&lM4m(DH{%2LMgXJBH7pzw|mg$KDAuCNP)IsmkxQGyK;e!NZjo1@^(HUs0Ewf@m->ou$mKzfTesD~DXJ^)lNZ|%wBAl9FRa_D$ek%^rcx6jdQ z!DGRdO!CSHWM`Pc;MI5VLXghNBwc$rO1BBH#5gXK!+@zlIP4L<` zzIw3oPvWK$KmtDDQ@?TrP5_{<@!F`OPublscjm=rpJC$KAZP^bZUD<;w8kl7<4~J-egh~-A5Xp2s2E5Rox;gEYxMLhqjN5X1Y*#^i(~uY#9jQa4 zwT`9H+mX)!gv_!I|3YWDcD1f>h!{vhgX#5w_B&K};(pC40Us%JhUwPrV_%#UP(!xG z3(FbnLz6ErDwngW(poV6qPJ13E;g|wQx z-kql=T`lj{cghZ&b3+{&nV5m=SEpR3?Db(E$$?MJoMkRryamcLg5EOW#nj$#eQNFl zwp+l;>ox1aE_KJFYH4o3sX{bghoo1~SS55GV^P*hFrc5M_j7*GFx6S2tQ_@D5CP)j z3}lrGqI(As;3+xQF4k^3JnA0$%2fiY%cDXetg3>auZYn)1YMv6f1>k zar@yKKT_9;tn^wn!Aivf&_hVlI<8dwgAER}?s+@tvFhzo$w5A{ZZD;lQ?1uY(>gwf zuQ-hP@7)3(Nm{S9YLcjhupcwD4HQa3?g-`61NjB*1Kd%RJYc-}96- z%K;X|7vVP+l`+2OD(oC6`#*LseJjJFWcsEjK(CPwIu~^I#ahZSu^K{yN9Efklnz=_ zv~s4%)Z8trOG6cu_E=(%qTZ-QYcI1}pb$kcJE&H(4)5N}=%$+agYX8?gZpKs*j>KL zD6nJP2+HW4i>DL6&IN^u&SeTje0s!y7+h-gjpVl{wiYkd`8Hd$V38Y@jg)AVnb)V( z$T~${Fp$@cOY8CMqs$kF#@PuAT$)gDt$i;>bb{)8W9=0xjeA3bm0GguX~@sq9d@ zr|G3s=!VfDuFUJGdY;m8GNfeyKe-aEVZPZn{hhDo7+C^dA6Whcdv_M)M5m13le6HMf6Npv8?T zDO08hj$gL<>}e76s$>g{4EcS`J%hXq*hH=i=4>M=50`*5Rb`#Pp$)6?Ux8oq%Oonx*C~m*eD8&tA{7 zuDUjlm8Ld?RdBU0q~(5>Ly1rJOVUZ@Z^W1Y`G8H2wPpdg(&hmYwUfEX548=a$yM3` zQ*FmG6ch#>=2!-j=2~4LGtED+uXzZZX~t(&p)LD;!9X~WM@)g=A1 zB^bgF#Q(!0&M>W|N6&Jt38uYjcWK}XA+jWd87lU(8)MfKpQ`UD(=O3dB%pn_O0xL# ziMV;hlBBrSHbzOmyJZ1dVT<(f55Yu&oakoTV*$Zd$Pyaxlnige5dLt4DWpM|R~VBa zEIFJ;kkFKip=jrY$0)lUHMoGoVAZx35fd5uCiJQNNwiekPYuCb8d{C(geF(klF)M1 zRz#rbk5y_O8-&A^Asd&dogiSWz4Sy^yrXTp!VY6|{y@jHO%fmg zK_aHLFsF2hZmClKM^aHZV)t--E6lic)~FbU)qNv}B)boj(5t;M4vCV%dNx2sae^Ri zPhaBRecj<+8eQxh`zZju>B=yCTdxiZbO6i(aBxf_{=T`~Zi&2z8ERK8YK0f6_uk1z zfLICHEh0~2ydHZGONoNGX&nJv$!I;bKmoQ8`4#l_g5iNtZfrOzdxS$ys((Z5lz6ku zT{#$NuF?AXr5G&w>?<6+Cg^}`1O&B2DN(=xS)mYjruqS(;B>4Q%v)pZ!q~UR&6JrV z*ydv zsdb73*HC)Lm&QL=@VqWpCa*o0PVL~G+cV^5;((xb*j+q~*^;R72;4t{dW0ZM>ePXI z#FiqiPZc!nVR;GI55}0V!E^yowhnvf!{DcV2H)^I@ol&+uQAzZwx$FTr@omm=wb^E z0ScuFG3DdVx3BKFKA`@GcWe#%+J*wn}qs4AC^j}CxZb}WZ zq0vt4*#W@`$Qbo5mcjmdBcw(|L*X?Q?K1?KefM9ZFJGC(OBG-M>5oEI9YyYlFuN~! zF8B~AIf+#F^_%QVf>_AmxJ2zoI*W;!ze?gY%Wb?)~!)YxW!g)@BF;pR_@f z|BJDAiVm&Knnq*WcCusJws&l2$F^95NBx`i~M$IeY(fCDF?Te0Lbt>;I)iH-s@T>Zgrc}OqaA)(Hz+h}2fr{LK!wBA2 zS}K$37Xq}@Ldh__lM0NV2Y~EA`1d_c5lB(TYN$}IcvTt=r8Pt>w^qy*0IAk$5oR6` zF6HgE>D(1Y?o>WdJs0)Q5tR9C%PDiJ2P)sAx=SqK83ujePFXhGt{VV`_|?n2nVusW z?7u!1^4G6Hz|0ic{p<6^ilTOU?+1OpbY%|yVKD#yO6^Z)-G7x@=6_IXS^g)bwn$Cg z=BE$Y`?zLjzaD_i13!kxKQ}0YC@dZQ7koLqh%X5j>-@rZcLVsSdVD@0cyQj~ALkz_ z%*G`7O@nF70`2SWc(Km?acik#IDFA&$4Awx>R)Zh!;5ua#=w%*N12TM!d-1u|7}Bl zB=}Do@)k~o)K42S{J+|emH%HG@*UMk(es$O{cK|`+8Ts}H@wBaijO;G?TgZgYy`5P zNmEHPic!aY7vWO36~T29_>kuPPWFUYPc>1b(phocW*1GGN%xFgYD6)~pMk>NU_6*6 zU(zzyEj8NL`Wea`%{kboWrxX~>djHC-di7W@}L{3$AF88NIF!&x2_6;onc@j~FKqq>___KN%>oC zHJX7B3|6R(_Gyz@P~o`n*Y>@i7D^;dDLQ$XGDJ4J5l9V-#=8lD3U`xy7D zaO?+=9W=+*WnF(!p2Am|gbJvh-Mp;~rkq3?P$A@sRGy&1MaS?1fyfX?_N$eCN!&qB zFmN67ML$#vpiohskxiUKs5LyS?@`rrAS=y5I_G(~4&v(ONWzRf?tSPRaHytydPO2FocdjjuxxL>gbN^=mEbIFA^9w8dEWj_PE z2QMJmK>9u3UAEO7!FG8kEh!Naa3+S98???>33^V(0_;HE3^8SvjPuMHOCO022Wm<8 zu!u{SS;&<8LJqnbBE-z8m>D0zDwf@A>IK7tw_J1lFlHX!EDEEAdEHXEx-^{DhK(-@jD7n-W}@-QV4R zcU7Pm<$uAk*%p~2YX(%sBqeeh*~a3O!&@vryavVJ)2mBc1s420fF^C1-j<;RTxiq8 z$R!*()l$b3B3~k8w@&lRgV!MkRDg|{)8Ib^RZs^;c12n&28@g}Wo%2{?4%>pr0N9~ zM`#nq`ChSg?NiXHp70m=a@$}J{1s_`b2b~o#@)@#t&d5fowEDM8XacbcndKA+B1wE zZ|!5k9@Q2Og96n}fssl|XG-AcIqE>~dAgI0nkkUd$Bf9>30s9%^+G9kv+C2oD#$N@ z*&5Lzsrl!NvYQA}KUGWI;(8|a_!t+-oTXtUZ@(dJ@Z4&@PZxgcdM~`eKj&p^nE9kM6JpoR@H^nAHNM-y@$tu^~OS(qF`oR-XHKTb}4n z1M7>i8x;o3wRVmE0SUNeu0RR=?{TxrtRRohoLRM@BB=h~FmsquVll;-ZX91hVj+8C z0V0+WyLjLxVV2)#4(#_w-Tgwx<1h3f_*<$JOc-AX-LHrbyHJ2BF+pT=1w9Y_aGgD1 zzIQT49i9o9+tWYAgi|$yE<(N{-pjzAWNGZZwu1prKt)J&ZlBZ8G915pp+UQ#C&P4* zHe6Ld;l0whng8#@|L^Dg-vQ3dO#dlYWnlRSM#l0#F|sOk83zoulZwt}zdGbEFAaRA`L!(d-eU5x1`U~t_fw~yetMW9fJF zE-0uZM-Swsv6+&cH5qVO*SmZ#(EtpZj;9h@Z_Jsrr{|CKI?0xvAyZWU=Vr!d<|>26 zdLvp)f&F#9IhdaWXLDye?3vR$Ed!60Qv#gUr%@xD-9aDL9%Cg)HcW#2^cE1TMie=D zmcVdz5{xe}MdjYUYPdXFERK~yvh2cGT|HtD&Y`wgbfLYM;3 zttR*H=J%Tw;t_Eo*DE@iaGCR~c#>vSk--7}~jylH4%`u$wZC=Po3<3wUamodo$5(fewDA zTb0>0u`tZviu%Hql?4Zkd8>#5{=eR$iP0-khRcujvw;UH8={(2R^pH3O6*lZABr=e z4!K)IZTiSV;WR6#SBd0?5lscuJiz4)N$*TX=a& zh|lBIfc>&Js(ouE6+YS98~+xF*Eac_!jL*8ro%II%^nD2KU)KZ&z{SGC)%0V*Beom7TH!CVkrqC~rvd1}UjDm*&WYidl=+IHyDB1w6aKdV)0>uss)6TqYl%aKZO&m4pA~Th5yPYYp}Ok+B$M z6s$2v@*2XOUA`E3Gdbbws8^DR^Z1rE&c$laFEFzl`U1&dWT=PETRxd7YpN#s^a`Ul zJl8%O7>96q`24}nSHfgYfC6YD`uyYJ!-adADyY}ZP0bf9eCdV28!X37pK@2i6y$W` z3c$YuT-wx%Q{c$ALXoSZ!G|GD;0aZzQyyaD9V2GRy7Gv`&4dslsC zI`D2aD)suW6nS!UsI7^)sj? z)Gah4CMN$b2LFI!o&+X3=1d2Ym_l&CnX&yN*pybb&S6*}FtVWH03V87L7)Gt%uXWX3H=3(nO}pWhP@@_fwT(h{B z820_({QJT#BGKf7q%H=jOz$G1e)h*pB(0J^h<*6neb+57FPmv5!xJ(-4>@4PgVtmAtlJ0&;akKnKpEkFRR+8cvsGtu;YNmkc;?*6>Nuo zMKY&3^7+`9hcnPlQpXqwx$4ikC=mP(BB5k!9UO1QG-YGB>G6$&%UccUcuM$IUlvsw+{R0ExFqH$_y3F z?i#WAUz;~#5c6f*ODX7563S*y99<&_EZj9Vi%6SWbU0>c-g@MCK;J^yHZ`PdNLmoVJTrA?hpzzoYhO&P!*px) zf8AUSqy)k5CpB{Q{V7Tss(rlv?djOCQWGZ@jShhZUB_`@u&9b3p={)1$sQ0K;`4gF zzCNj|yLz;_AIzq^|Lu|ygB=Q-{&9S1bsvKZXAcXo9~@!g(y%+hMT|-!A*y~eIRmc6 zu&8#4p<2DVX}#50y#KNjv@pZCY1Q>SL9yI@)%+50q)7Fr2L@h|d{X(n+#!=9&*`1G z8%hw;S`4^Za6h5tvKn|C$9(n+noBv>a(%kvra)DtWxHs(5wZT0tTE_$Dot{OZ=YHN zDqt@kp-B7P3n%YKV~v_J52$BsX|VFSE;L26e0Pd#x!IHJut6>l#ePPRm!b6&#cUjo zz!DT7a4gCi0FdX<{Fla>QME9E8AaQX&Y1@=P2eG%{zL_|Bt$Rxa|zb*>v~HRhJ|gV zJ6Z_AboFZkaLt;(u}8jU3t_V}yt69-Z1bJ}fE*H5CTamZXgOc;Y zipOd%&Gze&6ZpbUj3d=di<)&{FLoXi)XW;4ZiziqjmBvv4%INiB_9$xMXnKqa_PBc z4ZJ|%RXFtFzZZy}qo8j&V;-96C7&P6*W&NuI$qL$?EvW}-Q?Qgdz^BC^hvV5Qo%f| zMB$)FknzlnsjJso|H{6D)IHC9X%O{#a7r+XLEHL%LLxbioO*$pIJa7lp6u_obIYI0 zDI{6djH8jvOO6*JJrZZ_TVISw|0S+w-t~pFpt3zl{f$9He>MIjPhr2@6Tv6kz8i4( z1+Q&@ab$B8b~j_@nDf|eys5HF7C7T06r3F|h$O9rp}>)slBz?Txs^zXffIGyMe&=b zwD%o!q~HN%>dtnzFf@BO3jSC^t=J9f{I?!*d9)>xD)j@-2W5V4zB>ZIe8CRSjJ<#B zP^l&{9Guu6;ZA=Jwacsp){t}ZC=JeNBjD)3zM45v!%8HYQyo}(vk_ti0y`g+^A;Ww zJBmN2$c$3dofSK)Q2lX@_U$CFjJ@ty0r&CJ@TmH+eu@+%b)#h>8*^9Y)IX`Z`O?On zE&QFhZXpf9v)99F2&OO{GINLl)0f>KTO|uo9JA9*U<%Gn_;>QakAJ%+>-2g8&p zhPEyK?9GS0;IYF_@yid$Ocr%QNol9sh4Wr_zBX2pqq@kO2a_0pve+Vm|;`5@BJTVS!*|PW8|Uz5EpZ`g<=+hwGC2OQUziz)|{4@_8B61 zX-JkZqI?aV3mxBs1GDhCd=dVT!1@gbRX&y6?dj#p>jyLs^yVE40)yURS60A&7$h$_ zYR5BYSVMr1tX<;durt~o}Ky8MVDS7yT~CJ)GmV1 zt|Buula4u(-ydIGDJ*{R6LxV8WJ%DWEHP#^%ttc|hM4uf^6(m%EMQOeI881SMi|%V zM0bm=S&XUuf`_hX@%s2^7P0J}Ki*jhX8eTNarMe96O0}*>fjY6JV)+zi7sR`^eD=Z z%-Iu|4<+L8Us2hCThM7*(!MCmEFRb4HP(N=g?_=_jZA044a~T#O@p^K?fab;qx$DM zZ|Ebc`0H)oz6a=WLoaF=BGJ8lmKPc-i z$tt!~kO&VpIy%GWjJMsu>OaOheD=7y91uj}`^G-0e928^=Yt;}G}1U4{{84|D4|y) z{#_grfLukN&_J1a9riWBfwugvXuDu4H%G;cDavBRld6}qj=bK~IFrGBPUZfi-w{ZNB^uPE9j}4{u3@A_-hQ? zkA>|Ja(JX*Eb3Xo`ebIB)w1d9TQDg>uEnrMS!NVDk8ItfJcX zuYoX0H9xg&i;sjsDUJ&9hk-5(7UFg0;-5|QBvHAXznIfwb4h)dqf%#)FhkIp`V4lA zwq;CUQA1a5eoUpJgd!JxMWY}*QSSl0i))3hVmqP<15&+l+#qd~&t<&a?U|Qv~ ze@{RB$U+<^KAJ>umEJ6%o4{C(@Fu9BoLC=0<*E964-5{S{4~%?2cZ@ML=A6r0azCQ zJQi~}FSkIF4C_d)kDk6W#mJ5wRin7pHw+I$R|tdl0k)NTD=hw^j|{*nNh`y?n3zNp z{hVcR(T!ynFvf2{C{clmCy^U7>r01A@-7>K|k_sGuL8QC) ztXwUx@fy)qvx!rZdLC`e#5#-$xLQQ#EOtp%Bk31vKV~$yFN?n&#Nrag3TtY5?q6II zA0l{9UI;HC@#vI5R-ThlPSzT(3}Xf4RjV*CG&5?{Xkzh9HZF&*{KVKljw;j0Xtr!Dm+ z&?W9XpR`R_W058~f3WJC(?ugFLTb4$fqP7k+87)$Z_U`hYEYs3)bdTb_rquX29EBrB-!Z(5tc?FbO|1VQf3W^f^2easdh|Lg0_fdI%?z=!5_O2nQ^h z5}OyqUG1tS>`I2wKJ%nYBmPDnd4!NevrCgz0D)S1elXK9&J@gJ9uf{E;oT=pmS_4WI`jKgV2r> z%y0qdp(hk}yF3C9AjeI;sKMI5Z8gyoV_R98T8VVLBceA2t{_z`4nOekNNi{sF)>4M@=lV~1jiEl04fkN)GTw|>s;@SxY(6ED$y)E5mx^p zBT`8<+hjoEez0`q+MqCp71QDf0dM88v=XOuHP-T55ovZw4v~p(R#6evoSaev4#&1q zs&8|r=gq8=o%%fnm1|QWrgh=_sUS7k`dkqsmP<+ z(-+x`lP!h;(p;(CD@>?#S1mtxb;3;G-&eJ2p{S&@=*trg7fzPvHM}e1T^A#7PRB4C z2l1ZPhA3IUp;F5D7r%j^grTG?8!ZKuM{^yOG_{n2X=w~$9;ihrcyquL(;y*mqDW28 zd^?NQ054FGVolSs7VfHQH&^N8sAum;kupSNyx=M*IkiDErLa*@hJM{6v5ogCZUMZk z2+t~7Q4?)E6;voxf;O5T10Y=EF+EEA+!G3sGuKQ+-p z!BWl7HX0ts(5Hl8S6qmjbpL*ro%D<-O*d&5cVM72mOd_o9+B5XDO@6Qd-VMTgUHgl zaGyj6x3>}2Cmr{^^|@5R^c!KgCLx*|L?E?0EG}3QBF>`4 zH(y8^vSBgbyIXepPMOETonMvo7I`Xs4!%D318ExWu%5`FbY>ZPW@_jlswC0!yxiI- zE!C4iA{+{es?XZam~ZX&w#Wv)Fg*fWDN#n+`Cdyiq>c^|4BVXXL^Oa0rGMLFUkZ!F z23ic8W7W~QR-hlWGz2~Rn?r6ON zq{727oYd0thzSooUDg5GKP-*)l>Pw<;8J?Ol=|3j65~a&y8;#C6k;=vwwj| zxKkbW_J7!)8s!KoQ2`PZHTP@z`@!6 zCk~#a+$Xz1kI;2Y<>^RSb&eS`{8ZNn(Uh+g)QCRdr?^txD3xcaeEXb5LS{!mjigbv zlon~amGOMhrM%=@fBEZM$FjU-Sb*l5vI6d)qtcq{1WD2927sQs5D*1sl2WEE_TLkW@tGgF+L3CQKIW7)QnRu_jw&WWkj)>N|5(#T00p0c%Fo-9}J4NhN;D+Ns5er2HddAlr@_r=dEmP!_wcmyo)3^ zG)V66DTFqIAXoJ}BY<&MkfG^8lLosDkw@Ic@o&VTKI{}!yUJ(0qoKF@Lw*LL)5rGg zzKAXQ*4*^|ayJLccoMDHrcALgMBHs{8)X?)$7CmL%DkKi_ z-v{!D6mUe5a^}A|Li<+Og_jmbs}r6VhzS_b)fgIfE#nGqOA|3CJ;(hhQ1{t@P2LY*fMAH!>q5mQ4H&B1Ui#yXfN%|#(JLr73Q1}PI z^b%60-Ws{A(Tox7U3|4P61B<>-mW`MO!tTU2o!}4g#>IvJCh0A84>mZcS3HPQ*&Hd zT_Bdu`36y&+bJfy+=tQ%bh02ZK?SH~Qi*HW^29i{c+gYN-*=$G1>N_MMHBgAv#KDS zv5HPUW!#C|W7WhMx=0hDB@EGx&rKY00Z=7-ARx?2YC&@+BYxVj?%TU|;&XMKscMk} zXrWAPu7_VHD|7I}WaBhCQ1g$)r5-FE@uj&-{=xqD@4xhznuqc{{Xhw{wJ{Y zV={>O*)@6R=+4GmiCbwozq(692!=sGV7RKgu3QX?cc`yeMSnh1ta~Mzwu74?3O=+} zoWGn^^n02m28tH(_4k;vW&E=7ba3iXm~?paXnL*pqn?5J&fH}7v6LWZ22kWE%D6lf z9mU8LAWz3}51n)bgCb?!0xP3uUeA~ev#rXw)VyJgMc+fkHJG~?oM-KdJgIV3;BAn_zEyQ! zVhG-$bfRlOwP+-EQioh4_!>n*i;PNo*kR3O>%T`>zpe_K3qYSX^`gS}-uTj%C*4pA z3^bR3WIiF!F13Jw4L~?L&Ij{7KaFIH*I~=5V`P`2;Np}13)4A3NIbNN*(R<)koRXm zTM8@@@K<+}f+z?}H=F=*S2jt`6y*C@(j&~96?W4DgL(D7SjR8RL^2U*elsdujBQI@ z%jTY}!blm&uL1wgKU~NG%qUApz%<0%zNo_$F|oAAf(!6 zx4Oof1u%WWw_Z0uRCjhzU09#Oh^bItma9KL2)YhTG9nRYVJ-xG5H6p-m*I~qmyJ!0 zSWY6s zX_15fl-1Iud7x6z6h*p{7_GZmP(VB7-62e`-k)U7?={PSFma00mjO7GX`wAcjGb#| zDc4)E1gZzQfG*mPK`P@s>Z}^&Vaqt`6^dAd7xlw4Uh_6+v{Ll}*QJ2>2%244Pftyc z>Xv5!B+q1v;2rII_c%8ai}gbYEFvo^ky0gHuQHG^U@hu!W8!6LS0$7gUj^uB*<~}C z72#ZC{9d_Tz4$%-(Lq&SR-sIKPs3H@xkFjqbM-FlDWshgu|}7bpJ~x%Oa#6_$tY}M zA(%~UNxO;W6wPSQihR{LlQJge!8PXs00?`VfowUP>fR)M9v$YuB3(GmueJ|JiHIgc z__3oz*2z-$qT-wFZVk2;gK86i^CLL^mT}#fPRu&>LSAKK4FO{D$5Qs!az@MW({sNJ^2vnjGJCqr z8f?bVxSL-`l~i9Wd*IuPeQ1Dln|pPwv9+7IOrM`>^bxn4UwVGJH`X-;U`*)P?~K5% z(q7(=efQEdr!4WYODanwd%P0uDx);`^A#t@Qr+h5A!j#$dKjPfOP| zD#`Y${&xpF6e=ztY`;b6mkDUw7RKx&En_hALN-+3kc45T*kl`EA^KV)S0hkz8k&+Y z*3)#y1?ImB*|zJ~Bh5=n^3iBFa8=;#mj`|YO}|YDs|ti1vVE>%hYHdT;Wj^*8$Mo{ zx2K5Qe41S3#&d3YdVEr+`RL}{cFz|5h&6eyWSksG3>%l;7rL#V>@k=GiOn07U@bpT zagyS<^!wsMT-)vG*mHjAu+UbY-9#HO%D`|3OVAV0&`S@!;L90e{~`2s<=_9S9oe{d ze)`}$)FAeb>Bjw)B(@wGOtqq-8p|DFVKgi?|2XD#91f4mS_HrAGAnV&{z2jSOm*V1 zhQ&?G9EbQ>^nEMgLY&&1nq<6ZTZhryCgd&CmH||G=fT~ZLy`cV%F1m{r$p&CjQyO^ zoQ-?{s(5YSV8AV5-MRGvKUE+Q@qaPYzn}j9XGmcC?;eBgA21aA|Ae6yHMCM6dMKbGPO;)POP=o_tze4ri;WSLb&3cRra}2g6pv0 zL^d6+mI+yGuqc#>=X>s+&#dncp|>|W*GG=9zkC|p8Wc8vTnTOM7TsI7g)`)&g$eDe zpY?G>V5Z`SNjPq(8T!%^NDHpmfrT>{SFC)^SAusTrBTXNw&?2^1rR7};}KOTq6tY0 zUrER0G8%7BkhAU>OxQK)_DCdchN%A#(l8gXd0OY#JGTa*-- z88&o2lQV{~&0UhqV-mzd@9v$CSj87^YE)MK*0)m`c26DA$PyZ}AbM6ozlYd5Ofxp| zy)9kbV9y)PzCmquwJljlw=ud8iYP#2J_h`xnw>DbVcB&06M3e3{3I;%n?JOk)|?(^ z8jT`9X6SmYerk^$svDwaPaX=bMQqA=2%4xbR3lf@cQ!bV$&(u2`qp2B4Yo*~>z)jyW_eEw5NP?Rz=cA~&qNb;mmQ zdzC4J5b1U@ZAq;OktzB40=RlBY=%j&DwS0#jA|X$ZZ#}V>G!fE(fGFJ5;gj!)Zgrx zPppk>nM?O4&5$SwY>bU~Y*e6a>RIZiZqp&4ES*IH=hG9MZfB>c83CugXOr5+x16LO zc;D$^FEc*fS13q=Yjc! zxCM)#FP1U{w@tzHoP^R@> z?hcr-cdP{5`7exTs=SfMH)4ai zUXyV1Y$;Cm33R?@)F!US31OLv&}#N`s3NM0svwJPz!gy(%?Ou2^itHP-XoU9Zb3C{ zB%+m-W@ow233s?L!1a^jKsi2UJhxOTZ*=iqB=3NvX`uF=0#=9g(cn z3u_#)Vdt##(-sm2Q>!22&{IfV22$htrk;q%L(urKJi%BR3Fq!b;o`Un%%Cfuai1Q7 z)EY$tzLN5o80b!s8u)bgA9NkwF1n61$H-T*1eH9l0#QLR1rW+Dc>urqhMYn4EQ~Y8b_@LkX&r zFib-fm^zisC~o}5Ift4xCU<>Z6aNk~w)Lsl!yUwPPk;MzC!k{1&F{$x01-HVu3Gsk zdpx!2kmN8V?!|_Svyze3J`c{4b^G>)RbK!z3&{J-)zWtiPw&)sr{g}Bsj(uj*P}6C zyTWU26p=o}sE!s>hc?&pvaU+Zpz3N!6a=bmDti-{a+c2Sk zxFvUR^XszvIUo3Ngv`??pu?%j_xHevAqGBD@7Im&dt3SEil6?f4=G zdG(4t?3L}QNX*&uvC%v{s~{;v9qq0k2qTz|KjT;72ST61t6hH}axNVq4;vF0fAWQC z@~IDTp3=LC=)S?k1$>tv>&NM0Q1L@WYVYb2#mU=%3ne3227)+%C$eieRCb3`nU7st ztR=OmXjsx?T;DnQx%cx(?~z}`zCSy76W~MQx`)^sDcA*P$`dF`xZ$HaMg#h15SQyk zhVxKKYd5v>_A4c`N*ev_Y>YJdau11nD9@Ct5C=CL{l1#aewzTg{cWTJu#6&m5$`dp zg=azTe9Sy`r#w0E=-P3{Hh?}G`TYOI8vjNR|5pF$S?T|y{D!Q!(Z=;b2tk)vU4Z`we`{pA0sg+ zr!Gw>^5ZWx?;g&j-tK2-6&aFC@F(BOkJbJp@-9A8aF3g~kgr($;#A6A9hHR;Tjqh4 zqxk{y@E!yTdY6&tNM2oBO4HaKaSw##R=J4I4X}g|G2LxFtCD%BSYeabB)~sT$4R=z zg+7b@biScYkNrD+?h?V9tvd(!p~D7p!l(tX-NUOE7+>i`KqB8rJo84`mt08;mWJf2 z1}uPT(~2sz2dAz@QCEu*u49MJ0MaO5xX$Lu`PsFew2zWW6-MfpfXFhHlXAa6C%FRxbH@cB}hygRiVf&PU0yNyAQl)9?=@<|2Xm{)zq?rc2db@SwR)WOb`#7BX5w8No$SJSBcP9x0r|N zbdN-c)0qYp6W!Pq#EL_D9o#+Rhx6Y@MjU4{O-2Nxj>?rS3AY?ZUdA94jq!-_aeJrdXTTK5#Bv>Zx|bL< zIlWwtB2VW*mTa}GQy)$;uLa=Ic4w+4ymevh89tkU43ee>s1JJM8smaadvDI8q7JM6 zVugf^9NgROHtLPm{MwylF5g7QIi@%x6_-VYQ}fR~v*K>q0cwf@0vvY-8Wa=H@vHKtkK(eIt_=%eZ_QCq-#ZuWH9czxQ147LlzTtk+fo1nDJ(W6^OW|ku?9wXN$WwEcC^WFkIR>rXtM5$6zIOuJh zgA!E5Sdt!#C%k7^Z<|LPu3P%JMU$l|RgBuYQRr`w*~b@eUGB>tv+T|i4RHgaTK}l_ zAP;U^#6-JJx87mLpe_K72?-l_-g-F@_=LSO3RHH!(qU>=XWX>LC+z#cEu1I43M~!!o1!gBr$s z$(KP?jO>Nbsu^8_E&C|m+LLUy&F>!iik#OuLSbXexjvh zFiyZ`UZqf8MVFOT)oIz!c*bu+pg%F?(lT=K5asWL{-2F~3WH|x1AQIp;OG%BEHEEY zt;V%6>&|MZ-R1x_VPugp6W@Z^GG@L^JEjje5hs4Js01o zb1&os>r42JR>Gm-|ND^nIV<3G08i$3^BbB+A$IY2s;OR+GsEQGA~TsfFPFWL&CuPa ztB~?!L>K^~-xf-!mld6!C4;gLp3l?{__Nvi>^S~W*##*NAa_z2F2;AZ5qRc=@l^D% zQHY|7xg}n4k@G|D7t7Taeo9R6;hek`1RYGBPFnf+mfp?DrJ(ae8?URL^cNi`|L&;K zFo(g4&&X`g-E-==!DbdA8CwP%hrP<3G%_|Lh=GS^m4xX8#BN%<(_* z=O%S^n+;Y3u(#HK@#p+;d)NCq^l&th2$J=Dku~t)w!o`3*-D(RXI#Aa;Kar)P8$DS zW*NBSm!pilm*QO*EWEG7oRs0olo+e~Gw1${>)Y>&$qd*5P?;|~H_Ps=eWGOmdh6Cd zPjqaVZl;C)B%|ce-I&L|RK-{oxcg%)@B2q)7R@+5w}R$>(pIlJ|K$MmZrQXW3!2kv z;@ihUkhER*4iGxcT4??>PXBbq`a*buyv|~B+{I9rfRBMGunAuXdcXYNU4*cIhjtHs}v3 z;p!#9#NU>X+2-hnBb$~y_j6cLCD$MrU;vkz^){qr=<_e;9Vbgq{3zcJ*oB&8k%dn) zRl@F={X~HerKL6C^Uf`1l}%=Jb2E^e-P`^K3J&&0jWYIrvDng2Gh4yxgKbakm(grR zsCI~AFI5vR&*^uko|uay;(!bn{eRW8KTNMdBy%7tXKfT9d%32AHR<=R;X6Whtb3G_U#@X_%$eitH%48viQNgA#tP97$lOF@BGpP|QK@;en6v z!=!DfkHb1LQ^g?{Uhk=v11Y43st{@c>f)86Ao9!=C&Z>JEoXL1fKgWjQTNJFu?2>1 z&v%(ITOc($X2>YWBZ<5+@@FPIS$ADdX3a z7`YZakKT59sZ!A8O0<3@4;fg?EAY;>3uxA#3~FYuxaiJIbNT}ra&!pHUJX8#(~k&D zLm}^zJ+QK>!-ZyMUwZ7lkDMEQfAwx%& zj|qfQM8dq0k}y(2Vk;SH+2x-ExhkMK@na4hu4I+Xp_Zcf)P)yqN2Qu<)50H21u{i% zMA`=$FVq1wI7nAq83AlGppLe$ob#pPKi;c!(faBo>+I@GI>?zr1xf zw#i}MBSp&=A-l_+u|x_z55uDh0mFnk@*Nw>PD_|IG(XZ)4Dsh!t6@WeY{B5x!?`H^lxR-&m~ehMp^p7Y?!& zVdu0~N@Kh+Zk$pj;w3Lk_Yfn{O8!2q@s=5Ib}j}43547hWmh7*;X)!d7gv(eUnVpi zvE0a8@O-ko^1&LWy0%OYH(&Nx>YtoWYH-VKlIMkMXhP1Aydpc&1S7hm_>=!@Q{avV z2U4RH6X#fPGtfr4-PJ8P8OzCEz8lR0(9{b>%b<2RRTTO$-ckPl$ZFYtDy#+>rV!+L?9-?^5E3;UTQnqG$FzI{5D6bs)NrlnM?D|V2ZMooroyL zBS2?PBt*9M_)Oldzy7}QN*zH5Q3O0V?W*IfOET$$+$hd@H^=X5Mx*b-JNfN1B8Wi! zt|XZrDaF8|=hgk@jT`d1^Qd*e{aIK-Yr3WsDpf3GkI#9vYcDGqAcU?T)H)p9UaRs6 zu7^zhrZalA=%j)X720CrP3Q0~^G7VpqX-uLF&Q@d>$#k?6~;1D)|8qn7Q{%CLPTfXyjU5aDC$aILv%K4Q5ooaX!jd+ z&min{_U}UUz#f%|yrRNNXdzOhDb>2_lkoF-KcmUxM7ktu`?!K^?>0!Fbi@a(v}C4> zPuq!ZWpHQS-N;`m^Pk59B`@Ig07%OouT|(p`Rq2owOiiOeHrYnf1b3Va_N9lBxR`-z@oERI$yFMoe(sqAHzg-E|Y)!hZME%_H#J2sz43VxVxgBGwcBG4IO2F1HPFVjVtqZW92}EpCN~NI(W9-JXS}C znRYcZ$5r~|P~vS4lC3g%2t)Z3*jBWpSMFCNWa_e69$*K5OMQ2>bG(1DIp6O+Vy=5a zef!uwonyj-WIW_lWK8PP`Honzw5 z4t$=%eA_I!-)|A`V@}Yx#i!+s0Ro7aa6loDoMszanRQdJr-E#8_l_R7m0jjY5skh% zo@`qvV8Uv2&>rWqV~k{kq?^2%oS<<7NrHgg<6`0NZyDpr3(g5(Hyf;Y{iInvNuRq2 zr_-S>B2OfI_|w{$5kWUa>;243Pu!)tG$VE}4ghp;gQcnxX;u@`PkI=4$2k6h)dS+d z!NC2?xuCKqeOv4+FdqhsPlKXYPoS-4P&ljtgsVLg9Dq#6^u_=oRihx`UCd09<*d9YkIXChN+A_{N>+ zVff$dxzmAx_RcHXQ$8!#+ezk}=#ep!8Iv3-1u7aQpS}1Oe_;9FF3}!F0v&^JO9v_1 zUD$9v6y01}4k9$7`n;avK&LNj9m^jGNxLrrqJYpY|8A7h(2=;|={lt3X6xa1FX&OL z6Z6DfgmF-j56J<~2*5;M#lS!42QGF2vc(g!l0L?Zr7Mu1KOYBqy5X{zT9$DL+BJ#9 zN|=b6l=vq38;M!X*=I9z?c%z`adQ}ZN(mZmX-Np5e=3jTM+OvQ;a*zK>b_^2Q zx#VU-$KjXCarJBih>kBnNIy!ym{hLi6ShAU5$D=fAKm%g3bkA^@VQIoWj1)@EE|$o zwYgY1oD!C9Vcst|8^<5II~@Ec{8@TM3NbLSUPfz=^FB~vx40J;(f`Jk0ADEAzXtW= zceRLxmM&V^6$cPMW>s*^84)3M*LmwD;Z+z_yP(9i$zijd0@$I*j1QU@03{Wz))Sy) zj$bOd0f`D^=(zYHgUkyNM5hMHb0Nf-Ffc1%bIpEutZgu9>hIVhY*hUd^|~<>TLL1A zpi#L;;`ke=~H`A_(ib|h( z=)~E(I4l@=K!{1kkL1AE@?*iD95{tro0RyWLG;A{qgqa*G5i)BN$^XVxEG>cfbN3n zmyYy(0?07FU%XK@{{J6i@7Ntmz%A>>wr$(CZQHh!72CFLJ6W-9+qSuK^X@awxgYla zu>U~!7~MU(yJ|kODp*{h(`a4pUN8uobeB9GoNdAad$1V48zsaf#41k|Yt&m)8t04* zgg6ZMJKLyph}vlwH&`Hp`d?H!OADft#v3;Xw#A)ILGENLX8$ZuN0^YGdKRz8j44sW z?`PL?c)%HbUS8^sc=MI{>o3q$LEb)F>R&4Vkn8?$KTBwl?&Esv@@Cxvk(FlcQ2MRu z;7GcPktgb~_4u4OdErIAC?g+xd8+-Jw!N$=>BudgqpYCJ+O!J^)?&rwJoE5iB2@eiCR53#3-`Bxp+IaZ zdT@^dye4|?`Y&Iq?u3}egL4Di!yEyQ6+#&U43}pIqPAkwHq0|YM%8Tp)xOOHEAG2z zCMD-XIZBYo$RMpY5$alt{Bg^uReKaS*9f#%(z~5eQ-MnHhi0*6NbK%NHKD0w>|>?! zSQ6JbSXL5_)w7hD3XZ2b*=`tB+03d;02dkIsp%pnia3_!dlxT7RgJ~HqtF8mReH<* zMqf?oT+1{r&ymP5)pw}T9EI=^UqtaD(-wSe9ZH?~y@hd$>S8QiO@elDqZpfTuEUU= zS2L@U;j~pq z8i+*P$>Wpq*u=eRH_(TdgDA+ZxRtOV`uL5idpWOAPC)5-Tm%(fVwFc+93?zQ#oVON zWJc+S)9;Me8y=8Q77G)txRk{o0h1?ey)Bq&gc z=Wok#6t!$J*o)~&+7e?Um$LVg)hABq0%T()V3qyKD2U(0W;befi*pXZo%U(r>1M?D z+U4SvWWG@FfIw3&Q1LrDJRgw?Xs5hUSjDEA7Kh0J8}uM* z=y;&DXA=#uEtd{KZz9N+dU4`frZyO0*O>@!37S@3BC~cV=L#aU>>5y~^1qp2j&TO$ z+3&y&Q5vacmpmAVKtv?gv&OGp+XTOHB0-hX=u4OKH9--y;GP3oTR zd2*>iM-(HF$)Tn|AxJ$L(YvheqW8#%a|TVZA6fY>h)eRF;A9;%Wm{Sa-(q@>c+PcA z%>yf3(u;G|%nl*euFJ00*qPaQqDMo&|33}nm2q%BaEbU7E{y?-w`q6R} zxWW6mx42DbI~WxxDDgl85i&=G96fGx#1sLVzRu(~+FCX$xE2u4sEdZT42*w)RgU&u zR>LmP*S{=L&W$VQY+Yobnb?DZ(w$}fJ=t#$=t4#(N1L01lOz8*!~&Fp@aY)x>V$%o zg*u7IvjlJY^>A+`sHWb;B%r&Mv9FlyThgbRy~*SU>p|k)s_t5}KPJH5A`E zX>y6b_%L<_V87+NB{Pjq@OBMu9(1e_#U z`plWr1VCG?QRx82XJ75o_NtrV0Oic0_TZ(4QNWCh1l@fvbDWr>7ncF?jf-{|lU%(9 zp^);~I;SpZH%+s5Z!4l9lqM_8JDv6FlOvY%?#+tVr1xf!HhN_%cM-Lt!-=*p3r^&y zyU7e&HAZOrn-YR0TW+EOxA+~=^9d7f^-{1quhGd*PFi%hN5^fBQHWbwTIxt)^sexL zw8d&&Zut?_uKDgEjpz-EX+pYK;Y8CaC~B(B19hRQWBxe?ldW8A&=*HL*8wyat!T%G zk}#_>VWnK>@225=ztzW- z5GwDU<9h0zSf>pAF(yCWB!eyskIUUBQ4Qh@`XO0Q7i_~WJyx;64gNg?ot-xN77{p@ zD~71m>CPnz`2>x8bwxhaXiz;nC8a=TZq&E04=UTf6l_lD6<6(4{jCLXW@1@1!Ydu~ z0AjU3Xkmb(qXss3Q=(ipKhbLlc{511{wd&NkyoHu(fqbG>QZ}-fy5z21)&$Y9d+B~ zfj3%arR4x^6v-SfYjo4rKbEgv+yz8D51)W7#Mv^yE=8Y$l6~G`(b0VQ1uEK6(LqV= zyfk?s5((NHb`X_TJ9ODq?SWvtM$nkw*IndXS47A|xZVYs%(6SNY=~I4Ie0- zi8bWW*7}a7VuqmEtgZ__W@?hd95A;*fcDvxVC9>93E}nUpYY(eG8%f(&NU%qOP;5q z?heOvZ>UglHTj4**g zZ>z?!SMXxY8lzIW@spXxlq0!zti_A3nT})Pv`Hjj&I2)_vdpq%j9hrYxyY<1>DVR7 zu3Yy|s14C`F;f&$2;SGRnipii9cIW(MWNqTb@6;_S^llC)p+y6r&xkyN{bdUehQg-*ap#4`*|KoY6 zoFui+YVS09L<*;fKKHuERdZ#+mepYv^U0<2yR_+vzqziMdRY*1c`jF}Zu(@?(t>jjnxN-DM} zdHBBpoMAdK4lX0`@!575!=R%*Larbn`yb#+L7pM(yR;CY72%M@DTXFxj1vg)OEU_N zfd~33S4R#{aF^3Ra6T^T_%2vp8Ib&f~IH?3atfo~I{7-nQ>;5*jgm{0xfS&8&3Kk*JvZ zIlVRV{{(Z|Xw)s(uV4;CS9&yL+01$Mb(w&TYvpE>Dqv9_DOZ#Ol%kZW zh{=AXzu$z5nKpR%MzM8gM!j@~aXQDQ{Fzvr+?@B~f;)S#rgc%UT)pk^k*`0TXxVRz`als?7y~_GHv;SZgMsF4}}{u{fYH`e|R8|m-OU`=i2~m2h6LrBZm)> zO-OM|0#e8X2SN=Y5CB>u6>aNY!Vl#lm8Ua-d$vrS9}G#6$aEu;W5}>=4|LR@&kSY5 z&P^v)%Mw$ck4L;(lRUHy+UfP(7XW%XOdwWisTE zOAhp5uDI{r#-+24Khc~@Kpy>yS98vVXsnWeQ!u>ig9?ctSXKa#jWb2|gM|&7{BOQZ z)abvW^5h_bcsg}QxoZ~%<;83&-avxI^VhNrF-8P`#C#r2JW6Na${~tsS_RzG`^HRg zMY0&M^E6}@%6KA(#aqB&tq&02&UNy_O}Kmol5Bv)sC_0pzYPdZ6bgiunAD09xG+V# z-a+nt13Cbb3v)wWh*(W^sIaG6wWk#l8NN8<}2157TF?~5j-v_QMCAcB8I^;0a#V*RTDos?hkO>%QNagIj3R3^ebBLI?7Mg?RNYF3QjILn1rgo#K`#$m{1S24tWYW@SMp5&3U z)P*k)YWjAp7_jwPJW?SrT0Wrf98oQ?R1lq{AnzRwi%WdvS|Io_?%n9j4(=x~Sm2=v zTk29e`9xOf1RT`XV-R$8D!0G)!~52V{!FCdGaCc(KHM3{|DDbCr1WofL&dKySB^12(po$$^Y4>_U`zb^-v!)lh$YxM0O~&n&TE z)ZCZHR7iYzhJ5jijYZ0ukqDX!rYn(}K^h>2SZEeS2Yk52t1cEyVCv@E3PUd0(aM_W z6bez^nzW2NUi&NEz=&DYhun^}AT|}Jhvv&}FnOG@3P*Gb=@sE6jf{5$ebWPM=8DpqMp;{4so*jhRrsH?5`-9#M_ z;XlkG-Pef9eMSwf*$ky_JQ!N@ z5jl2D$(Pb8VT~MB5?JCpfbW*x?~#;dJ~MQmHBIv=jQi$x0(4PHM}Y0DsJA^OLX!_gAJWKNQcMH$MfchET;rANV_e zN@Z|@2ZjeMDx{t;I)S{sSTQ+fOrZL~^nj5WawCp`2q56nh~-F^!TMTE7fDN_aqQR( zlJG@C5QMVdvdtn!S2u=cEpF~ySGN!iNZ+esZWgRUmn5CHiW!yqPn|Mzf8)#{(C8I` zn|TEi6JM__ftzzGG|k_CKAC1Z!OSK96eIqI(4$D)?sQLfOjl(e5?jP0Wpuycz;O_# z(gVjfZEFS6xlr>@E`SjNNO21#HfYqLRsN$YK-nFX1DoNaXI2&R?t5fbM!A1eq0>51 z@%UjgpS3ao)ZP*HpH7bKh$)jg6x3BVv0Y*zW9J2QS zI&UD5sMx`Soe)9LyqrCX@7BT~+CaLWz|v5_=xm@-!0gD51FQiOHuOi$sU2M-kP!MD zZUnfkakeEjIYe({mtZvj08^mi0eqD5DjNMAfF}-kQbMpH792@#u4yKGRmlmJnyaFP(Z9(8<(OE8#mqDjlJ2cC z@j95VWtF|m?`MZvx(z$~Ec#0B+TS440Fh^yo!Nwn$QV3<=m%I~bE=lxwBc@n&wkqn zmqcY=F*8ciF}0$a%mZ7Kf`@~2AJXR@-0bX1VCLuYVu}&8R|Hfrv!DStrr^Zc0kvzK zTv^b8vvUk;zx^pWVfdQhI(UlL3&LL9CWeXox6nq2oMceTwe_w*>eZioA*itZa=*Z0 zvnFulGqxuxqpmH!rCH9PLt64Yh*(+kn$FzzVpFZf0)^sMX^C@R(4YuI(Xbxp?@`Rxo>oI{^7@`e$ts;|{DU7B*>E987 zmX?{H)IOVd{JLVOxMVxAI(Hy}N3-==1?{0rg3nngFd4LBxEG;=XW+hCAM-&b0he52 zPt7ZW>Mk%!UsoQ6CBUz|>~+npqcDC4lc|QLC;c$qE~cQ0cGT=1r!#|hlOwMoEc=p0zB75GXPss0Kn*rQ|NF9GxkcG0dH< zn7C!*mn)THc$9|qeRq2Q8cg-2qZ!ga(^r8cfW4c6c!OzcIv91T(0_u|4uGPULx0A{F~c4@DEQd@V09H{)79)_9IvB6Rk?rpQnN-|}TDq52JMMG&) zbD(KssEq;x+6*G_t>P@042Y~Jn`fR5DvC(Rg>+kOKb2{-1D1rTdO^2W@9`;VR_o)E zLI<9(8{!r*^@=c&ty>vZH!I@4mlO4UdPBKoCbDafTLt?ZrFO_zBm69MM=GcQT^kAW zlZa;HRB;qiQd}9~qt;iix**T>7%$Weus2W-sU^qOOxZHiNT_7>*|+?CK7zFIO5jKL zMRE4H*aiz6%s69l7@^XUZZv4W9Y_-m9daXe9H(m)vxTdUtbR!A5}S%Z_2xHusi6;x z9PRWnAOb$VvV}03wv7LrT0EJTdkby1?&9>V!>57#6=dt{2zEA!p4x*A_k zP`^3LGsV-;_4WM&>e%h+`(RYC1z<49tem^zvAQ%I6v|Quhuf@IFD|q#aW;xsu^mXo z;eSH4Est`sNjZZX_R!5YsS(Ws3K$Rv4%$t@Y|!$7(x+%?Z0zn0u(f@|LNuq0QKA2C z8R>SLJC*zMimSS3d&*3~>>?_E@N3W9x5nz+8=k)4r=p*tLLCbLYc~#b9M@8#V0D9~ z)!i{$HMe=l*^is7fT7+tvXLs|I*tOt;kLu`3>sQ>aKqJzT~gD9wvpxf8)EKY7AQDE z0n1l8Q};xoa=rH&IuRCw){TUSA9vKgI+F!m-Nl$3g$cD3Bu6_V3A*!VKgRDY^boJ{ z)5RCk`P6!rWoXUNdXbZ4H< zygY_>L}7?@{Bdzos!$CT_M%dd1XqJH6(@SQxdO;|Vxoj-7>V_~NfdlF0MGeaWaG{a zuC86W9FG)3Aahn_K1~hed9=Ii^R%RF1v;(4kn6Ec99NX+v>lVNzHP8YBJLt`lB==Z zHl-fG)6B?v54PcHAw5>l|*~rrVw0WV55e0CCwwV!rLM^$>-s zYbHM3+Gw42PQ&($vn@*U>+6%BF(DhKKrv;a!yW4ePQqN1a!_LKx}c|q)z_;V$K+c~ zuu**A|%tX>ga|<=Nkz~(=ZQB24%`maq)4t zq)nyVd%C;QTjnN6^Iu6RC+>{q^N|6X;a?1I8qM-=2vT^2ihgbFvO*lO)?Ex%@1D{v zTMOG!%DZyH5#0#2$B;pkTCOw?|kx z-Bfgx2??Q0VVWq059X-rNII_~js$)cLJ(j|dXdeb(Fly290C2F>AtU&1jmnYa7Lnx z#Wt#J-$KEXB7q#%fdH`XA~#buKP}F(VBTs4T63VlVx4VB1(h8ZgJfLTs>P_N+(t1_ zw$fa(djV=1&e7d3Ko>aw40yU7GR##gKS&?f$<(eM72yhv?nHq2ibc5V(_j|%w@gc~ zOR*j)I<06Y_DlBz|W6Y$h>IekcfErC1cBFk$Q`|iY(GiV1yF7EdWJEM%0G;|eo(}Ewy3OSyW;GLKXy7qmTq4~^G)2=$Pk*-j%)aKfdK!?E5Ueoi)u0G5HJo9dRJylAtCI_K)hT~%REP;xsiOkJw1ln8T8gQ&)iv6XLKO4_tAaQ*OmFig+dEbt0z=eQQLESunp7e zbXq`AtJ|r7lp0z|8M=-pf_!uq7_(sC(q`3qg57@_oLK5OelhC+p+|){i!{VlZ+Z0L``dfZ zY(fd%vteY{&k(UHc@jP7m$o84d6@QS9P>9rCU6M*+~$;!Y%c{{^qH*zq7P+Y;Di)h zq1^V1E8y|Py99R@H8YT6W)*Y)$-iVb!>h@~QwDCjwM{i(#{;&M7SzY8Bk1Nh9Vc)- zXgA$OrMDE_L({v>f5PGY8uiZFA-4-O9s{K@W6`O1Z0>M&{@`6w%wh3SJj1b;Cah|av-kX z$@k8l_$igAZ^K8Cq7*KKb~h8+B`XzsCA)z`=g>!6tioc48LP&*YX8o@`)^{T1NV&R zO(_eMz0OasJQnF=W#>8lh3YciBCOsrCh649KCjt<%6?eQ93rF~Di3qRg)%0p)gQdk z8UGjN9I9%0=2I?Jj)#uj<P0Hwkq9%?c$8DZYH=5a187F$$R>HQog9USK5-Rj~Ir z2fk&?4~tloRUA0P2Qhz=_w^Z!dvVPg32hz=9O{|eDr*7`q=sR!WrfO}jDH6XfmAf*B&D>{g#4}n9FgAr7#<}>^d{nRS zSCi{mpMOev>u%J0KdLl$`D)KToZo)jo)05KATOUzm%l&S&>6;SF^N@_dwSY66%VS> z5{FZoS*B_}8O2Bwtcz$07Ha8l)OTIHg!jV^g&JbdrdK${tDCncr&E#oO9~r5nWqeO zoUA%``->dZC>Fm!$tw}e?Om9KlLZn=Ir5-OPE5u)`>&b00qlWoUM#5?+ z^gv4V0Kv1KF|}PQP^v*IUeCHs$3yA<_N&F)U@5zpd;1Hu)M@b7 zX|x_1?~8pE`se-aL{zu$9kTazeBk$(5-e!TP`g%txEg8u%?RvHH`L&W!g9Bu$BrQ} zj@#N_cw&Po3X_$93IwRdzHFw%*@1YjdR?W_q6kaEXz)cfih+=ZZNf3y3^zK9jMxWb z#kb$f2q|5h>H%~HO=d3E;R}@gtb3Pwl(=!@qmdB^i0bQz9~yJ8!RlWUImiT2@4ykB zTEB&8<5fG<@{<$O+C}V+tE4ogEu+ z&mc7jHiTGAVs%^XhmO>dp#X}=ew1)kH-rKx9(5ZnMSIt|j(kt-ccOaQbDa0Gw-VV}Jw zITc})eoz7Sn)-OMSvInINv7e4oq@B8BxB~O+lY(AK}b@5sk7h$3n(Q^0jqfE8F&$a zLXoz=_i=$1+%Yxi45C7GMtqW?=oPKYSGatuZD%NYW$(ryM5o0(qi@U$-1z&(@CE^p zsgldx)Sh>YQg#^?fpasntU~Pwm>=_DjXSnm@tCXG!4%=O2Ph-UJ~8<_i1v+w!}0tf zhBMU8(|9$(?e*;kQ;lcGZyxP5voX_;^FnoeVt~!{^Xw5CapL_TGzQ#r#QWdc!92KdgF z;RWzs{qp3jDFxQyp12}bm@Zi2)8nMA15g46Wfkl3HLCML1Mr71U5qn-4()M z=!T4wZv2EV4pe1uW3T&c5_-CWc(Rc|!6l@&ZDACr33MUew_|5^+hE(~_m}_m@m(hX zvj6KhJ-@VZ1cjja_8RQD6Z}QfP81j+11Vp-CgrhtLJFiA&y)Zv zBE?AY`X(;?o;2ILosTb1u+h$+rtyT*xiQF~-bwPZlS*eC?Gso6KgGuJs)kU($b8D@ zpn+N5;pY|`gL6n>m%UGYlc2nn=ChHvMFpc5n_I)pzdE>``&thMiHcIXpYIRCI?CBI z+um@0RAmB2fnq(gs(s32N860uO5k7b-vm;6^l9S(s2W-)OHn1a?{6gvO30k2Ro?6d z1rB$#XyvfA;eT9IujvHilR<-;M>M%Cmqw9MO!PHXey;DMm4{pk{z@l5i~R7Z1y0!k<#gpA3tol5YEUz|*)f4?Y|82Sd{1P{Stt4Co8KJ|N}x=H za^>SrOgDVZ!KyW6Y^A&;Z*qoFtIl?jehrI=%+nB%-4L#C_IZdA5&;Zmf; zk+8j7Tlrw34}_-z=PL=m86i~}UV_n1hz5jyn3=Irt#(3_=Be1GzN}0h1+iOsRa_Yk z79H>huyX@POmRX<4FV)8zPepADiOgA_4J7rVP8GuvN5Yl$IjhTww8?5>*rG`C$srb z4s=}(*aFwK^F4DmM#mV$q3a@OjZBqAcGC!P>a9wiK;HUX4^@O)(0qYxGYrQ>vx2aX-~wrKj6Xi&a< zsYi+q`kFL^omk$Qy8jzGG97{X}%cmc@M-DXo(G4Ko8lk1qVAi@jDbuAw zV~mfBi)8ex(ulZ^Sf)jyk$i_7Hos;4iJ?zhi`ywS%VoyDCq{{l$ICk!)r+2J5+C9? z5T_ZL?eReTm!%sp>xAR+p$Mm618pUspGIu|#-;1&#&ESBw20b9i=zA>upUFM-kM)r53&bN^(zGN0=(oVt-*0P=X7jhu`*RR zb8$(w!Kcs@eZ;tW;ED&hq1xEoU|`DPC~O zdEF|7hN#H7i}WtVbK^ecDu9$M4FcC>m8JWBj zL*DX)OZg%1#E_0X{B-X7EeGTtJx6XzxeEI$JKu500f$1h10}4Lc~AL=-Gfff3PF_g z?%69wPHk5r3t$~LT-xGIjrB+)KtJ@M$-_Rgqe>Z|%95aP9d2CQR|7dr(4v>ET4{n-^jC}6)wb!4N)x&E-;p9@9kY1n642_poAvCOBk z6ApYqm;Rt6G|XzNTpS}$1fubnZ>J*32AXYOM#u#-V17}|L>%ff6u~dKR-oY78m3$t ztoX<`xx3HEBeC6n_rXYe5G~|#JE|wKe1Vm;p}Kt}VXnu*XF*2~HntaFE2*)vj%l9a z(Q3uSXS5SOfM&>eP5g0jm~$Kusl3>GMx9o#`T^opvh)8Re&7EuFu=sg`2PrdCWik3 z7-0Ng0Rz)Ko3SKquKtf~zwvI{f}KO3q5^ma9=2l$NSYfMLL|IbvKy^`+*Y`2s*86e z_&84EX;wH%s#?uSh64y}Si?kfxo2aZ+j7#6O!LXt1toVT$XMfO_~KT6GbV7j}?Krv_Jv>76iUFGiVc(=HN z1M(LxsNImebBth=84Uaz-=`p}iAFX1v1bscDhl5Hq2{^3Xny|m(--q=1Z!vq9S6p4T^xjLTV;14P1XwDSCPCf04PIk#Da`Ou0zm46H z>(|VmnZ(9x0(4y)J zz>yylb`22!oIBjP|LhMC+VGi#0KJRjPWb?%L9y8)d95tg1n=bV>5*%P z;FL0mRvv9D=mY%(II!0;rKAzi=w5xZJgyb&TR`rkVo+twqYJ8ACPtJsxk%jpvqqv% zl!(W!Lg>#^8)8er+IJJN$WIv^cz@+!rg>(-TvEZs5m_})4(CMw3{+qt_n!oYkV*_jK~ zEMLA|+~kZvmQkN|d33Xm~r_t6JOJ>o2N<)f!wbWS5aVfjFou<-5cpL`ZD7fwvlJY>f& zX>*81%^7yvnIfSW}Jh! zP%CEI1<27}ZU9Nn&z`9Y`6OIbqCyp~&nEk0k;eB%^AFI>s5RS5dJ{%k+-W4xo`6Bv zhnuY9ohC*itJ$oUEN4E}Ls1%aULQ4(^2&+Igo*7o8nz(9lxD0W)w+++ShSMd7p^6I zik6%|8pT2+Nl69sjn6-qlixiNhPQBNU+{g-QcU+p=hJz1Fa{le-~*}|xyw+puN>X~ z6s3q8RuP|O(YF?E^JyeAly+|l27|!NHV{SdQSMoo8n(jpaC6WY6@MI>^W~3@^d6A$ zYS`attI>{ps}IrqdnYIf zj@MwGegABj^KR;3_LQIq;pZ_dS=2@#uL zS%j;P?vEy?4;a5;L<0&D$C|8khnLX6S}G>#tQg?)apS*^b=@s&4C8-c(dWO1SR67h zcRV*2K=QWsv1aNT|6%7!@1pR1A;y)SqwZd7uHa8G=sA!tLP+Wd7X(C8p)*>bz{xTZ zu}(>$iOc6?r*L03D>CSZ6K-(qF&sbM7sjx4!ZCbTHaKq~Lt;7ct!xy@ICE5_#s$p= zit+>TvTG5g_&MM+LCrMtjKMIU#4HkbnhvD zJFn7;swEOHMN}1nHW9910ce-km5T;O!G(YcBOH?YxO1B}SRdx+=E91>$MClbvZX4h zgzp9)L>ky!4;-F6OIO>3n<8s)V15H7YSL#!MTo+SGlw(&9Db&?77#8dx#5a&8s$qM zcN@tkT}as!^QsJ=VF5tS5^Zz!T3L)9aZq{|M+d7z-vVc{Fw)o>rSW5N4$_$hU(uxdS+h-!D2yaGo$7Aox1BTo~iHZ#s! zd4p+m!x7jS^~00Roe9PoowAdW`4_>;x&~HCL|l+YS`d14^O#@5jQSZO(;{$CI*3I0 zR4kmQ$2c>n5}ZObXRNhpJrh z+kYHhUgq43t?VkS{im6Wm)TrmWEw zaGZ04Bp9d6-0%qkcuQ>Lx+VawYVg!p!biaq{cP`-gh1QICSDGCr(E$h&nC8+NFO%R z8={2I57BF6OpDeA1-qw^h%%ogvmPW#e=!OVLLU)eVs;YgM$y1ZaPUy`aIL4D?r`1q~Cu9#XR}s8QE)dRx>=S z+J=SaoB;hQHVaMjN8bfub7PxR^j$GSE#iP`fKV=t=~}thlA)IE-~1$)(uL4=r*H&A zUC1uF$(tcSEyiQxju{$-P)bVy{vNInPEKBnJA$ZJ*REg^>f$;4U1mM0HF_>)^=stt zpZfSaOe~(L#*XdO!+vwHUCU5zO2~L{?&l>TNrOWUlVPK9lzj;Iyu-G%n=O4t#fin@%BFiVkQLe7(;L_YtaEL1c;QUwrS zP|>SS7EWjA-7%?sNbiKgHNi|BMjz-O+4W8n_av7vo?Q&yWB)p8c7UKU^rKT$!wHTA zi*CmYj>N*rnv)h55~DIB{wGE5nAW;Cjx1si&0&U8c+g{4GxM4#$t>c7N5nL(bDF{~ zxu<9}GZvRx+hA*W<!J3TSv}skp(yis%5qSk9V_la`VSm+IY~-ToJ(2V5du9f6%18D2EGpZp5ARHWmI|ZgAS|@lGSSb`Zn68uM zRGiI~cyz%)Eh-LEh{7sVviM*`6-{yLI+Btqf1O;&!}XUpv?A-0ZlPKu2&Clj;?yh< z%CW|+di{=PLtKy$U*#w>v=0acwnkvU?rv`>3#r~l1mJN<#2LNFuXGvqtU&xMbY)5RV%k+9OaKUrWnQR)6vYcr^4D{in^a_DNAu2sd z{S8L{oAlibG>hsD*Vpr&Di*F5$Szot#!j8T%&ZhQLr-3oFA8h5!mOSVY-L~q2Ciy_ zI9)N*l002CK$LHx+$qiNiI~NakFfomf}9@P;y+U)G3A^!q1Z6-Xj@6Gyc&8o3j>&% zdty7?S2T>;Qd`2|6v_cHpqj<4d#)|xhIPWZEMc4URxasou5`IYY!Be_o14Xo9M&JQ zT_@vbQHB4gbVo5rgsxfqihjaIC882lI`x_vNtL5(DOhDd%_)_vMeXnDsB9I0(4XF8 z!ZWy#8hsC{(d%f)s7mACQMKJAach=^0z+N_5t&t)R+6(Uzq7LVxbz_+8f#9{jE^H7 zo_)BzH5e>!sWXl36xX{f4=SF6eO0nwrn0)7Liq@oZ;f4RsE(3k?2A}!blz-lIX#JI z$&@|WCK9dYUH{n?(PsP3SqJ!UEhT*!zZ?q7KDVZGj~Ub8VUS>}>lUE*Yb>77&xBWS zA00=n%u})Ek8m`jzZC8jhxX=+8o=~IeE6BFp3;cG_S;{j;(-t8n0hv*l8Q#`D{n?? z-vn)K)s5i&tDdcC+CeM&aVeI7(=^Jm6qD(#q^-_NNt5|(j-)>y4eZ={^w;A^&#H17 zBNk2DH*f&pc<%AiWHJ4~`T~-@mUjpbWH=g8f7VK8wehgKy5gat5{Y{gIeTYK<_e?< z7qT5zXHJkJd{OJ53BrZzqyb=e7EuR@7KhmCnxlMlghThgEL-KwkCryP9*W&W%wO@f}1`%oN$ zURm8I9Uk%1I?u|LZNMQ-zOTQdktxAS|I=O1dXTxv6L;<|`I_)CN29BHPR)x6zuZjS zSot$LX^InJ^03x!E0E&W#ts&1?;v|IHmF_3D#4Bcehk9F^m6Nh2yOy`wnljgz#B%p zZ`udV$_w<{jytD-Q{@CJzVQ!hW&oa=0f#ZJBQy#165E&Llv{-gL%}joAJ>y4(4lfr zl7utxnl-zJN6=ep#q6uknnM(db|_C!k&=cOzBf`~c&=~400x<_n^I;}nk@toCZeiT zVND@AhLzQ470EYvaonqS{YI5*zqv!#XWu~2jfXtO>ftue zp2zD{if7-wp6If4h6luJc=5@pqiex871EOG<1?JOICys30IpeHH<~MZctGrS5MiO399cwxth-`%}e<+VSNUNDW5l-jR($>K-oLx(ur|~} z@<vhjFe$c| z!LzUm8y5S=xGDC$HSW1z5_R{A8^H_}0YvY4cCuA!qzFh%WfIzvw{)NY(zk=lWkx z>VF{<%$#ihH`RoR@qa)j82?wu#I=sLJ;|sm+}D^sBR!xQl5E*c8i1#R&2T&+N#isI zpb77ov?c3|gF0GA;!5w%Zbjt{pQ=xWA$>~~z_01rq@nA2^LnE1UYNu!_>~U0Oq5b) zZhK*JnYHbmUGE-u@BsY(c&^<4@m&A@daj3qiY{81)KmZX8~%^y3Kho%X8ZlGcVt;V zE-r8G57lpKy5BAP;UT_7SiO)oac}##tr!47Bn4zZboUnK>0bm@*c!9Bk^78TPOEFK zlBJt+Tl8#D)|GD{~vE}0T9&|?GICe zq=R4pPc~`_VV25;hmze}FF}L5!_3^z1S#MlvAs`F7tz05$PIYjjZ25p*@ThQZgA!=r_}pZ>k-n45*JhhMHZG z=D%~)5hy-9swjjU}wdoi?D%>!WXL>tk6Zdz14_O4_H!;1gVl z2a8ldDK=DI-a+~OyJHiIl24HD6Y2YZW3StGkZi^{h|J}37O^c=>j|8ng?98oz?g(XmZ5_!_g*tIu) zB@{>E4ot~zj@SV7wFR~!sXQ)`s3^bGug9W-MML)EFbAcbL~-JGam1*0_)BWiw|=Oj zA;$t8gQt#bFm!rQYUQ~(`?)m3_x$7WDScR?b$|gRAEyr1;E{~o_yvI3%LhFcIOfww zt#IqSW{+aOb(0J$PFm#9vNx=|%I?Za#)CxSyd0Hl331w5sPQzD;rj*d@WwX|C(hfJBA__F@#CVJBNELMz!WM?iU?GlIEr@oey_DHqODEtal^MB!Rt(3!2qsz>tiew1G}rC={GESFAS8Rm&RpI|Ny{>S1xykMKVIO08B$6Jr!}NBSvRq4XlH znWvyP?|@A}zX~vO_agDRPMM`I1_(%fMnn1LVVPF`3nA#dUjHMpBXKU`E; zu85TVg^`9)Ys;~3R?|@HsWFZa;dV|&uyTr^Q2%_<%eCx}m=n_~Oy4QDp3PC~>d^@r zzi#%DoyHP}E3FVftI|!Bh{$JqAojuZrn3-=nyEkRCn756a7_lE+7;^Ec}*t)4GEE& z*!kDIqdjEO_6|zBc^@m`2GFqDFL2^+K;vaP3Yn0HeX3v?B*jT(M)0>X3ArU zWT(r&MSY@}B?!iZu}ABl~n=7Tq$*F7RLkrm;>q+jq!O`FxgEzdn5 z1Xhqh1+DA5*oX{vE;;z3GrhF8MWZcv|FG=!aW5A>UgWUnI^MM>nLE#WB%iE6b?I{* z6>sCO#$pS`5_e0hH{>GWH{FF>l<8WS5i+`lsrZH|0iI6C%z)sAj$V$q;`qX@DYkM? zJ53%=1%4Kl%L9Siw>UXaFhdiO95sme-P=fiuv~vvg#T!QveS~w0%MNIR7D}kp@eox zo!L&}8rB98p9W$FI-j+wI$pB!2P;O4MP4gwjGCgdjn-j{R5O#^7t~!#H)J<;5pv3X zmXs@ULYSEZX`gJul_{8Yf9H{Mfx#+O){JC&Za(KjSBw!U_1T+1tGetPzgf0R$1yW) zap>m{OcmdZp-TN_9tvoR0>>-AnTNz%7F4_>dA21|>~ixJXI_vODqjmNK0T@9&^P!U zdKi_lgu=s)2?ibK;>!7#6gNUi`zs|mg0ky%BM1&X6Nw9lyfi;DR9FuF==78!xvyRP z_AWb(!jC943Zz$u$gZTapV7$Q6I;27xvQ|)NNVU=4n7)srBZRXY^>0ZPV0kIdN2

    GwFe>b=0IJITgXgI_UKOkWb^@Z0S0GRXwSX7R& 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%0DXNY31vj)5}Qz|8@U=jss3>TK|jt|J2{p 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 diff --git a/include/VT100.js b/include/VT100.js new file mode 100644 index 0000000..6a325e1 --- /dev/null +++ b/include/VT100.js @@ -0,0 +1,919 @@ +// VT100.js -- a text terminal emulator in JavaScript with a ncurses-like +// interface and a POSIX-like interface. (The POSIX-like calls are +// implemented on top of the ncurses-like calls, not the other way round.) +// +// Released under the GNU LGPL v2.1, by Frank Bi +// +// 2007-08-12 - refresh(): +// - factor out colour code to html_colours_() +// - fix handling of A_REVERSE | A_DIM +// - simplify initial
    output code +// - fix underlining colour +// - fix attron() not to turn off attributes +// - decouple A_STANDOUT and A_BOLD +// 2007-08-11 - getch() now calls refresh() +// 2007-08-06 - Safari compat fix -- turn '\r' into '\n' for onkeypress +// 2007-08-05 - Opera compat fixes for onkeypress +// 2007-07-30 - IE compat fixes: +// - change key handling code +// - add
    ...
      so that 1st and last lines align +// 2007-07-28 - change wrapping behaviour -- writing at the right edge no +// longer causes the cursor to immediately wrap around +// - add ... to output to make A_STANDOUT stand out more +// - add handling of backspace, tab, return keys +// - fix doc. of VT100() constructor +// - change from GPL to LGPL +// 2007-07-09 - initial release +// +// class VT100 +// A_NORMAL, A_UNDERLINE, A_REVERSE, A_BLINK, A_DIM, A_BOLD, A_STANDOUT +// =class constants= +// Attribute constants. +// VT100(wd, ht, scr_id) =constructor= +// Creates a virtual terminal with width `wd', and +// height `ht'. The terminal will be displayed between +//

    ...
    tags which have element ID `scr_id'. +// addch(ch [, attr]) +// Writes out the character `ch'. If `attr' is given, +// it specifies the attributes for the character, +// otherwise the current attributes are used. +// addstr(stuff) Writes out the string `stuff' using the current +// attributes. +// attroff(mode) Turns off any current options given in mode. +// attron(mode) Turns on any options given in mode. +// attrset(mode) Sets the current options to mode. +// bkgdset(attr) Sets the background attributes to attr. +// clear() Clears the terminal using the background attributes, +// and homes the cursor. +// clrtobol() Clears the portion of the terminal from the cursor +// to the bottom. +// clrtoeol() Clears the portion of the current line after the +// cursor. +// curs_set(vis [, grab]) +// If `vis' is 0, makes the cursor invisible; otherwise +// make it visible. If `grab' is given and true, starts +// capturing keyboard events (for `getch()'); if given +// and false, stops capturing events. +// echo() Causes key strokes to be automatically echoed on the +// terminal. +// erase() Same as `clear()'. +// getch(isr) Arranges to call `isr' when a key stroke is +// received. The received character and the terminal +// object are passed as arguments to `isr'. +// getmaxyx() Returns an associative array with the maximum row +// (`y') and column (`x') numbers for the terminal. +// getyx() Returns an associative array with the current row +// (`y') and column (`x') of the cursor. +// move(r, c) Moves the cursor to row `r', column `c'. +// noecho() Stops automatically echoing key strokes. +// refresh() Updates the display. +// scroll() Scrolls the terminal up one line. +// standend() Same as `attrset(VT100.A_NORMAL)'. +// standout() Same as `attron(VT100.A_STANDOUT)'. +// write(stuff) Writes `stuff' to the terminal and immediately +// updates the display; (some) escape sequences are +// interpreted and acted on. + +// constructor +function VT100(wd, ht, scr_id) +{ + var r; + var c; + var scr = document.getElementById(scr_id); + this.wd_ = wd; + this.ht_ = ht; + this.scrolled_ = 0; + this.bkgd_ = { + mode: VT100.A_NORMAL, + fg: VT100.COLOR_WHITE, + bg: VT100.COLOR_BLACK + }; + this.c_attr_ = { + mode: VT100.A_NORMAL, + fg: VT100.COLOR_WHITE, + bg: VT100.COLOR_BLACK + }; + this.text_ = new Array(ht); + this.attr_ = new Array(ht); + for (r = 0; r < ht; ++r) { + this.text_[r] = new Array(wd); + this.attr_[r] = new Array(wd); + } + this.scr_ = scr; + this.cursor_vis_ = true; + this.grab_events_ = false; + this.getch_isr_ = undefined; + this.key_buf_ = []; + this.echo_ = true; + this.esc_state_ = 0; + // Internal debug setting. + this.debug_ = 0; + this.clear(); + this.refresh(); +} + +// public constants -- colours and colour pairs +VT100.COLOR_BLACK = 0; +VT100.COLOR_BLUE = 1; +VT100.COLOR_GREEN = 2; +VT100.COLOR_CYAN = 3; +VT100.COLOR_RED = 4; +VT100.COLOR_MAGENTA = 5; +VT100.COLOR_YELLOW = 6; +VT100.COLOR_WHITE = 7; +VT100.COLOR_PAIRS = 256; +VT100.COLORS = 8; +// public constants -- attributes +VT100.A_NORMAL = 0; +VT100.A_UNDERLINE = 1; +VT100.A_REVERSE = 2; +VT100.A_BLINK = 4; +VT100.A_DIM = 8; +VT100.A_BOLD = 16; +VT100.A_STANDOUT = 32; +VT100.A_PROTECT = VT100.A_INVIS = 0; // ? +// other public constants +VT100.TABSIZE = 8; +// private constants +VT100.ATTR_FLAGS_ = VT100.A_UNDERLINE | VT100.A_REVERSE | VT100.A_BLINK | + VT100.A_DIM | VT100.A_BOLD | VT100.A_STANDOUT | + VT100.A_PROTECT | VT100.A_INVIS; +VT100.COLOR_SHIFT_ = 6; +VT100.browser_ie_ = (navigator.appName.indexOf("Microsoft") != -1); +VT100.browser_opera_ = (navigator.appName.indexOf("Opera") != -1); +// class variables +VT100.the_vt_ = undefined; + +// class methods + +// this is actually an event handler +VT100.handle_onkeypress_ = function VT100_handle_onkeypress(event) +{ + var vt = VT100.the_vt_, ch; + if (vt === undefined) + return true; + if (VT100.browser_ie_ || VT100.browser_opera_) { + ch = event.keyCode; + if (ch == 13) + ch = 10; + else if (ch > 255 || (ch < 32 && ch != 8)) + return true; + ch = String.fromCharCode(ch); + } else { + ch = event.charCode; + //dump("ch: " + ch + "\n"); + //dump("ctrl?: " + event.ctrlKey + "\n"); + vt.debug("onkeypress:: keyCode: " + event.keyCode + ", ch: " + event.charCode); + if (ch) { + if (ch > 255) + return true; + if (event.ctrlKey && event.shiftKey) { + // Don't send the copy/paste commands. + var charStr = String.fromCharCode(ch); + if (charStr == 'C' || charStr == 'V') { + return false; + } + } + if (event.ctrlKey) { + ch = String.fromCharCode(ch - 96); + } else { + ch = String.fromCharCode(ch); + if (ch == '\r') + ch = '\n'; + } + } else { + switch (event.keyCode) { + case event.DOM_VK_BACK_SPACE: + ch = '\b'; + break; + case event.DOM_VK_TAB: + ch = '\t'; + // Stop tab from moving to another element. + event.preventDefault(); + break; + case event.DOM_VK_RETURN: + case event.DOM_VK_ENTER: + ch = '\n'; + break; + case event.DOM_VK_UP: + ch = '\x1b[A'; + break; + case event.DOM_VK_DOWN: + ch = '\x1b[B'; + break; + case event.DOM_VK_RIGHT: + ch = '\x1b[C'; + break; + case event.DOM_VK_LEFT: + ch = '\x1b[D'; + break; + case event.DOM_VK_DELETE: + ch = '\x1b[3~'; + break; + case event.DOM_VK_HOME: + ch = '\x1b[H'; + break; + case event.DOM_VK_ESCAPE: + ch = '\x1bc'; + break; + default: + return true; + } + } + } + vt.key_buf_.push(ch); + setTimeout(VT100.go_getch_, 0); + return false; +} + +// this is actually an event handler +VT100.handle_onkeydown_ = function VT100_handle_onkeydown() +{ + var vt = VT100.the_vt_, ch; + switch (event.keyCode) { + case 8: + ch = '\b'; break; + default: + return true; + } + vt.key_buf_.push(ch); + setTimeout(VT100.go_getch_, 0); + return false; +} + +VT100.go_getch_ = function VT100_go_getch() +{ + var vt = VT100.the_vt_; + if (vt === undefined) + return; + var isr = vt.getch_isr_; + vt.getch_isr_ = undefined; + if (isr === undefined) + return; + var ch = vt.key_buf_.shift(); + if (ch === undefined) { + vt.getch_isr_ = isr; + return; + } + if (vt.echo_) + vt.addch(ch); + isr(ch, vt); +} + +// object methods + +VT100.prototype.may_scroll_ = function() +{ + var ht = this.ht_, cr = this.row_; + while (cr >= ht) { + this.scroll(); + --cr; + } + this.row_ = cr; +} + +VT100.prototype.html_colours_ = function(attr) +{ + var fg, bg, co0, co1; + fg = attr.fg; + bg = attr.bg; + switch (attr.mode & (VT100.A_REVERSE | VT100.A_DIM | VT100.A_BOLD)) { + case 0: + case VT100.A_DIM | VT100.A_BOLD: + co0 = '00'; co1 = 'c0'; + break; + case VT100.A_BOLD: + co0 = '00'; co1 = 'ff'; + break; + case VT100.A_DIM: + if (fg == VT100.COLOR_BLACK) + co0 = '40'; + else + co0 = '00'; + co1 = '40'; + break; + case VT100.A_REVERSE: + case VT100.A_REVERSE | VT100.A_DIM | VT100.A_BOLD: + co0 = 'c0'; co1 = '40'; + break; + case VT100.A_REVERSE | VT100.A_BOLD: + co0 = 'c0'; co1 = '00'; + break; + default: + if (fg == VT100.COLOR_BLACK) + co0 = '80'; + else + co0 = 'c0'; + co1 = 'c0'; + } + return { + f: '#' + (fg & 4 ? co1 : co0) + + (fg & 2 ? co1 : co0) + + (fg & 1 ? co1 : co0), + b: '#' + (bg & 4 ? co1 : co0) + + (bg & 2 ? co1 : co0) + + (bg & 1 ? co1 : co0) + }; +} + +VT100.prototype.addch = function(ch, attr) +{ + var cc = this.col_; + this.debug("addch:: ch: " + ch + ", attr: " + attr); + switch (ch) { + case '\b': + if (cc != 0) + --cc; + break; + case '\n': + ++this.row_; + cc = 0; + this.clrtoeol(); + this.may_scroll_(); + break; + case '\r': + this.may_scroll_(); + cc = 0; + break; + case '\t': + this.may_scroll_(); + cc += VT100.TABSIZE - cc % VT100.TABSIZE; + if (cc >= this.wd_) { + ++this.row_; + cc -= this.wd_; + } + break; + default: + if (attr === undefined) + attr = this._cloneAttr(this.c_attr_); + if (cc >= this.wd_) { + ++this.row_; + cc = 0; + } + this.may_scroll_(); + this.text_[this.row_][cc] = ch; + this.attr_[this.row_][cc] = attr; + ++cc; + } + this.col_ = cc; +} + +VT100.prototype.addstr = function(stuff) +{ + for (var i = 0; i < stuff.length; ++i) + this.addch(stuff.charAt(i)); +} + +VT100.prototype._cloneAttr = function VT100_cloneAttr(a) +{ + return { + mode: a.mode, + fg: a.fg, + bg: a.bg + }; +} + +VT100.prototype.attroff = function(a) +{ + //dump("attroff: " + a + "\n"); + a &= VT100.ATTR_FLAGS_; + this.c_attr_.mode &= ~a; +} + +VT100.prototype.attron = function(a) +{ + //dump("attron: " + a + "\n"); + a &= VT100.ATTR_FLAGS_; + this.c_attr_.mode |= a; +} + +VT100.prototype.attrset = function(a) +{ + //dump("attrset: " + a + "\n"); + this.c_attr_.mode = a; +} + +VT100.prototype.fgset = function(fg) +{ + //dump("fgset: " + fg + "\n"); + this.c_attr_.fg = fg; +} + +VT100.prototype.bgset = function(bg) +{ + //dump("bgset: " + bg + "\n"); + if (bg !== 0) { + this.warn("bgset: " + bg + "\n"); + } + this.c_attr_.bg = bg; +} + +VT100.prototype.bkgdset = function(a) +{ + this.bkgd_ = a; +} + +VT100.prototype.clear = function() +{ + this.debug("clear"); + this.row_ = this.col_ = 0; + this.scrolled_ = 0; + for (r = 0; r < this.ht_; ++r) { + for (c = 0; c < this.wd_; ++c) { + this.text_[r][c] = ' '; + this.attr_[r][c] = this._cloneAttr(this.bkgd_); + } + } +} + +VT100.prototype.clrtobot = function() +{ + this.debug("clrtobot, row: " + this.row_); + var ht = this.ht_; + var wd = this.wd_; + this.clrtoeol(); + for (var r = this.row_ + 1; r < ht; ++r) { + for (var c = 0; c < wd; ++c) { + this.text_[r][c] = ' '; + this.attr_[r][c] = this.bkgd_; + } + } +} + +VT100.prototype.clrtoeol = function() +{ + this.debug("clrtoeol, col: " + this.col_); + var r = this.row_; + if (r >= this.ht_) + return; + for (var c = this.col_; c < this.wd_; ++c) { + this.text_[r][c] = ' '; + this.attr_[r][c] = this.bkgd_; + } +} + +VT100.prototype.clearpos = function(row, col) +{ + this.debug("clearpos (" + row + ", " + col + ")"); + if (row < 0 || row >= this.ht_) + return; + if (col < 0 || col >= this.wd_) + return; + this.text_[row][col] = ' '; + this.attr_[row][col] = this.bkgd_; +} + +VT100.prototype.curs_set = function(vis, grab, eventist) +{ + this.debug("curs_set:: vis: " + vis + ", grab: " + grab); + if (vis !== undefined) + this.cursor_vis_ = (vis > 0); + if (eventist === undefined) + eventist = window; + if (grab === true || grab === false) { + if (grab === this.grab_events_) + return; + if (grab) { + this.grab_events_ = true; + VT100.the_vt_ = this; + eventist.addEventListener("keypress", VT100.handle_onkeypress_, false); + if (VT100.browser_ie_) + document.onkeydown = VT100.handle_onkeydown_; + } else { + eventist.removeEventListener("keypress", VT100.handle_onkeypress_, false); + if (VT100.browser_ie_) + document.onkeydown = VT100.handle_onkeydown_; + this.grab_events_ = false; + VT100.the_vt_ = undefined; + } + } +} + +VT100.prototype.echo = function() +{ + this.debug("echo on"); + this.echo_ = true; +} + +VT100.prototype.erase = VT100.prototype.clear; + +VT100.prototype.getch = function(isr) +{ + this.debug("getch"); + this.refresh(); + this.getch_isr_ = isr; + setTimeout(VT100.go_getch_, 0); +} + +VT100.prototype.getmaxyx = function() +{ + return { y: this.ht_ - 1, x: this.wd_ - 1 }; +} + +VT100.prototype.getyx = function() +{ + return { y: this.row_, x: this.col_ }; +} + +VT100.prototype.move = function(r, c) +{ + this.debug("move: (" + r + ", " + c + ")"); + if (r < 0) + r = 0; + else if (r >= this.ht_) + r = this.ht_ - 1; + if (c < 0) + c = 0; + else if (c >= this.wd_) + c = this.wd_ - 1; + this.row_ = r; + this.col_ = c; +} + +VT100.prototype.noecho = function() +{ + this.debug("echo off"); + this.echo_ = false; +} + +VT100.prototype.refresh = function() +{ + this.debug("refresh"); + var r, c, stuff = "", start_tag = "", end_tag = "", at = -1, n_at, ch, + pair, cr, cc, ht, wd, cv, added_end_tag; + ht = this.ht_; + wd = this.wd_; + cr = this.row_; + cc = this.col_; + cv = this.cursor_vis_; + var innerHTML = this.scr_.innerHTML; + if (cc >= wd) + cc = wd - 1; + for (r = 0; r < ht; ++r) { + if (r > 0) { + stuff += '\n'; + } + for (c = 0; c < wd; ++c) { + added_end_tag = false; + n_at = this.attr_[r][c]; + if (cv && r == cr && c == cc) { + // Draw the cursor here. + n_at = this._cloneAttr(n_at); + n_at.mode ^= VT100.A_REVERSE; + } + // If the attributes changed, make a new span. + if (n_at.mode != at.mode || n_at.fg != at.fg || n_at.bg != at.bg) { + if (c > 0) { + stuff += end_tag; + } + start_tag = ""; + end_tag = ""; + if (n_at.mode & VT100.A_BLINK) { + start_tag = ""; + end_tag = "" + end_tag; + } + if (n_at.mode & VT100.A_STANDOUT) + n_at.mode |= VT100.A_BOLD; + pair = this.html_colours_(n_at); + start_tag += ''; + stuff += start_tag; + end_tag = "" + end_tag; + at = n_at; + added_end_tag = true; + } else if (c == 0) { + stuff += start_tag; + } + ch = this.text_[r][c]; + switch (ch) { + case '&': + stuff += '&'; break; + case '<': + stuff += '<'; break; + case '>': + stuff += '>'; break; + case ' ': + //stuff += ' '; break; + stuff += ' '; break; + default: + stuff += ch; + } + } + if (!added_end_tag) + stuff += end_tag; + } + this.scr_.innerHTML = "" + stuff + "\n"; +} + +VT100.prototype.scroll = function() +{ + this.scrolled_ += 1; + this.debug("scrolled: " + this.scrolled_); + var n_text = this.text_[0], n_attr = this.attr_[0], + ht = this.ht_, wd = this.wd_; + for (var r = 1; r < ht; ++r) { + this.text_[r - 1] = this.text_[r]; + this.attr_[r - 1] = this.attr_[r]; + } + this.text_[ht - 1] = n_text; + this.attr_[ht - 1] = n_attr; + for (var c = 0; c < wd; ++c) { + n_text[c] = ' '; + n_attr[c] = this.bkgd_; + } +} + +VT100.prototype.standend = function() +{ + //this.debug("standend"); + this.attrset(0); +} + +VT100.prototype.standout = function() +{ + //this.debug("standout"); + this.attron(VT100.A_STANDOUT); +} + +VT100.prototype.write = function(stuff) +{ + var ch, x, r, c, i, j, yx, myx; + for (i = 0; i < stuff.length; ++i) { + ch = stuff.charAt(i); + if (ch == '\x0D') { + this.debug("write:: ch: " + ch.charCodeAt(0) + ", '\\x0D'"); + } else { + this.debug("write:: ch: " + ch.charCodeAt(0) + ", '" + (ch == '\x1b' ? "ESC" : ch) + "'"); + } + //dump("ch: " + ch.charCodeAt(0) + ", '" + (ch == '\x1b' ? "ESC" : ch) + "'\n"); + switch (ch) { + case '\x00': + case '\x7f': + case '\x07': /* bell, ignore it */ + this.debug("write:: ignoring bell character: " + ch); + continue; + case '\a': + case '\b': + case '\t': + case '\r': + this.addch(ch); + continue; + case '\n': + case '\v': + case '\f': // what a mess + yx = this.getyx(); + myx = this.getmaxyx(); + if (yx.y >= myx.y) { + this.scroll(); + this.move(myx.y, 0); + } else + this.move(yx.y + 1, 0); + continue; + case '\x18': + case '\x1a': + this.esc_state_ = 0; + this.debug("write:: set escape state: 0"); + continue; + case '\x1b': + this.esc_state_ = 1; + this.debug("write:: set escape state: 1"); + continue; + case '\x9b': + this.esc_state_ = 2; + this.debug("write:: set escape state: 2"); + continue; + } + // not a recognized control character + switch (this.esc_state_) { + case 0: // not in escape sequence + this.addch(ch); + break; + case 1: // just saw ESC + switch (ch) { + case '[': + this.esc_state_ = 2; + this.debug("write:: set escape state: 2"); + break; + case '=': + /* Set keypade mode (ignored) */ + this.debug("write:: set keypade mode: ignored"); + this.esc_state_ = 0; + break; + case '>': + /* Reset keypade mode (ignored) */ + this.debug("write:: reset keypade mode: ignored"); + this.esc_state_ = 0; + break; + case 'H': + /* Set tab at cursor column (ignored) */ + this.debug("write:: set tab cursor column: ignored"); + this.esc_state_ = 0; + break; + } + break; + case 2: // just saw CSI + switch (ch) { + case 'K': + /* Erase in Line */ + this.esc_state_ = 0; + this.clrtoeol(); + continue; + case 'H': + /* Move to (0,0). */ + this.esc_state_ = 0; + this.move(0, 0); + continue; + case 'J': + /* Clear to the bottom. */ + this.esc_state_ = 0; + this.clrtobot(); + continue; + case '?': + /* Special VT100 mode handling. */ + this.esc_state_ = 5; + this.debug("write:: special vt100 mode"); + continue; + } + // Drop through to next case. + this.csi_parms_ = [0]; + this.debug("write:: set escape state: 3"); + this.esc_state_ = 3; + case 3: // saw CSI and parameters + switch (ch) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + x = this.csi_parms_.pop(); + this.csi_parms_.push(x * 10 + ch * 1); + this.debug("csi_parms_: " + this.csi_parms_); + continue; + case ';': + if (this.csi_parms_.length < 17) + this.csi_parms_.push(0); + continue; + } + this.esc_state_ = 0; + switch (ch) { + case 'A': + // Cursor Up [{COUNT}A + this.move(this.row_ - Math.max(1, this.csi_parms_[0]), + this.col_); + break; + case 'B': + // Cursor Down [{COUNT}B + this.move(this.row_ + Math.max(1, this.csi_parms_[0]), + this.col_); + break; + case 'C': + // Cursor Forward [{COUNT}C + this.move(this.row_, + this.col_ + Math.max(1, this.csi_parms_[0])); + break; + case 'c': + this.warn("write:: got TERM query"); + break; + case 'D': + // Cursor Backward [{COUNT}D + this.move(this.row_, + this.col_ - Math.max(1, this.csi_parms_[0])); + break; + case 'f': + case 'H': + // Cursor Home [{ROW};{COLUMN}H + this.csi_parms_.push(0); + this.move(this.csi_parms_[0] - 1, + this.csi_parms_[1] - 1); + break; + case 'J': + switch (this.csi_parms_[0]) { + case 0: + this.clrtobot(); + break; + case 2: + this.clear(); + this.move(0, 0); + } + break; + case 'm': + for (j=0; j[? + // Expect a number - the reset type + this.csi_parms_ = [ch]; + this.esc_state_ = 6; + break; + case 6: // Reset mode handling, saw [?1 + // Expect a letter - the mode target, example: + // [?1l : cursor key mode = cursor + // [?1h : save current screen, create new empty + // screen and position at 0,0 + // [?5l : White on blk + // XXX: Ignored for now. + //dump("Saw reset mode: [?" + this.csi_parms_[0] + ch + "\n"); + this.esc_state_ = 0; + this.debug("write:: set escape state: 0"); + break; + } + } + this.refresh(); +} + +VT100.prototype.debug = function(message) { + if (this.debug_) { + dump(message + "\n"); + } +} + +VT100.prototype.warn = function(message) { + dump(message + "\n"); +} diff --git a/include/black.css b/include/black.css deleted file mode 100644 index 4cc195e..0000000 --- a/include/black.css +++ /dev/null @@ -1,122 +0,0 @@ -body { - margin: 0; - font-size: 13px; - color: #111; - font-family: "Helvetica"; -} - -#VNC_controls { - background: #111; - line-height: 1em; - color: #FFF; - overflow: hidden; - padding: 4px 24px; -} - -#VNC_controls ul { - list-style:none; - list-style-position: outside; - margin: 0; - padding: 0; -} -#VNC_controls li { - margin-right: 15px; - padding: 2px 0; - float: left; -} -#VNC_controls li input[type=text], -#VNC_controls li input[type=password] { - border: 2px solid #333; -} - -#VNC_host { - width: 100; -} -#VNC_port { - width: 50; -} -#VNC_password { - width: 80; -} -#VNC_encrypt { -} -#VNC_connect_button { - width: 100px; -} - -#VNC_status_bar td { - padding: 0px; - margin: 0px; -} -#VNC_status_bar div { - font-size: 12px; - font-weight: bold; - text-align: center; - margin: 0px; - padding: 1em; -} -.VNC_status_button { - font-size: 10px; - margin: 0px; - padding: 0px; -} -#VNC_status { - text-align: center; -} -#VNC_settings_menu { - display: none; - position: absolute; - width: 12em; - border: 1px solid #888; - background-color: #f0f2f6; - padding: 5px; margin: 3px; - z-index: 100; opacity: 1; - text-align: left; white-space: normal; -} -#VNC_settings_menu ul { - list-style: none; - margin: 0; - padding: 0; -} - -.VNC_buttons_right { - text-align: right; -} -.VNC_buttons_left { - text-align: left; -} -.VNC_status_normal { - background: #111; - color: #fff; -} -.VNC_status_error { - background: #111; - color: #f44; -} -.VNC_status_warn { - background: #111; - color: #ff4; -} - -#VNC_screen { - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - background: #111; - padding: 20px; - margin: 0 auto; - color: #FFF; - margin-top: 20px; - text-align: center; - - /* This causes the width of the outer div(#screen) honor the size of the inner (#vnc) div */ - display: table; - table-layout: auto; -} -#VNC_canvas { - background: #111; - margin: 0 auto; -} -#VNC_clipboard { - display: none; -} diff --git a/include/canvas.js b/include/canvas.js deleted file mode 100644 index 0e15a65..0000000 --- a/include/canvas.js +++ /dev/null @@ -1,783 +0,0 @@ -/* - * noVNC: HTML5 VNC client - * Copyright (C) 2010 Joel Martin - * Licensed under LGPL-3 (see LICENSE.txt) - * - * See README.md for usage and integration instructions. - */ - -"use strict"; -/*jslint browser: true, white: false, bitwise: false */ -/*global window, Util, Base64 */ - -Canvas = function(conf) { - -conf = conf || {}; // Configuration -var that = {}, // Public API interface - - // Private Canvas namespace variables - c_forceCanvas = false, - - c_width = 0, - c_height = 0, - - c_prevStyle = "", - - c_keyPress = null, - c_mouseButton = null, - c_mouseMove = null, - - c_webkit_bug = false, - c_flush_timer = null; - -// Configuration settings -function cdef(v, type, defval, desc) { - Util.conf_default(conf, that, v, type, defval, desc); } - -// Capability settings, default can be overridden -cdef('prefer_js', 'raw', null, 'Prefer Javascript over canvas methods'); -cdef('cursor_uri', 'raw', null, 'Can we render cursor using data URI'); - -cdef('target', 'dom', null, 'Canvas element for VNC viewport'); -cdef('focusContainer', 'dom', document, 'DOM element that traps keyboard input'); -cdef('true_color', 'bool', true, 'Request true color pixel data'); -cdef('focused', 'bool', true, 'Capture and send key strokes'); -cdef('colourMap', 'raw', [], 'Colour map array (not true color)'); -cdef('scale', 'float', 1, 'VNC viewport scale factor'); - -cdef('render_mode', 'str', '', 'Canvas rendering mode (read-only)'); - -// Override some specific getters/setters -that.set_prefer_js = function(val) { - if (val && c_forceCanvas) { - Util.Warn("Preferring Javascript to Canvas ops is not supported"); - return false; - } - conf.prefer_js = val; - return true; -}; - -that.get_colourMap = function(idx) { - if (typeof idx === 'undefined') { - return conf.colourMap; - } else { - return conf.colourMap[idx]; - } -}; - -that.set_colourMap = function(val, idx) { - if (typeof idx === 'undefined') { - conf.colourMap = val; - } else { - conf.colourMap[idx] = val; - } -}; - -that.set_render_mode = function () { throw("render_mode is read-only"); }; - -// Add some other getters/setters -that.get_width = function() { - return c_width; -}; -that.get_height = function() { - return c_height; -}; - - - -// -// Private functions -// - -// Create the public API interface -function constructor() { - Util.Debug(">> Canvas.init"); - - var c, ctx, func, origfunc, imgTest, tval, i, curDat, curSave, - has_imageData = false, UE = Util.Engine; - - if (! conf.target) { throw("target must be set"); } - - if (typeof conf.target === 'string') { - throw("target must be a DOM element"); - } - - c = conf.target; - - if (! c.getContext) { throw("no getContext method"); } - - if (! conf.ctx) { conf.ctx = c.getContext('2d'); } - ctx = conf.ctx; - - Util.Debug("User Agent: " + navigator.userAgent); - if (UE.gecko) { Util.Debug("Browser: gecko " + UE.gecko); } - if (UE.webkit) { Util.Debug("Browser: webkit " + UE.webkit); } - if (UE.trident) { Util.Debug("Browser: trident " + UE.trident); } - if (UE.presto) { Util.Debug("Browser: presto " + UE.presto); } - - that.clear(); - - /* - * Determine browser Canvas feature support - * and select fastest rendering methods - */ - tval = 0; - try { - imgTest = ctx.getImageData(0, 0, 1,1); - imgTest.data[0] = 123; - imgTest.data[3] = 255; - ctx.putImageData(imgTest, 0, 0); - tval = ctx.getImageData(0, 0, 1, 1).data[0]; - if (tval === 123) { - has_imageData = true; - } - } catch (exc1) {} - - if (has_imageData) { - Util.Info("Canvas supports imageData"); - c_forceCanvas = false; - if (ctx.createImageData) { - // If it's there, it's faster - Util.Info("Using Canvas createImageData"); - conf.render_mode = "createImageData rendering"; - that.imageData = that.imageDataCreate; - } else if (ctx.getImageData) { - // I think this is mostly just Opera - Util.Info("Using Canvas getImageData"); - conf.render_mode = "getImageData rendering"; - that.imageData = that.imageDataGet; - } - Util.Info("Prefering javascript operations"); - if (conf.prefer_js === null) { - conf.prefer_js = true; - } - that.rgbxImage = that.rgbxImageData; - that.cmapImage = that.cmapImageData; - } else { - Util.Warn("Canvas lacks imageData, using fillRect (slow)"); - conf.render_mode = "fillRect rendering (slow)"; - c_forceCanvas = true; - conf.prefer_js = false; - that.rgbxImage = that.rgbxImageFill; - that.cmapImage = that.cmapImageFill; - } - - if (UE.webkit && UE.webkit >= 534.7 && UE.webkit <= 534.9) { - // Workaround WebKit canvas rendering bug #46319 - conf.render_mode += ", webkit bug workaround"; - Util.Debug("Working around WebKit bug #46319"); - c_webkit_bug = true; - for (func in {"fillRect":1, "copyImage":1, "rgbxImage":1, - "cmapImage":1, "blitStringImage":1}) { - that[func] = (function() { - var myfunc = that[func]; // Save original function - //Util.Debug("Wrapping " + func); - return function() { - myfunc.apply(this, arguments); - if (!c_flush_timer) { - c_flush_timer = setTimeout(that.flush, 100); - } - }; - })(); - } - } - - /* - * Determine browser support for setting the cursor via data URI - * scheme - */ - curDat = []; - for (i=0; i < 8 * 8 * 4; i += 1) { - curDat.push(255); - } - try { - curSave = c.style.cursor; - that.changeCursor(curDat, curDat, 2, 2, 8, 8); - if (c.style.cursor) { - if (conf.cursor_uri === null) { - conf.cursor_uri = true; - } - Util.Info("Data URI scheme cursor supported"); - } else { - if (conf.cursor_uri === null) { - conf.cursor_uri = false; - } - Util.Warn("Data URI scheme cursor not supported"); - } - c.style.cursor = curSave; - } catch (exc2) { - Util.Error("Data URI scheme cursor test exception: " + exc2); - conf.cursor_uri = false; - } - - conf.focused = true; - - Util.Debug("<< Canvas.init"); - return that ; -} - -function onMouseButton(e, down) { - var evt, pos, bmask; - if (! conf.focused) { - return true; - } - evt = (e ? e : window.event); - pos = Util.getEventPosition(e, conf.target, conf.scale); - bmask = 1 << evt.button; - //Util.Debug('mouse ' + pos.x + "," + pos.y + " down: " + down + " bmask: " + bmask); - if (c_mouseButton) { - c_mouseButton(pos.x, pos.y, down, bmask); - } - Util.stopEvent(e); - return false; -} - -function onMouseDown(e) { - onMouseButton(e, 1); -} - -function onMouseUp(e) { - onMouseButton(e, 0); -} - -function onMouseWheel(e) { - var evt, pos, bmask, wheelData; - evt = (e ? e : window.event); - pos = Util.getEventPosition(e, conf.target, conf.scale); - wheelData = evt.detail ? evt.detail * -1 : evt.wheelDelta / 40; - if (wheelData > 0) { - bmask = 1 << 3; - } else { - bmask = 1 << 4; - } - //Util.Debug('mouse scroll by ' + wheelData + ':' + pos.x + "," + pos.y); - if (c_mouseButton) { - c_mouseButton(pos.x, pos.y, 1, bmask); - c_mouseButton(pos.x, pos.y, 0, bmask); - } - Util.stopEvent(e); - return false; -} - -function onMouseMove(e) { - var evt, pos; - evt = (e ? e : window.event); - pos = Util.getEventPosition(e, conf.target, conf.scale); - //Util.Debug('mouse ' + evt.which + '/' + evt.button + ' up:' + pos.x + "," + pos.y); - if (c_mouseMove) { - c_mouseMove(pos.x, pos.y); - } -} - -function onKeyDown(e) { - //Util.Debug("keydown: " + getKeysym(e)); - if (! conf.focused) { - return true; - } - if (c_keyPress) { - c_keyPress(getKeysym(e), 1, e.ctrlKey, e.shiftKey, e.altKey); - } - Util.stopEvent(e); - return false; -} - -function onKeyUp(e) { - //Util.Debug("keyup: " + getKeysym(e)); - if (! conf.focused) { - return true; - } - if (c_keyPress) { - c_keyPress(getKeysym(e), 0, e.ctrlKey, e.shiftKey, e.altKey); - } - Util.stopEvent(e); - return false; -} - -function onMouseDisable(e) { - var evt, pos; - if (! conf.focused) { - return true; - } - evt = (e ? e : window.event); - pos = Util.getEventPosition(e, conf.target, conf.scale); - /* Stop propagation if inside canvas area */ - if ((pos.x >= 0) && (pos.y >= 0) && - (pos.x < c_width) && (pos.y < c_height)) { - //Util.Debug("mouse event disabled"); - Util.stopEvent(e); - return false; - } - //Util.Debug("mouse event not disabled"); - return true; -} - -// -// Public API interface functions -// - -that.getContext = function () { - return conf.ctx; -}; - -that.start = function(keyPressFunc, mouseButtonFunc, mouseMoveFunc) { - var c; - Util.Debug(">> Canvas.start"); - - c = conf.target; - c_keyPress = keyPressFunc || null; - c_mouseButton = mouseButtonFunc || null; - c_mouseMove = mouseMoveFunc || null; - - Util.addEvent(conf.focusContainer, 'keydown', onKeyDown); - Util.addEvent(conf.focusContainer, 'keyup', onKeyUp); - Util.addEvent(c, 'mousedown', onMouseDown); - Util.addEvent(c, 'mouseup', onMouseUp); - Util.addEvent(c, 'mousemove', onMouseMove); - Util.addEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', - onMouseWheel); - - /* Work around right and middle click browser behaviors */ - Util.addEvent(conf.focusContainer, 'click', onMouseDisable); - Util.addEvent(conf.focusContainer.body, 'contextmenu', onMouseDisable); - - Util.Debug("<< Canvas.start"); -}; - -that.rescale = function(factor) { - var c, tp, x, y, - properties = ['transform', 'WebkitTransform', 'MozTransform', null]; - c = conf.target; - tp = properties.shift(); - while (tp) { - if (typeof c.style[tp] !== 'undefined') { - break; - } - tp = properties.shift(); - } - - if (tp === null) { - Util.Debug("No scaling support"); - return; - } - - if (conf.scale === factor) { - //Util.Debug("Canvas already scaled to '" + factor + "'"); - return; - } - - conf.scale = factor; - x = c.width - c.width * factor; - y = c.height - c.height * factor; - c.style[tp] = "scale(" + conf.scale + ") translate(-" + x + "px, -" + y + "px)"; -}; - -that.resize = function(width, height, true_color) { - var c = conf.target; - - if (typeof true_color !== "undefined") { - conf.true_color = true_color; - } - c_prevStyle = ""; - - c.width = width; - c.height = height; - - c_width = c.offsetWidth; - c_height = c.offsetHeight; - - that.rescale(conf.scale); -}; - -that.clear = function() { - that.resize(640, 20); - conf.ctx.clearRect(0, 0, c_width, c_height); -}; - -that.stop = function() { - var c = conf.target; - Util.removeEvent(conf.focusContainer, 'keydown', onKeyDown); - Util.removeEvent(conf.focusContainer, 'keyup', onKeyUp); - Util.removeEvent(c, 'mousedown', onMouseDown); - Util.removeEvent(c, 'mouseup', onMouseUp); - Util.removeEvent(c, 'mousemove', onMouseMove); - Util.removeEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', - onMouseWheel); - - /* Work around right and middle click browser behaviors */ - Util.removeEvent(conf.focusContainer, 'click', onMouseDisable); - Util.removeEvent(conf.focusContainer.body, 'contextmenu', onMouseDisable); - - // Turn off cursor rendering - if (conf.cursor_uri) { - c.style.cursor = "default"; - } -}; - -that.flush = function() { - var old_val; - //Util.Debug(">> flush"); - // Force canvas redraw (for webkit bug #46319 workaround) - old_val = conf.target.style.marginRight; - conf.target.style.marginRight = "1px"; - c_flush_timer = null; - setTimeout(function () { - conf.target.style.marginRight = old_val; - }, 1); -}; - -that.setFillColor = function(color) { - var rgb, newStyle; - if (conf.true_color) { - rgb = color; - } else { - rgb = conf.colourMap[color[0]]; - } - newStyle = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; - if (newStyle !== c_prevStyle) { - conf.ctx.fillStyle = newStyle; - c_prevStyle = newStyle; - } -}; - -that.fillRect = function(x, y, width, height, color) { - that.setFillColor(color); - conf.ctx.fillRect(x, y, width, height); -}; - -that.copyImage = function(old_x, old_y, new_x, new_y, width, height) { - conf.ctx.drawImage(conf.target, old_x, old_y, width, height, - new_x, new_y, width, height); -}; - -/* - * Tile rendering functions optimized for rendering engines. - * - * - In Chrome/webkit, Javascript image data array manipulations are - * faster than direct Canvas fillStyle, fillRect rendering. In - * gecko, Javascript array handling is much slower. - */ -that.getTile = function(x, y, width, height, color) { - var img, data = [], p, rgb, red, green, blue, j, i; - img = {'x': x, 'y': y, 'width': width, 'height': height, - 'data': data}; - if (conf.prefer_js) { - if (conf.true_color) { - rgb = color; - } else { - rgb = conf.colourMap[color[0]]; - } - red = rgb[0]; - green = rgb[1]; - blue = rgb[2]; - for (i = 0; i < (width * height * 4); i+=4) { - data[i ] = red; - data[i + 1] = green; - data[i + 2] = blue; - } - } else { - that.fillRect(x, y, width, height, color); - } - return img; -}; - -that.setSubTile = function(img, x, y, w, h, color) { - var data, p, rgb, red, green, blue, width, j, i, xend, yend; - if (conf.prefer_js) { - data = img.data; - width = img.width; - if (conf.true_color) { - rgb = color; - } else { - rgb = conf.colourMap[color[0]]; - } - red = rgb[0]; - green = rgb[1]; - blue = rgb[2]; - xend = x + w; - yend = y + h; - for (j = y; j < yend; j += 1) { - for (i = x; i < xend; i += 1) { - p = (i + (j * width) ) * 4; - data[p ] = red; - data[p + 1] = green; - data[p + 2] = blue; - } - } - } else { - that.fillRect(img.x + x, img.y + y, w, h, color); - } -}; - -that.putTile = function(img) { - if (conf.prefer_js) { - that.rgbxImage(img.x, img.y, img.width, img.height, img.data, 0); - } else { - // No-op, under gecko already done by setSubTile - } -}; - -that.imageDataGet = function(width, height) { - return conf.ctx.getImageData(0, 0, width, height); -}; -that.imageDataCreate = function(width, height) { - return conf.ctx.createImageData(width, height); -}; - -that.rgbxImageData = function(x, y, width, height, arr, offset) { - var img, i, j, data; - img = that.imageData(width, height); - data = img.data; - for (i=0, j=offset; i < (width * height * 4); i=i+4, j=j+4) { - data[i + 0] = arr[j + 0]; - data[i + 1] = arr[j + 1]; - data[i + 2] = arr[j + 2]; - data[i + 3] = 255; // Set Alpha - } - conf.ctx.putImageData(img, x, y); -}; - -// really slow fallback if we don't have imageData -that.rgbxImageFill = function(x, y, width, height, arr, offset) { - var i, j, sx = 0, sy = 0; - for (i=0, j=offset; i < (width * height); i+=1, j+=4) { - that.fillRect(x+sx, y+sy, 1, 1, [arr[j+0], arr[j+1], arr[j+2]]); - sx += 1; - if ((sx % width) === 0) { - sx = 0; - sy += 1; - } - } -}; - -that.cmapImageData = function(x, y, width, height, arr, offset) { - var img, i, j, data, rgb, cmap; - img = that.imageData(width, height); - data = img.data; - cmap = conf.colourMap; - for (i=0, j=offset; i < (width * height * 4); i+=4, j+=1) { - rgb = cmap[arr[j]]; - data[i + 0] = rgb[0]; - data[i + 1] = rgb[1]; - data[i + 2] = rgb[2]; - data[i + 3] = 255; // Set Alpha - } - conf.ctx.putImageData(img, x, y); -}; - -that.cmapImageFill = function(x, y, width, height, arr, offset) { - var i, j, sx = 0, sy = 0, cmap; - cmap = conf.colourMap; - for (i=0, j=offset; i < (width * height); i+=1, j+=1) { - that.fillRect(x+sx, y+sy, 1, 1, [arr[j]]); - sx += 1; - if ((sx % width) === 0) { - sx = 0; - sy += 1; - } - } -}; - - -that.blitImage = function(x, y, width, height, arr, offset) { - if (conf.true_color) { - that.rgbxImage(x, y, width, height, arr, offset); - } else { - that.cmapImage(x, y, width, height, arr, offset); - } -}; - -that.blitStringImage = function(str, x, y) { - var img = new Image(); - img.onload = function () { conf.ctx.drawImage(img, x, y); }; - img.src = str; -}; - -that.changeCursor = function(pixels, mask, hotx, hoty, w, h) { - var cur = [], cmap, rgb, IHDRsz, ANDsz, XORsz, url, idx, alpha, x, y; - //Util.Debug(">> changeCursor, x: " + hotx + ", y: " + hoty + ", w: " + w + ", h: " + h); - - if (conf.cursor_uri === false) { - Util.Warn("changeCursor called but no cursor data URI support"); - return; - } - - // Push multi-byte little-endian values - cur.push16le = function (num) { - this.push((num ) & 0xFF, - (num >> 8) & 0xFF ); - }; - cur.push32le = function (num) { - this.push((num ) & 0xFF, - (num >> 8) & 0xFF, - (num >> 16) & 0xFF, - (num >> 24) & 0xFF ); - }; - - cmap = conf.colourMap; - IHDRsz = 40; - ANDsz = w * h * 4; - XORsz = Math.ceil( (w * h) / 8.0 ); - - // Main header - cur.push16le(0); // Reserved - cur.push16le(2); // .CUR type - cur.push16le(1); // Number of images, 1 for non-animated ico - - // Cursor #1 header - cur.push(w); // width - cur.push(h); // height - cur.push(0); // colors, 0 -> true-color - cur.push(0); // reserved - cur.push16le(hotx); // hotspot x coordinate - cur.push16le(hoty); // hotspot y coordinate - cur.push32le(IHDRsz + XORsz + ANDsz); // cursor data byte size - cur.push32le(22); // offset of cursor data in the file - - // Cursor #1 InfoHeader - cur.push32le(IHDRsz); // Infoheader size - cur.push32le(w); // Cursor width - cur.push32le(h*2); // XOR+AND height - cur.push16le(1); // number of planes - cur.push16le(32); // bits per pixel - cur.push32le(0); // Type of compression - cur.push32le(XORsz + ANDsz); // Size of Image - cur.push32le(0); - cur.push32le(0); - cur.push32le(0); - cur.push32le(0); - - // XOR/color data - for (y = h-1; y >= 0; y -= 1) { - for (x = 0; x < w; x += 1) { - idx = y * Math.ceil(w / 8) + Math.floor(x/8); - alpha = (mask[idx] << (x % 8)) & 0x80 ? 255 : 0; - - if (conf.true_color) { - idx = ((w * y) + x) * 4; - cur.push(pixels[idx + 2]); // blue - cur.push(pixels[idx + 1]); // green - cur.push(pixels[idx + 0]); // red - cur.push(alpha); // red - } else { - idx = (w * y) + x; - rgb = cmap[pixels[idx]]; - cur.push(rgb[2]); // blue - cur.push(rgb[1]); // green - cur.push(rgb[0]); // red - cur.push(alpha); // alpha - } - } - } - - // AND/bitmask data (ignored, just needs to be right size) - for (y = 0; y < h; y += 1) { - for (x = 0; x < Math.ceil(w / 8); x += 1) { - cur.push(0x00); - } - } - - url = "data:image/x-icon;base64," + Base64.encode(cur); - conf.target.style.cursor = "url(" + url + ") " + hotx + " " + hoty + ", default"; - //Util.Debug("<< changeCursor, cur.length: " + cur.length); -}; - - - -return constructor(); // Return the public API interface - -} // End of Canvas() - - -/* Translate DOM key down/up event to keysym value */ -function getKeysym(e) { - var evt, keysym; - evt = (e ? e : window.event); - - /* Remap modifier and special keys */ - switch ( evt.keyCode ) { - case 8 : keysym = 0xFF08; break; // BACKSPACE - case 9 : keysym = 0xFF09; break; // TAB - case 13 : keysym = 0xFF0D; break; // ENTER - case 27 : keysym = 0xFF1B; break; // ESCAPE - case 45 : keysym = 0xFF63; break; // INSERT - case 46 : keysym = 0xFFFF; break; // DELETE - case 36 : keysym = 0xFF50; break; // HOME - case 35 : keysym = 0xFF57; break; // END - case 33 : keysym = 0xFF55; break; // PAGE_UP - case 34 : keysym = 0xFF56; break; // PAGE_DOWN - case 37 : keysym = 0xFF51; break; // LEFT - case 38 : keysym = 0xFF52; break; // UP - case 39 : keysym = 0xFF53; break; // RIGHT - case 40 : keysym = 0xFF54; break; // DOWN - case 112 : keysym = 0xFFBE; break; // F1 - case 113 : keysym = 0xFFBF; break; // F2 - case 114 : keysym = 0xFFC0; break; // F3 - case 115 : keysym = 0xFFC1; break; // F4 - case 116 : keysym = 0xFFC2; break; // F5 - case 117 : keysym = 0xFFC3; break; // F6 - case 118 : keysym = 0xFFC4; break; // F7 - case 119 : keysym = 0xFFC5; break; // F8 - case 120 : keysym = 0xFFC6; break; // F9 - case 121 : keysym = 0xFFC7; break; // F10 - case 122 : keysym = 0xFFC8; break; // F11 - case 123 : keysym = 0xFFC9; break; // F12 - case 16 : keysym = 0xFFE1; break; // SHIFT - case 17 : keysym = 0xFFE3; break; // CONTROL - //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option) - case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command) - default : keysym = evt.keyCode; break; - } - - /* Remap symbols */ - switch (keysym) { - case 186 : keysym = 59; break; // ; (IE) - case 187 : keysym = 61; break; // = (IE) - case 188 : keysym = 44; break; // , (Mozilla, IE) - case 109 : // - (Mozilla) - if (Util.Engine.gecko) { - keysym = 45; } - break; - case 189 : keysym = 45; break; // - (IE) - case 190 : keysym = 46; break; // . (Mozilla, IE) - case 191 : keysym = 47; break; // / (Mozilla, IE) - case 192 : keysym = 96; break; // ` (Mozilla, IE) - case 219 : keysym = 91; break; // [ (Mozilla, IE) - case 220 : keysym = 92; break; // \ (Mozilla, IE) - case 221 : keysym = 93; break; // ] (Mozilla, IE) - case 222 : keysym = 39; break; // ' (Mozilla, IE) - } - - /* Remap shifted and unshifted keys */ - if (!!evt.shiftKey) { - switch (keysym) { - case 48 : keysym = 41 ; break; // ) (shifted 0) - case 49 : keysym = 33 ; break; // ! (shifted 1) - case 50 : keysym = 64 ; break; // @ (shifted 2) - case 51 : keysym = 35 ; break; // # (shifted 3) - case 52 : keysym = 36 ; break; // $ (shifted 4) - case 53 : keysym = 37 ; break; // % (shifted 5) - case 54 : keysym = 94 ; break; // ^ (shifted 6) - case 55 : keysym = 38 ; break; // & (shifted 7) - case 56 : keysym = 42 ; break; // * (shifted 8) - case 57 : keysym = 40 ; break; // ( (shifted 9) - - case 59 : keysym = 58 ; break; // : (shifted `) - case 61 : keysym = 43 ; break; // + (shifted ;) - case 44 : keysym = 60 ; break; // < (shifted ,) - case 45 : keysym = 95 ; break; // _ (shifted -) - case 46 : keysym = 62 ; break; // > (shifted .) - case 47 : keysym = 63 ; break; // ? (shifted /) - case 96 : keysym = 126; break; // ~ (shifted `) - case 91 : keysym = 123; break; // { (shifted [) - case 92 : keysym = 124; break; // | (shifted \) - case 93 : keysym = 125; break; // } (shifted ]) - case 39 : keysym = 34 ; break; // " (shifted ') - } - } else if ((keysym >= 65) && (keysym <=90)) { - /* Remap unshifted A-Z */ - keysym += 32; - } - - return keysym; -} - diff --git a/include/des.js b/include/des.js deleted file mode 100644 index 1f95285..0000000 --- a/include/des.js +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Ported from Flashlight VNC ActionScript implementation: - * http://www.wizhelp.com/flashlight-vnc/ - * - * Full attribution follows: - * - * ------------------------------------------------------------------------- - * - * This DES class has been extracted from package Acme.Crypto for use in VNC. - * The unnecessary odd parity code has been removed. - * - * These changes are: - * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - - * DesCipher - the DES encryption method - * - * The meat of this code is by Dave Zimmerman , and is: - * - * Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved. - * - * Permission to use, copy, modify, and distribute this software - * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and - * without fee is hereby granted, provided that this copyright notice is kept - * intact. - * - * WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY - * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED - * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE - * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. - * - * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE - * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE - * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT - * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE - * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE - * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE - * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). WIDGET WORKSHOP - * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR - * HIGH RISK ACTIVITIES. - * - * - * The rest is: - * - * Copyright (C) 1996 by Jef Poskanzer . All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Visit the ACME Labs Java page for up-to-date versions of this and other - * fine Java utilities: http://www.acme.com/java/ - */ - -"use strict"; -/*jslint white: false, bitwise: false, plusplus: false */ - -function DES(passwd) { - -// Tables, permutations, S-boxes, etc. -var PC2 = [13,16,10,23, 0, 4, 2,27,14, 5,20, 9,22,18,11, 3, - 25, 7,15, 6,26,19,12, 1,40,51,30,36,46,54,29,39, - 50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31 ], - totrot = [ 1, 2, 4, 6, 8,10,12,14,15,17,19,21,23,25,27,28], - z = 0x0, a,b,c,d,e,f, SP1,SP2,SP3,SP4,SP5,SP6,SP7,SP8, - keys = []; - -a=1<<16; b=1<<24; c=a|b; d=1<<2; e=1<<10; f=d|e; -SP1 = [c|e,z|z,a|z,c|f,c|d,a|f,z|d,a|z,z|e,c|e,c|f,z|e,b|f,c|d,b|z,z|d, - z|f,b|e,b|e,a|e,a|e,c|z,c|z,b|f,a|d,b|d,b|d,a|d,z|z,z|f,a|f,b|z, - a|z,c|f,z|d,c|z,c|e,b|z,b|z,z|e,c|d,a|z,a|e,b|d,z|e,z|d,b|f,a|f, - c|f,a|d,c|z,b|f,b|d,z|f,a|f,c|e,z|f,b|e,b|e,z|z,a|d,a|e,z|z,c|d]; -a=1<<20; b=1<<31; c=a|b; d=1<<5; e=1<<15; f=d|e; -SP2 = [c|f,b|e,z|e,a|f,a|z,z|d,c|d,b|f,b|d,c|f,c|e,b|z,b|e,a|z,z|d,c|d, - a|e,a|d,b|f,z|z,b|z,z|e,a|f,c|z,a|d,b|d,z|z,a|e,z|f,c|e,c|z,z|f, - z|z,a|f,c|d,a|z,b|f,c|z,c|e,z|e,c|z,b|e,z|d,c|f,a|f,z|d,z|e,b|z, - z|f,c|e,a|z,b|d,a|d,b|f,b|d,a|d,a|e,z|z,b|e,z|f,b|z,c|d,c|f,a|e]; -a=1<<17; b=1<<27; c=a|b; d=1<<3; e=1<<9; f=d|e; -SP3 = [z|f,c|e,z|z,c|d,b|e,z|z,a|f,b|e,a|d,b|d,b|d,a|z,c|f,a|d,c|z,z|f, - b|z,z|d,c|e,z|e,a|e,c|z,c|d,a|f,b|f,a|e,a|z,b|f,z|d,c|f,z|e,b|z, - c|e,b|z,a|d,z|f,a|z,c|e,b|e,z|z,z|e,a|d,c|f,b|e,b|d,z|e,z|z,c|d, - b|f,a|z,b|z,c|f,z|d,a|f,a|e,b|d,c|z,b|f,z|f,c|z,a|f,z|d,c|d,a|e]; -a=1<<13; b=1<<23; c=a|b; d=1<<0; e=1<<7; f=d|e; -SP4 = [c|d,a|f,a|f,z|e,c|e,b|f,b|d,a|d,z|z,c|z,c|z,c|f,z|f,z|z,b|e,b|d, - z|d,a|z,b|z,c|d,z|e,b|z,a|d,a|e,b|f,z|d,a|e,b|e,a|z,c|e,c|f,z|f, - b|e,b|d,c|z,c|f,z|f,z|z,z|z,c|z,a|e,b|e,b|f,z|d,c|d,a|f,a|f,z|e, - c|f,z|f,z|d,a|z,b|d,a|d,c|e,b|f,a|d,a|e,b|z,c|d,z|e,b|z,a|z,c|e]; -a=1<<25; b=1<<30; c=a|b; d=1<<8; e=1<<19; f=d|e; -SP5 = [z|d,a|f,a|e,c|d,z|e,z|d,b|z,a|e,b|f,z|e,a|d,b|f,c|d,c|e,z|f,b|z, - a|z,b|e,b|e,z|z,b|d,c|f,c|f,a|d,c|e,b|d,z|z,c|z,a|f,a|z,c|z,z|f, - z|e,c|d,z|d,a|z,b|z,a|e,c|d,b|f,a|d,b|z,c|e,a|f,b|f,z|d,a|z,c|e, - c|f,z|f,c|z,c|f,a|e,z|z,b|e,c|z,z|f,a|d,b|d,z|e,z|z,b|e,a|f,b|d]; -a=1<<22; b=1<<29; c=a|b; d=1<<4; e=1<<14; f=d|e; -SP6 = [b|d,c|z,z|e,c|f,c|z,z|d,c|f,a|z,b|e,a|f,a|z,b|d,a|d,b|e,b|z,z|f, - z|z,a|d,b|f,z|e,a|e,b|f,z|d,c|d,c|d,z|z,a|f,c|e,z|f,a|e,c|e,b|z, - b|e,z|d,c|d,a|e,c|f,a|z,z|f,b|d,a|z,b|e,b|z,z|f,b|d,c|f,a|e,c|z, - a|f,c|e,z|z,c|d,z|d,z|e,c|z,a|f,z|e,a|d,b|f,z|z,c|e,b|z,a|d,b|f]; -a=1<<21; b=1<<26; c=a|b; d=1<<1; e=1<<11; f=d|e; -SP7 = [a|z,c|d,b|f,z|z,z|e,b|f,a|f,c|e,c|f,a|z,z|z,b|d,z|d,b|z,c|d,z|f, - b|e,a|f,a|d,b|e,b|d,c|z,c|e,a|d,c|z,z|e,z|f,c|f,a|e,z|d,b|z,a|e, - b|z,a|e,a|z,b|f,b|f,c|d,c|d,z|d,a|d,b|z,b|e,a|z,c|e,z|f,a|f,c|e, - z|f,b|d,c|f,c|z,a|e,z|z,z|d,c|f,z|z,a|f,c|z,z|e,b|d,b|e,z|e,a|d]; -a=1<<18; b=1<<28; c=a|b; d=1<<6; e=1<<12; f=d|e; -SP8 = [b|f,z|e,a|z,c|f,b|z,b|f,z|d,b|z,a|d,c|z,c|f,a|e,c|e,a|f,z|e,z|d, - c|z,b|d,b|e,z|f,a|e,a|d,c|d,c|e,z|f,z|z,z|z,c|d,b|d,b|e,a|f,a|z, - a|f,a|z,c|e,z|e,z|d,c|d,z|e,a|f,b|e,z|d,b|d,c|z,c|d,b|z,a|z,b|f, - z|z,c|f,a|d,b|d,c|z,b|e,b|f,z|z,c|f,a|e,a|e,z|f,z|f,a|d,b|z,c|e]; - -// Set the key. -function setKeys(keyBlock) { - var i, j, l, m, n, o, pc1m = [], pcr = [], kn = [], - raw0, raw1, rawi, KnLi; - - for (j = 0, l = 56; j < 56; ++j, l-=8) { - l += l<-5 ? 65 : l<-3 ? 31 : l<-1 ? 63 : l===27 ? 35 : 0; // PC1 - m = l & 0x7; - pc1m[j] = ((keyBlock[l >>> 3] & (1<>> 10; - keys[KnLi] |= (raw1 & 0x00000fc0) >>> 6; - ++KnLi; - keys[KnLi] = (raw0 & 0x0003f000) << 12; - keys[KnLi] |= (raw0 & 0x0000003f) << 16; - keys[KnLi] |= (raw1 & 0x0003f000) >>> 4; - keys[KnLi] |= (raw1 & 0x0000003f); - ++KnLi; - } -} - -// Encrypt 8 bytes of text -function enc8(text) { - var i = 0, b = text.slice(), fval, keysi = 0, - l, r, x; // left, right, accumulator - - // Squash 8 bytes to 2 ints - l = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++]; - r = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++]; - - x = ((l >>> 4) ^ r) & 0x0f0f0f0f; - r ^= x; - l ^= (x << 4); - x = ((l >>> 16) ^ r) & 0x0000ffff; - r ^= x; - l ^= (x << 16); - x = ((r >>> 2) ^ l) & 0x33333333; - l ^= x; - r ^= (x << 2); - x = ((r >>> 8) ^ l) & 0x00ff00ff; - l ^= x; - r ^= (x << 8); - r = (r << 1) | ((r >>> 31) & 1); - x = (l ^ r) & 0xaaaaaaaa; - l ^= x; - r ^= x; - l = (l << 1) | ((l >>> 31) & 1); - - for (i = 0; i < 8; ++i) { - x = (r << 28) | (r >>> 4); - x ^= keys[keysi++]; - fval = SP7[x & 0x3f]; - fval |= SP5[(x >>> 8) & 0x3f]; - fval |= SP3[(x >>> 16) & 0x3f]; - fval |= SP1[(x >>> 24) & 0x3f]; - x = r ^ keys[keysi++]; - fval |= SP8[x & 0x3f]; - fval |= SP6[(x >>> 8) & 0x3f]; - fval |= SP4[(x >>> 16) & 0x3f]; - fval |= SP2[(x >>> 24) & 0x3f]; - l ^= fval; - x = (l << 28) | (l >>> 4); - x ^= keys[keysi++]; - fval = SP7[x & 0x3f]; - fval |= SP5[(x >>> 8) & 0x3f]; - fval |= SP3[(x >>> 16) & 0x3f]; - fval |= SP1[(x >>> 24) & 0x3f]; - x = l ^ keys[keysi++]; - fval |= SP8[x & 0x0000003f]; - fval |= SP6[(x >>> 8) & 0x3f]; - fval |= SP4[(x >>> 16) & 0x3f]; - fval |= SP2[(x >>> 24) & 0x3f]; - r ^= fval; - } - - r = (r << 31) | (r >>> 1); - x = (l ^ r) & 0xaaaaaaaa; - l ^= x; - r ^= x; - l = (l << 31) | (l >>> 1); - x = ((l >>> 8) ^ r) & 0x00ff00ff; - r ^= x; - l ^= (x << 8); - x = ((l >>> 2) ^ r) & 0x33333333; - r ^= x; - l ^= (x << 2); - x = ((r >>> 16) ^ l) & 0x0000ffff; - l ^= x; - r ^= (x << 16); - x = ((r >>> 4) ^ l) & 0x0f0f0f0f; - l ^= x; - r ^= (x << 4); - - // Spread ints to bytes - x = [r, l]; - for (i = 0; i < 8; i++) { - b[i] = (x[i>>>2] >>> (8*(3 - (i%4)))) % 256; - if (b[i] < 0) { b[i] += 256; } // unsigned - } - return b; -} - -// Encrypt 16 bytes of text using passwd as key -function encrypt(t) { - return enc8(t.slice(0,8)).concat(enc8(t.slice(8,16))); -} - -setKeys(passwd); // Setup keys -return {'encrypt': encrypt}; // Public interface - -} // function DES diff --git a/include/keysym.js b/include/keysym.js new file mode 100644 index 0000000..b24ac88 --- /dev/null +++ b/include/keysym.js @@ -0,0 +1,99 @@ +/* + * from noVNC: HTML5 VNC client + * Copyright (C) 2010 Joel Martin + * Licensed under LGPL-3 (see LICENSE.txt) + */ + +/* Translate DOM key down/up event to keysym value */ +function getKeysym(e) { + var evt, keysym; + evt = (e ? e : window.event); + + /* Remap modifier and special keys */ + switch ( evt.keyCode ) { + case 8 : keysym = 0xFF08; break; // BACKSPACE + case 9 : keysym = 0xFF09; break; // TAB + case 13 : keysym = 0xFF0D; break; // ENTER + case 27 : keysym = 0xFF1B; break; // ESCAPE + case 45 : keysym = 0xFF63; break; // INSERT + case 46 : keysym = 0xFFFF; break; // DELETE + case 36 : keysym = 0xFF50; break; // HOME + case 35 : keysym = 0xFF57; break; // END + case 33 : keysym = 0xFF55; break; // PAGE_UP + case 34 : keysym = 0xFF56; break; // PAGE_DOWN + case 37 : keysym = 0xFF51; break; // LEFT + case 38 : keysym = 0xFF52; break; // UP + case 39 : keysym = 0xFF53; break; // RIGHT + case 40 : keysym = 0xFF54; break; // DOWN + case 112 : keysym = 0xFFBE; break; // F1 + case 113 : keysym = 0xFFBF; break; // F2 + case 114 : keysym = 0xFFC0; break; // F3 + case 115 : keysym = 0xFFC1; break; // F4 + case 116 : keysym = 0xFFC2; break; // F5 + case 117 : keysym = 0xFFC3; break; // F6 + case 118 : keysym = 0xFFC4; break; // F7 + case 119 : keysym = 0xFFC5; break; // F8 + case 120 : keysym = 0xFFC6; break; // F9 + case 121 : keysym = 0xFFC7; break; // F10 + case 122 : keysym = 0xFFC8; break; // F11 + case 123 : keysym = 0xFFC9; break; // F12 + case 16 : keysym = 0xFFE1; break; // SHIFT + case 17 : keysym = 0xFFE3; break; // CONTROL + //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option) + case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command) + default : keysym = evt.keyCode; break; + } + + /* Remap symbols */ + switch (keysym) { + case 186 : keysym = 59; break; // ; (IE) + case 187 : keysym = 61; break; // = (IE) + case 188 : keysym = 44; break; // , (Mozilla, IE) + case 109 : // - (Mozilla) + if (Util.Engine.gecko) { + keysym = 45; } + break; + case 189 : keysym = 45; break; // - (IE) + case 190 : keysym = 46; break; // . (Mozilla, IE) + case 191 : keysym = 47; break; // / (Mozilla, IE) + case 192 : keysym = 96; break; // ` (Mozilla, IE) + case 219 : keysym = 91; break; // [ (Mozilla, IE) + case 220 : keysym = 92; break; // \ (Mozilla, IE) + case 221 : keysym = 93; break; // ] (Mozilla, IE) + case 222 : keysym = 39; break; // ' (Mozilla, IE) + } + + /* Remap shifted and unshifted keys */ + if (!!evt.shiftKey) { + switch (keysym) { + case 48 : keysym = 41 ; break; // ) (shifted 0) + case 49 : keysym = 33 ; break; // ! (shifted 1) + case 50 : keysym = 64 ; break; // @ (shifted 2) + case 51 : keysym = 35 ; break; // # (shifted 3) + case 52 : keysym = 36 ; break; // $ (shifted 4) + case 53 : keysym = 37 ; break; // % (shifted 5) + case 54 : keysym = 94 ; break; // ^ (shifted 6) + case 55 : keysym = 38 ; break; // & (shifted 7) + case 56 : keysym = 42 ; break; // * (shifted 8) + case 57 : keysym = 40 ; break; // ( (shifted 9) + + case 59 : keysym = 58 ; break; // : (shifted `) + case 61 : keysym = 43 ; break; // + (shifted ;) + case 44 : keysym = 60 ; break; // < (shifted ,) + case 45 : keysym = 95 ; break; // _ (shifted -) + case 46 : keysym = 62 ; break; // > (shifted .) + case 47 : keysym = 63 ; break; // ? (shifted /) + case 96 : keysym = 126; break; // ~ (shifted `) + case 91 : keysym = 123; break; // { (shifted [) + case 92 : keysym = 124; break; // | (shifted \) + case 93 : keysym = 125; break; // } (shifted ]) + case 39 : keysym = 34 ; break; // " (shifted ') + } + } else if ((keysym >= 65) && (keysym <=90)) { + /* Remap unshifted A-Z */ + keysym += 32; + } + + return keysym; +} + diff --git a/include/plain.css b/include/plain.css deleted file mode 100644 index d8ee942..0000000 --- a/include/plain.css +++ /dev/null @@ -1,97 +0,0 @@ -#VNC_controls { - overflow: hidden; -} -#VNC_controls ul { - list-style: none; - margin: 0; - padding: 0; -} -#VNC_controls li { - float: left; - margin-right: 15px; -} - -#VNC_host { - width: 100; -} -#VNC_port { - width: 50; -} -#VNC_password { - width: 80; -} -#VNC_encrypt { -} -#VNC_connectTimeout { - width: 30; -} -#VNC_connect_button { - width: 110px; -} - -#VNC_status_bar td { - margin-top: 15px; - padding: 0px; - margin: 0px; -} -#VNC_status_bar div { - font-size: 12px; - margin: 0px; - padding: 0px; -} -.VNC_status_button { - font-size: 10px; - margin: 0px; - padding: 0px; -} -#VNC_status { - text-align: center; -} -#VNC_settings_menu { - display: none; - position: absolute; - width: 12em; - border: 1px solid #888; - background-color: #f0f2f6; - padding: 5px; margin: 3px; - z-index: 100; opacity: 1; - text-align: left; white-space: normal; -} -#VNC_settings_menu ul { - list-style: none; - margin: 0; - padding: 0; -} - -.VNC_buttons_right { - text-align: right; -} -.VNC_buttons_left { - text-align: left; -} -.VNC_status_normal { - background: #eee; -} -.VNC_status_error { - background: #f44; -} -.VNC_status_warn { - background: #ff4; -} - -/* Do not set width/height for VNC_screen or VNC_canvas or incorrect - * scaling will occur. Canvas resizes to remote VNC settings */ -#VNC_screen { - text-align: center; - display: table; -} -#VNC_canvas { - background: #eee; -} - -#VNC_clipboard_clear_button { -} -#VNC_clipboard_text { - font-size: 9; -} - diff --git a/include/playback.js b/include/playback.js deleted file mode 100644 index 4a8106b..0000000 --- a/include/playback.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * noVNC: HTML5 VNC client - * Copyright (C) 2010 Joel Martin - * Licensed under LGPL-3 (see LICENSE.LGPL-3) - */ - -"use strict"; -/*jslint browser: true, white: false */ -/*global Util, VNC_frame_data, finish */ - -var rfb, mode, test_state, frame_idx, frame_length, - iteration, iterations, istart_time, - - // Pre-declarations for jslint - send_array, next_iteration, queue_next_packet, do_packet; - -// Override send_array -send_array = function (arr) { - // Stub out send_array -}; - -next_iteration = function () { - if (iteration === 0) { - frame_length = VNC_frame_data.length; - test_state = 'running'; - } else { - rfb.disconnect(); - } - - if (test_state !== 'running') { return; } - - iteration += 1; - if (iteration > iterations) { - finish(); - return; - } - - frame_idx = 0; - istart_time = (new Date()).getTime(); - rfb.connect('test', 0, "bogus"); - - queue_next_packet(); - -}; - -queue_next_packet = function () { - var frame, foffset, toffset, delay; - if (test_state !== 'running') { return; } - - frame = VNC_frame_data[frame_idx]; - while ((frame_idx < frame_length) && (frame.charAt(0) === "}")) { - //Util.Debug("Send frame " + frame_idx); - frame_idx += 1; - frame = VNC_frame_data[frame_idx]; - } - - if (frame === 'EOF') { - Util.Debug("Finished, found EOF"); - next_iteration(); - return; - } - if (frame_idx >= frame_length) { - Util.Debug("Finished, no more frames"); - next_iteration(); - return; - } - - if (mode === 'realtime') { - foffset = frame.slice(1, frame.indexOf('{', 1)); - toffset = (new Date()).getTime() - istart_time; - delay = foffset - toffset; - if (delay < 1) { - delay = 1; - } - - setTimeout(do_packet, delay); - } else { - setTimeout(do_packet, 1); - } -}; - -do_packet = function () { - //Util.Debug("Processing frame: " + frame_idx); - var frame = VNC_frame_data[frame_idx]; - rfb.recv_message({'data' : frame.slice(frame.indexOf('{', 1) + 1)}); - frame_idx += 1; - - queue_next_packet(); -}; - diff --git a/include/rfb.js b/include/rfb.js deleted file mode 100644 index 6adccd4..0000000 --- a/include/rfb.js +++ /dev/null @@ -1,1622 +0,0 @@ -/* - * noVNC: HTML5 VNC client - * Copyright (C) 2010 Joel Martin - * Licensed under LGPL-3 (see LICENSE.txt) - * - * See README.md for usage and integration instructions. - */ - -"use strict"; -/*jslint white: false, browser: true, bitwise: false, plusplus: false */ -/*global window, WebSocket, Util, Canvas, VNC_native_ws, Base64, DES */ - - -function RFB(conf) { - -conf = conf || {}; // Configuration -var that = {}, // Public API interface - - // Pre-declare private functions used before definitions (jslint) - init_vars, updateState, init_msg, normal_msg, recv_message, - framebufferUpdate, print_stats, - - pixelFormat, clientEncodings, fbUpdateRequest, - keyEvent, pointerEvent, clientCutText, - - extract_data_uri, scan_tight_imgQ, - - send_array, checkEvents, // Overridable for testing - - - // - // Private RFB namespace variables - // - rfb_host = '', - rfb_port = 5900, - rfb_password = '', - - rfb_state = 'disconnected', - rfb_version = 0, - rfb_max_version= 3.8, - rfb_auth_scheme= '', - - - // In preference order - encodings = [ - ['COPYRECT', 0x01 ], - ['TIGHT_PNG', -260 ], - ['HEXTILE', 0x05 ], - ['RRE', 0x02 ], - ['RAW', 0x00 ], - ['DesktopSize', -223 ], - ['Cursor', -239 ], - - // Psuedo-encoding settings - ['JPEG_quality_lo', -32 ], - //['JPEG_quality_hi', -23 ], - ['compress_lo', -255 ] - //['compress_hi', -247 ] - ], - - encHandlers = {}, - encNames = {}, - encStats = {}, // [rectCnt, rectCntTot] - - ws = null, // Web Socket object - canvas = null, // Canvas object - sendTimer = null, // Send Queue check timer - connTimer = null, // connection timer - disconnTimer = null, // disconnection timer - msgTimer = null, // queued handle_message timer - - // Receive and send queues - rQ = [], // Receive Queue - rQi = 0, // Receive Queue Index - rQmax = 100000, // Max size before compacting - sQ = [], // Send Queue - - // Frame buffer update state - FBU = { - rects : 0, - subrects : 0, // RRE - lines : 0, // RAW - tiles : 0, // HEXTILE - bytes : 0, - x : 0, - y : 0, - width : 0, - height : 0, - encoding : 0, - subencoding : -1, - background : null, - imgQ : [] // TIGHT_PNG image queue - }, - - fb_Bpp = 4, - fb_depth = 3, - fb_width = 0, - fb_height = 0, - fb_name = "", - - scan_imgQ_rate = 100, - last_req_time = 0, - rre_chunk_sz = 100, - - timing = { - last_fbu : 0, - fbu_total : 0, - fbu_total_cnt : 0, - full_fbu_total : 0, - full_fbu_cnt : 0, - - fbu_rt_start : 0, - fbu_rt_total : 0, - fbu_rt_cnt : 0 - }, - - test_mode = false, - - /* Mouse state */ - mouse_buttonMask = 0, - mouse_arr = []; - - -// -// Configuration settings -// -function cdef(v, type, defval, desc) { - Util.conf_default(conf, that, v, type, defval, desc); } - -cdef('target', 'str', null, 'VNC viewport rendering Canvas'); -cdef('focusContainer', 'dom', document, 'Area that traps keyboard input'); - -cdef('encrypt', 'bool', false, 'Use TLS/SSL/wss encryption'); -cdef('true_color', 'bool', true, 'Request true color pixel data'); -cdef('local_cursor', 'bool', false, 'Request locally rendered cursor'); -cdef('shared', 'bool', true, 'Request shared mode'); - -cdef('connectTimeout', 'int', 2, 'Time (s) to wait for connection'); -cdef('disconnectTimeout', 'int', 3, 'Time (s) to wait for disconnection'); -cdef('check_rate', 'int', 217, 'Timing (ms) of send/receive check'); -cdef('fbu_req_rate', 'int', 1413, 'Timing (ms) of frameBufferUpdate requests'); - -cdef('updateState', - 'func', function() { Util.Debug("updateState stub"); }, - 'callback: state update'); -cdef('clipboardReceive', - 'func', function() { Util.Debug("clipboardReceive stub"); }, - 'callback: clipboard contents received'); - - -// Override/add some specific getters/setters -that.set_local_cursor = function(cursor) { - if ((!cursor) || (cursor in {'0':1, 'no':1, 'false':1})) { - conf.local_cursor = false; - } else { - if (canvas.get_cursor_uri()) { - conf.local_cursor = true; - } else { - Util.Warn("Browser does not support local cursor"); - } - } -}; - -that.get_canvas = function() { - return canvas; -}; - - - - -// -// Private functions -// - -// -// Receive Queue functions -// -function rQlen() { - return rQ.length - rQi; -} - -function rQshift16() { - return (rQ[rQi++] << 8) + - (rQ[rQi++] ); -} -function rQshift32() { - return (rQ[rQi++] << 24) + - (rQ[rQi++] << 16) + - (rQ[rQi++] << 8) + - (rQ[rQi++] ); -} -function rQshiftStr(len) { - var arr = rQ.slice(rQi, rQi + len); - rQi += len; - return arr.map(function (num) { - return String.fromCharCode(num); } ).join(''); - -} -function rQshiftBytes(len) { - rQi += len; - return rQ.slice(rQi-len, rQi); -} - -// Check to see if we must wait for 'num' bytes (default to FBU.bytes) -// to be available in the receive queue. Return true if we need to -// wait (and possibly print a debug message), otherwise false. -function rQwait(msg, num, goback) { - if (typeof num !== 'number') { num = FBU.bytes; } - var rQlen = rQ.length - rQi; // Skip rQlen() function call - if (rQlen < num) { - if (goback) { - if (rQi < goback) { - throw("rQwait cannot backup " + goback + " bytes"); - } - rQi -= goback; - } - //Util.Debug(" waiting for " + (num-rQlen) + - // " " + msg + " byte(s)"); - return true; // true means need more data - } - return false; -} - - -// -// Setup routines -// - -// Create the public API interface and initialize -function constructor() { - var i, rmode; - Util.Debug(">> RFB.constructor"); - - // Create lookup tables based encoding number - for (i=0; i < encodings.length; i+=1) { - encHandlers[encodings[i][1]] = encHandlers[encodings[i][0]]; - encNames[encodings[i][1]] = encodings[i][0]; - encStats[encodings[i][1]] = [0, 0]; - } - // Initialize canvas - try { - canvas = new Canvas({'target': conf.target, - 'focusContainer': conf.focusContainer}); - } catch (exc) { - Util.Error("Canvas exception: " + exc); - updateState('fatal', "No working Canvas"); - } - rmode = canvas.get_render_mode(); - - init_vars(); - - /* Check web-socket-js if no builtin WebSocket support */ - if (VNC_native_ws) { - Util.Info("Using native WebSockets"); - updateState('loaded', 'noVNC ready: native WebSockets, ' + rmode); - } else { - Util.Warn("Using web-socket-js bridge. Flash version: " + - Util.Flash.version); - if ((! Util.Flash) || - (Util.Flash.version < 9)) { - updateState('fatal', "WebSockets or Adobe Flash is required"); - } else if (document.location.href.substr(0, 7) === "file://") { - updateState('fatal', - "'file://' URL is incompatible with Adobe Flash"); - } else { - updateState('loaded', 'noVNC ready: WebSockets emulation, ' + rmode); - } - } - - Util.Debug("<< RFB.constructor"); - return that; // Return the public API interface -} - -function init_ws() { - Util.Debug(">> RFB.init_ws"); - - var uri = ""; - if (conf.encrypt) { - uri = "wss://"; - } else { - uri = "ws://"; - } - uri += rfb_host + ":" + rfb_port + "/"; - Util.Info("connecting to " + uri); - ws = new WebSocket(uri); - - ws.onmessage = recv_message; - ws.onopen = function(e) { - Util.Debug(">> WebSocket.onopen"); - if (rfb_state === "connect") { - updateState('ProtocolVersion', "Starting VNC handshake"); - } else { - fail("Got unexpected WebSockets connection"); - } - Util.Debug("<< WebSocket.onopen"); - }; - ws.onclose = function(e) { - Util.Debug(">> WebSocket.onclose"); - if (rfb_state === 'disconnect') { - updateState('disconnected', 'VNC disconnected'); - } else if (rfb_state === 'ProtocolVersion') { - fail('Failed to connect to server'); - } else if (rfb_state in {'failed':1, 'disconnected':1}) { - Util.Error("Received onclose while disconnected"); - } else { - fail('Server disconnected'); - } - Util.Debug("<< WebSocket.onclose"); - }; - ws.onerror = function(e) { - Util.Debug(">> WebSocket.onerror"); - fail("WebSocket error"); - Util.Debug("<< WebSocket.onerror"); - }; - - Util.Debug("<< RFB.init_ws"); -} - -init_vars = function() { - /* Reset state */ - rQ = []; - rQi = 0; - sQ = []; - FBU.rects = 0; - FBU.subrects = 0; // RRE and HEXTILE - FBU.lines = 0; // RAW - FBU.tiles = 0; // HEXTILE - FBU.imgQ = []; // TIGHT_PNG image queue - mouse_buttonMask = 0; - mouse_arr = []; - - // Clear the per connection encoding stats - for (var i=0; i < encodings.length; i+=1) { - encStats[encodings[i][1]][0] = 0; - } -}; - -// Print statistics -print_stats = function() { - var i, encName, s; - Util.Info("Encoding stats for this connection:"); - for (i=0; i < encodings.length; i+=1) { - s = encStats[encodings[i][1]]; - if ((s[0] + s[1]) > 0) { - Util.Info(" " + encodings[i][0] + ": " + - s[0] + " rects"); - } - } - Util.Info("Encoding stats since page load:"); - for (i=0; i < encodings.length; i+=1) { - s = encStats[encodings[i][1]]; - if ((s[0] + s[1]) > 0) { - Util.Info(" " + encodings[i][0] + ": " - + s[1] + " rects"); - } - } -}; - -// -// Utility routines -// - - -/* - * Running states: - * disconnected - idle state - * normal - connected - * - * Page states: - * loaded - page load, equivalent to disconnected - * connect - starting initialization - * disconnect - starting disconnect - * failed - abnormal transition to disconnected - * fatal - failed to load page, or fatal error - * - * VNC initialization states: - * ProtocolVersion - * Security - * Authentication - * password - waiting for password, not part of RFB - * SecurityResult - * ClientInitialization - not triggered by server message - * ServerInitialization - */ -updateState = function(state, statusMsg) { - var func, cmsg, oldstate = rfb_state; - - if (state === oldstate) { - /* Already here, ignore */ - Util.Debug("Already in state '" + state + "', ignoring."); - return; - } - - /* - * These are disconnected states. A previous connect may - * asynchronously cause a connection so make sure we are closed. - */ - if (state in {'disconnected':1, 'loaded':1, 'connect':1, - 'disconnect':1, 'failed':1, 'fatal':1}) { - if (sendTimer) { - clearInterval(sendTimer); - sendTimer = null; - } - - if (msgTimer) { - clearInterval(msgTimer); - msgTimer = null; - } - - if (canvas && canvas.getContext()) { - canvas.stop(); - if (Util.get_logging() !== 'debug') { - canvas.clear(); - } - } - - if (ws) { - if ((ws.readyState === WebSocket.OPEN) || - (ws.readyState === WebSocket.CONNECTING)) { - Util.Info("Closing WebSocket connection"); - ws.close(); - } - ws.onmessage = function (e) { return; }; - } - } - - if (oldstate === 'fatal') { - Util.Error("Fatal error, cannot continue"); - } - - if ((state === 'failed') || (state === 'fatal')) { - func = Util.Error; - } else { - func = Util.Warn; - } - - if ((oldstate === 'failed') && (state === 'disconnected')) { - // Do disconnect action, but stay in failed state. - rfb_state = 'failed'; - } else { - rfb_state = state; - } - - cmsg = typeof(statusMsg) !== 'undefined' ? (" Msg: " + statusMsg) : ""; - func("New state '" + rfb_state + "', was '" + oldstate + "'." + cmsg); - - if (connTimer && (rfb_state !== 'connect')) { - Util.Debug("Clearing connect timer"); - clearInterval(connTimer); - connTimer = null; - } - - if (disconnTimer && (rfb_state !== 'disconnect')) { - Util.Debug("Clearing disconnect timer"); - clearInterval(disconnTimer); - disconnTimer = null; - } - - switch (state) { - case 'normal': - if ((oldstate === 'disconnected') || (oldstate === 'failed')) { - Util.Error("Invalid transition from 'disconnected' or 'failed' to 'normal'"); - } - - break; - - - case 'connect': - - connTimer = setTimeout(function () { - fail("Connect timeout"); - }, conf.connectTimeout * 1000); - - init_vars(); - init_ws(); - - // WebSocket.onopen transitions to 'ProtocolVersion' - break; - - - case 'disconnect': - - if (! test_mode) { - disconnTimer = setTimeout(function () { - fail("Disconnect timeout"); - }, conf.disconnectTimeout * 1000); - } - - print_stats(); - - // WebSocket.onclose transitions to 'disconnected' - break; - - - case 'failed': - if (oldstate === 'disconnected') { - Util.Error("Invalid transition from 'disconnected' to 'failed'"); - } - if (oldstate === 'normal') { - Util.Error("Error while connected."); - } - if (oldstate === 'init') { - Util.Error("Error while initializing."); - } - - // Make sure we transition to disconnected - setTimeout(function() { updateState('disconnected'); }, 50); - - break; - - - default: - // No state change action to take - - } - - if ((oldstate === 'failed') && (state === 'disconnected')) { - // Leave the failed message - conf.updateState(that, state, oldstate); - } else { - conf.updateState(that, state, oldstate, statusMsg); - } -}; -function fail(msg) { - updateState('failed', msg); - return false; -} - -function encode_message() { - /* base64 encode */ - return Base64.encode(sQ); -} - -function decode_message(data) { - //Util.Debug(">> decode_message: " + data); - /* base64 decode */ - rQ = rQ.concat(Base64.decode(data, 0)); - //Util.Debug(">> decode_message, rQ: " + rQ); -} - -function handle_message() { - //Util.Debug("rQ.slice(rQi,rQi+20): " + rQ.slice(rQi,rQi+20) + " (" + rQlen() + ")"); - if (rQlen() === 0) { - Util.Warn("handle_message called on empty receive queue"); - return; - } - switch (rfb_state) { - case 'disconnected': - case 'failed': - Util.Error("Got data while disconnected"); - break; - case 'normal': - if (normal_msg() && rQlen() > 0) { - // true means we can continue processing - // Give other events a chance to run - if (msgTimer === null) { - Util.Debug("More data to process, creating timer"); - msgTimer = setTimeout(function () { - msgTimer = null; - handle_message(); - }, 10); - } else { - Util.Debug("More data to process, existing timer"); - } - } - // Compact the queue - if (rQ.length > rQmax) { - //Util.Debug("Compacting receive queue"); - rQ = rQ.slice(rQi); - rQi = 0; - } - break; - default: - init_msg(); - break; - } -} - -recv_message = function(e) { - //Util.Debug(">> recv_message: " + e.data.length); - - try { - decode_message(e.data); - if (rQlen() > 0) { - handle_message(); - } else { - Util.Debug("Ignoring empty message"); - } - } catch (exc) { - if (typeof exc.stack !== 'undefined') { - Util.Warn("recv_message, caught exception: " + exc.stack); - } else if (typeof exc.description !== 'undefined') { - Util.Warn("recv_message, caught exception: " + exc.description); - } else { - Util.Warn("recv_message, caught exception:" + exc); - } - if (typeof exc.name !== 'undefined') { - fail(exc.name + ": " + exc.message); - } else { - fail(exc); - } - } - //Util.Debug("<< recv_message"); -}; - -// overridable for testing -send_array = function(arr) { - //Util.Debug(">> send_array: " + arr); - sQ = sQ.concat(arr); - if (ws.bufferedAmount === 0) { - //Util.Debug("arr: " + arr); - //Util.Debug("sQ: " + sQ); - ws.send(encode_message(sQ)); - sQ = []; - } else { - Util.Debug("Delaying send"); - } -}; - -function send_string(str) { - //Util.Debug(">> send_string: " + str); - send_array(str.split('').map( - function (chr) { return chr.charCodeAt(0); } ) ); -} - -function genDES(password, challenge) { - var i, passwd = [], des; - for (i=0; i < password.length; i += 1) { - passwd.push(password.charCodeAt(i)); - } - return (new DES(passwd)).encrypt(challenge); -} - -function flushClient() { - if (mouse_arr.length > 0) { - //send_array(mouse_arr.concat(fbUpdateRequest(1))); - send_array(mouse_arr); - setTimeout(function() { - send_array(fbUpdateRequest(1)); - }, 50); - - mouse_arr = []; - return true; - } else { - return false; - } -} - -// overridable for testing -checkEvents = function() { - var now; - if (rfb_state === 'normal') { - if (! flushClient()) { - now = new Date().getTime(); - if (now > last_req_time + conf.fbu_req_rate) { - last_req_time = now; - send_array(fbUpdateRequest(1)); - } - } - } - setTimeout(checkEvents, conf.check_rate); -}; - -function keyPress(keysym, down) { - var arr; - arr = keyEvent(keysym, down); - arr = arr.concat(fbUpdateRequest(1)); - send_array(arr); -} - -function mouseButton(x, y, down, bmask) { - if (down) { - mouse_buttonMask |= bmask; - } else { - mouse_buttonMask ^= bmask; - } - mouse_arr = mouse_arr.concat( pointerEvent(x, y) ); - flushClient(); -} - -function mouseMove(x, y) { - //Util.Debug('>> mouseMove ' + x + "," + y); - mouse_arr = mouse_arr.concat( pointerEvent(x, y) ); -} - - -// -// Server message handlers -// - -// RFB/VNC initialisation message handler -init_msg = function() { - //Util.Debug(">> init_msg [rfb_state '" + rfb_state + "']"); - - var strlen, reason, length, sversion, cversion, - i, types, num_types, challenge, response, bpp, depth, - big_endian, true_color, name_length; - - //Util.Debug("rQ (" + rQlen() + ") " + rQ); - switch (rfb_state) { - - case 'ProtocolVersion' : - if (rQlen() < 12) { - return fail("Incomplete protocol version"); - } - sversion = rQshiftStr(12).substr(4,7); - Util.Info("Server ProtocolVersion: " + sversion); - switch (sversion) { - case "003.003": rfb_version = 3.3; break; - case "003.006": rfb_version = 3.3; break; // UltraVNC - case "003.007": rfb_version = 3.7; break; - case "003.008": rfb_version = 3.8; break; - default: - return fail("Invalid server version " + sversion); - } - if (rfb_version > rfb_max_version) { - rfb_version = rfb_max_version; - } - - if (! test_mode) { - sendTimer = setInterval(function() { - // Send updates either at a rate of one update - // every 50ms, or whatever slower rate the network - // can handle. - if (ws.bufferedAmount === 0) { - if (sQ) { - ws.send(encode_message(sQ)); - sQ = []; - } - } else { - Util.Debug("Delaying send"); - } - }, 50); - } - - cversion = "00" + parseInt(rfb_version,10) + - ".00" + ((rfb_version * 10) % 10); - send_string("RFB " + cversion + "\n"); - updateState('Security', "Sent ProtocolVersion: " + cversion); - break; - - case 'Security' : - if (rfb_version >= 3.7) { - // Server sends supported list, client decides - num_types = rQ[rQi++]; - if (rQwait("security type", num_types, 1)) { return false; } - if (num_types === 0) { - strlen = rQshift32(); - reason = rQshiftStr(strlen); - return fail("Security failure: " + reason); - } - rfb_auth_scheme = 0; - types = rQshiftBytes(num_types); - Util.Debug("Server security types: " + types); - for (i=0; i < types.length; i+=1) { - if ((types[i] > rfb_auth_scheme) && (types[i] < 3)) { - rfb_auth_scheme = types[i]; - } - } - if (rfb_auth_scheme === 0) { - return fail("Unsupported security types: " + types); - } - - send_array([rfb_auth_scheme]); - } else { - // Server decides - if (rQwait("security scheme", 4)) { return false; } - rfb_auth_scheme = rQshift32(); - } - updateState('Authentication', - "Authenticating using scheme: " + rfb_auth_scheme); - init_msg(); // Recursive fallthrough (workaround JSLint complaint) - break; - - // Triggered by fallthough, not by server message - case 'Authentication' : - //Util.Debug("Security auth scheme: " + rfb_auth_scheme); - switch (rfb_auth_scheme) { - case 0: // connection failed - if (rQwait("auth reason", 4)) { return false; } - strlen = rQshift32(); - reason = rQshiftStr(strlen); - return fail("Auth failure: " + reason); - case 1: // no authentication - if (rfb_version >= 3.8) { - updateState('SecurityResult'); - return; - } else { - // Fall through to ClientInitialisation - } - break; - case 2: // VNC authentication - if (rfb_password.length === 0) { - updateState('password', "Password Required"); - return; - } - if (rQwait("auth challenge", 16)) { return false; } - challenge = rQshiftBytes(16); - //Util.Debug("Password: " + rfb_password); - //Util.Debug("Challenge: " + challenge + - // " (" + challenge.length + ")"); - response = genDES(rfb_password, challenge); - //Util.Debug("Response: " + response + - // " (" + response.length + ")"); - - //Util.Debug("Sending DES encrypted auth response"); - send_array(response); - updateState('SecurityResult'); - return; - default: - fail("Unsupported auth scheme: " + rfb_auth_scheme); - return; - } - updateState('ClientInitialisation', "No auth required"); - init_msg(); // Recursive fallthrough (workaround JSLint complaint) - break; - - case 'SecurityResult' : - if (rQwait("VNC auth response ", 4)) { return false; } - switch (rQshift32()) { - case 0: // OK - // Fall through to ClientInitialisation - break; - case 1: // failed - if (rfb_version >= 3.8) { - length = rQshift32(); - if (rQwait("SecurityResult reason", length, 8)) { - return false; - } - reason = rQshiftStr(length); - fail(reason); - } else { - fail("Authentication failed"); - } - return; - case 2: // too-many - return fail("Too many auth attempts"); - } - updateState('ClientInitialisation', "Authentication OK"); - init_msg(); // Recursive fallthrough (workaround JSLint complaint) - break; - - // Triggered by fallthough, not by server message - case 'ClientInitialisation' : - send_array([conf.shared ? 1 : 0]); // ClientInitialisation - updateState('ServerInitialisation', "Authentication OK"); - break; - - case 'ServerInitialisation' : - if (rQwait("server initialization", 24)) { return false; } - - /* Screen size */ - fb_width = rQshift16(); - fb_height = rQshift16(); - - /* PIXEL_FORMAT */ - bpp = rQ[rQi++]; - depth = rQ[rQi++]; - big_endian = rQ[rQi++]; - true_color = rQ[rQi++]; - - Util.Info("Screen: " + fb_width + "x" + fb_height + - ", bpp: " + bpp + ", depth: " + depth + - ", big_endian: " + big_endian + - ", true_color: " + true_color); - - /* Connection name/title */ - rQshiftStr(12); - name_length = rQshift32(); - fb_name = rQshiftStr(name_length); - - canvas.resize(fb_width, fb_height, conf.true_color); - canvas.start(keyPress, mouseButton, mouseMove); - - if (conf.true_color) { - fb_Bpp = 4; - fb_depth = 3; - } else { - fb_Bpp = 1; - fb_depth = 1; - } - - response = pixelFormat(); - response = response.concat(clientEncodings()); - response = response.concat(fbUpdateRequest(0)); - timing.fbu_rt_start = (new Date()).getTime(); - send_array(response); - - /* Start pushing/polling */ - setTimeout(checkEvents, conf.check_rate); - setTimeout(scan_tight_imgQ, scan_imgQ_rate); - - if (conf.encrypt) { - updateState('normal', "Connected (encrypted) to: " + fb_name); - } else { - updateState('normal', "Connected (unencrypted) to: " + fb_name); - } - break; - } - //Util.Debug("<< init_msg"); -}; - - -/* Normal RFB/VNC server message handler */ -normal_msg = function() { - //Util.Debug(">> normal_msg"); - - var ret = true, msg_type, length, - c, first_colour, num_colours, red, green, blue; - - if (FBU.rects > 0) { - msg_type = 0; - } else { - msg_type = rQ[rQi++]; - } - switch (msg_type) { - case 0: // FramebufferUpdate - ret = framebufferUpdate(); // false means need more data - break; - case 1: // SetColourMapEntries - Util.Debug("SetColourMapEntries"); - rQi++; // Padding - first_colour = rQshift16(); // First colour - num_colours = rQshift16(); - for (c=0; c < num_colours; c+=1) { - red = rQshift16(); - //Util.Debug("red before: " + red); - red = parseInt(red / 256, 10); - //Util.Debug("red after: " + red); - green = parseInt(rQshift16() / 256, 10); - blue = parseInt(rQshift16() / 256, 10); - canvas.set_colourMap([red, green, blue], first_colour + c); - } - Util.Info("Registered " + num_colours + " colourMap entries"); - //Util.Debug("colourMap: " + canvas.get_colourMap()); - break; - case 2: // Bell - Util.Warn("Bell (unsupported)"); - break; - case 3: // ServerCutText - Util.Debug("ServerCutText"); - if (rQwait("ServerCutText header", 7, 1)) { return false; } - rQshiftBytes(3); // Padding - length = rQshift32(); - if (rQwait("ServerCutText", length, 8)) { return false; } - - conf.clipboardReceive(that, rQshiftStr(length)); - break; - default: - fail("Disconnected: illegal server message type " + msg_type); - Util.Debug("rQ.slice(0,30):" + rQ.slice(0,30)); - break; - } - //Util.Debug("<< normal_msg"); - return ret; -}; - -framebufferUpdate = function() { - var now, hdr, fbu_rt_diff, ret = true; - - if (FBU.rects === 0) { - //Util.Debug("New FBU: rQ.slice(0,20): " + rQ.slice(0,20)); - if (rQwait("FBU header", 3)) { - if (rQi === 0) { - rQ.unshift(0); // FBU msg_type - } else { - rQi -= 1; - } - return false; - } - rQi++; - FBU.rects = rQshift16(); - //Util.Debug("FramebufferUpdate, rects:" + FBU.rects); - FBU.bytes = 0; - timing.cur_fbu = 0; - if (timing.fbu_rt_start > 0) { - now = (new Date()).getTime(); - Util.Info("First FBU latency: " + (now - timing.fbu_rt_start)); - } - } - - while (FBU.rects > 0) { - if (rfb_state !== "normal") { - return false; - } - if (rQwait("FBU")) { return false; } - if (FBU.bytes === 0) { - if (rQwait("rect header", 12)) { return false; } - /* New FramebufferUpdate */ - - hdr = rQshiftBytes(12); - FBU.x = (hdr[0] << 8) + hdr[1]; - FBU.y = (hdr[2] << 8) + hdr[3]; - FBU.width = (hdr[4] << 8) + hdr[5]; - FBU.height = (hdr[6] << 8) + hdr[7]; - FBU.encoding = parseInt((hdr[8] << 24) + (hdr[9] << 16) + - (hdr[10] << 8) + hdr[11], 10); - - if (encNames[FBU.encoding]) { - // Debug: - /* - var msg = "FramebufferUpdate rects:" + FBU.rects; - msg += " x: " + FBU.x + " y: " + FBU.y; - msg += " width: " + FBU.width + " height: " + FBU.height; - msg += " encoding:" + FBU.encoding; - msg += "(" + encNames[FBU.encoding] + ")"; - msg += ", rQlen(): " + rQlen(); - Util.Debug(msg); - */ - } else { - fail("Disconnected: unsupported encoding " + - FBU.encoding); - return false; - } - } - - timing.last_fbu = (new Date()).getTime(); - - ret = encHandlers[FBU.encoding](); - - now = (new Date()).getTime(); - timing.cur_fbu += (now - timing.last_fbu); - - if (ret) { - encStats[FBU.encoding][0] += 1; - encStats[FBU.encoding][1] += 1; - } - - if (FBU.rects === 0) { - if (((FBU.width === fb_width) && - (FBU.height === fb_height)) || - (timing.fbu_rt_start > 0)) { - timing.full_fbu_total += timing.cur_fbu; - timing.full_fbu_cnt += 1; - Util.Info("Timing of full FBU, cur: " + - timing.cur_fbu + ", total: " + - timing.full_fbu_total + ", cnt: " + - timing.full_fbu_cnt + ", avg: " + - (timing.full_fbu_total / - timing.full_fbu_cnt)); - } - if (timing.fbu_rt_start > 0) { - fbu_rt_diff = now - timing.fbu_rt_start; - timing.fbu_rt_total += fbu_rt_diff; - timing.fbu_rt_cnt += 1; - Util.Info("full FBU round-trip, cur: " + - fbu_rt_diff + ", total: " + - timing.fbu_rt_total + ", cnt: " + - timing.fbu_rt_cnt + ", avg: " + - (timing.fbu_rt_total / - timing.fbu_rt_cnt)); - timing.fbu_rt_start = 0; - } - } - if (! ret) { - return ret; // false ret means need more data - } - } - return true; // We finished this FBU -}; - -// -// FramebufferUpdate encodings -// - -encHandlers.RAW = function display_raw() { - //Util.Debug(">> display_raw (" + rQlen() + " bytes)"); - - var cur_y, cur_height; - - if (FBU.lines === 0) { - FBU.lines = FBU.height; - } - FBU.bytes = FBU.width * fb_Bpp; // At least a line - if (rQwait("RAW")) { return false; } - cur_y = FBU.y + (FBU.height - FBU.lines); - cur_height = Math.min(FBU.lines, - Math.floor(rQlen()/(FBU.width * fb_Bpp))); - canvas.blitImage(FBU.x, cur_y, FBU.width, cur_height, rQ, rQi); - rQshiftBytes(FBU.width * cur_height * fb_Bpp); - FBU.lines -= cur_height; - - if (FBU.lines > 0) { - FBU.bytes = FBU.width * fb_Bpp; // At least another line - } else { - FBU.rects -= 1; - FBU.bytes = 0; - } - //Util.Debug("<< display_raw (" + rQlen() + " bytes)"); - return true; -}; - -encHandlers.COPYRECT = function display_copy_rect() { - //Util.Debug(">> display_copy_rect"); - - var old_x, old_y; - - if (rQwait("COPYRECT", 4)) { return false; } - old_x = rQshift16(); - old_y = rQshift16(); - canvas.copyImage(old_x, old_y, FBU.x, FBU.y, FBU.width, FBU.height); - FBU.rects -= 1; - FBU.bytes = 0; - return true; -}; - -encHandlers.RRE = function display_rre() { - //Util.Debug(">> display_rre (" + rQlen() + " bytes)"); - var color, x, y, width, height, chunk; - - if (FBU.subrects === 0) { - if (rQwait("RRE", 4+fb_Bpp)) { return false; } - FBU.subrects = rQshift32(); - color = rQshiftBytes(fb_Bpp); // Background - canvas.fillRect(FBU.x, FBU.y, FBU.width, FBU.height, color); - } - while ((FBU.subrects > 0) && (rQlen() >= (fb_Bpp + 8))) { - color = rQshiftBytes(fb_Bpp); - x = rQshift16(); - y = rQshift16(); - width = rQshift16(); - height = rQshift16(); - canvas.fillRect(FBU.x + x, FBU.y + y, width, height, color); - FBU.subrects -= 1; - } - //Util.Debug(" display_rre: rects: " + FBU.rects + - // ", FBU.subrects: " + FBU.subrects); - - if (FBU.subrects > 0) { - chunk = Math.min(rre_chunk_sz, FBU.subrects); - FBU.bytes = (fb_Bpp + 8) * chunk; - } else { - FBU.rects -= 1; - FBU.bytes = 0; - } - //Util.Debug("<< display_rre, FBU.bytes: " + FBU.bytes); - return true; -}; - -encHandlers.HEXTILE = function display_hextile() { - //Util.Debug(">> display_hextile"); - var subencoding, subrects, tile, color, cur_tile, - tile_x, x, w, tile_y, y, h, xy, s, sx, sy, wh, sw, sh; - - if (FBU.tiles === 0) { - FBU.tiles_x = Math.ceil(FBU.width/16); - FBU.tiles_y = Math.ceil(FBU.height/16); - FBU.total_tiles = FBU.tiles_x * FBU.tiles_y; - FBU.tiles = FBU.total_tiles; - } - - /* FBU.bytes comes in as 1, rQlen() at least 1 */ - while (FBU.tiles > 0) { - FBU.bytes = 1; - if (rQwait("HEXTILE subencoding")) { return false; } - //Util.Debug(" 2 rQ length: " + rQlen() + " rQ[rQi]: " + rQ[rQi] + " rQ.slice(rQi,rQi+20): " + rQ.slice(rQi,rQi+20) + ", FBU.rects: " + FBU.rects + ", FBU.tiles: " + FBU.tiles); - subencoding = rQ[rQi]; // Peek - if (subencoding > 30) { // Raw - fail("Disconnected: illegal hextile subencoding " + subencoding); - //Util.Debug("rQ.slice(0,30):" + rQ.slice(0,30)); - return false; - } - subrects = 0; - cur_tile = FBU.total_tiles - FBU.tiles; - tile_x = cur_tile % FBU.tiles_x; - tile_y = Math.floor(cur_tile / FBU.tiles_x); - x = FBU.x + tile_x * 16; - y = FBU.y + tile_y * 16; - w = Math.min(16, (FBU.x + FBU.width) - x); - h = Math.min(16, (FBU.y + FBU.height) - y); - - /* Figure out how much we are expecting */ - if (subencoding & 0x01) { // Raw - //Util.Debug(" Raw subencoding"); - FBU.bytes += w * h * fb_Bpp; - } else { - if (subencoding & 0x02) { // Background - FBU.bytes += fb_Bpp; - } - if (subencoding & 0x04) { // Foreground - FBU.bytes += fb_Bpp; - } - if (subencoding & 0x08) { // AnySubrects - FBU.bytes += 1; // Since we aren't shifting it off - if (rQwait("hextile subrects header")) { return false; } - subrects = rQ[rQi + FBU.bytes-1]; // Peek - if (subencoding & 0x10) { // SubrectsColoured - FBU.bytes += subrects * (fb_Bpp + 2); - } else { - FBU.bytes += subrects * 2; - } - } - } - - /* - Util.Debug(" tile:" + cur_tile + "/" + (FBU.total_tiles - 1) + - " (" + tile_x + "," + tile_y + ")" + - " [" + x + "," + y + "]@" + w + "x" + h + - ", subenc:" + subencoding + - "(last: " + FBU.lastsubencoding + "), subrects:" + - subrects + - ", rQlen():" + rQlen() + ", FBU.bytes:" + FBU.bytes + - " last:" + rQ.slice(FBU.bytes-10, FBU.bytes) + - " next:" + rQ.slice(FBU.bytes-1, FBU.bytes+10)); - */ - if (rQwait("hextile")) { return false; } - - /* We know the encoding and have a whole tile */ - FBU.subencoding = rQ[rQi]; - rQi += 1; - if (FBU.subencoding === 0) { - if (FBU.lastsubencoding & 0x01) { - /* Weird: ignore blanks after RAW */ - Util.Debug(" Ignoring blank after RAW"); - } else { - canvas.fillRect(x, y, w, h, FBU.background); - } - } else if (FBU.subencoding & 0x01) { // Raw - canvas.blitImage(x, y, w, h, rQ, rQi); - rQi += FBU.bytes - 1; - } else { - if (FBU.subencoding & 0x02) { // Background - FBU.background = rQ.slice(rQi, rQi + fb_Bpp); - rQi += fb_Bpp; - } - if (FBU.subencoding & 0x04) { // Foreground - FBU.foreground = rQ.slice(rQi, rQi + fb_Bpp); - rQi += fb_Bpp; - } - - tile = canvas.getTile(x, y, w, h, FBU.background); - if (FBU.subencoding & 0x08) { // AnySubrects - subrects = rQ[rQi]; - rQi += 1; - for (s = 0; s < subrects; s += 1) { - if (FBU.subencoding & 0x10) { // SubrectsColoured - color = rQ.slice(rQi, rQi + fb_Bpp); - rQi += fb_Bpp; - } else { - color = FBU.foreground; - } - xy = rQ[rQi]; - rQi += 1; - sx = (xy >> 4); - sy = (xy & 0x0f); - - wh = rQ[rQi]; - rQi += 1; - sw = (wh >> 4) + 1; - sh = (wh & 0x0f) + 1; - - canvas.setSubTile(tile, sx, sy, sw, sh, color); - } - } - canvas.putTile(tile); - } - //rQshiftBytes(FBU.bytes); - FBU.lastsubencoding = FBU.subencoding; - FBU.bytes = 0; - FBU.tiles -= 1; - } - - if (FBU.tiles === 0) { - FBU.rects -= 1; - } - - //Util.Debug("<< display_hextile"); - return true; -}; - - -encHandlers.TIGHT_PNG = function display_tight_png() { - //Util.Debug(">> display_tight_png"); - var ctl, cmode, clength, getCLength, color, img; - //Util.Debug(" FBU.rects: " + FBU.rects); - //Util.Debug(" starting rQ.slice(rQi,rQi+20): " + rQ.slice(rQi,rQi+20) + " (" + rQlen() + ")"); - - FBU.bytes = 1; // compression-control byte - if (rQwait("TIGHT compression-control")) { return false; } - - // Get 'compact length' header and data size - getCLength = function (arr, offset) { - var header = 1, data = 0; - data += arr[offset + 0] & 0x7f; - if (arr[offset + 0] & 0x80) { - header += 1; - data += (arr[offset + 1] & 0x7f) << 7; - if (arr[offset + 1] & 0x80) { - header += 1; - data += arr[offset + 2] << 14; - } - } - return [header, data]; - }; - - ctl = rQ[rQi]; - switch (ctl >> 4) { - case 0x08: cmode = "fill"; break; - case 0x09: cmode = "jpeg"; break; - case 0x0A: cmode = "png"; break; - default: throw("Illegal basic compression received, ctl: " + ctl); - } - switch (cmode) { - // fill uses fb_depth because TPIXELs drop the padding byte - case "fill": FBU.bytes += fb_depth; break; // TPIXEL - case "jpeg": FBU.bytes += 3; break; // max clength - case "png": FBU.bytes += 3; break; // max clength - } - - if (rQwait("TIGHT " + cmode)) { return false; } - - //Util.Debug(" rQ.slice(0,20): " + rQ.slice(0,20) + " (" + rQlen() + ")"); - //Util.Debug(" cmode: " + cmode); - - // Determine FBU.bytes - switch (cmode) { - case "fill": - rQi++; // shift off ctl - color = rQshiftBytes(fb_depth); - canvas.fillRect(FBU.x, FBU.y, FBU.width, FBU.height, color); - break; - case "jpeg": - case "png": - clength = getCLength(rQ, rQi+1); - FBU.bytes = 1 + clength[0] + clength[1]; // ctl + clength size + jpeg-data - if (rQwait("TIGHT " + cmode)) { return false; } - - // We have everything, render it - //Util.Debug(" png, rQlen(): " + rQlen() + ", clength[0]: " + clength[0] + ", clength[1]: " + clength[1]); - rQshiftBytes(1 + clength[0]); // shift off ctl + compact length - img = new Image(); - img.onload = scan_tight_imgQ; - FBU.imgQ.push([img, FBU.x, FBU.y]); - img.src = "data:image/" + cmode + - extract_data_uri(rQshiftBytes(clength[1])); - img = null; - break; - } - FBU.bytes = 0; - FBU.rects -= 1; - //Util.Debug(" ending rQ.slice(rQi,rQi+20): " + rQ.slice(rQi,rQi+20) + " (" + rQlen() + ")"); - //Util.Debug("<< display_tight_png"); - return true; -}; - -extract_data_uri = function(arr) { - //var i, stra = []; - //for (i=0; i< arr.length; i += 1) { - // stra.push(String.fromCharCode(arr[i])); - //} - //return "," + escape(stra.join('')); - return ";base64," + Base64.encode(arr); -}; - -scan_tight_imgQ = function() { - var img, imgQ, ctx; - ctx = canvas.getContext(); - if (rfb_state === 'normal') { - imgQ = FBU.imgQ; - while ((imgQ.length > 0) && (imgQ[0][0].complete)) { - img = imgQ.shift(); - ctx.drawImage(img[0], img[1], img[2]); - } - setTimeout(scan_tight_imgQ, scan_imgQ_rate); - } -}; - -encHandlers.DesktopSize = function set_desktopsize() { - Util.Debug(">> set_desktopsize"); - fb_width = FBU.width; - fb_height = FBU.height; - canvas.clear(); - canvas.resize(fb_width, fb_height); - timing.fbu_rt_start = (new Date()).getTime(); - // Send a new non-incremental request - send_array(fbUpdateRequest(0)); - - FBU.bytes = 0; - FBU.rects -= 1; - - Util.Debug("<< set_desktopsize"); - return true; -}; - -encHandlers.Cursor = function set_cursor() { - var x, y, w, h, pixelslength, masklength; - //Util.Debug(">> set_cursor"); - x = FBU.x; // hotspot-x - y = FBU.y; // hotspot-y - w = FBU.width; - h = FBU.height; - - pixelslength = w * h * fb_Bpp; - masklength = Math.floor((w + 7) / 8) * h; - - FBU.bytes = pixelslength + masklength; - if (rQwait("cursor encoding")) { return false; } - - //Util.Debug(" set_cursor, x: " + x + ", y: " + y + ", w: " + w + ", h: " + h); - - canvas.changeCursor(rQshiftBytes(pixelslength), - rQshiftBytes(masklength), - x, y, w, h); - - FBU.bytes = 0; - FBU.rects -= 1; - - //Util.Debug("<< set_cursor"); - return true; -}; - -encHandlers.JPEG_quality_lo = function set_jpeg_quality() { - Util.Error("Server sent jpeg_quality pseudo-encoding"); -}; - -encHandlers.compress_lo = function set_compress_level() { - Util.Error("Server sent compress level pseudo-encoding"); -}; - -/* - * Client message routines - */ - -pixelFormat = function() { - //Util.Debug(">> pixelFormat"); - var arr; - arr = [0]; // msg-type - arr.push8(0); // padding - arr.push8(0); // padding - arr.push8(0); // padding - - arr.push8(fb_Bpp * 8); // bits-per-pixel - arr.push8(fb_depth * 8); // depth - arr.push8(0); // little-endian - arr.push8(conf.true_color ? 1 : 0); // true-color - - arr.push16(255); // red-max - arr.push16(255); // green-max - arr.push16(255); // blue-max - arr.push8(0); // red-shift - arr.push8(8); // green-shift - arr.push8(16); // blue-shift - - arr.push8(0); // padding - arr.push8(0); // padding - arr.push8(0); // padding - //Util.Debug("<< pixelFormat"); - return arr; -}; - -clientEncodings = function() { - //Util.Debug(">> clientEncodings"); - var arr, i, encList = []; - - for (i=0; i> fbUpdateRequest"); - if (!x) { x = 0; } - if (!y) { y = 0; } - if (!xw) { xw = fb_width; } - if (!yw) { yw = fb_height; } - var arr; - arr = [3]; // msg-type - arr.push8(incremental); - arr.push16(x); - arr.push16(y); - arr.push16(xw); - arr.push16(yw); - //Util.Debug("<< fbUpdateRequest"); - return arr; -}; - -keyEvent = function(keysym, down) { - //Util.Debug(">> keyEvent, keysym: " + keysym + ", down: " + down); - var arr; - arr = [4]; // msg-type - arr.push8(down); - arr.push16(0); - arr.push32(keysym); - //Util.Debug("<< keyEvent"); - return arr; -}; - -pointerEvent = function(x, y) { - //Util.Debug(">> pointerEvent, x,y: " + x + "," + y + - // " , mask: " + mouse_buttonMask); - var arr; - arr = [5]; // msg-type - arr.push8(mouse_buttonMask); - arr.push16(x); - arr.push16(y); - //Util.Debug("<< pointerEvent"); - return arr; -}; - -clientCutText = function(text) { - //Util.Debug(">> clientCutText"); - var arr, i, n; - arr = [6]; // msg-type - arr.push8(0); // padding - arr.push8(0); // padding - arr.push8(0); // padding - arr.push32(text.length); - n = text.length; - for (i=0; i < n; i+=1) { - arr.push(text.charCodeAt(i)); - } - //Util.Debug("<< clientCutText:" + arr); - return arr; -}; - - - -// -// Public API interface functions -// - -that.connect = function(host, port, password) { - //Util.Debug(">> connect"); - - rfb_host = host; - rfb_port = port; - rfb_password = (password !== undefined) ? password : ""; - - if ((!rfb_host) || (!rfb_port)) { - return fail("Must set host and port"); - } - - updateState('connect'); - //Util.Debug("<< connect"); - -}; - -that.disconnect = function() { - //Util.Debug(">> disconnect"); - updateState('disconnect', 'Disconnecting'); - //Util.Debug("<< disconnect"); -}; - -that.sendPassword = function(passwd) { - rfb_password = passwd; - rfb_state = "Authentication"; - setTimeout(init_msg, 1); -}; - -that.sendCtrlAltDel = function() { - if (rfb_state !== "normal") { return false; } - Util.Info("Sending Ctrl-Alt-Del"); - var arr = []; - arr = arr.concat(keyEvent(0xFFE3, 1)); // Control - arr = arr.concat(keyEvent(0xFFE9, 1)); // Alt - arr = arr.concat(keyEvent(0xFFFF, 1)); // Delete - arr = arr.concat(keyEvent(0xFFFF, 0)); // Delete - arr = arr.concat(keyEvent(0xFFE9, 0)); // Alt - arr = arr.concat(keyEvent(0xFFE3, 0)); // Control - arr = arr.concat(fbUpdateRequest(1)); - send_array(arr); -}; - -// Send a key press. If 'down' is not specified then send a down key -// followed by an up key. -that.sendKey = function(code, down) { - if (rfb_state !== "normal") { return false; } - var arr = []; - if (typeof down !== 'undefined') { - Util.Info("Sending key code (" + (down ? "down" : "up") + "): " + code); - arr = arr.concat(keyEvent(code, down ? 1 : 0)); - } else { - Util.Info("Sending key code (down + up): " + code); - arr = arr.concat(keyEvent(code, 1)); - arr = arr.concat(keyEvent(code, 0)); - } - arr = arr.concat(fbUpdateRequest(1)); - send_array(arr); -}; - -that.clipboardPasteFrom = function(text) { - if (rfb_state !== "normal") { return; } - //Util.Debug(">> clipboardPasteFrom: " + text.substr(0,40) + "..."); - send_array(clientCutText(text)); - //Util.Debug("<< clipboardPasteFrom"); -}; - -that.testMode = function(override_send_array) { - // Overridable internal functions for testing - test_mode = true; - send_array = override_send_array; - that.recv_message = recv_message; // Expose it - - checkEvents = function () { /* Stub Out */ }; - that.connect = function(host, port, password) { - rfb_host = host; - rfb_port = port; - rfb_password = password; - updateState('ProtocolVersion', "Starting VNC handshake"); - }; -}; - - -return constructor(); // Return the public API interface - -} // End of RFB() diff --git a/include/ui.js b/include/ui.js deleted file mode 100644 index 217b8b1..0000000 --- a/include/ui.js +++ /dev/null @@ -1,420 +0,0 @@ -/* - * noVNC: HTML5 VNC client - * Copyright (C) 2010 Joel Martin - * Licensed under LGPL-3 (see LICENSE.txt) - * - * See README.md for usage and integration instructions. - */ -"use strict"; -/*jslint white: false */ -/*global $, Util, RFB, Canvas, VNC_uri_prefix, Element, Fx */ - -var UI = { - -settingsOpen : false, - -// Render default UI and initialize settings menu -load: function(target) { - var html = '', i, sheet, sheets, llevels; - - /* Populate the 'target' DOM element with default UI */ - if (!target) { - target = $D('vnc'); - } else if (typeof target === 'string') { - target = $D(target); - } - - if ((!document.createElement('canvas').getContext) && - window.ActiveXObject) { - // Suggest Chrome frame for Internet Explorer users - html += ''; - target.innerHTML = html; - return; - } - - html += '
    '; - html += '