From bd5f2a65915408e869519ba4e8c562828b210a93 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 25 May 2018 18:58:19 +0000 Subject: [PATCH] init project --- .gitignore | 5 + .package.json.swp | Bin 0 -> 1024 bytes README.md | 119 +++++ package-lock.json | 822 +++++++++++++++++++++++++++++++++ package.json | 17 + run.sh | 3 + server.js | 446 ++++++++++++++++++ static/.bower.json.swp | Bin 0 -> 1024 bytes static/bower.json | 29 ++ static/css/kurento.css | 77 +++ static/img/kurento.png | Bin 0 -> 6499 bytes static/img/naevatec.png | Bin 0 -> 52049 bytes static/img/pipeline.png | Bin 0 -> 65474 bytes static/img/spinner.gif | Bin 0 -> 8534 bytes static/img/transparent-1px.png | Bin 0 -> 68 bytes static/img/urjc.gif | Bin 0 -> 16756 bytes static/img/webrtc.png | Bin 0 -> 12375 bytes static/index.html | 91 ++++ static/js/index.js | 205 ++++++++ 19 files changed, 1814 insertions(+) create mode 100644 .gitignore create mode 100644 .package.json.swp create mode 100644 README.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 run.sh create mode 100755 server.js create mode 100644 static/.bower.json.swp create mode 100644 static/bower.json create mode 100644 static/css/kurento.css create mode 100644 static/img/kurento.png create mode 100644 static/img/naevatec.png create mode 100644 static/img/pipeline.png create mode 100644 static/img/spinner.gif create mode 100644 static/img/transparent-1px.png create mode 100644 static/img/urjc.gif create mode 100644 static/img/webrtc.png create mode 100644 static/index.html create mode 100644 static/js/index.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2efe191 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea/ +node_modules/ +npm-debug.log +static/bower_components +keys/ \ No newline at end of file diff --git a/.package.json.swp b/.package.json.swp new file mode 100644 index 0000000000000000000000000000000000000000..b1c7525a910728fa3fb36b8eabb4c977b0fb046b GIT binary patch literal 1024 zcmYc?$V<%2S1{5u)iY*50!yM87>e@qOOS+cGBXQw4b6>ojSY2;Omxjqj6u;;keHmE Yn4YSaRh*xPA~DJt4S~@R7?2PE04((mB>(^b literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d74cdb --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +[![License badge](https://img.shields.io/badge/license-LGPL-blue.svg)](http://www.gnu.org/licenses/lgpl-2.1.html) +[![Documentation badge](https://readthedocs.org/projects/fiware-orion/badge/?version=latest)](http://doc-kurento.readthedocs.org/en/latest/) +[![Docker badge](https://img.shields.io/docker/pulls/fiware/orion.svg)](https://hub.docker.com/r/fiware/stream-oriented-kurento/) +[![Support badge]( https://img.shields.io/badge/support-sof-yellowgreen.svg)](http://stackoverflow.com/questions/tagged/kurento) + +[![][KurentoImage]][Kurento] + +Copyright © 2013-2016 [Kurento]. Licensed under [LGPL v2.1 License]. + +kurento-one2many-call +===================== + +Kurento Java Tutorial: WebRTC one to many video call. + +Running this tutorial +--------------------- + +In order to run this tutorial, please read the following [instructions]. + +What is Kurento +--------------- + +Kurento is an open source software project providing a platform suitable +for creating modular applications with advanced real-time communication +capabilities. For knowing more about Kurento, please visit the Kurento +project website: http://www.kurento.org. + +Kurento is part of [FIWARE]. For further information on the relationship of +FIWARE and Kurento check the [Kurento FIWARE Catalog Entry] + +Kurento is part of the [NUBOMEDIA] research initiative. + +Documentation +------------- + +The Kurento project provides detailed [documentation] including tutorials, +installation and development guides. A simplified version of the documentation +can be found on [readthedocs.org]. The [Open API specification] a.k.a. Kurento +Protocol is also available on [apiary.io]. + +Source +------ + +Code for other Kurento projects can be found in the [GitHub Kurento Group]. + +News and Website +---------------- + +Check the [Kurento blog] +Follow us on Twitter @[kurentoms]. + +Issue tracker +------------- + +Issues and bug reports should be posted to the [GitHub Kurento bugtracker] + +Licensing and distribution +-------------------------- + +Software associated to Kurento is provided as open source under GNU Library or +"Lesser" General Public License, version 2.1 (LGPL-2.1). Please check the +specific terms and conditions linked to this open source license at +http://opensource.org/licenses/LGPL-2.1. Please note that software derived as a +result of modifying the source code of Kurento software in order to fix a bug +or incorporate enhancements is considered a derivative work of the product. +Software that merely uses or aggregates (i.e. links to) an otherwise unmodified +version of existing software is not considered a derivative work. + +Contribution policy +------------------- + +You can contribute to the Kurento community through bug-reports, bug-fixes, new +code or new documentation. For contributing to the Kurento community, drop a +post to the [Kurento Public Mailing List] providing full information about your +contribution and its value. In your contributions, you must comply with the +following guidelines + +* You must specify the specific contents of your contribution either through a + detailed bug description, through a pull-request or through a patch. +* You must specify the licensing restrictions of the code you contribute. +* For newly created code to be incorporated in the Kurento code-base, you must + accept Kurento to own the code copyright, so that its open source nature is + guaranteed. +* You must justify appropriately the need and value of your contribution. The + Kurento project has no obligations in relation to accepting contributions + from third parties. +* The Kurento project leaders have the right of asking for further + explanations, tests or validations of any code contributed to the community + before it being incorporated into the Kurento code-base. You must be ready to + addressing all these kind of concerns before having your code approved. + +Support +------- + +The Kurento project provides community support through the [Kurento Public +Mailing List] and through [StackOverflow] using the tags *kurento* and +*fiware-kurento*. + +Before asking for support, please read first the [Kurento Netiquette Guidelines] + +[documentation]: http://www.kurento.org/documentation +[FIWARE]: http://www.fiware.org +[GitHub Kurento bugtracker]: https://github.com/Kurento/bugtracker/issues +[GitHub Kurento Group]: https://github.com/kurento +[kurentoms]: http://twitter.com/kurentoms +[Kurento]: http://kurento.org +[Kurento Blog]: http://www.kurento.org/blog +[Kurento FIWARE Catalog Entry]: http://catalogue.fiware.org/enablers/stream-oriented-kurento +[Kurento Netiquette Guidelines]: http://www.kurento.org/blog/kurento-netiquette-guidelines +[Kurento Public Mailing list]: https://groups.google.com/forum/#!forum/kurento +[KurentoImage]: https://secure.gravatar.com/avatar/21a2a12c56b2a91c8918d5779f1778bf?s=120 +[LGPL v2.1 License]: http://www.gnu.org/licenses/lgpl-2.1.html +[NUBOMEDIA]: http://www.nubomedia.eu +[StackOverflow]: http://stackoverflow.com/search?q=kurento +[Read-the-docs]: http://read-the-docs.readthedocs.org/ +[readthedocs.org]: http://kurento.readthedocs.org/ +[Open API specification]: http://kurento.github.io/doc-kurento/ +[apiary.io]: http://docs.streamoriented.apiary.io/ +[instructions]: http://www.kurento.org/docs/current/tutorials/node/tutorial-one2many.html diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ad93dac --- /dev/null +++ b/package-lock.json @@ -0,0 +1,822 @@ +{ + "name": "kurento-one2many-call", + "version": "6.2.2-dev", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.5.3" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "4.17.10" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "backoff": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz", + "integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "bower": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz", + "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=", + "dev": true + }, + "bufferutil": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz", + "integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=", + "requires": { + "bindings": "1.2.1", + "nan": "2.10.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "content-disposition": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz", + "integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", + "integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "crc": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz", + "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=" + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "depd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" + }, + "destroy": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", + "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=" + }, + "ee-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz", + "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=" + }, + "engine.io": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", + "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.5" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + } + } + }, + "engine.io-client": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", + "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.5", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "error-tojson": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/error-tojson/-/error-tojson-0.0.1.tgz", + "integrity": "sha1-p7GqlP/ADpB4wuuibiBL2Hzyy7k=" + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + }, + "escape-html": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", + "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=" + }, + "etag": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.6.0.tgz", + "integrity": "sha1-i8ssavElTEgd/IuZfJBu9ORCwgc=", + "requires": { + "crc": "3.2.1" + } + }, + "express": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.12.4.tgz", + "integrity": "sha1-j+wlECVbxrLlgQfEgjnA+jB8GqI=", + "requires": { + "accepts": "1.2.13", + "content-disposition": "0.5.0", + "content-type": "1.0.4", + "cookie": "0.1.2", + "cookie-signature": "1.0.6", + "debug": "2.2.0", + "depd": "1.0.1", + "escape-html": "1.0.1", + "etag": "1.6.0", + "finalhandler": "0.3.6", + "fresh": "0.2.4", + "merge-descriptors": "1.0.0", + "methods": "1.1.2", + "on-finished": "2.2.1", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.3", + "proxy-addr": "1.0.10", + "qs": "2.4.2", + "range-parser": "1.0.3", + "send": "0.12.3", + "serve-static": "1.9.3", + "type-is": "1.6.16", + "utils-merge": "1.0.0", + "vary": "1.0.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "finalhandler": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.6.tgz", + "integrity": "sha1-2vnEFhsbBuABRmsUEd/baXO+E4s=", + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.1", + "on-finished": "2.2.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz", + "integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw=" + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "0.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", + "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "kurento-client": { + "version": "github:Kurento/kurento-client-js#efb160e85a4b1f376307fe1979c9fbcb5f978393", + "requires": { + "async": "2.0.1", + "error-tojson": "0.0.1", + "es6-promise": "4.2.4", + "extend": "3.0.1", + "inherits": "2.0.3", + "kurento-client-core": "github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0", + "kurento-client-elements": "github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81", + "kurento-client-filters": "github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0", + "kurento-jsonrpc": "github:Kurento/kurento-jsonrpc-js#827827bbeb557e1c1901f5a562c4c700b9a51401", + "minimist": "1.2.0", + "promise": "7.1.1", + "promisecallback": "0.0.4", + "reconnect-ws": "github:KurentoForks/reconnect-ws#f287385d75861654528c352e60221f95c9209f8a" + }, + "dependencies": { + "kurento-client-core": { + "version": "github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0" + }, + "kurento-client-elements": { + "version": "github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81" + }, + "kurento-client-filters": { + "version": "github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0" + }, + "kurento-jsonrpc": { + "version": "github:Kurento/kurento-jsonrpc-js#827827bbeb557e1c1901f5a562c4c700b9a51401", + "requires": { + "bufferutil": "1.2.1", + "inherits": "2.0.3", + "utf-8-validate": "1.2.2", + "ws": "1.1.5" + } + }, + "reconnect-core": { + "version": "github:KurentoForks/reconnect-core#921d43e91578abb2fb2613f585c010c1939cf734", + "requires": { + "backoff": "2.3.0" + } + }, + "reconnect-ws": { + "version": "github:KurentoForks/reconnect-ws#f287385d75861654528c352e60221f95c9209f8a", + "requires": { + "reconnect-core": "github:KurentoForks/reconnect-core#921d43e91578abb2fb2613f585c010c1939cf734", + "websocket-stream": "0.5.1" + } + } + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz", + "integrity": "sha1-IWnPdTjhsMyH+4jhUC2EdLv3mGQ=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, + "negotiator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", + "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "on-finished": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz", + "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=", + "requires": { + "ee-first": "1.1.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz", + "integrity": "sha1-IbmrgidCed4lsVbqCP0SylG4rss=" + }, + "promise": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", + "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", + "requires": { + "asap": "2.0.6" + } + }, + "promisecallback": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/promisecallback/-/promisecallback-0.0.4.tgz", + "integrity": "sha1-uTTxPATkQ2IrTWbeTkLqX2zmbnQ=" + }, + "proxy-addr": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", + "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.0.5" + } + }, + "qs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", + "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=" + }, + "range-parser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + }, + "send": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.12.3.tgz", + "integrity": "sha1-zRLcWP3iHk+RkCs5sv2gWnptm9w=", + "requires": { + "debug": "2.2.0", + "depd": "1.0.1", + "destroy": "1.0.3", + "escape-html": "1.0.1", + "etag": "1.6.0", + "fresh": "0.2.4", + "mime": "1.3.4", + "ms": "0.7.1", + "on-finished": "2.2.1", + "range-parser": "1.0.3" + } + }, + "serve-static": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.3.tgz", + "integrity": "sha1-X42gcyOtOF/z3FQfGnkXsuQ261c=", + "requires": { + "escape-html": "1.0.1", + "parseurl": "1.3.2", + "send": "0.12.3", + "utils-merge": "1.0.0" + } + }, + "socket.io": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", + "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.5", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.4", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-client": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", + "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.5", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tinycolor": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz", + "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "utf-8-validate": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz", + "integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=", + "requires": { + "bindings": "1.2.1", + "nan": "2.4.0" + }, + "dependencies": { + "nan": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" + } + } + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "vary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", + "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + }, + "websocket-stream": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-0.5.1.tgz", + "integrity": "sha1-YizR8FZvuEzgpNb4VFJvPcTXDkg=", + "requires": { + "isbuffer": "0.0.0", + "through": "2.3.8", + "ws": "0.4.32" + }, + "dependencies": { + "nan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz", + "integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg=" + }, + "ws": { + "version": "0.4.32", + "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz", + "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=", + "requires": { + "commander": "2.1.0", + "nan": "1.0.0", + "options": "0.0.6", + "tinycolor": "0.0.1" + } + } + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..aa48dbe --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "kurento-one2many-call", + "version": "6.2.2-dev", + "private": true, + "scripts": { + "postinstall": "cd static && bower install" + }, + "dependencies": { + "express": "~4.12.4", + "kurento-client": "Kurento/kurento-client-js", + "minimist": "^1.1.1", + "socket.io": "^1.4.5" + }, + "devDependencies": { + "bower": "^1.4.1" + } +} diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..256c5cd --- /dev/null +++ b/run.sh @@ -0,0 +1,3 @@ +pm2 delete server + +pm2 start server.js --name server diff --git a/server.js b/server.js new file mode 100755 index 0000000..3dea732 --- /dev/null +++ b/server.js @@ -0,0 +1,446 @@ +/* + * (C) Copyright 2014-2015 Kurento (http://kurento.org/) + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public License + * (LGPL) version 2.1 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-2.1.html + * + * This library 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. See the GNU + * Lesser General Public License for more details. + * + */ + +var path = require('path'); +var url = require('url'); +var express = require('express'); +var minimist = require('minimist'); +var kurento = require('kurento-client'); +var fs = require('fs'); +var http = require('http'); +var socketio = require('socket.io'); + +var argv = minimist(process.argv.slice(2), { + default: { + as_uri: 'http://localhost:8443/', + ws_uri: 'ws://localhost:8888/kurento' + } +}); + + + +var app = express(); + +/* + * Definition of global variables. + */ +var candidatesQueue = {}; +var kurentoClient = null; +var noPresenterMessage = 'No active presenter. Try again later...'; +var anotherPresenterIsActive = "Another user is currently acting as presenter. Try again later ..."; + +var rooms = []; + + +/* + * Server startup + */ +var asUrl = url.parse(argv.as_uri); +var port = asUrl.port; +var server = http.createServer(app); +var io = socketio(server); + +server.listen(port, function() { + console.log('Open ' + url.format(asUrl) + ' with a WebRTC capable browser'); +}); + + +/* + * Rooms related methods + */ + +function getRoom(socket) { + if (rooms[socket.room] == undefined) { + createRoom(socket.room); + } + return rooms[socket.room]; +} + +function createRoom(room) { + rooms[room] = { + presenter: null, + pipeline: null, + viewers: [], + chat: [] + }; +} + +function joinRoom(socket, data) { + // leave all other socket.id rooms + while(socket.rooms.length) { + socket.leave(socket.rooms[0]); + } + + // join new socket.io room + socket.join(data.room); + socket.room = data.room; + socket.username = data.username; + + socket.emit('joinedRoom'); + + console.log('Join room: ' + data.room + ' with username ' + data.username); +} + +function newChatMessage(socket, message){ + var message = {message: message, username: socket.username} + io.in(socket.room).emit('chat:newMessage', message) + + var room = getRoom(socket); + room.chat.push(message); + + if (room.chat.length > 30) + room.chat.shift() +} + +/* + * Define possible actions which we'll send thru Websocket + */ +function acceptPeerResponse(peerType, sdpAnswer) { + return { + id : peerType + 'Response', + response : 'accepted', + sdpAnswer : sdpAnswer + }; +} + +function rejectPeerResponse(peerType, reason) { + return { + id : peerType + 'Response', + response : 'rejected', + message : reason + }; +} + +/* + * Socket pipeline + */ +io.on('connection', function(socket) { + console.log('Connection received with sessionId - ' + socket.id); + + socket.on('error', function(error) { + console.error('Connection ' + socket.id + ' error', error); + stop(socket); + }); + + socket.on('disconnect', function() { + console.log('Connection ' + socket.id + ' closed'); + stop(socket); + }); + + // Handle events from clients + socket.on('presenter', function (data) { + startPresenter(socket, data.sdpOffer, function(error, sdpAnswer) { + var response = (error) ? rejectPeerResponse('presenter', error) : acceptPeerResponse('presenter', sdpAnswer); + socket.emit(response.id, response); + if (!error) { + console.log(socket.username + ' starting publishing to ' + socket.room + ' room'); + socket.broadcast.emit('streamStarted'); + } + }); + }); + + socket.on('viewer', function (data){ + startViewer(socket, data.sdpOffer, function(error, sdpAnswer) { + response = (error) ? rejectPeerResponse('viewer', error) : acceptPeerResponse('viewer', sdpAnswer); + socket.emit(response.id, response); + }); + }); + + socket.on('stop', function(){ + stop(socket); + }); + + socket.on('onIceCandidate', function (data){ + onIceCandidate(socket, data.candidate); + }); + + socket.on('subscribeToStream', function (data){ + joinRoom(socket, data); + var room = getRoom(socket); + if (room.presenter) { + socket.emit('streamStarted'); + } + }); + + socket.on('joinRoom', function (data){ + joinRoom(socket, data) + }); + + + // Chat methods + socket.on('chat:newMessage', function(message) { + newChatMessage(socket, message); + }); + + socket.on('chat:loadMessages', function() { + var room = getRoom(socket); + + socket.emit('chat:messages', room.chat); + }); +}); + + + +/* + * Definition of functions + */ + +// Recover kurentoClient for the first time. +function getKurentoClient(callback) { + if (kurentoClient !== null) { + return callback(null, kurentoClient); + } + + kurento(argv.ws_uri, function(error, _kurentoClient) { + if (error) { + console.log("Could not find media server at address " + argv.ws_uri); + return callback("Could not find media server at address" + argv.ws_uri + + ". Exiting with error " + error); + } + + kurentoClient = _kurentoClient; + callback(null, kurentoClient); + }); +} + +function startPresenter(socket, sdpOffer, callback) { + clearCandidatesQueue(socket); + + var room = getRoom(socket); + if (room.presenter !== null) { + stop(socket); + return callback(anotherPresenterIsActive); + } + + room.presenter = { + webRtcEndpoint : null, + id: socket.id + }; + + getKurentoClient(function(error, kurentoClient) { + if (error) { + stop(socket); + return callback(error); + } + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + kurentoClient.create('MediaPipeline', function(error, pipeline) { + if (error) { + stop(socket); + return callback(error); + } + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + room.pipeline = pipeline; + pipeline.create('WebRtcEndpoint', function(error, webRtcEndpoint) { + if (error) { + stop(socket); + return callback(error); + } + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + room.presenter.webRtcEndpoint = webRtcEndpoint; + + if (candidatesQueue[socket.id]) { + while(candidatesQueue[socket.id].length) { + var candidate = candidatesQueue[socket.id].shift(); + webRtcEndpoint.addIceCandidate(candidate); + } + } + + webRtcEndpoint.on('OnIceCandidate', function(event) { + var candidate = kurento.register.complexTypes.IceCandidate(event.candidate); + socket.emit('iceCandidate', { candidate : candidate }); + }); + + webRtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) { + if (error) { + stop(socket); + return callback(error); + } + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + callback(null, sdpAnswer); + }); + + webRtcEndpoint.gatherCandidates(function(error) { + if (error) { + stop(socket); + return callback(error); + } + }); + }); + }); + }); +} + +function startViewer(socket, sdpOffer, callback) { + clearCandidatesQueue(socket); + + var room = getRoom(socket); + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + room.pipeline.create('WebRtcEndpoint', function(error, webRtcEndpoint) { + if (error) { + stop(socket); + return callback(error); + } + room.viewers[socket.id] = { + "webRtcEndpoint" : webRtcEndpoint, + "socket" : socket + }; + + if (room.presenter === null) { + stop(socket); + return callback(noPresenterMessage); + } + + if (candidatesQueue[socket.id]) { + while(candidatesQueue[socket.id].length) { + var candidate = candidatesQueue[socket.id].shift(); + webRtcEndpoint.addIceCandidate(candidate); + } + } + + webRtcEndpoint.on('OnIceCandidate', function(event) { + var candidate = kurento.register.complexTypes.IceCandidate(event.candidate); + socket.emit('iceCandidate', { candidate : candidate }); + }); + + webRtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) { + if (error) { + stop(socket.id); + return callback(error); + } + if (room.presenter === null) { + stop(socket.id); + return callback(noPresenterMessage); + } + + room.presenter.webRtcEndpoint.connect(webRtcEndpoint, function(error) { + if (error) { + stop(socket.id); + return callback(error); + } + if (room.presenter === null) { + stop(socket.id); + return callback(noPresenterMessage); + } + + callback(null, sdpAnswer); + webRtcEndpoint.gatherCandidates(function(error) { + if (error) { + stop(socket.id); + return callback(error); + } + }); + }); + }); + }); +} + +function clearCandidatesQueue(socket) { + if (candidatesQueue[socket.id]) { + delete candidatesQueue[socket.id]; + } +} + +function stop(socket) { + var room = getRoom(socket); + + if (room.presenter !== null && room.presenter.id == socket.id) { + stopPresenter(socket); + } else if (room.viewers[socket.id]) { + stopViewing(socket); + } +} + +function stopPresenter(socket){ + var room = getRoom(socket); + var viewers = room.viewers; + + for (var i in viewers) { + var viewer = viewers[i]; + if (viewer.socket) { + clearCandidatesQueue(socket); + viewer.webRtcEndpoint.release(); + viewer.socket.emit('stopCommunication'); + } + } + + room.presenter.webRtcEndpoint.release(); + room.presenter = null; + room.pipeline.release(); + room.viewers = []; +} + +function stopViewing(socket){ + var room = getRoom(socket); + + clearCandidatesQueue(socket.id); + room.viewers[socket.id].webRtcEndpoint.release(); + delete room.viewers[socket.id]; +} + +function onIceCandidate(socket, _candidate) { + var room = getRoom(socket); + + var candidate = kurento.register.complexTypes.IceCandidate(_candidate); + + if (room.presenter && room.presenter.id === socket.id && room.presenter.webRtcEndpoint) { + console.info('Sending presenter candidate'); + room.presenter.webRtcEndpoint.addIceCandidate(candidate); + } + else if (room.viewers[socket.id] && room.viewers[socket.id].webRtcEndpoint) { + console.info('Sending viewer candidate'); + room.viewers[socket.id].webRtcEndpoint.addIceCandidate(candidate); + } + else { + console.info('Queueing candidate'); + if (!candidatesQueue[socket.id]) { + candidatesQueue[socket.id] = []; + } + candidatesQueue[socket.id].push(candidate); + } +} + +app.use(function (req, res, next) { + // Website you wish to allow to connect + res.setHeader('Access-Control-Allow-Origin', '*'); + + next(); +}); + +app.use(express.static(path.join(__dirname, 'static'))); diff --git a/static/.bower.json.swp b/static/.bower.json.swp new file mode 100644 index 0000000000000000000000000000000000000000..c784b8b30b27ca9efd14dc1ab7b9090ee08e7f1f GIT binary patch literal 1024 zcmYc?$V<%2S1{5u)iY*50{`6^7)p~$^GZsQ1aUAk3v><5jdYC-b&X7P%}|U%(UFv2 Yo?4`rRh*xPB0S0&4S~@R7@!aU07AhIp8x;= literal 0 HcmV?d00001 diff --git a/static/bower.json b/static/bower.json new file mode 100644 index 0000000..3d40a54 --- /dev/null +++ b/static/bower.json @@ -0,0 +1,29 @@ +{ + "name": "kurento-one2many-call", + "description": "Kurento Browser JavaScript Tutorial", + "authors": [ + "Kurento " + ], + "main": "index.html", + "moduleType": [ + "globals" + ], + "license": "LGPL", + "homepage": "http://www.kurento.org/", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "adapter.js": "v0.2.9", + "bootstrap": "~3.3.0", + "ekko-lightbox": "~3.3.0", + "demo-console": "1.5.1", + "kurento-utils": "master", + "socket.io-client": "^1.4.5" + } +} diff --git a/static/css/kurento.css b/static/css/kurento.css new file mode 100644 index 0000000..1aaf342 --- /dev/null +++ b/static/css/kurento.css @@ -0,0 +1,77 @@ +/* + * (C) Copyright 2014-2015 Kurento (http://kurento.org/) + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public License + * (LGPL) version 2.1 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-2.1.html + * + * This library 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. See the GNU + * Lesser General Public License for more details. + * + */ +@CHARSET "UTF-8"; + +html { + position: relative; + min-height: 100%; +} + +body { + padding-top: 40px; + body +} + +video,#console { + display: block; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow + ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} + +#console { + min-height: 120px; + max-height: 360px; +} + +#videoContainer { + position: absolute; + float: left; +} + +#videoBig { + width: 640px; + height: 480px; + top: 0; + left: 0; + z-index: 1; +} + +div#videoSmall { + width: 240px; + height: 180px; + padding: 0px; + position: absolute; + top: 15px; + left: 400px; + cursor: pointer; + z-index: 10; + padding: 0px; +} + +div.dragged { + cursor: all-scroll !important; + border-color: blue !important; + z-index: 10 !important; +} diff --git a/static/img/kurento.png b/static/img/kurento.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1a4ad3b243c7a31ddff38a00835b7e5eea30ca GIT binary patch literal 6499 zcmV-p8Jy;cP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2pbI&2Fk|@6#xJZl}SWF zRA}Dqnt5;>)t$$`uX}oCB~&N!Be*cfafR+dq0_kMY6C zh%Hj(SM{qm)6?_b?^EC3JNow;I9`sI&s`D!AD!4&iv&o3tpJR(zxJ-)%YU_S^h&G( za874-W`dk@Sf_-IBiK4!ux;aAg zXbJA!1>3X=rgak#2J6{)OV!HQhOw{g=FbHjH!lAn@=y99SP3`|00!*G;D`Z6Mop0` zA^{dLKz6}ye-+_tZ+%3~R8{!L57e>v5*t;phToiw#Q2+GQUXFmj&p`ubQs8t&kPBX zp9{OY7hz40R%>I+ia*++j@6%0gX68gaKX-H7s;4=Y-VTJ)It!DaWv%3xceSaEKt9L9fmHU1) z8ZM0o3bN^q0|cX;k27)so8~ zym`>U0kDt5aRwj+kQ0Y`dkcb^w|l6e1 zBD$`(H6wU#?T30p<1b2f_5asM`g-{3f6Vhl-pnABx7Y97aDD$^|2Y8O{_K=rB*uOpz)X-uWE9obf{EZH zW6+y+BdA&3qIa}hOM5yWDA_UCoh?}H>VH~PIA-z+kaH7Ro^7p-8EfE*7&^M!N~-6U zc5ZpM^RW9-=V%QtT(r0r4jN*W=bv-f?Mf1fT7k6!GR-K!NCeNnh1BCKpJBE$ z$Gz74YVj`Ld=k*AUH8QQyy=b$UwY^6dM}oE9I*3Kipi|)bYTe)06Wpx5}pg&JqWpad%ND+{PUvM z+kTggN^ds)w9th&Us39|n2UuL1j7oJEG!cYSy-~rhQQ5gk+vLAHXYF!%Z^5 zcczq#LqT3Xl+pzSr+r;?y#M?`8(7x58tg=a%K_jBh(wI_rY0dbe)zU++w>>pyYs(XF2od`|Gye^d z_NSW(e1T+Stl^Q}eIJzSMlzCqXrJtr~Ax-KCAc%BNah#_MOt9QTl!m9?29 zNCI&Odh=eWjji{pU7dFy4XU+&vujQNmBi|2mefpReHaR0tc0ZyhC)~y!Wf+a#W2Q3 zpVN>^Stu>j%26@E1=)=`gNiMhy!ru!lIb&$o4aNzGsp3qFZVG^L=)hoK>8?L!-eHUw=VFl`9NFpRY@ zmf;6JjEN>*CM1baoE@B^iT%Ryo*U4(xM%{#OqdXxP04@ z!M5$KDGg=M%V3^sSw~~ahA`HLqM-=T4nWxfNTs1QL#5%APS=K@wS`uU!C)|Yupoem z!HkORCKOEtkmPju7Ij_$VnwA$c=4|uI-$rO>KFnOJv8>2-TFviYj*u48HC+02C8Rn zN_8Vty^y*Wq3J_t`ytH$r0s*UeUQ?JQVL2(rnQ3BI$bL$qY{{H2f>A^g{1*pY&+_MEZe)J?LPwsV8H-eSk~z= z7C_q}XdZ%60c1!}lA#nsOM+4ir8!*_v?2`oDOf`wW)N|t9zzgw7RsqG1r;)+0z!k{ ziW%@?v8uDLy!)hsoR+E`F@o^;>Z8F)({rt_I}wvjaX1A%EzTL*l-4}LHJ-o#eWaoG4(e?KRTf_v$=1a`A)wd4qTe@{Z&IlK2k#=QUeP9phb|f2vP47D`%ZMX&}iI=v(qhBf<@>mj1Ptl&z9y0;7IcOpyy(g*xONCujV z%JV7aU2$NYLq8idu?C<44n>0d#ZpLTYwDMkOETMBa`wB8nsKT0u{`vFFaTu02m^+c zfC@P>$O!L`MO%SHSFW=G#`W%C@=xBUemX zV*fn85&-V}+jZ~UarOGSGUOX&fH!0aR$-*ru!34f5GoB~48!V3F>5GV3Jik?0f5&= zoKFABEf4G<;mqRb(E<(_y=+=bu1_eu!yEbqUK;Sga%<%#GnDEcYBchaNjS0ffH-x3(#0xt<&DL=r=MpzuV@k$Pj2tOVA?Vg;y#FIydAOCXmbJ%1VkYt zF;60XQrIR6?R}z@U^en$qid?wF#!g7NJT@NhIZ%E)6H5kclMVwD=P zDxGpG>}qd1J&zN^H$}zZ_Sx5;cIMPv^G&1a5^H!0TZYxqwkut(t*dQ(>X?tP7F_eM zajn&}0=P8tk0FRb%-Hy~C4=D!Gp@mf@t0F)OnE|i@#~J-YWhHg`M`LDO;1D&h#ZDn zN;YE{4sH<&MpXz*W{$;mM2GJG( z1yQP>AdErZq^a0>)wk;Kg>jds7EG>I@#K1Tj?gk^sK*)Ub$g&@13&>B3Wx%RH^(CJ zMJwaw^th4ka_{D*?enjw`gX#>VwbUWWo={qs2o1dTX^gF0RNGJBr}7V!A3(|aUEuS z`AfGveR}f#ff-XanRxuPgJw+r7$9ZTX=9slefWPC-~fOJxKkL3(+JKuek}2%xJk5p znAMrWh)z~dJ^vrBX6DBLPB1gb8pQJpaq-=E%2TG6&AaTB^0Rbd;lu2@pFHO1V~QTh zJBrp$Fd&K<$sBwocjN9g+4$>>1a9-nhn_Y@FVR{{Z8QuKdfHm??ur$Osb#TR(bw|^ zD>Okx;dO|awAqZ%JnDmB8qfm}2T`xMuCKv)J6nH81P1`y*F5@!Hu@^9wXc+h<9S&B z#+!KI{wJ%(FfSEhxE?&}@6L1rxV)sjv8G~Zm(BVZW2C)IpMSmBz3vYUdF3b85ZUR* zn(3bBIqTPL6eY7xoIYh%)y~A4H)e7yHX6rc20$Hv8;V;R*NpVfBZlj3i6*Flz1w<| zWiy^7;zmQZ+FD!kUVTGu>Edry%zXXDq#Fb-#HV^$q5;4%06#8nX>2*B1E^2ad#Yon zjh9r_yN>gaGNx(Y-o4e^l$iX5s!Dg-hPPmnImgoM9soZ8a7%GZZxdS4PW~&+Of=&Z;?{ z8xG9|FbhB_fP4VSbe|!B0RUa;@Y`J6(x`B}952Vq@$z{s{|9Lj@jsBMWV8SP002ov JPDHLkV1gbuNT~n- literal 0 HcmV?d00001 diff --git a/static/img/naevatec.png b/static/img/naevatec.png new file mode 100644 index 0000000000000000000000000000000000000000..05ee7041db5f47d4953c24f67cd2d645ca114ea8 GIT binary patch literal 52049 zcmV)RK(oJzP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000*f000*f0cW4mQUCxz07*naRCodG zy=jnT$8{!l_j}*I)V^2s-e{m3I|zUP0fL(-krYRwLXss}q7;&?@yPx$6QO_7g#XzQ z{$bgU(by9TYeEW{l4nATC6O8sB0v%Vu`dmvfkv;@-L-FTe|Piu<-PaSebuk3tGcQh z4d7+>tGnfL@?_?hCo@l;lzrcqy6*PjfGo>ONKJH&6BiYh$CoI(=sE7Ed*9_imjk=t zK&OVci|D#R_mBewyp6xM=mDT|+l%f)mjhi6?3x2|SJ>D!4|g3w2yUW-LV38`i7*VK z!mo!gLUP&0+eoQ7#mB2jBdpdzBfbe$EA4! zCX;LO5Bv!*q<=n#{=1hh2f7^C1qZsIxHJGzDjHIPmfIL|NC@!qo z%eA^w`R_r?Dd4J-Bq(5?GWHM_Z zXGXH^A0pcNANzG>mO6a^M?zqZXrKY*q>vLL^x$ zNe%*VPOn614=x@~0A&2##`0l+=-tTyDXBSygFp4i@UIqg#=(1z=O5B_C85faLAu}( zLSi&F_FdQW-N){AA6qNg(|_^ZE5~XL_a~s^MR*bOj8VMZYnKCE4%{3EKGmSuiDicm z%VrON@L&G&RKZH?i9yNF`HG@>DNQyMU-mp-ZaPjwZmQ1ZtM=Tlefd!1>9;>D4-HB7 z%P;$Or#L&kBOs5CO4c_Y9VztoWseW{TZhvrZ7P{ido@)iAa-Hz<-qni@Tmkv0uosilh~rULFJ*7i9TJ@M~VsMfm})- zm>f<_a2TtpiiR~_1x_wi>{7ky*5^ykt5x5g?aP{PH|MQ+M7fMOh1A#~4bDBr(^XTd zH8?n&I`;6%;Hb>}kLsy{babRIaqQ@1`Y7fRGpZs}0&MdxrW3W)V+m_k<&C;zd>C%S*^Pj^Gf-AsciQuD&`$C5+%m!hBQPp@ppp)yjltNGtfhgkNipb3LrM zV_f`kel(80yytt)lkysuqWRc$T@HL|IPj?hMYQ=AAe3?#kzi_{P6-m9h0T|^>E@5a;%+@X0)b#ct zIxyJ}@?Djij@sR(R$!%5xM4Ug?8rDPPD~NhPJFe1ig~imuAa@|xF?>|cO5X?=5`=MR7LV0LmWeZbI^43>^Ehy#0NBzvjiT&p+y zl~-Q5aPb!&8LNEf$JY=21M0hfyBzprbKuhiiV;}&ja*L;Ams3aC-R@mW%N@RGAE*9 z4zP>H763CML=Y^H$^u`}J^c`vpgKq-;(s}xG4tu9pE^95daAG2ytw?l^aDw{P(sK^ z^77@nD?Rm0iyMcj-=v@TF0A=;39xA5t ziuG8bm^^&<(frp6Sv{Z4=y}(X{HECYKCl9$~Cvru>H2hm==&x>1KnA=xPnyA)Nxgxy{9{RPFis z#oD!6$!Gy3gHuBM<)0ZnaAY(+@}-A*zlu&^ysuy!gsPEc8mh$^PfQ&+lcPzkuc#M( zGd1Q+&(?Ead@wIL^Q%{%Iq!EB!Z(yd_wkd>floXr0!Re7L}0_>9LOuhTvD0B%5gCP zMQEX%A|O+kSP} zN6*wsRe&Otz(w3)T!=$Z0@D=NfgEzF#WqkZ z+$SkbPdaF*(jCx;{9?*d`%D^{h+I$uOc)f+}HqRrbjOp__>ZKUhfO0uQY6n4<&9;hOE9`r6||b=7yyA}#`B%Yh(~LA>CVZY$mg zKDvLq9QYVg2BNU1ee5#lp;0P_1$XC zU7KC3Ut3#g&b|810s%~b6ccJRB(>Vqt&FMkq!UVyrpP+hwp(Q`=0jV)h2;sXqC>+- zhiXwuA2iYi)ry#_uIqB(Q^SG11BE?cS*!ul(hQrcz=rVthAALC!$pl)gpUUr9+uR! zkxAtG|qE{ngXc|2Vr) zes`uUtq?pTdPZ~UL^7op@ymyuKmdsFL0%&r#7b(xY>dNsB@awpPLK4M17|O;7GNbP z1CLbG5ySE@{#F_cLnmSjZmITk-S_ZQ_tNFSZO?(*3KX~ER;uii4bWmTi_V8MERaUf%wT3rq>8=I6MX~S`Z80QpMVaGR z7aBCaYkT!Z!&_S|J6Bgr&dj?POAGEoxsI>V3b#nkg=Y-Su|$r%;@9df@O3MWfi8h^ znzZ>Y$EZAzW<=h`EOwu}9Qasr;I;roG_Z{}2wU@FF|JbDQnFdeA~Gl?$y>$L8{Rnx zPt_Jmm2IHFu=vJ25|o<8Rmp1%IE`w>sZ`3&8iu1mI@duKLvG(iQdT@fv*t9Lb+1ux z+VyJP>8N%CdK>>%mM^^jrGbCI5?a+0Hq*o$yRhOrnsI2 zl^d_wu-)1#r&nHCt2iJ2-+z1lPn&iB+H0rFS3Bi>&DENinJhW34YP}K0}>{+5`_b| zJVXkfK|3Aqkd}~8DTUeqT^O`ofud3wt3x&NHlDZeo`}ggRPtW94t~0?x*Yh}ao{5Z zMKq>36t$#{@V#}QAQ_`$x#GxBB3UeG=|B9PBRvUSHAaW69_pdEj_;PSdb_mdRu)Um z<=^_oWbM^6^RqQsZM^qh33w@n-fYaR27Lj#g8jZ)Db<|irE+5qh#<~7iAoJETimvj z7Ja?`8uyQo0dxeg<5!zrwc2#omY1EG>E63S>Qp(S!DV+!L*+4eo#Q|#rk?JcTRc^Zv&Mc1Xb zTu4TUqkU(QH#b+Q%&#~rP$ryrU9qtQa0Z{kiA4lxEs2#g2n5E~vI}?s;n9aw zTgR|`=H=6i@A(a>HJ1qDHE6hJVO;l+l9G-YmNsOlimB9;IaPP(bUo#iRE6cZB~6<$ zq5GlBf!l-ww;UAF62)YH2n2!+cxMa@NcyA4NACLFZ%*c)`fUFbJz2fy&}iyTU6&KU zoD_Z*8ZnK$@*pS5e~7|&07Wo_?bRJeYF2Ag*Psx+^y>R-Z%)tEKKR0C2Htba{<&w~ zo)eN9{8PWLc6p|B#j&k-fyGba#~HT(1ckUqgd{lLc*c=x+RT6$K4TcldpcmEH?!Ed z3Q2alS+`H0TlD9GFI)d*hCtuSY`MO6&oTK2MpM(=x}U^`6YQ8#yoOyXOSb9)5DEGs zJ@^l3K-f;P|It63wZHX5-%k|PyYhpV=Lh-=#?+yS^gWh_z1O;I6387Kaj;slm)9^y z`O-T}&n>Sx&j1jAbgnwH62_nS@4q!QHaU_0>CfI%{LIvF@*c3qAgCg|vsSU^e{yf% z-B%at|9oH|{iE}9l_ikV0^m+`b>DS4aJzEgmV@F(MxfCt-@31m(DF^Ir^g(@UgW-1 zLcS9!B)!;ual$lY9g7ZVfSZGqi*Y4HLT6d^dx0v;P*8SZHQO5>Os*yjY3`4H@38%Q ze{`0Ol(^&m;unW28OvFMz*&QUX9K0#!1u%vnkY0@tL_>=ai#3ZYiG{PH?|u&=!=H* zLTQ?yM54DFzJovi`B&$c9LHCN`zq(qfhc1Gi376XLr0S~ZMklP9Wm%kmP*d-Tklog zU#)wWzVqxg+J&S%spN8!na)Z%*qA(omHR_IIpa`VmPYwxi)n3Xtt_8WO(#7$DRKIu z3yK{IqxoQRA%fVnP zbgK!5bXzkL(jzQ*Nor3%(Ob+(MJOPT)f&#{zWJm(|NNWF&z!wdJNu0XihuLtmzJo< zSAP9=hxscol##zeQ9~y5zlUb1n}d zU{V2da*C?UDvltnVlkxr(wU|2U$|PoWE*od{Cd*>f!MbM#O-_s16K!X3#F?wz5mDT zoKt-9?WMmhWX(}@9>aAE%N*2!>OXf&w^wf!i#e2W< zX#dwSg#j&{m;-g`gjRU`{=Ub1&RLZ&JUCbb%l;ldW@5g&w_Of=Y&dYsKyf2S?gZdH z_}N@CH*l(Fi63W%{5 zy)eDB>aM);er?V7ms=fIZ*v%;qLY+WFNN|+M~7-fJYeylyTDjnNy4^c+Op&h;ciR0-bNA4In^yu9^zxBY0!u{A5SAc}kHjIrV zGKPywYJ3j9F=mKqq2w0#1H-SDWhAU8AGCf32gk2{FKvv>E;rx&>+ethpVQdSd+4S4 zg+H_0|BNF=UmqDr^g&V`hlDvn^+lknf-$8FF!5a5aVg{CH6_Og3rGTXtq4gLAH}2i z^U~YP&%AT4d^TbGf0w#?b$KTz{H@2bH+Ox~b?H&!p{Aoyt_njC#cyPix(BESWVb5&}W98QF zl09lJND5*jxAbaCYIMLH#XM!{cYg7}L5yav{!f2#dFJ6Yd9_lJ=9bo)A3(d=&11U@ zB-J#e9xm#j4q{OpOY5Blbtm+@{;K9 zA$}oG&}ajT)|Ac|`UWnV_lvv<$&u^0B57`!lM@e|D1L5v%|3GBT2;jy+TTgi<-hy! z>kC(K&hx@6Z!Z43FFZ1M{PBBxe-*>Zqr(H%grbRgO41eVuIoex=*9wugR%13dlxD% zJ^kYRON(pvfBawn{M<$4AzCnr$hzfM(6DO&diBbzo$&J)?>*Gaox57Oz(clr^Jd?= zQ3_eY^aFH8?ec1^dHJ<7D{t4DVs*TgUy!j8B-y*LPEcfQlT2HIx;I@8d_)}BS5QR7 zC!nxx5)k#TKiX?O`rzQ#2YZaM`%V-dv~*~^2@k=-MGOEj+~$zA6B2FCDFKG~91NqG zEZQ3-JH~~L&Y6_f^K(y)eD(ZvRsL7MbjbgmUmkh>>{)4X;OOf6i}UL28|U@u*`>xk zsf2ph!Lih-q^0!a(s~ASW>9k$)@vA-&oiH~+}*r1TfI=JxHDJhYCow|y|*DTy{FpE zS&-0LSV0~{CP>ZZl;6HzPM?#^uVP!?=J~~0++`jqlQugWPz`lZFoUNmy zl4dJ)t1qWd=2O}@4vH#7llF0cyx$=fZVcZ33@8!+i?ohy|GVdAE-=3Tg?~OFE(G)PFMM@q@zR2G?#N_zvM1{vz@m$Sj=`waJgDM0 zGjE(-JG)kOFF*a_+?mnTb$hU@ zCIzDnMGsSFz(pGt7Ovtic5bM%Ww~BIzc|AkD=q1eWFsz-s}NN9>SOIr{KL%RhhG}_ z-uGUad;7W9{l7FdYe;b=v+mU999dd+%S#`4gZXI%CUV7;)|;@@40Hlh zKnwvI9|dD!WFe7FsYSz5vO{BPx@TTm1RY#$=G+%`^lHVTEa^>YwSOvI!}+0!{&cDW zwM4fG)BlT0jhXVAU4#B3t!Z;8_>s>af{uN4e-MCO<>Z9C;2Wkl*pqK!*40>AE-kr| zR(kE-HJB}1ZFPcAJR!*i0|Ix}>dmB-QP^@!U_X-FpVNk>hOGJe!kXR@!E z=tkbZ& zii|*FP*%jQnQT%`p1oXq{4;k9Wc9m^ws}C(zPv20;j%XOc6k9;`M&#B1%;VcBp+jL z%D5mskcx0G9P&!lBYqPfgSQ|5zsy&Zr?)OiP)2X89=~Vy0>ou46J1%h0rA2lLlp@#o4y*`I~q^YO4Be{OYi@NwtBzJMZ_ zA{r5yGr+xMDaq=~nmt&+=);F#HJ6@3U(uER_scO2{s>uEIAJr_lL@6T)NA%srF4rX zrjL&yWdhu;TRGh?8gCSDoUV<20W1QHH@@HN=P;dZr3KX{6PA8VOqD>zG0<;>iW6W_ zGO;}z`trV5f!=ExyYYQ|IB+}E>5bglFHmfy(>Ik$<6+?NWcmb#tS2KWvE>2tOfd{y zf4#?dSUV1mBXyw~1WjZ(tv{z9z4Jf{TF5D3cApI%g~W#1YOHt`pcsO|mQ-!W&z2Ev z@-bF%+Q2*R9exN@B%w8gjep|}zH#;|~P7-9VurWkia zS2yg(mjhutV+NwO))GYUE~*!Sz0+Hq&HVz!R>SPi>z1VHdDucs@~jdxk0A3x=_Z!_ zeb0E%Fwww407;PLL_$mF(tiHw7v}p3#R%1tXy?REkb@(^k_&BeE*_l}Gv zSLaVOE@IQ9ibbmC%kQi{|J*B!A1=9bSKq$ee&+QS`R;!DgmECMuR*)Ky)w6_px6mO z#s-oZYzP~{a5Vuv!A*yMw}vf5MhxD7b(GL?7<>{|u5&p{AA3xH#OODFE7qtTXI+H&p+ROo;35xe01HXg9E6qtj}y;oL)oyPH;gMb)Xit zGcMA?I7#5}?UuPc1;ve2BUAG4{mKNk$|^Wl<@T6V4+hah5^ht0xi0_?&d-Bg15d;5 z7Jy+62gN6|l4)BK%^d&(kuQw76$h|XmMVS)*{UKxw{ig{07SE|4;F2sG6PNAtwX-* zveaxsSF+gvZ9G%uwg8y#{P=PW^fWS=rK{jOz+LiJSEUlj`$*=BHrCJX^GC^nUUcwH z-ALyLS*Lv!(`;gW0XlEKTapwP3URY_)E}z6-O9GM=fh_qwGc#*8Qxnx88ZiqHT`&M z8GK+-?3toABin|_7`>(;dT#zWHC_LE5hDCDXyVR(@ z2mn7Xt(E^DeE&%GCPNO3RUa^&=Gv&wDIA_}3&4)(>0Un?4y1~i&$yC2rX+g40lQQ= zG{!tA;ob^aZ`RM?z@YhRP5R%ZW@!=iXNL6#SB{w2koUC?MN-FpafVF-D$kI#_B9(f zM?Ta-u+4?X5y-CViuDW=i$cAUqE7&|A=aZ1R2cxng=+;pmQe;iR;9ZAI>J!2zct|F zdj@C%J=zfHV&y@%15lKy_$>55L88`=>`=Ed>X?ML+u={AN(}y)Jcs*NzIv#*h9e0V z&pS;XfACS7TDu*1^+~4z<<9!4SUpDvP?yJjSsg+P%s`CF;scjoG2yS4QHw3f(0eef z=0PK~2y@F2WZyuM4FUOgVA;8jeZtHnI)+%*Zdn#LRI>;&kUsunKcVO19F*$HO2hFy zqaf+2W0GclPRO-_-hfaV%7PR>=K17=gw0(f&jh`cPj^G&D~(ooffA!Drx49D@+| z-@X4taX`%1%Vzo!2uyd|ihhzEJ6d6wNzPOmgJ^D5)3Ba~+2@O}y7VDFQbH7#wpf2| zRL6G1v3&!@kSGsUWU7$2mXV1%RvG;%I1V>n0IQqak;*#{0RP|(%cRayY;gLw>YHO z<(~1~Qn&r^u$-f2riRU)&zvlt0Pk(>{Z&PFFqP4DpKK0fGFd}1dTmeY!xUN(hmT`U z9FxsF*<3iGC(QXbRaLDCjDXMr^C{pU=kcSFS-gerIluNA6x$jtGU5H=mj`J$VbOLZ z*s%6Jn47`c29Rferv6|?z^Ttrjsm4wytt@RkAz_-Iy?lY|9 zU?!0rA4ndk)!oMQd~I2ATuKpL_X*~J*-YdlO`X7WR6ouG?tz3TEV-k(wb~uGbHL$n z5#tcdnVM3vnZ&`l6g~)w{2Da?-0r>GQ&0prh*k=q5JNaTy0dEyoE@yqqARGnI5kd( zxfx^$T|G-&LpUNwOY+B9T>9a>+=nOqME_=4KuHz`(Y{Xksy2WrsjTEe zQVjZgR&GKeoT%ffr)Y=JCKHmJ?voM;ycB1;?|Y8-6cjsAySm)O>BS!G55hKU({Gws z>kV?>$@l)g<4i>G!wqIAU@Wy!Z}_#bgJuo-EYLv|x`<(q)tMH7`?A_cY(#ARj^gnQ zX0Akk)PO|b6dgck%5R^y>_E_wlouQ2=5o35HqPw!S1Z-3qc+5`uD1`RT}t+n11NLZ z>^qSG?hT=>B{4=0M+Th`0WDQh^0MUBpe>id%urnamH@eLZofdWMf8QaYQ^%Uxr^6o z7t_gR{=~uDaZD57fT}=p+qax;h&YlMp_oW17Q&)zFRV6aF3i-Xbz2sp=Rcwtme_{*)}4Z%C!|MSR?!pH6G*f2;R za8a0O!{h0YUSj1wPea_!ocUza7M6R;QSP@;H;Z=N z1|AXS>;nyLQ6ildOJEeUgpY)^5=DjxmB zEtf>G_rvIsH8Tes#Ck*|5yZpo?frg9imlwv%=jE$R{qUz9D1pc)>d$U)C0&kS9t|b zg2n)`anGAPVg}PGk&^dV++vR;Yr3LAM+im=nv3Tym0tVq^K-9DWrf@KAj+!-gvCIm zWn+P1pCaZ(IdjK@>rkNB1*0Y&l4KWVCA1fGcj*JfF^%8;IWmdAjkN7wihCZjD3m>q zwHx8bfCE}0lRS)-k|__miRcR{i{&q&R|r=R!C6XH@7dK7)b-jA2ZH*BL4@k&7Z&fV0QJ&TZc9FlXBXn?lMT2=$5(7zZwd~HmeXjaWy=tHN-t$+_ z<8`&zJwu|3hs`Ir=m;|o$r5JfRP5$TQ!R%A zNG#BL@V&U(7f_55)&hs~=PS$o{budC*O&fgxYrsVA4*Lcx}3!3V+>gl0zc06F)Ysh z2z!xOOk3PWizxBM8;FM<01@-L3<$Ua3mZ+ZHa%Orf+I;^c=heYzhA61XYi3$Z@3yt zCI^h>--zQ zN{K^h$JCGEsUM=CiWY~q&h``b4xS75}w9?C?gg zXMJIXE6v#4>^lwHt1c|pFJoop;M`1=rQ z*!A>rDXqc0#2!1LB(wv%_Bi=&bX^YYk^`_QP=gANT0~n(3ef{CZJQ2j0zR#5r99Q> z#gDsN_)fTO#<3%B`zk4dYO!>VJfLUr-O$F~3ysxk{yX2jI(c+5bL6RqdVd+;xr`y; zlQ`qR7%BS~XvT0;AXz{!0UHIxim%tP)paPrkyk)Agj7`py5i_k0EjaSwV9>0=KFvC zk5~TKZrbnZXG-U;wua3i&ouU0LL3Z;5wGLP5ViR-?A-!ix+`l1Rq;=%skCo2t@l7I zjnz`j@47ArKGhsRTL6p=Oh651#L?6dG|e=|aNr4ADebJ_uV9deiLJnelW1&fY;1T` zsT3?{bu)Lb7 ziDDd7=H?fAj0eQy?%ckBqCm5NE`l71<}XUC`9J^Z3=OsZ?Qed4bnMM{)}(*=i&MW+ z%o!6n{!$!QplQ@}M-XHc+r(kkOGtnsM!aQQ!iAjhAxn#82pqUB(hw{8L0At9JJ+D3 zJ^kl@H~sJ5y-@w|doRwv9EArB0)zoxK`-UQ>?}H^==*h7ks#o=CA9{i2h~dz`#6VT zU8hHNs*fggGhdSi{sG~sjT?9_RL|y4_BaD^L=6T(IB4IIX9svBkp`Xn|-}p-` zKbv{pX+B%@-Yo4gnmVN&)};OAOT>&D&=PsuCz=jnyM%uy3~f(9uNTVLupTd(8`(nH zB@#r!=^@T1MjVT-fQ0w4uFxi3dBlHME{;$BcR%KgdyW2kclQi*^Z;E zMb{`T2Mg;kKI%Sq@oFQvxNMJRGWva{uA~QwCXO!vIzjXX+ObE$AUX^diGYk4LL^Hv zkSv4mP;+wYb+=ZkISb2c&6(Nd=1a?^=0$8=en*!yZpVweDAwp5o;S?hwHkD*@Q`Fw zndz60{DY#$gtD(%M*z`^l$!q`=%>}--K!7iu&j+pBO-TuWkV0ki|pH#V_Y|iAWTc} z8s7H=+rv1SbX0~UDgTB2|8&i!N>8dCu_ zPkQu3s?V;~uOL2Zjclttc0&H1fMQtjSisRwfMUq#wgwohWZr-H?let`J@@3J{iS?P z@Bj9f#{FDI@6V>Rw65aJV4M$(Iz?l=_}8lZLH-0=5j7L_WicZGD?CluZfvZSnhO_a z>Sx~gp!DV|?<{}!g|}8NzI}G}64K(z)y`bh&X`hEb)$DtgTyob(b@-$U1-Np0kXiz zA`;>WfwZC%h1^-%E#CsDnbkdWyQgVKq(rnw*Bu4EfoI0KDS!7MpNv1Ed((6_qj3+? z-z@4KzyAnmQKgJwdXhGVN&Zm)p9UI0H`V0AViO#NSfgMy8uw_?=!E!^56mL`an1~F z%ax@9KK5&xIT+auMSQmpD26~ts@ap0-&|A?+2Bh$Jag=?6=1qGnM9_r$Hz32!4S75 zdyonp_$fd7Xzz#mO8L_H>B?flkkWGt<&&nS^`H6ClX4MtRs8KSCJs* z?6`_oQF}{#Va$_*J0}B1DI-izuH_`T&b_p&_Jk*NXlBSjb6OPb9)|w zg25Lts>bJ_2!e2t)XIG0p5=qpu>l ziFgrR1&{Y4b=Hk29;6*fULqZqWAtr1SA-YpS_mdOUWAFR+X>$0C*;G8^4X%Dfn&U5 zxVCR?k#Bg2=*DYiS%l-w25-0I5wt{Q5T!>__MDbPad-e~!dNj@AtfpU7{no6q!XC9 zV>wdf;ew>COWtL4{krQ*y#PO0nHS|8@E4LI{Ss7B{6mVBJ|TH4FW?2Yh>DR|n5R9- z$8IIXs9{A670iC}N$lZXlGNY&dVg9=Dhb6m6R8Arm7tT9(lkqh6y1Q5jE+N3lBrP+ zp(}Q^?*7rAy>&^|C4F$H&%@D}z4so^8yG*AEK{!gl3oB~R1A+5P9lP}p5wtrqvJQr z6??f_@ychX%kQm~ocVuxVeU1UZ@l>QkCrd~E&}b1i?X;?Y?K(Gt&fuPeSH!o2L24g zgrq3EZ8xB;QrOKm(82OT84Xxcp^5Wn&_P8VnWDio8TuUbZ4wsGnU37o*G_Y5@?k^A z5m?X&Nu%ZXmSa5p5xB%2=hl}!x(OQt8(8$iEw-cMpo#V*M8lFKYP?0RSj6BBvPn-* zP`FF%bD1|@xpsCHKS4XMojTPhrnYOyX9@(0R6L{$o@Pe{n3KoQ;6hwXXPyn3m3iB7 zwxcaT+Acn;=D+nCD$NSMstr!UN1zvXB&E zJsxGicsXPiv7?B51$D!3Dw2B@JTV~5V00)$1&8H%9SLM@8hfD!FpW>uH%_H`bP=51N?w1QA+0M0Y`tWU6l-(JfPjlR(&Da+bx&SAG<@u95}pVqsU1{2IuN% zeP~ZvB(1B$Y^jDl06dP7v(vak?@EnfG(y&2zyRlH@r-kKqkP)^4M+AAr`d4on(Ngu z;;Yr0)p=NLsYvw|DhyN6Uw{TFK>9)mi03J!$w=mgj-l7iqp?pReH|8+R5WDp(UsgD zbrqbh)s}MD0cG=83vnAA1?>h1iMk@vmL+FR^4&$bQTk6PnzW&&9%-oN zqbMHJ!kQQkPe1-y$EGg%g_Tg0SYxgCRIJT(wRQng?H>0Ej+ zlS=>VUq3#j>qZtDf`_p-kjf;~WBIh+mr7~{{IZ&+7}*32xk6~h+@Gy!Qe(h1GpLuT zkv^|HIb<0;&&8Meat5TUdJFu3S?yJflCI7U1IAuCvy#%WDt7%fP$>&U_4Q^l+?IM$z-0MMB@Y@RAML~yPovqn&vC16LuAb+UOAI9ySkRSY} z>o;5|ZeLrdO)r=1YZs;)PiJ%5>pwZS@Y+jntzJev-hKC#K4fN*uK(Z|Un(qz9q&+xq+8TM zK7;b$o^VN81f=^sFa-W&Usu#JJd|{$@fr@W_|VgP|IsiM)BrG=|_J*F43IN5+c9r%x%anNHhE&7oZvMi|BDCSj=@XEd zf7a2G_d{y!fm~0}<7cQf(D_YFYCWs@&Kb!py&*L!t@Fd-iJ%klUHHDyABKS+#Tq;{ z0ahPFrc-#vc3$vH@Bk*j2n(oRns3jd*ScJ-t)7;=a?(usIiCl|$qG;VBQIGJVswC_ zQNhHF>ubXhy+_q_&a0Q9cN~=Ww(F9JbBjOQ0>vI$;(zs1 zVGm}~M=kYIWsMP(ox@i~ZuU?5z?5`bWI+xh?!#5-JBYLOF^vHgYbT9l$h(WWr8 z))mE&ZCM+VlcukyvX|}h{L`pLWrQhhx6#4BVq}JoXqkzko9X!`%3uh_n@=HrD)iz| zF-m}NEy_{J1nA*)go7+c{@>_=eBm$ti~c*v3tAc)G~!nb$a&hRTAVT+xABskEWR$) zmI;g-hnehL>IjXqnb^_r2wI%Y4V(qN0uu1d)OA?ehZO1MrL=+LX_GK`u(zOy_)OF6 z8?`-U95(YNKx+9IbMYS1j!&JC^$hIPAL--0~+md2nlZ)hTh+7isAju zf?_A4cJvMkW0>?;O^laPC`u!=YZ1jEP%V1sd<_eVA4Ms~o`Z&deK7b#ZN-6KS`NbQ zQDUj;Nz+(vJdJZV=A~MVz!=tv>w|B2gLAm0qtIR*1Q1u7Z5>Z6J7Y`IC zkqJfBFYYJ07gaJIfK#eMgCYgsHpL;|6EMME~J&CzO zn$V|!&vc=mCvNa3NC&muIE;DcG!`BQFs3IDC_xJX5YKjbBBJg5ClByY#vpLP+O;}_ zbK__)6kY)=EH9A+sw_r5s_m@#ZetmG(IvmS$T`JbxJ<$@d<@xr9^282nVCS(7^YN^ zF8B~-4IFhbWcM8`vh+YwzJPNb)6yDk{nq5bw|{Qp+xe6}+LJR6CoQZj#T@*H zxN?0hMW#fdN8aHTo`QGiQAF0`eo{#_GiD^s-~PGrZ&&Ni;$MC*mHxN?&7Bwj@Q+V_ zH>x<%HHvd@uc8+cQG!;Kuj?qb{Te2&ugO^h5~6kx2U&d{9(2&b0%UCq%U#xd)tJDy z2jpyjMe>S&f%|A;Sj2ft|FB7@9_G!kx`O?PLE{W55X9p?P?i^k9+)fRcTp_3#)~d| z7k!Gt)BE*~LooCfs1}NL3Uf^d4Ws{}thtvPwWa@vdRE5(N zGgR{sSA1~)4w8;&2`Jjl-$F49Gf@v>0CWh^7qB-hm;;Z%A6Fnu9UNIgrFh478gEMF zX)&J|wtbQlw&m>;Vid5?`xQ+i)Et@Vhk#wdu2Rq#Ic{$_5mCtBkawWj)$SiLR| z_30;JB-Z*Letq(V-}sHG`k(yCdFmkEQit}mh(*Jznq!{x)C4DyF@$388@0Grxd0-S zB--WxhF=E_*P%&uuE1^_a@{)m#Y!>&2qH?5DBB=^5zWyvztRie^W8=le;2=x{6+DF z&%z530msB5?WCmYM=-wy3ERhnc^^GdV%*fZssZ&5SRrC36i9~{qJBmK`CP%T=RSl``m4n4RRj8mf*mUn%i6eb+qnMLJG*I z3{Z?{qYv?fp*5yn6a&^{RPL9DiG-+JgqNHC!??`e0~Yu-1Us!cNNkX(n7?)!(B*TU zoKqMJQnP|Zu=af13<1bX8Y3vKICJU&>9U;2XCgwFe$WXvklQ8bk#OpOAIL*2ym+hd zxQY=52xhpboaqHW!lR-T(YpXtn^;Y^n64 zJ~{MDt0m|BmA|U_8CQA{UisT2C#1qnXeL1lhM#82#oUW)&tJ1^($i{6o!1rXVb@oN zp}>*{wSg!S4x?Sy=DZCS1QH48h&`_-hb(00P4H|7D}1OFsMWj8qz$c3Rl{VbCfgh` ziTZ}6ArUW+qGyE@xhL20R@{p}VbbyYI5qGbmZ5k{Sty7=j5Ju0g6~L_RSI*+zLt9& zH*-d=@-gnGv~;s%g9VTvd-N`!nueG%znC0AVIep<0OEtGL!9rjah-NaBm|)HW@$wzhIkG80R> zmHiL|HgM9#AoCqW7W~CL9+L13!$?r-;Ww(Q(ZbS}Qgb|xPWK_t(yoWIP0Yj{NTm;B z9AYB=ARAoc1pNR2KmbWZK~!9o4>OL1=ULUW-}apPWvRIw2X}I&#kEf9bb80Mjs81_ zkjmXKQ`JkMz_mp*U<1-+QK5+#k~fD6JzuL;FrPSg4RJvj$7(bdF*V6PhdUGcPxs@! zjtMRB1~GbyixPow3mc1)ItubM)k=-1DIoxJYK;krcyPUG*H%cKVgZrr(W6rGSH5^` z9FpN(xvVjkNvZ=l>%;&c()f=6u&9o8isNS9fdzsOyf6(y4bo7OmYTC&Z}9Hpxs$cJ zxAd=mY5el6dwBtiFFODk#<~+nUXuuxC~{3rMD}VP^s6Lg7ON_k(dwbJt>gu<8=^*S zNI;LLh-HFN#YmK->hL@8vO{`zjftd+nE*S5vP{^_Tf_>Mx1K^6YdvpzLsrCHE1K5L z`q!3UAeo#2Ax+g+hh@pwO4>&q#WEwdchPDy_zUT$9bAI=nOqqEj%jZrwe4Y@_UJX! zpe`zY1RF(LmQvVlCCeMsbjmfU;b~|f%iwngKp=<<1i>gS#DMmN`ARHEc#zU8fPJ0Q zE4ux?sn+F16EQKqh$`; zF>DsrY?w&US#g?-LLZ&)u0WoH4yb|=f{JN|AYB4uvga@sT9i4wqXY&GqgS18b zh+E8o^Zf>1ZJHI~7g5neJWf0chj)ydE-ES%9E%OROMyJHXv*(hN?ZQB{9Q8?!L z>QOGRfHP2FLpFja5ecKFzy*x*{Ta`xyk)D68N6JJ(!(_bvTdhHk2=7(5841j(3>BF z;d@RkF)2u>bV0c=*D%|10Sl)eVvz;XX_eA(#5Yv-#yPCbG-Q+CP+w`en@;rSj1Z{6 zReellXo_~6+WA1v=kbA3BFjP4r<=?}dyg9yM35?32x5N!R}KzNj;B92)SEcjS1^Zl zo!f9oUX%$+ym*07tyj#z9=Wg_*VALw2R2!{lIklMhrjxG?`Pk8f91o+??_3{y<5Hc zodHxS4{8gq9UZF>e;DrRsNR&>u{Pwa$+r83ta($4;vPY9L3a^7q=*G~0jk3*_l2kj z(2FKDt#nMy_RSz87$)3Q^09p|C-Wi+tdRTgyyiD4XPmC z67pdI*uiHoD^3z)#3Zw#r4E4Q9BE+w5~@&vbh)97@pcDpqol~lShGaILix)Y$ZG>5 z1J>i2ly)3*iG`>NF_+Y@o$`JzS|3j=n*p(H$=~cep;ji0Y}ZJwef>vDec^J z^@omZUT&5egGBI70?IDReA6VT$@nr6DCwn^y0gn4h_V3J!S1 z?TlVAfuK*!Tniq<}spi>-R7_yV}1Xb=%@Lz=~f zQKNz5J@?gMkvhan;gP{YT0{&1;H^`|0SUfCj|#MM4=#5G2DBqu5hVTxYC7PEg8I;h zVe$%EcIda|2`cfmE53$EJc6Pa#$wnXB;nV^P|t$_q3s6?`wB9}qgqE{==NcJjuPZt$#dpQK(w*G79E!|MYP{}aW z0iefHR1hHIA=!hv1O-XV&0cexrAtzT^)DAty*F2Yc=gGNNX-b^@P#QF>3iE|je zB-U{zG3UrLkqC-xOHn@JKJj|{t_6yy0E~nMPn{nhtIcM=GInxcFm>-EcjX^SC1E{R z6lE~9g+Ecnv8HmLp5YYss&{)IP!L+KYBS*#(pa0dbkM)1%%V{13AbPx= z#2xtsGpHwUgZz+1qDHd-_<*^=+MMjJy#}C3X+}>!=9!>%&uJketV3Y0t0JY5&nGcAlywy> zG_m~9p9!8s0g$e$VPA*mrR8)Y*DTj4X|+4h0C@v@$)yBTODq?=UDrL}7D5lB#vfSv zwa+M?JL@{tAA-IbzLt;?;b}b#olLm(T| zAB<;%LpcLfz$mpx_0-u8b;qsS%kM(>ds%ZE9|CJJ)5KrxDiRFS#gdZJHDXO%wPRQt1Oy@-9w?EPCVUNu`U_wgo5FM?#2zNX4JB}z_O zNp&!ngEH;g7KgMf+@1Gw$TpfeqwU~=*Wfs+Gi$1XqcR65j*}b`IbVf z;w!1<^t|$rbGqMaCV#Dt3cQ1g;D@ z0_jx)?Fyy(>uH0yk1B%&N0`c2pqa42g*-1wUMAt2-WqCH=W-Sx>0>vf)&n659jC*# zwvkyIV&C-9MD0&NMIKWl0CUD2#E$^6GJtf3;p+mXf2e@Yg^r!KnHUMg45N6$z~m{X zLXrRx)EQ=>t+3c?ngFpfQY%TYZvYPw@VD{{nj!d1IoJyYbtf4o%25HHnGh(z3)D0_oF9!XF<-H{UC{Lk79<( z0gp`UGV9J>xp>}|tQFHLK7g`XbW{UZZtoIhh(A;i6x*Ft&q&^j_v2O~_a!aKeXr8@ z*JJ8@C;HgVpKkazEMFukdSO&J*s!ZnkdovEjJSyiLOB7KsAS_;mU{FYrZ*X0?bv(X z&ik&@hkB)B+7}~6#TeJpeN$LRNI_r`^(_pD3n0J+24O-%@)P*BE_FtJ5*GI}YiMLp z)D|z9MsOGTQ9N%^^_)vyv+^C-S~%^jR$s-;4^Zw}TNy?EgX<(N%^2;(ylH-tYt=qQ z&#CXpZuwQk8o&aYeAw|N=-si6tOs#;+9psDAu|vcIec6H$e03GkqmuBwX5$dmN|w^ zMMt5gg;7>}9uP~$Gpze%+dQHr(sdXKokwt%m57sdK8kRQtC}eeAGKxk2o8xFN57TF z0uH@{N(N_CxMh?u!r(MlpNB&CS-j*zhu~Fo#k+00fW~wmy2KIaS{=rKq9;%R;&2Ic zV+(o28Wi}9;x*oeM1R$l>KqwFWfWb*bT44AHS(6Hm@B@UT0nS!9=CFeMo94&Y{$%w z0;@m1+-F$XyLH#)p6yG>Ly&2Trf@sWlc=N!MCq`_^xjdJ4zRq`K%X^~%V@nkN-N4# zNbyH}Av6Uvk+77d!8(eR&u5LHu|XFFu}_XHCYRWKT<;(S)KR(IODH%T&?B9K7fg%9 zB@Dr05Dyb*J`8Ef`T>Uqg@yDOoIibiwBikhx5zK+^d7jKR+5`Z5_xJU{^%UWIS}=H ztfnH*LNsfS4IE($-85%DruHC=LNG`7$6+#pw<>BF6*?QtOSwy!)4is+^{bAwRNieK zlgXZWNXQm|d`U<)fg*8R$qPDA4?!3V#dA^V`Vs;iXj?swTrlTRX;D8s42^vV89{>$ zawAv(Y{&LXNJfYebFA@t6K3?r7sXY~9*jf>kSM@H@H`Af&IN47U(AO4W!bI+crmXS z0^*IM-_!>bWD+?D<9ohuQDT)Y`A-+O0j5cR5s)Vkdw*p06g5q_Jg>zm|(1Bh%+eaq{P^8i` z4;2&BNX!a~M+DS3nx1o3DlJ^xgGLTPdI{2rRMith7g4x9m}4BrGgoy3$C3;L z5=veeu4>5Jq449z%TiNrCf@Z7_o(dHcYyXm_#i)mauITzuRuYb>UVQ;+RibaWlF+!rK}##=rKHwC zZ?k~T2@7|ynaTVx?)Xv$hS0Dwa>{cW=MVv=JR}Ue1>iFAfXBGmu8V^r1B(cThmBs{ z)CLoll1`WkEAo2Iwj1+4`-_AIZegVifv#E~9!!q)G(9q8pB#aZ03!fV@G71V3fZ^v z0~ayBQN^VHY4jk&SdBi8Fp-48unfXKu+Lykp`tXkZ2u`oa(;q$98PTFHkYP039zHr zsJ~GeN7o&N4?U9wZG2%1!wL;*aeF5cMech5L;ge^=JZy(qmBhES5UVS;K&)>_V40} zyN6tKC^ik{t~UZ?X}cXslxNV%5*DfO9@}PoU=?N?nQr8Zp5hL(ILIE->O`FI==hp_ z0b}ONzURzHijGz5aB3wU4?B5PA5qj~Q?ja%_(X!+vLXb(rj$x$eJM8x)vrOYBv{xA z@)7|eQ^WaB&Lx;EyNF%I3zA)@#I{R!2>JJ>FyNU$ON6wG;WAk$MwsN97-Eq@uzZ90 z6|Zp_CL6{4YOIXfn8z}Z<-wAqn=6=#oq?4zSnQJzK$R>I5Tc3@gtDO6KkjSpAnXF= zp=H6jN>-}2IJcWgCL}ly8bpO)z+74@;JBGSLsgT8t{U_Z(Xic!_tRfUG3prpb0rE@ z3H4v=&Fe$9?Qtb-AKlh`ZmiB-g(B}-BGK~>^sCCUY8?eJT+CQ+Q~@)wU}=n@W458v zaSEe@)9|qcDDF>|qVh-Vthu5t#8TS$9Q)Lo6Tq8z*#ecZz;apkZEUZrQ%YpNL$^iTfrrii)}efr z9mDGS2pExu%oi9(VJ7KB{;*e144tLLrd_>;t?tpNNcbU-HpUOV@`{{2x~BLJc8w`X zYNk;J65;_g+~^;*0DlZkq7m)y`smu`&n%{?wQds5pnj%`UcOQTcsR+fUBFzj^8_~@CQ7P5OMK9I? zQJ$>qTPM=~wG+d!hg`8V0|!o_h;|lTd*u851Xv2V9&!naBL*h0xKd7F>6EwKk;F;{ z?n@5ans7|N&9QRfh2u4AGeEs-C=Cu7I#vMqWywJj#|dS=T!ei9P84rOH=??oOCw-I zTLq*g^Ppb`?Hz{yqN-lU!Zv;e4^XNmTLo)7d`3K+LgBjBZX9V39dwP<6ii~m5{pWs zyj!TqKzfk@ED*i6N*iU37V6d@6)&TNo1nHeGHVM*6%!m8fUjA!b*SfT&v}lX& zD&e!)n@{v$_ew9~-K>G`Ac=kSN)dsL4gbLbu0kgPMEN@pr^iw2sM5g6^1XN1iHuQ4 zRH&`^SrDxJa9mM-Q%a6q(Ui(RU{m5}(R<&I*MZ-txKM8(a>6>dc~mi)U(%GmNvykE zf~RO`A^f9ZQl5zBC0pt3^d>4#&_~)^6_Iq~nGK(5a21v1&UYKjf4w5&W9VA(;F%d@ z-h&Br&csooMuLbg?hmQAq6*XEaIb?ivBKozbRLm^k{x-Aq9d8i5aum?p@RAo;s}B4Je{ocSsDO^^ zl_2#q&k<2^Z>@W$R=I+X`z1-QKL#Nk^eAJ9fJ&25T~cf=%zp5X~05s;F)xvd7U0qM(^=XAa}5%XPc?pO{Z&SWHnYA+#Slo2|IjH6V?Opiybgg1gBxu@V{ zJRQdhuwn_WGS=JG34Vi076XI@Y_P$kyzCo>-CEq(OVU{}@!QbAJEVYuZNQF3l{+jj zMT8T}#L$$W6Y?~w<01#p!Ba2Q$Jf={suF5+qb zLn_!TTYM4s?SI7Xg$TgfKZQ>yeX-2SNANfcFf=SFr9yHd@wE9S9OMZab7e;w9#4Y% zmWT&+VM%p$h&1HIFt8O3ol+OuLX?fL_=5QG62nB4E&53g$Jcogd~g4&K#vZ)Ik4}y ziWvp`XgP;L_-n;0IKn;4;0sn#mniiR6gz@eSdOaEcQS!EVfaC;kQ11~IHP#+EK^Av z7Og#~!zj+4)Gti!QH=;vA{Jz$nj-QNrArn715kOa+YvMQ@kS2w)HqF1QE(K9 zn1+HX8-qlA<9(Qx!o@2ER^G+RepuxEzB5NqWQl?D2<*sMfJQq`u+M&(&GIdlaXdL2;&4S{FJP*M_gDL{}` zqT9F$8xCoTS4QsA$fmOLNmoe^sz&YX?II;lj#K9`mkH_$li9*E;4zXa4 z6U@gd0V5QSxnNK2)u5bP^9=1fI1==-?ABp?+QfV+(-i>Ofm+5btWL8YhP6B94YLcd zOa${cR{Fc;3hizK=!i1TbU@k`Jwi2l)=-WDr#~k|#0L?2(N538^X0Z`tgq0>iTM zgIFS;M3Ef=HYbA`$~iqmxIV&gJg4@KBH5=g{c|2FwH!&&b*#(5ryKwEjr1`{A;)pH z60PxMaoR2GDsvJ_s9bH6VQAN1v@5Ic=(0T*kF{0D<1b_P_|8SD^G0qgCHwUcT+HfW zh}?^vQ@}2g9@Hyg{#RB9d>yK#ZhaKT-p)$R5*IGFE|XYV(d|Y_ky0<}fybT+l`Qgh z`(42(wnR7qL?9Pq3`gwSwi`9{$d1jPdygGb0R*!kkbWFsHcQ7f3>b;=UXgKL zCK#L$#0DXP#(;ZB26N*Zg7E%=#O2}+(*<wXnxkW4> z+z=GOGOo^(CD$<2D*%=$S+j#-p@vS};wW=i8RxpYk{ArTcW5!`9KE*P7mJ6Evw_m8YMF%Dmp+W z9uffdBfkLnE7D!4NYTZ@YWicR%m0zvcA%XI0(4&vw6d<2t+FEtlrx$&)8f zo;-PSpN3-PkQR}qXMTw4k41O%^3Jqdu1yEM`f1XNsj9DTTaJJj3>%qZ%q%?abl}4! zra~J2Z#b*LZ12XskRr4JB7b^7BP(CV!I~eoak72~m|{{dL)a2cuM>bv{dl%KcH%VP zz2pp)K1pAk;uzN?WtM}wrj?V^fxPP!9>FGyT>%Rsx-6(LL)+#>mM;5xovT68wK#e9 zH}6Bi@Co|;UyI$s6JQT__+l0r<){F9bjU-!U;js53I%k2xM9=j}(<+K-9IK2e5B&FW!V&44W9 zMtw=>MU$bY9xMPv(JZUt%VCJKR+B1=u=Q1K0X=Y3K@PJN zwp$8642BzGBMl*Wi90*-liO}j11|tK)*rSot1MiBHu3dK7qEl!wGcv(Ow=xLelu~ zAEXsYGH&P#nHH);(trG%%P{X&Xz- zVr;lV50WI9)*JZssGJk7xFPN~k0eP-gQFlbnpmn;5_s0kP;znSU7X0CwnFC|$DJ-x zUKVGYjFZ^>||Q zeCS$_1MorqhDa^uBxY#nk1G|3msw7~!cMAl-6*=mIBf(5>LA7@Jgv`@m)8sB@&pG< z#rt~^Dj`i~C4Lf&aWOX-)^|8F8&jN)w?Mk#%GjP`BjfiU!vJuoXZw=!g>QIT zlE6sy08pJik(_lF7hKoNkK=ynK1Qxlpw&Q!^V2(o_E6-3zZDW*l zsucR`GukAB&A%I&q8c@9wu4sJ_i$;o3!>hf_g#L&$^@ecy|N2K6cS9s-#H)*Grlom zYA-f$7BO2K*{l7p*u3S{FibbpM#_Re)1NfAa>k*L2-~-5R89RgfZI?H&i0K)nC4A8 zx$1*ZAd*yin34fuV^x5y|0=r?ygLOGk00rKuch88#r3}#)i4ELuk3X>(P>QkT!Z39 z`n@S)V>#J#h6Bn`2Ub(r9IzDjmYA|PYsf;=>&grdmObhraUk?vxwi1k{|_TD;ka!CMauGV0L?Kh_DWK zH}rsmICSIIC>hCF2P@{VBolNQ$euwG9>#zXVw=;g(Fm!h2K>t!}U<}R~(DaQFkgtWnw2ZV!lRo`1TjcT36vbm!8LwHbhIm{SKp72p zok3t7QzWiBYxwtm>&WF|!5#5~kh6{LGR`Pd3w2sbI+yn_AOxg11PG%k*Z80w5QpjLg6n>k1CIl@=5tbq0AiGJtIrm5W6WWIJ5{}=3oM4mg#IP`P(0^E-P2)rjcI#dV7MtMQ83!& zk$n{Q2^O6X!K@}(I7%c`>Yc(IG_G{CqMK_7VyS= z->0oK#$-%&9e+vjVK}|!AaefeF$=&=_M^S$H>#}=ArLv?B7z|{JH5y#a(54$>|~P}$L`ba zoFZkAQFY|V5`A-+UMtfGt^Ug1ilCaPLz+&hxf!|j7}R?^!M1Grd+bh;*v4CrwS zc9dIYTBr@%g9G4oD+WFI%$U0jO4v5aDT2|9QJ~6S2LrU=u%B6HtT@n1Z?JRAtB%Z5 zuu06!hBBB3^Dy9aSnODV6-rpRuFd0hD?kJop=ei|4J68I8opIv7Y|<0a}hp9F+(CA zQU#8Ab5lrHtvM_%R25Y9d+MGXNNI_#r>8wuRhFByC_NtBj{AwQ+Se$*|>);Ad< zo7m_}{%sq~R5>lj*dGd4qFKR|rZoDqZF5LIq*;h8GSWz2 zvGOSZ0u+CB4p#bE*k1l~zt?*fUE)=m_J(L-ec_iPEPvj>-(-X3tgis4nqpYq+}NzNWW%tR^ih-3De^VzJeo5mAyU5UG^FT)X~ z_ms~;gGyMKYJ7};!(7KfZHe9NRDLL$(W10VQHwrEX-PI+l zSlo-|`~pi{<&n(wF*DI*?4vGE@_9I_Q1#sIsK z>n$;CRe3Pp&IKwmQ!CuWbH<7EKjz>hr7@`6A~Dz%q48fRHW3mP&lYj@YF$1I&>A!{ zouc^Cc0$B9+1>JM@r|Sdq*D;;#i1?SrB1`If~9Rk2}K}eO>z{?D{4vHoZc<6z*Yxil-rmqf~ddptL1ZeC@TR*)Kja6#nd` zGB-v;&(XiQCDNEsx%uENbE0KrMQ3`H6wB+p2&p~CTU-CyGG(wVc% z&%b!8anoD-bkY)L8mUrd2Ph3w?ziX;5oz{hgfels*ZH(vyR-NsWg0FpqHj4W&kvYP=Nz)w^W!E9Yi_@aSCKPhMk=|nK#^{>iC!Tid;HA0^&e_%$ZXcF87Ix);UEyqZ^ z2@D1>0F*va8Yw}U!kgfr54mm#%7Q=DS91_J7AiVP&OJBw&loS&t;PRD7kH^tzwm}h zq7($(gNqC~*{7YZVc1xGJ@jfzw%a>Pfm6)NSRl}hfo#kwG@ItJjAK+AVn4#ee7V%m z(9h+O93R2H^)RKvWK>W7Od|;#`i2#?oG^GBHScN8in)McNv8WW@R~^d3~%&itmKvL zW6Y=yvrlLr$ia~^Aj@`QL+#_B^JW~j-mu!8Rcq`7e%0eovq}5}Oc8Z}bdO4)?k1e4 zqo+`rts5i+w>4lHsuR?cUU~7yf4UNSMXbEN^5dMYs*(8z{Ask*Uqa_Q%=8RX1eY|w z;RR}6B?@L|I&07Q%YVTseyjDS|HM$q8O4oQssp3!j7i;T<|yDmfTqpBWrYE2vfR0z z42;oK#BuN9O#AI~m)ma)Pj)X@m)gm`TSeYwVEv!w&9J@8#Mg-~#F~nL+pgbx6<1-i zg`n{l*kByMgy7SC-kC65<)&sX`gZOJw`_*NS736u_;pIU_L(9fys-jnIulqbOfmBp zu_O@;Hn}zJEkcwyYT?D+ZbIMaVZufj^co-p5OV0i%+3&~pRQ^4eq$6%h2VXG!5NGP zUf9AkqaF1czv9@;D_(U(hgRhwE(#@g(d~9&Ydb{*3+k;-qSP788}mpOVwm5;jC<`> zaP?Em;i%Bqnxi@Cbo{B)s%=#R1)(9kH!nn0d}rf}lhcAOb0o!)^MojBpsjfg*18ac z?RTu2JE+?u)$VDAB$~=yLg4D=Stz7v^j67AWX4t2hCry)%0z)kIwKqTY%iDB~13){%|;zQ!G3d zIPP(D)DyG~Oh>3q2@5oenz%@BatdSdS6Lgv*X2YdDwiLnJ@DU-D$VsJIQhtIj?Yc5)(+IYeXMy}A?ZygriB;>ijO)b|uN(T3q8gS)QUcL> zbl-ipzi)Z+>gOH{_qIA=i}RkVSpB}IL3I|KfCwvwYC#Ey4+LwiVCl+YXYSz8SnJfO z{!xv05Y}v1+I^iH^VLy zT<&vBg)9ZcHRP~OA?s&JSIVAKyvj5NX5!-Bfb+XR95rms^RwDpTtPC7SX61w#aOndd%J9EhCq8@TF; z`8QVU6aF*L&42IdkBxoy#KFoFVn>S0;H}XByvrm^uWo_p)514i)Yp``He|8TkW4Hy zBye3^#k6_8bN=F7<4=C{iz~1E>2u5eKl?WubGgmWJIg!U7A9sm@Ua7lF8R6TKe0;H zNAhl&X@xaH3``Ev5%(Gai;)=w_oY1HMIk}_K(-ri$4XX#<2U7a)N&zYF~uyT zdB0wj1pvx-&K=g&PE|5h7(_t^M|$1Dcw0CtP92BR@X;XO+uH?6#H?5#g=hr{TfEhu za>YSc^!+4>29+BRfi=oPZD@5z5i*vW)W@Ujx}*$&w5zIhsm?doL_w_4Y<2PgETY|^;NxfXf=UuIJTHf-|T z6CErJk3PW6=M>*`jqQ+7yUwfL zS-iV-HJ}5&Sg&eICv+J(PNO6lD|MU`# zirrZx(Vm?pGU!%Nw))FjT<>lsFttGG1k#u`8*UAHG;LwBR zOoD|F+1J{!B>HuDry?4_q|>j&PH~JG;{*$5n6$|Gk92cFy{ey~z_d*V#dI5eWF4mf z*|hmqae`GrT%d(9?-ElR4E?h85^q3kj>C|Xdzk>?Si`tP6TF({LNhW$A`MzwlS@WL z<{|yr?wz`y`KI*S@*?3(LLUcSc{r+Yi_m1I!Wt}P)BQS0F(qg-qNEu_Pam{rtlID& z9GEOIgXp>+e`xe$)iRsV@H3*SF*%WG4ACVxBvRz2Qf~0YI>T(zC_hsKXjOj`4jtEV zef)ha*E=icue5&lfBb)!{;=0=yzu7P&Rh!r4VHE@(c}ZY-?>e*>?RlCRPljRL8cME zDmb+@D_Z%UU8wywqx}BuV%YZv+zPt+Q*59-dPqePC^ICf?5Kj>LcAb8Z76eR~nI* zm?=q*)La$`iBy>}mju;4*Kfa$bo552p#$ex=(xoI$$5ps1jgdI<4(Ey6jE#5YFekMN0+`QTFL}F zBRTTi59^p>|LwrdvzM&kxF4-G+wrB9X7FaS743!jTNT`k5skX>n}GsAdZyrhbq2E9 z^{rtY!WX$oZdC@TwZdKyH5b|J z0aZG!ru?%?tj{%hyY;tzObHu#0lz~$`Uz8qZ4U(O=k>n4Vdm^MLpO({h|V%6Gc7ez zR^9B1qK;LT2p^9iLw0!5lWlCxw1P~+V}Aib1>G)ttFc;3KitYCmn#%UP%V#Op&`>C z%>>f?*7tXsq8$g}QjaqXiJ)^R>7Q(Ew4&Dl7&}Y5O0UM@jCj3~=6I#S)AV#GM$`N( zZxxYNQxk?*K3~kt0ksUrj^vzUeAi-LS^W7LnWSm3*q{hDEyUWLp_y1Vi%^8YLU>HV zc1*D!nLZNY%Z<#F8-_Up8fZf`t$Gp=<>5$ zX7)aO3HS!D*`Q&bm(DCl-pCK!;^=3DbW`tQ=`?Jla)U|jAsP14A$>p&0zucOHg z-?OL)fgz{PBM)sF(UT}bP1+mS;>$bznE?F#`|RB=Y@sp~lCN8*2v#yZrS#ekMGNHWC66F1U}oaj*U>)Ua$LY-rWl z1j<_92HA%jxlT;vb5ZGG_|HQKvK(U?Ve_i&GI`Dbp-0q0@to~9-?Z8-dE9)Ijxsr%Sb4}Fkg>z1{g8lgvVoRa-pQ|pAjFri9dz*YgEdBB zoXrp8Zf)Q1!*#WQb1b1K@MUJKDLgjbr<~&B3=S-mm4;bw(kQzPEhS}b$rP!GA%MZo z%Ti*i;`ipS&ig-Z_ri0RXIsOSA$M|Ow77?n00>}@X@{d7Wj#}vZ{vP?dwdFx|Z zii$Jk@tc+l38-rFa4L%DElw)d&>^=MZZEcm&=(>V$ z=Ywmr6)!wbQ)@ARRc37irNIW;-Ep)R7qz@z?~TAn!Y#Wx_*JS z3NpqA89?vw2*Vh~w#=USfxY0oF|OWViKL6Hd|?hoI>u4LXK3Ya;5bJC##EM!4Bb*+ z*(kXXR&(*_J9H%CM153N+)u3x0bun>5=;HRj&6?)AM z?zYb`7%tN$6JSDX{i1;kCrm3hpePk0#PyP%hZ@e#wV9u-`9TkXp_6V2G?iFK!Mmvz z+2^dON6=w79AoOR5rCryjB7JsOG_4gLNvY`N1W>%&G(`Jf0}i}6jK^kk(u%MZi?SF zF2{Y0VDj@8ECe~sdm2=!j+%Z$Bw2N1PQJ3ops-0!mDq!o*rhZ>!#KCfd`G58WlTbY z6iQTh{oUm&&B&Vjlb=@q`GLLOvA53EzwyZN;l~c_DLq&n@+wSqT}0z`D^u#%SpZ?C zk+Z3?x{9P_g=~mde6_#KelE|q&!0ZueCJnhEd0Cq<=$MczVckrtC+DQ%QJ;9%Oay3 z&9+ThS-e}n!er=g{0T1-xhT-KkNDIzFm9XDvxT)wK{;;ffh75Y|4kX z=AG(7I@*7%h_Z|$4swSB+ue)PJXTc)lj)vyK_^|1L{jvj+l`@E)BuF34IaK_P2DwH zsg?E`NbvMYq=tu_eD4W&p*c?L`ZNb=3RQytbvy$er`nR?qA zdEP6IzRlt@tGupk?AYR$mTiUqcXCejHDCa0K$X9c8#Armi&^svYz+F$H#zsnIqX$xAII?gUErw$i(%L) zY-;j;oA1aJw}PCsa_=2J6VEJs?$hJNa>+Z-j+cpcCqIfNk>fdX1=Is9e}l5^m&?~@ ztqKrO(5gDLt0<(`{=3LY;x98 zp2dzu8dARM`i*q+P#Ok~DubOK_@5%5fjkFpkpy7G?4jkLr_#u@FmI0>&RMlXNzs_N z^X#4Cyxhi57QCjc1y$GwKV-ZF+Kfl7x>27 zvf@Z6$p*~zvDyA;v#;C1R3%0ls7#NdmkX`6Rh0?s=-8!Z&w}7pnHt~}a;`dfQU|Wo zA?dse`Zx%i(i!1P^e23>pmD7;DfTS{@?>9pq`k`Wo|6}hWS4+=E#K@}SN&aU8lIVd zvWvxH|9=|*IvKF$^X>n+f;q@R zEl_HQkzCek@g*&0uxP!^VS(Y*Sf-W0hIo<8CbojYh2@JiXcsuKe&9v)|`b!Pmd?X!Z4X|MTVUkJajl;#PSGb`hl{!i0$7t0q%^ zfKL@Sm!FMWRxn*^$i|Cf-DQb~jG&EB`K1_iBW>Rez<&_75zORT!Zsw?GEx&gG z9Ty$c@;MMJ4H&-|DH##o?9uI`oA2n!?Qxyh7Dms_MD-=o^y+z$4~Qw zUQT=X!>mO(M;McgjPNOLZtEa#)k#L$&{B*a4tBwWSOjwABl;UDdD+7gMw7%1E?e#P zC1!(?sBg=ZkoM75%7vU2oFUJG27|8%47Gjt?y*darXn$m@t|YE;tfcu+WoKQ}?^gmsnUnN11(> zUEB{6%5I9jUff=%e(_Cr{Qf-0w_e3mi4}SlR&;olN;G4i8A{=T-agB%Ji)PK&+tXV z9cM`!f)aieyN{nfx$|;YA+0C`Wk;WRe0;eT0~gEy06+jqL_t*K+WFS;(YNwmw1nhX z>iW?TG=!H5TSk)w&#~ERW^^POqcYQ5rpUcs*C4Rl38Mw{k?nRTez(yI=FiQwE_FFx z;Gh57v*EYDHaz@o_M83FzkjU!Pk--lt{F2)Z$e!s(g)T zysHX{(cKp5Y&L4mFY zIg6eL^GWa7Z%Ae(_F^OIAqBaGJo@Z5I6+UH6(dFhfoqV3`(%w>OqL#V@TbGIHq#W)*nMis# zK0OYI(10W+gx!S#2%LcC84iPQXpha6rBR1Ko-<0JO&&lEAPi!x-tX zh`_zR3vODL-!Zb}dQfiu2?*lS)B|fk!L(N{^dsq(*Qug_k5~N$87vHyv01D^QZ)N~ zZ<`d0E^(Nh@1xKq@W?3N%pAbgwE#re-C7un2N-QbYXs=o0IGUji+Nk`ly5JHb8R;Y zSC~?aqDE24{0T-ro08RlF^96*9DmBTNUMat7ElR*s2C;|R}*%{6qQMqFuU@Kk<+@Y zKMK%hb@$^BSB@3kT;+kIwTGt13wuT@-Z(nPeRrHY@}8O`{Ez}Nm-}K-LF*6AUw-lmPko6C)v`8TXcpNHdnT?o&+yi?E9h3mx21W$T|amwdA4~tXGza# zl`v`*L;`}@pTVmvsab8#UB%hSSu5Afbea07c$?dmm$w?ye!OPaPR!YM^EKP6!tlJK z%qmh{y!6T%{p2S#SA!`YLV7&lm4~kSEh9;9P$?x4?TRVhKqb@=K0-S_)cn<)9br8l zRoPK7)amtVJvMCm9V3xgZ3KPHH+}Xh)T6*whiKOu-36Un_FsKz@39m6hpL}`Y~&K&8o7}@Ii(JB+2W-Ev;w!6XV%Wtl|^WT5x#OzO= zot@2{Zmc|?NREc!g-DVbs!EYMSS`iLI>zApfqO|4CeC%@4J5hFZ3agQ8+xT+87A;D zW-=`n^`Bw}i1@=yFYOYd@g&Qn9@ohpXQqtauDeL5VT}yN7su#cM63xKOnM5?Ra{HA zh7W=&^G4~IpqOF?Q3jz>(X!@}6`sJ5#xy*F&&gv75f3Jket^9>@GQ!xxzO*(>?EtqO#?_b zVF;Ma=cfOy4P-Ad&21i3j zfuRMANP?mf)1ctUph>*0%rtrr#|ZDWT9a>4KUsblJc%cOR&#$_nId^+l&6&^1xb&B zNX@A+RB7E|n)k)YvBJKo(fs~W-eJQ( zLI9`6r=$-JVBgJjrsu~!7H4|1tWMXPxrOSG{mUS5UpsNE`bz0=E&9jbxKAf~U8kYc zC#6f?J_u<{_Ys}U$#Z%%NZdZf?!S;F2drcH;5J^g3W#s{p*C18P*Qp>1$k!0Uh5J& z6$B**NY2qLjew+O6y}-+CA4A~AJxd{I~5AkswE|?ujO@1y%s%tAf#_z@M4o zM*bDF%(IlYjl{Lgl0os3SH+`Hn47@`^${w&Sw|_Hq&mk8J$ni`#SUtj?mRoNRf;;0n@>%gM?QB=yPw09#o%8yFMO2ct9Y zo@R~yN@#T$WRlLVtHMn}2XkrQi6@6`B1Z^hW;lrynz3jV!GcHk0x+<>PYk&=*w=2h z>>CH!Tf;p``BY?89%kzyPMozT9G;`0*_3X6m^Yxpb8H-0r$`lkG8GsBF`Oo|;cO+JOKwfY6d$e@^Sy(n%=NBdNgmohS(L?mHw0a647 z{|7Qpz9?>zqxnsN$Y3$kSiY+sS+vyrD#}_}lz^|XiGD*4ZK@5c>3gmd!VMllFvl_QTa|AAMv93rJvs##XF`Ez&vvIfes^4u% z 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 X|AjktzEAWV{3G>L{z=Z`mp=amFbh~T literal 0 HcmV?d00001 diff --git a/static/img/spinner.gif b/static/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..8be8ba338d5b5aec80593295f88bcaf6608bdf18 GIT binary patch literal 8534 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 z z23q;-*;SFu4jB_v(74jA(SHL{koGE`Z@-;!Q$<_1Tf6ZFqo^mL>Sk=0Q6%KkAt z2;Ab0Z#SY?(CF4jwGpNkSy&(}Wnc__?&0A*?yQH3@2zUoo)L;0Ct? z4h8ynHz%JG0`qRkRjL`}SVyZw?`T|aW@a%i#GLKy9P`qXZ_(S2axj-6t$sfnCff|2 zdDW9*@>cdJ|H9ZNuc}i*wt4P{W>TIX!Sc)18KM2=qm@sezL=v0j0m@tTtA5EN$gA? z_Mxto(OwD**Pm(V+o|O{6ecXeBmOlX4f z2w%#$o#5{bEWPY6DT!1*8T(!|!DzPSr~UZz3p{>1=hTVg-+^;#&+VOX4|i*vhizat z?0Q^p7@f9=7$8KeRRZ_F#0rNFQ$kC$_S-5MvjDNJ-fSXA9oUOp)dp$i9TjTR!7i^K zA*-q0Hd7Sh~`+}o)c)Y$( z+?CJi1D=>WrX_D>Uztet5Pvr+-rhB32tLuiQdyqqBSjF`{s?rXr$tEP!K33A!it#Q zsT9z5{bNJRI6FV|@xEb|e?|s)?EhZj{(EEqia!0zv3^OSix67dq)8JfvZp?7m*VoI zx-UP6%c+2r)Pe4$PzWhKyLKBI{*6V2M@F$hJds2qc*iqg#g(lWE{+wkKbeIgtEo{b z`0Sj#e8sF1F&k1=Q*WclcPSs!-NHl>dwSLQ1B{E8 z6rko(7GCwfI{6V3Tc3|DMy{SlVA9O_mrVSSVj|-$10+yq-n|3~(tSL9z-A(5jqr?Y zO&ZzSWpT=nCr7M_XH9W;!>b+a^uR`AnimrgLB@ERr3KHy^!P9_UWI*+C&H*%g?25? z)Do9}5-d^Fi8C)nL4@_DAW25DJgr8dXtWD^F{^xR`AcaZ-FVf^41eeFoHQhBR)XUq z4h-xn-ED%!aM7V1Z2?M6ou2336@X+DE#Lq^Pq`fNGInrOJ_K9~P$U|k-XA`Oq1wn@ z--#H>VLZ2a_)iZPVaraH+x2(lA5;o*lOy{f&^$y*S)p*`lTDk|7RV}m+6?UZ)eMY% ztDQ_c7ZNw%rsJMeZ7}3}lcPPlvF&QHwX$ydDVv{$zy0Qt3*es7NMys2BU*Z))|;v7~DFQRpSu@8%q24%xljgx(wIb6_qM) zk6*6VGsu21OH|QRnN>CXy3)w4S(b{^lDV)Q<3UY25Mn~{oI3|%<&_4tVf`$#uCj8pM`A6Fvq G(|-Y9t#!u$ literal 0 HcmV?d00001 diff --git a/static/img/transparent-1px.png b/static/img/transparent-1px.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/static/img/urjc.gif b/static/img/urjc.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd8a7703ae9ab79619a008faf54268597c122648 GIT binary patch literal 16756 zcmeF1^-~nw7w|XfSbAB)1(xm(0qO4UP(Zp-K!jykknS$&Zjgr(0qO1%5EPUSr9_n1 z@B8!nC%k7qbLP(6bLY;vGw05|=Nwga6$wfEdTRMP>I5;?Xd3gl~2V=3=q@<+W+}tu!L>U5AhT<>YtVxX?)*Zaoy@J=1lGbyR*2{9& z|H;|<`rYm>gmf2z+9gHolA?AIh+PC~7sbEJFSRSByQ}mMi(TD+IP6+j>{>YNdO7R{ z2k&D4f!)O>?ItDdHkR%Fle4qkySp<8=^29m3?+4@t9xeQb>`r8<`sN~#hxW4o$aol z{j>UK_fPKb?jWRh5X2oR=^ZKJ4uQHu@ZTY%?od*9x(;_17Izj7cMe{6Ucq->*gLPJ zyWrrvVC)?>_zs(Nht0i9!rmn%-R0)qmHngauJIp@ca4L0U5$5LU3XoBcY|GbgM)W7 zGk5>|Ti?Cg{hyb2|94x!|Cj&Q2|PSJF#Uo60e}Yp&;REC7ZY-L4}b@JdbOsa{s=q@ zF00YxqDpO;q>rmwbIDK~T-bGEw7GO738@%MuijENmd0UNV>Q-NK9MExY}}ngb%Ihx zV(q+tthG`%|CL=?wt8FDT&Y?bm-TpC^+KgysYXH9IV_V?Y7MaYv$a-NRzORSL9@MX zt<`y<#(JW?{!@yE$mP!1n}p@JFHXL-wd~A)`hW%#GHP`+?R<=;;I^6UX#P5q%%WMS z)!DK)kuB`D<$kG8UH9^R?6k{Ef)r*7d4pJeR{#CEz)HKAe%7lIO&=$`>Xz@K?mg}m z&Kc63q2@cbwnW{)iMkI5cR)J({O&b>MO)oi_s-Kq8Zhx%38BAPy8In#=pe32fWEENxYXg0`jfePF^)*rY+BpT^V>H^> zTI%XQTb;-6Ob6gJLx2KCzvh%Jw;*+K=%dH-_?v;TR_W2iMwir%SQ+IJTj$q(df`d# z?FZlTBz4HcaReD9Eizx>HTRPjBrnFWQM)6RybiDWRjCBM&p)!U`hb+6f|JHhFN62W zGptPp1?0*0`VS5&i=wy=tI9H6538#lDrydE>e>$vo#@NdzSgxZTa;2+_tqRW^jvcp z*0tksAJ@6VQfeDV*=mnlCdH19TW3|cPudnu+)m!DI@O-EZ@f4<`ET2G6ad)GbUW?b zuc+ngdc)gv+I>FUjkd=ZY3h4_yOr0k$;>ee022xT1i-``NQI6roMLnz5WFD=O4;MS zAY4qOI~#(heexWp|M=L;{w#DOb?8tic^SBilkD5c#^SCI{9dEwIU$%b$>(qsOJ6_5 zaAS2kEQ_n%FpY`4C!hH~Uza&R(s8W+L7Oh}az>(7^Rm^DFhOwE;wD7YPNh5jYLXl3 z!#}hhJBwE5zqMRlP1&>ZS&^;w(|$Q@`#^O)dd5{hyShKF#Rmk`@&r!qa@nPHABsVK zcG2>BcXR?pP?*^?UC+5L-Zbf;9(?s)A;8~h{jcZt&d06p_LGGN1BV+7dwl^_ z&qUDMjV}wtThX5j8a4+e+{`|!vV2ZHOc~+p{z+NR{qqb=+vItQFT*IIx}H@lbOq|S z1gN*tg`W1K1RM2W=Oqa#cld&^zFxYqDZQKhuB4Pd5A!&-J)MKUA3flJ8?!{Vt>ugG z?)e5fqb5(C&R%87qntZG;ppvEiEMH{Ob$@ z>_K+*tz?252(euH=wDjTyDp3ev2)xx;Nr@Zt)Me2w@;7AEEN<=S79%NSmX{f1Cvj4 zX1vJU^Y>l^^8H~di^P@BoiuZP*EyDqi45ANeLf1mf6ooTF@q~2wp9X)`Qtv;zJjYGjfw_DejE6Lw@^NsRCWZoG>iu0G&Ml}CdA^80Z7Sk(F!`vNd#-V zom`+{tW|?QP%np7-F(>Py&hW7>gz1eSIMr2od%SgyV~~X@W@OC)>q_G4X5t;pmk;~ zpq7Z4#drXqbUm3yIOeEqcJm>ws406_2ynL;-EW70IId2bv4pd0>XAg{?LpAu1;f)X zx(tzxbrtrr=FqBr4ngeT% zWgsPf^WG#Ty$sK%LMKV$Ns@$ImHLF1CNImpXhS-$cKve|&FV@2Dr-4*7&1;8Lw6ZY`>0 zKpO2&8p(5~-m7(PYVkSRizE>5c4b-((dCuCUjl3)^{(1i9h3Rfur}zL>$ho*wEzZ^ zPN-x%$`%gB7?=^Gm22Xp<`O8x7;z}+WmZ|*`ebfQ#XpFpqwLhmpd?i&3@xz40!VeO_2M>--kQPbx1BBQ%j!M=9gd6q|+I0)*V=D>7twrBPW ze#&#jO&mQ9V!_|HuAvIluX(-eW7OMP^y&pb+O=&_Uw_N}GoBj;kT`6CBf<{UTdg$9 zWj;!v;i7vyxS3kJibKY;|JP^qjA^&1+XfY#Qu0+aQP>8_u;QwE)4VpMyG&o*>KN%U zk-lbv#%X8+_B?hT0ABG+9g7xL8_2dZ-tWMYI+S&)`EZMB@fdm{e?&9!Ob0V^3nHb6RmehR%D$;8jzaf8BOT0o|W{ zHB~&)IzXYuMVW};jk=f0c2=3?pF_3hl=K{O5k+Uk1a>o;vp_)*g&ye0S@)rPeP#N( zUEGZ#7B)z%0swRA_3tS(VW`%NZs0{ovaF^l4aVXKTC@H=quFk%8YBb`W5Pj=hBI-@ zRc7i9z{Jt=Tco5BaG3mA{F{EF*rMn!9e*yXo@=r`g;mJF#^ji4bRIq3h9+2Hz$X80 znUICIU~_wjCagz!peg*xF_2sS`AqDc0F*nsh`c(f_cBG{4O7TIpUr<6FE8~XVR)aB zNoZg(x|CV-*B}A%wpU&bR%#zmuJ#J9FjuMja93IeQ-XE<4if?c-i1AsHscBw!SZLB z0A_5BOlWPpFrrm7vpvupz?j++CR74UnuR@@Md0502LQndv#=TeKA=KVxPLRQk{$5y zJDRHlL(`A1iVS@%$3eltY>c5;?gu^}AyX{^hR#x$J*62NVf^-;LjNfP+bk!YJiZc| z>NU(y@O!}B_g5%yi1-M`Brp<528H(H=fLnCN(m9^7 zGi4qU-=hQ1RSh>Y8Dp0HCb;8G$m$yq6ex&@bA8I;c>sDhMZeyF^aV-*Y z_4A(AKlPqt-B%r*Sa(eJOHA9cDci2$J=r|%RiYgnie3AZv61sq3V zvgiC%9@D<@3Tg2)ZSmT3@f;WN{T-C6YI5tVJR5M4Ee^TuQOYlY@K{djlmhJpp@+1K$+2Mm|<~n$rE7g0Jyz^8K(P2noF0_of!qDsA;( z@FUw#*C1fm&>kj>kMIFFsfa8kKKx9aGmB>tOnSR0OW7~`GSl_rzC$B8g`k>`rP|Xf zfb2`8!N67W_ZBmVytY)37nL{ga}`&vqf1 z&a|U%3QpyzLmyK$E_}FwX>(XF!hZYKZ<#p7>PHx>UJeO$bC^|zkVCraQ*%B&Y5*Y) z`7+p%rd$Xl2e1z!V{KRX#g>(rp7@q6N70JhyS3i%fJr6FQwJw&7u+Kh7%|bM1Grq}XYEG(mO7*BN zz>#;NC40UdlTyj)DtM6Pl59WLnJ|%~lK%^?xR@@~4E5kn%R4&AQgABt87oADn>WXJ zFepn6DJib5k-;paQ(h!qXX{vAs^G{uJp8awML9*IiiW>x{C3g%W1h(MfY8fX6L#X1 zF6b-~isj*5PnlFV6qG8Js^JzL7vv8Xm+UH4=;D&e6@1e5Ofk1?%b?6M!bGB`%!M5U zF12;Nd5eH1IQEypDaw?Y68Mz%mf+F?dL?P^uHhHe`Y!9#PKS>Tm2)a~ z1sj zKzsIydGKD>MnEWPor+?jYNoFw&7|V%D13#2-geQ}5T%A-ZKxhD!kKVyy%F0J_lVCoWpP@uMnLvaK^fw*$nu6(q~Zn_o?AD3WV?>s<#WH#f1%}_u_P1cdG4YP6~UwGxuoVOWcn#@e)eX&K~ zsjCm~iOBZT3^asZ))iXY}}1b5l%RVo;8lNYDkVtV~6bq~h=dREI8Bz}s8YbBSa z>!7H06m1?}6QAgWnN?m=tW5gN$dj)fOqqi$v| zsr89(GN3rA+mB)TK@D4qjbPR9E2SW}a755Y6E%GMWN6Y#kdhq4xG0dV53fKkNbY`6FCLbT1`Ez(gU^E- ziYW|daYF^5hH{{OnxUseg9!qlgNxuYAfm*cK^*<&+5Pa|D4swvYan^#qCDggU?jM% zG@}VvUrhCw411(z4}IJ;64g^ukPJ3T9y%oR=k*;;?kV|CoWmrZ!t4u$r8HDv76(-X z@uVLsqK_*q!cRfsaQ6XGeL%)0u%BK)@%?xc{Y1-y^hBH0M0?0Yhcs8b9f+mR|22~H zW&bO^fe?WvplWgisvrMN6Od&V$L4+_IGoko7iqhKBXSN^QzK9JhD42E1H!3ve^7*M z4~dKbqmn1~H`wCQAQWJ_%>askff(oT=(Z;_=$R)?p@GMPh<<#e0N89B_v?*6R0t|~ z4qQu_Ca`9*K|+L`xs_LOI0W!%=4Ny5XQk~&YJnmi=t>Aar(6_|&6U$$^}J*N^(~?O@<% z#7rYAxF%>2{vWagJ%|8V(NZ%I5yUhlibrXF4n1Mm=}*z8&o9Cg@eWMCpV%hzw{eHE z!+^4Kb3B4LjD4Ri=_7E-ne0?StO9uHcI#|A_-Wf9Zf~dpdV3*%F1!dxwY^0C_p2P^ zu7d2YlFhD4=x(GvPJAEUnE|NUm}!Q(FbJ#puocj)&G-tYds-(&2*2mby3vL_})b|16z z9UZ#wSn?g)yC1)`pZIq_neia?LG~cs<{&flAiMA&xA!1_>!46}t>EzoPbQ1g!1mp7 z@fUFua0I+sr<6Tdhch>!tGmZFsLI3A5|i7FPG$cCemZQIK6~qS(kOIH)dW<_R3-p8 zAed|xuB1M^BKLRbZ(1n6((dJkH1-@Z9_@3S8)>$k{ObEt>rqOPZEjvL%AGHlWGAjf zMn{*5yJl=@(hKr&{k7_X=W`_Z>PlDrIJiqC99kqY=>=aog4*{*C|^Fj3p@++Irq&y zm+e0PD=T_C`k`XCOW(h{w;gtqpp1V(>_*WASPAAl_$=0O2KkR}^+tGCl-sSFN41aB|Q0it<0BzDR7rz}q% zz4Ma4VRyOVjyqJbg+2S}ihFoWgP%`a>{d+(SU&P7izFN9ZZlW0#4WldvQHt{`EgM4 z=bg!U?Tcqzt<_X-i$Wgddp_=B;xv>AJ9!#V7QlZ5iof}2n+pwtanNh+HNqYwB>_9z zpXD%63V<9OU_StXGLRF2u$)wcYp9|e#HOWorm_w_5Z3uGe^R|m6Y#`S;GbB&KaLQUU? z)^`}YFV}#E3F^nUS&d_L)5N^jsE+hIpV&%IBK^Kh)QZ;MQPCph5NYb*{D5rJGIS&t zI66D`vJ6wEnb%?+9cTvzp+8b*61{72nlIOO8zwRd__Re5`-7{u#0ru*ldcKqng?IMvB$TVIBtnZTIAXSKk%Qbbqz2|lY;L@bW43oUvy{P(q z`?X$mDjGb`%@7%1BOPM`+GZQH>8N3+$kCWXF+YzTuT3O!j%|6{u@T#pR&(t0KE|p} zpp;V>lR9=_L_by@ok@8xn(X8sGd78yAX9(xAbl{xYzi@|<;G2D)N5AKi)qd!8U@rK zdmw$vDcKgS>_Wm)BHTlvQWP~}oCZ3@B6%1CrpMw-1WZ7@=(+N%{jyPYQ7@4ggOZLk z@|C!6L_}z?x5nalO`mj)nR1r0fu54O!*aFa!&`>2Y3H0nqK`|`!bD7?`Qz#ACj5s+ z+>~jtSJnClyX`fJTh!N$<5$l?QR*7 zfa_%DkVduT&)(yyl~ailQ_=kNvZdWn+g&lG99!}oz>Bv9x6f)@yRz47Uw!F#R^I+X z8-jz-D|((vkt_#<&O;xs$3$hEMPeQ-&?mLFW_CavY7XPGnoprz5ja%{0I$`@5%I!#BC>^ww)a{Ckhz49yc<8UMM1iMzEq!4b2cbEePV2dvn>k$HIW zL{s(Bf4tVf`o-qU@9$rJ4)ZFwmiPF;pu3%}Cl1wn>zY^D8+_C_BKte8 z5LYPp;Q4}V$i)czhmh&c?=!#8!i7G(zWMy-N$9WH5#2vmepye#{@i>I3%M(8{d{x2 z@&rUZi^j!nJ~&Xw9T3C9NwIbi)+#~hu#^8$Ug7>Z3mQT+?MV?bUQ7ZWSeERQ)6mSF z0u=!U&AosRxjCnLs=UOnPYvM?Z*k&o!CQ{PjrhptBZ{Qw-ur?xYtAu} zM4Qd`!|3<&L_8-hOt7&lMP3UJ>l#7y7JOELj7SG)P@AJff7^-rdm3Z*!wM?v*gEXC zbIL&@WJA+Ape!TgW+LlGP6=ZHNrw^#d0cK1#ZlHwQ=PozW$+g&mM`H}dsgg*ErkF{_EWKnWlWsI@lId?LxIJFc8e@s}u)y#HXAnyWUs>!?~x z@`0c!8eS(c7F|kSoUQ-CRU?VSHSKl~KOMuFA|TWUB-8_}{beR|w}B+EXqrgV%#Z!S zBSy7h4}$Q-OdBea9jt!ld;rY$$H5nkH3;Plw7)haSueHN6jzdd7n;*ZAyPaU!?z>! z{a8Eh?iK0p`izp?IKD{ju}1am6PnqD_f~_M^UpkzT7*sJEOf*!4MtTV>X}14>h=;l z#|pl`le@`l1oG}@G=GXL8I7Y_p+UvcWJiYOHqd&KolG5d;rb(x2J2_uQEt+8Ydzj- z6rcQDz>{CF;ia+$mxOs`|LV5P^Fbi*`%!G~9mlU|blJ%sFU6DRRC^K{qWc*cHV+Kf36+W{K+yj<(CN1+uKefoA)~jJ15QZc!KB`Lut)DJxa#tg;44e z0^$`3rEAWT;;&_08<|h^Ow!XoEUckVR;Rs;eip=krvsYh%0BfJHlN^GtrF>r8G5Ht zf$LjEWtb)6;!Lx#PK|ZUbj{-TGcWk5HDL!raOnvg#}hu?4?~Zn(29=HP)$APhmA?7 z_(BNF2w7dK_WtW)xws0UueW*00<#>>8|WPZGz@8n^I2@%65=>I0jdXoC=Hr@~p6cMb1`4 zi9*W{Ooc}Xl1f~nB$t>W@G)fF*8cV_eQ5f$Rza`lQ@7p(o8(%po=`W7?(RZT+0zXaEEL-L?{*x9@&MFOP*MSXGGUzd=RxjbUNK7_Zv8C`w z;}NX~HrggmeRk>$jXE}euT=)PmJ)ixAalJel>uN2#RFq#0bL8Pr*1RX~#ya9-gy(SaPm;po3VzbO{K;)7tY zp&vBK;EeUsj$fa+oh^hYU6WXXNZ!MdGip_CK|pF0Ghup+pWg?JHxFL(J1XC3l3f%- zd`G@zf0$1Z4u_(r4<$G~mPUY`Y%XmSB*{pY2Y~@R1W7H)lfm#x6NREUP_}+awk4f} z+`r}xqe113{En|;32WVv*$OIUgBopvn)eiTngk5TDI@9;M0wHB!9ji0kb%fhcy?~$ z4~npbk9Lwnrr05~^dX2+--8@lyQD4gyv=-f$mUX6ZdV`{ErVj>%n(5H-VZq#4VRv` zLbRhHf@VMxB#`7B&5#|TX*TS>IP9^jQoV`|LxTy5!ex*nTmq_Ma;m-%ESUgMV}JN1 zb|i3jSaTb|v>G962bP&tmE8uvz8vA)kKjayiy?um+mIloQLNFZz7dFc9~`y|_P-p7 zQBsXr1dBCci2H^kcSjR1)yNOA^hKDEMb)_c(KKmw-*}+P?P#X|Sk~kt#wLsm$5;qz zEY2Zf4jSog7zX5cRr+{!dVyjes32bL zwbgjVu7)fcNKrK2L^;vCL9c=i4_ySeZD=$&Xow*(q{xYm^oh>+Or4H!uD&tZ|+mTYyRO+?*)aV$@1OcsWrlNjw!pByXGYEB08W`n{Uz-_ylVH;q$ zTKG8S)EsK6un0om1QP309c)vd+R#E@MsQ|>$jvaLJX4J4xsX_%BIou9=)~(UIY&k14oC$ks#(O5O<#rg&kIBAM)*T`V2C2PC0Xdn)x9z z^HXW&(rD(&Vdfg>|1fidow-e)`BgS^*QUFff{ELPXy{>C^ner{|C|O8>H#I3AsS6n zzs@0Q5?FpcAVDCSpb3qK7tZR8)l}2_wT;z8V*QNMMMw$37lw?bKo5eLzV#p*jq5Oli36FyY^ZA?pLG z*cnvqLsUA#nfBFl>F32A!E^;6o>h?c_Pj#IjOsS1fPO*Q5zHfi2^%%2%7&2Kf`=U@ zl?xu`;)vAv)O4y=Aqukqcoir&L`}rGUQzfnba^k2`?1D)I!WujJ27H!WlMK5~#E_;3IMQOR;+z z{skEMKzxlRVBWD|isJ+q0Gy8p=CL!^ni`WCHA@^aAKS&kS2fpAV`7fx+lv{haA(uB zRR{$P6KuWa2%XMDVM;{tC6Pcss`VV`S|}xm0=b;OXHnx2p5wn7f*N_(X0b%SvKDWW zyc(Y4K3*`nT)qTmLIM+pqBU0mOn7Rwd*g0YmRzft2IxlfE|wgL(Pa1(REF*_>Jt;p=Bqvn%7U~-`G zx%QUI6fjM0>SNny_q~z5a-fLaXQ0mLI`77t4XxXPQ7$Azi3&k~wxCB^~7#lctW zu*6qUo!(f!XWb@^Qq^6B5Xf!)g_`*vgPEhvN?C#X8QVkk7%H(C>RU77>k+PPfEHkf zAyoD3k2Z8`o3koh2O6VvyG64MUaJEkR@X7BSkebMjg6&Gd39>=Y%t^SQ%?~r55QvS z^%Tnxh*=C@(c2zMvPkCq<;^Pk3CFXgsqwgckT?gHr{b&oF;-(1&9xozDM5|mTB~UD ztIT->u^Ohd2*TWlLFccu`+uqk`5J1ZO&kqY*u&Ssiy*@@t>2j7t1u3|H;mW*Bt^aF zuz?joVmM(o7RHmG-m5=BV#tfI#(Vg>w?L9njEd8m3=%|_4XKpS?%`1%l>Yog*{YXF zjaLmL!no%sJEVz@pxJYXTXG;42v>neOL@m?Y-0>nCZ-1WdfXkJMupP_LaGI@V$nJaP=&91B|%`bY&2z_W|{d zt)?#5Vs}+_ai%@qVfglSf`<1UjUeQsAf{RMzt%SO?#uf`;4oQ2HUS{dzi9mHiYOBv?>3 zftVMIfCJ$$&~Y7z84YC44kw=tS4}=#n1v_@M$k5aK1AI#Zg!L zQTOms&+^gxZ%4h?M;~yG`>2om*^URqjz6ln7xtkki^3miyZT{|M>CJdDvrn7k0*wY zCzp?>D%`pE0d6|SvnopDI8G=rkDshMv(zU`r_A6e8&27i)dsWIe>IoePZ+ z`7D|Bu%B=|VdEZKY^ON^6Q4;=cVC4T?eLv`3$^@ga=I^u{PyDXu)=&l^YnP@(P8`P zX{h1x^67chqtolt9~GwO)MuA`kA8@qUCVl2MS1;*0Z>E(X_J8!!)N!)XMet({k=YW zz&QudoC9yp$hXnliDwYgbLjJPoR{agZ_e?u&habH3I01L962XiIVVp0eok_8PKtX0 zqq!hszaSUCpisS_G`*mDenI{6g67QyoPDVBHvtY8qyBD6&3Px2zRbY4&iIr9;yR^& zU8QsSD5d@jhMi2*%dWPjlSQP`YV{CP7zp>C$%L2|y zCFcLcW+i{f+y8j*mgM`~FdiqKgOtzm=NZxfeE%wOI?urL@Z=|#_z!Vczd!pvbbdeT zFY3tf(KiI+8T)uDZ%JR3_V9=+i!|oTnLgoB{jjk5qdo}8MxjyiRX&dCr~2nh!?sKP zqz&1dB#oyRHK?j#EoID1PUc;p& z=He59`lA;dm?7KG0TcECNS`a>g8<_6fDcjE9I1YqW!FR-`EFrt&RH*Xo?I^deKEWC zLYe-h@Fl(98L7W`nc&%VujdVv@FiCmGk0aa`&&}8u7Z=rVGPac`v(@bySRkt&yN~DQ@o*h;eGZpmPYc8SCTS?BWo5dD#z2b+C& znfu!>OL^ohq%kSvrPuG@c|W)%i58jb0%QGxp1(?;qZ8FI{cnCn&?iN3iapvgJz+HM zgM4#9cF`X;TU1_nBX2kJ3_%r>oBZKhAGtU8T3PoSED6o3gg@yXA7;zrr{Up&qoDvC za@6e^asZ2GOGKoXY=;v`&Q2X@=H0IpL&6JMb(WI{;}F6{)R28&h7$lp4*8=#$cPA1 zV_E560!}J<)Vfmcvw-m@P!{eI_gNvPh%7*&&LqsPbUIN4io)YeEmJRt<}gy4{oGr? zh|rNx_63xLryIJE1IFZl;1rj4B!hw1d|N%iH$P5}9!$Lqx-hs;?%i$$Y#OmN3-97? z1s$*!463q-TUMQhtOJ~#TzkF|KupG#W0jGTO$oiZ5S2ux`(T8eu#*Hb(+;rwueuKl zr|S#P#2LkrE6^8Q3&(l-ADd?9-nW53e3kcqKwhAEs}yl7?*dL>6M$fMuQ0#pv{mD+ zspr{WnUIP(+J(=EhriZ8uZ~(r&YtWzJTQsa%IA!!ng&1TgdzSdsN6J%ApBP_{HzlC z{vxz*vhc(b_Rzr?=sANSKm1?XS5>fM(Z;7da9cBQPJ{&jX~Wymw<%Dvv0?5}fyHQX zZqK@rtaYpegSa|TX|pFcyI5_4sz>SAEB1%IS3oXKCast1{~o$Qf0oH|NQWg5iM+pt zk*12hgI{g<iMVb-=#+hx^pGtC; zpZS=xT4#JwWvxhXLA=cb*&r&?p8wd}*NkS&Vl!LFYJ1V%`OXzurs^4+GTlyB@Qdwa^M_akZ*X`k0{8zjtt1k8z zdFhnPs}*lyVpNsNDam3^@(++)V;g-=2DjI_F~rz;>~Da(CN01f-d_|-SZHu?Ey~+L zrWs%V-@JOf*?&||29Jlnmvo~#$#Ne*Y-$c6x=yWU8q!l-sV{Q$8#!Iv-^Q}2syLWq zUkv(ma%lQ<4u~mc;?&Sz+$Wio9YTFZv`sZGCX=N$O^5Zt-j|EKj$MxPGJcmd3$=Gv z-%H3l*K6nb3QPqPte4%}!rY|F(k6+mqfG~#BW3ni@hJ3e26&;xOZKmxzwQXrn~9gO zHC9a!{fht2eJ+)1J?6jJR^Rk?h5T=tY})B$`^g_O*E-vWrEj>A`dpEb!a283xBhde zgla#wA#T&$u#@(~Z*1{amA!u*>!u~0YeJXUqmY#w|8~42Nc-1!YM;X7@2~3*YBgTu zTqDlCW|aEWd~(8M?+z+I0DiNa5Ii8Av^+o0CXpyVem}%ZrTwQbC-1bYQR*q6n}?Js z;FH<`<~iA@U}N~Lq0L`<39^x?`0$UP-YSzLkwl*EFKlc7wVbBD?}ck|^6RB554@!8 zqjFWRbxXy2al=9NcQOpmdG$m#ng-vSKk^S}k=A`>Csd;;`cDM%lwPfWkyempM{p;s z{ko5uk2mxa*_SbDMfUgmF-Yq8NkVqf4}dQ!cA{F$^L6`KJ=N-tXSD_AEu&9hHf1p{ zdZ@|gMtfLIj^jSIX8E4}1d$dKCk1135PR_cVHZaog9*(58}@PmlX3AGg1$J7@{jZ~ z+;9A>cJgd0+9e1`q7{#~84U3?OQred6GJXDAF3yGo9D}NV9ll%;tA68AEiS+CuS&>lZ73ywbumB_mde2f@K{7qN?s zwb;G$_41bAOisRK`CsJvhBccH=K1@K2%_(wN+#0ViA9l(USYDeZt4c(1A?`MEn`L% z3!4i|i3oFCt6_$WN{+xGCx(yJbHD_{Vil3+m9vsPuT%9|aRR^UOH^e%%S|jMFGk6X zRm;V?3ZvN^tG6v)zBBxiS_G8@XgtPU_+~E{ooJOKA`_cT{x{m;Y|z~)n*gmQwhK5l93@0Fp)(Wq zoE7($G$Cj-PE{-r8d&SJewVZZYeBM;;oEnnqIG;DBhRGb9=~^f7#(ZU1#QyriPs{g zYlFFK8K$b7$$s!J$_t1W8gc33`_6^kk~h^>Pr9D?FAm)X6ea;DSPz)zBAWDNm7ns` z;LA-Ff12E6CJ7YA)Gj8?*7V-}R4|e8W$1?mb8Eq-RaW z-EKCgD)154rvQ*0dm&WiS_U;VWxF3mS0}oy3Oaw@G@AN!FfSc~RxGRq5sjxmXFZo; z_NIs*5w?sp^3zGd9{}OWnGUP*>wCP4Hlp}aBPppg@ZjB-a`Wu@Bd?=DV@%VFo5}C; znl55*Sw%`H>i3n|+q==S^+mM22kM4h^O?PuPP)JM6IBokg?~k=6nPKnA4}z1)EiW) z)*l+Tb}cn{roJt1JMgKvTWaqWZSboK85*Bm-uXO4gTRJeO> zI~*!a>-LYlr#@-Fqt~y*ApO>-0j=Gedzmj@&(=!^ zba!uE_ue$^Xg>y1_*Fm> zXTwE;pVb`oqsfmss~0J0J-chXq7u5qtYLXQdwgM?uVneMlW)kriG7fqu4VP(tTEWr zeHt_!!S`@kbe8YEW90JgO~Ylm@E-x?5rMBld6yN2?+;B@&N@F{nnY`YoX8DFVUm5`?Bsgbl1%zaS6&stoIG|)2YicCEavr zJ{q4RE8OQR2wrA1-NP+@B!56nNfr%UtT*8$;u4?X+fX@qe?Cd*_G(6}&B@W$=8dd! z6n&R)6n9bc)s=*{$Ko>C=bb>CqJG;$d1K$6!nvK#N@{Z6L-5d$D0dlKfa@Yq%Vz3g z_0ZVnes3r~66Y%A(;vz0Cq~!@R$QQL6lgcC*?N1<#nfz7AK(1*FTt1&2McFM8*pxs zTmi}B_jE)R`8X!=IJEi%3JB0?k&RjUpQ|FU)X7dXpNfrRH9Du?n=^gQ-}#85;a+<5Ghds=bDJg8D$kPwkR4>NZC8cq+{&N6Z1%x zA~@!$*Z~xUfga?1vIx-m6hHJ+P5nPL=8j2n`b2f$`|LiVyXMH54`qxn~`|?i%FMT`c(@VOV50<&lEzwK9olVil7|wS)9wi z1ifcARr`8=0Bww<)M} zsTOIpm=q-QOtl`F=^z)Nw+lD;sz@of8N{%GpVK`We{>a@0Mu%SP|A#>Y<9~`7^5_M zDH&^?L0zL1Wbws(Q$EQI0$@sNyQtJoJzAYFLgTr%xf)OTO6Pg@6zG$elC#{9k`HoyWaY22s0_jrG;)1HE8j6-17OK}4cfzv1k5XrZ_=lD!0}{2H92^%N zqpX=drZa=e_7tdM{A39L8=Ernk?0}^52*y@jYs`n7~VROy4O*&pyzFu{H zp=W?{V(M!pn~*3)hrzP|Q#%}3@ZU;{5H|Q}!LS5G(L^O=3rD&|ixfJqpT93>x36Tk zM@+rvp3Cf?>QWiqR|J2!lD@H`Up zJkLef`)Y)rZ+lAZk(+#Zx)zPOd8R2Nr%z&8z~(SOO|D~f+@=fNkT2%Z2k1@ZvebRd)xeQWiZ1ueAG zJvHGwH7^|p39+i?y!-b4sgA1BIrg`1RpiEYIVt1YoYy>uni_6eY+OS9j=?EzZMiNX z-pLxMXOi!zDvJ&gCsS~s)~k&&g`Q}&LLJ|~k&%T*yeHJg%;ohhIeis*?^T>t1WYj1 zkYLY(oU-wnirGp4$NfE5>6VjY51NtOL)xIOblyFrXQ@kw6dYd~tPPVL+SodFa+W@M zn#k<2Usmv-#r3+TZerT@iPMC-9pq5d)fuPgaRM~5W~_A4KE&SL^s;E&yDk;LORs*6 zzEZS&5qBlAxH8}6{~y=hQSjr zQOZhAWw->V@~bL62*SYepPaY)~L@})0w85ost?G>SO_7vqf)jg{v3sp7hn72|( zeq8gMq{2_xjGl$#H|>_RZn56|@OZWF*3X>y1;?<9jYrWZJLZHq3(hf)vvA8h{2!w5 zGMKgJp^W$A7TNXqqoQ~(1w0%QrZ)T{KYcy9 zbgnaXYJ~eMnoB|Z;Np6S`LE6^fj*zH8XHJBQ20zqi2}>$t?GgGF*yS!Hr#)y4cvT0O4GS2Pw{Do7G!+(-JrmjvrX#R(4Y2fTQ_xyFVDZs7)-DbT>v?7e)C%xgn7qUgr zMUA_2_c!1H4Y*-%sZ-14Ksu^-3$T;-0c3?dA zA-bjGZb(@ybpgsqJ1ZVGC9RnrcKt{&T6e!_l(*$RSD&0N$g zo-wRgM@~P0Q%x45Pe_Lb>enOb83(-=q-Ec}r1PrzHFy%0Hn4p5WcoFvpGpx7vty@# z@S3(tyo%FMdn);}fvod~jnmPG2U?JVlc04~nMM_xb3stFs*na4XZLbD!z z!LOGfO?A(yj9-5StsMY`DfISn^BqOD}iQYQ8t%C~8(`K;!3V~9badUZR`GD=g@G@!hV7@?;3gzV6~Ek|Pu6 z=grX9F3b43>B^_XkD2}3s}^AcaCS}X7c+l9q@wk4q6Yx_y^-1V83Vv78q%|@DsEGm z>f2O-Y**zcwY41t^+7Yvv7gkh6+i82vnb7(l?SJ;)QV-gzHEAo&u_*(f_lQo{rW#_ z%L})KNG8j6%nw8N;FAm~Z7od_f+MkHS4PYA*$<0 zy$H=ew(Xe?Lb|hog>9;;VktDTkK1g#OU@N2rzrvNB@zLX?Dn77xR0zPR_uXx)#$0u zMip^x+;1{3&e&FxZl3Ph4lE(&nkOEne}+Y)vljM&=z7vaW$>}LDq0DKmP}=rlzH6H z;rl$C2Vj*It!9>_)`rbn)HZ##zEMyxmpucL_+`Jpw0m3v>LD%gP0A0=!gKy*9kgbQ z98p`9>?i|*&tEKBkpr`Db0Xr#?>j#;3CF#Ws)?{D%i9D6W}M?I*SIZm&3n8<(o~N~ zHGG$<`465bM8Ycet^v2Z=}3w}h3YF{s)@b3rS#79C6PAeGy zo!8_4_!%mt1v}C=Ez9`wUv_uC{XOXNBH-(`&wJyb(#Jg`-F*imD(PR#jM}2JJA2L^ ze@LSlB+^YO|3|Jkb4FK#9^)707-9L$e8@7c-D H!e9*m8KQaw literal 0 HcmV?d00001 diff --git a/static/img/webrtc.png b/static/img/webrtc.png new file mode 100644 index 0000000000000000000000000000000000000000..d47e2e4cb3aa08c20d1c0ae0a2997633df1b79aa GIT binary patch literal 12375 zcmdsdXH-+swr(g2f{I8J0qI3rM4EI20g>Jey;mur_o^aIKtOsEP^y4*sR3ysy>~+I zEffPJA#dm0`|G`X&%Ni3JKm4S7<+7zwdPuD&iQ@cntNwOX{syTA$dpw0)g%*zkHz$ z0^x^(KzPf~DFyDr17&1A0D(v}9OUISHSM9EP!D^kE0eOk zJd>+C)Yiet1_bh*%hs{e)!CtzLN1-jsYHf;R)K0$5i@Da#e`BOaBwr!RxX_POTD-TTNoI)Fne*e`6+}k=L9GN7I8L=7HwUllrlq&OpJvw# z6SWiHPI)P)B^-LYMD7v!^1I%yo|Sce*)S3|SI|A;8f#_`3@aY!B3M$AhozmU4TR@A zPD%`FSIcaFLLY%8+m%Z<#tVIq*Y26{Oocd<5+v&%CszoPRm2O;PUFx4eIW#y_gh)6 zfi(F*=A0p$LiQuWYx5W)aD!p2= zkxfh?%!ruJjR*qaf5bJUOv6JdVu5dwAQ1yC4ma?_7vkgbhlz? zNF=WQt{LAh>?W4Q(sJ#3W4O#!76e-H3?9Aa1=lA5WitV~LVWeB8}G zhP7UW^P&i(;liLFZ=~@868MTutO)+9aNg7RY+pr!Kqt-6jtMSef>8T+E5kn6BN>d+ z7j{snt#YCp2xR(#jbHaqjZ7~w2=wAh8269obY~q8c-wE%cidR$AVr&tyq9C^`XzTy zj>I~Y-rfB1_qTFf9|nIgaGQfCWEq6owd_A6x!&dfrT6o$lq=bl1#wOXS4-F}!sow< zDJ+=hBJnJv^;zSHY0|?lm^)q)-j88p>Wie*Vo^yDekq_Gt;?kMlHo+k9bYWMSg|QV z;y38&Tl9w(C4tXj)ml;$x9j8^i$x#4SIj3JvGx?mh^PLNIpSXXQ0k*d-quK&J=t8m zw0!TA_U#8mf?ZBe_X7oQSwhY8$aPISAEqTyFaEl=AzBI!&{Om^ztEVQs11lV>OZ3XI>_r-{I@o z>z(U@>vZePCq^XMma=YNFLYM9wEw($MZ0ltLulisP1@7vdIcHUi^X}mRoT79T#op1EL3Zv_20i(^Ly-$75)Fb)Sd|?4@m`lchuT^ttP~1E~`JkR-oK=18XF z2J4oT7M3oRlIor6_3Or$nCb*oDC!C7td-oFNGa1R&DPx0q0_M|ktmKRwJV0|%6ttr zz(n0N=v3|0kpHUnrOIrrrH6^sinhj=m)Y@7*$1yM;VzD?&dTMLvxH&X-S@# zyx=QANR9UCXImMfwKTVjEKl`YTURgE^Jk3Hb8~lect_<03?spB`gyyh1^ zFqfjkw4656&>U50(UM>5))jpa7^91EzA8Fbx~+e+<~G~S`P)MeB)f&(ppp#W-g$(U zyh*35{5Okai`13(35}zY1(S-giew)hdW_fD)|`8sdkQ#iaxinKsO_p9W@xK57CtVN zP?b>a9UK_UADl`T&Xf|Ee!7*pl{uXWZ!kCXHRP=?uK#JHT)l2sXmD8H;u3BsX7Ej4 z&(Nesu{^t+eX6;d`giP zM>NuZrQLJaq}L=xm!2*em<@=wH~ens*XV@in1#dTLs+raSbyv&s3?>j&yFA}?0J|G zKI+0hkQo*yBR+5Qw|e&A`NuDf irzb${e(NWH9|9k&aIWuxAZ75;L;cmEQ@b=UQ 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%0DqyY_U`jn{LN96(U?gPXk>r5}z`&GRfO-^z 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 literal 0 HcmV?d00001 diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..035a0d3 --- /dev/null +++ b/static/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Kurento + + + +
+ +
+ +
+ + + + + + diff --git a/static/js/index.js b/static/js/index.js new file mode 100644 index 0000000..1b02b92 --- /dev/null +++ b/static/js/index.js @@ -0,0 +1,205 @@ +/* + * (C) Copyright 2014-2015 Kurento (http://kurento.org/) + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public License + * (LGPL) version 2.1 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-2.1.html + * + * This library 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. See the GNU + * Lesser General Public License for more details. + * + */ + +//var ws = new WebSocket('wss://' + location.host + '/one2many'); + + +var video; +var webRtcPeer; +var socket; +var autoView = true; +var room; + +$(function() { + socket = io(); + console = new Console(); + video = $('#video')[0]; + room = $('#roomName'); + + $('#call').on('click', function(e) { presenter(); e.preventDefault(); } ); + $('#viewer').on('click', function(e) { viewer(); e.preventDefault(); } ); + $('#terminate').on('click', function(e) { stop(); e.preventDefault();} ); + + +socket.on('connect', function(){ + console.log('Connected to socket'); + + socket.emit('subscribeToStream', currentRoom()); +}); + +socket.on('disconnect', function(){ + console.log('Disconnected from socket'); + dispose(); +}); + +socket.on('presenterResponse', function(data) { + presenterResponse(data); +}); + +socket.on('viewerResponse', function(data) { + viewerResponse(data); +}); + +socket.on('stopCommunication', function(data) { + console.log('stopCommunication'); + dispose(); +}); + +socket.on('iceCandidate', function(data) { + webRtcPeer.addIceCandidate(data.candidate) +}); + +socket.on('streamStarted', function(data) { + if (autoView) { + viewer(); + } +}); + +}); +function presenterResponse(message) { + if (message.response != 'accepted') { + var errorMsg = message.message ? message.message : 'Unknown error'; + console.warn('Call not accepted for the following reason: ' + errorMsg); + dispose(); + } else { + webRtcPeer.processAnswer(message.sdpAnswer); + } +} + +function viewerResponse(message) { + if (message.response != 'accepted') { + var errorMsg = message.message ? message.message : 'Unknown error'; + console.warn('Call not accepted for the following reason: ' + errorMsg); + dispose(); + } else { + webRtcPeer.processAnswer(message.sdpAnswer); + } +} + +function onError(obj) { + console.log(obj); +} + +function presenter() { + if (!webRtcPeer) { + showSpinner(video); + + var options = { + localVideo: video, + onicecandidate : onIceCandidate + }; + + webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function(error) { + if(error) return onError(error); + + this.generateOffer(onOfferPresenter); + }); + } +} + +function onOfferPresenter(error, offerSdp) { + if (error) return onError(error); + + var message = { + sdpOffer : offerSdp, + room: currentRoom() + }; + + socket.emit('presenter', message); +} + +function viewer() { + autoView = true; + if (!webRtcPeer) { + showSpinner(video); + + var options = { + remoteVideo: video, + onicecandidate : onIceCandidate + }; + + webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) { + if(error) return onError(error); + + this.generateOffer(onOfferViewer); + }); + } +} + +function onOfferViewer(error, offerSdp) { + if (error) return onError(error); + + var message = { + sdpOffer : offerSdp, + room: currentRoom() + }; + socket.emit('viewer', message); +} + +function onIceCandidate(candidate) { + //console.log('Local candidate' + JSON.stringify(candidate)); + socket.emit('onIceCandidate', {candidate : candidate}); +} + +function stop() { + autoView = false; + if (webRtcPeer) { + socket.emit('stop'); + dispose(); + } +} + +function dispose() { + if (webRtcPeer) { + webRtcPeer.dispose(); + webRtcPeer = null; + } + hideSpinner(video); +} + +function sendMessage(payload) { + var event = payload.id, + message = payload; + console.log('Sending message - ' + event + ': ', message); + + socket.emit(event, payload); +} + +function showSpinner() { + for (var i = 0; i < arguments.length; i++) { + arguments[i].poster = './img/transparent-1px.png'; + arguments[i].style.background = 'center transparent url("./img/spinner.gif") no-repeat'; + } +} + +function hideSpinner() { + for (var i = 0; i < arguments.length; i++) { + arguments[i].src = ''; + arguments[i].poster = './img/webrtc.png'; + arguments[i].style.background = ''; + } +} + +function currentRoom() { + return $('#roomName').val(); +} + +/** + * Lightbox utility (to display media pipeline image in a modal dialog) + */ +$(document).delegate('*[data-toggle="lightbox"]', 'click', function(event) { + event.preventDefault(); + $(this).ekkoLightbox(); +});