�PNG  IHDR��;���IDATx��ܻn�0���K�� �)(�pA��� ���7�LeG{�� �§㻢|��ذaÆ 6lذaÆ 6lذaÆ 6lom��$^�y���ذag�5bÆ 6lذaÆ 6lذa{���� 6lذaÆ �`����}H�Fkm�,�m����Ӫ���ô�ô!� �x�|'ܢ˟;�E:���9�&ᶒ�}�{�v]�n&�6� �h��_��t�ڠ͵-ҫ���Z;��Z$�.�P���k�ž)�!��o���>}l�eQfJ�T��u і���چ��\��X=8��Rن4`Vw�l�>����n�G�^��i�s��"ms�$�u��i��?w�bs[m�6�K4���O���.�4��%����/����b�C%��t ��M�ז� �-l�G6�mrz2���s�%�9��s@���-�k�9�=���)������k�B5����\��+͂�Zsٲ ��Rn��~G���R���C����� �wIcI��n7jJ���hۛNCS|���j0��8y�iHKֶۛ�k�Ɉ+;Sz������L/��F�*\��Ԕ�#"5��m�2��[S��������=�g��n�a�P�e�ғ�L�� lذaÆ 6l�^k��̱aÆ 6lذaÆ 6lذa;���� �_��ذaÆ 6lذaÆ 6lذaÆ ���R���IEND�B` // Generated by CoffeeScript 1.12.7 (function() { var XhrPollingReceiver, XhrStreamingReceiver, transport, utils, extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; transport = require('./transport'); utils = require('./utils'); XhrStreamingReceiver = (function(superClass) { extend(XhrStreamingReceiver, superClass); function XhrStreamingReceiver() { return XhrStreamingReceiver.__super__.constructor.apply(this, arguments); } XhrStreamingReceiver.prototype.protocol = "xhr-streaming"; XhrStreamingReceiver.prototype.doSendFrame = function(payload) { return XhrStreamingReceiver.__super__.doSendFrame.call(this, payload + '\n'); }; return XhrStreamingReceiver; })(transport.ResponseReceiver); XhrPollingReceiver = (function(superClass) { extend(XhrPollingReceiver, superClass); function XhrPollingReceiver() { return XhrPollingReceiver.__super__.constructor.apply(this, arguments); } XhrPollingReceiver.prototype.protocol = "xhr-polling"; XhrPollingReceiver.prototype.max_response_size = 1; return XhrPollingReceiver; })(XhrStreamingReceiver); exports.app = { xhr_options: function(req, res) { res.statusCode = 204; res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, POST'); res.setHeader('Access-Control-Max-Age', res.cache_for); return ''; }, xhr_send: function(req, res, data) { var d, i, jsonp, len, message, x; if (!data) { throw { status: 500, message: 'Payload expected.' }; } try { d = JSON.parse(data); } catch (error) { x = error; throw { status: 500, message: 'Broken JSON encoding.' }; } if (!d || d.__proto__.constructor !== Array) { throw { status: 500, message: 'Payload expected.' }; } jsonp = transport.Session.bySessionId(req.session); if (!jsonp) { throw { status: 404 }; } for (i = 0, len = d.length; i < len; i++) { message = d[i]; jsonp.didMessage(message); } res.setHeader('Content-Type', 'text/plain; charset=UTF-8'); res.writeHead(204); res.end(); return true; }, xhr_cors: function(req, res, content) { var headers, origin; if (this.options.disable_cors) { return content; } if (!req.headers['origin']) { origin = '*'; } else { origin = req.headers['origin']; res.setHeader('Access-Control-Allow-Credentials', 'true'); } res.setHeader('Access-Control-Allow-Origin', origin); res.setHeader('Vary', 'Origin'); headers = req.headers['access-control-request-headers']; if (headers) { res.setHeader('Access-Control-Allow-Headers', headers); } return content; }, xhr_poll: function(req, res, _, next_filter) { res.setHeader('Content-Type', 'application/javascript; charset=UTF-8'); res.writeHead(200); transport.register(req, this, new XhrPollingReceiver(req, res, this.options)); return true; }, xhr_streaming: function(req, res, _, next_filter) { res.setHeader('Content-Type', 'application/javascript; charset=UTF-8'); res.writeHead(200); res.write(Array(2049).join('h') + '\n'); transport.register(req, this, new XhrStreamingReceiver(req, res, this.options)); return true; } }; }).call(this);