{"version":3,"sources":["vendor/ember-cli/app-prefix.js","sharedrop/app.js","sharedrop/component-managers/glimmer.js","sharedrop/components/circular-progress.js","sharedrop/components/file-field.js","sharedrop/components/modal-dialog.js","sharedrop/components/peer-avatar.js","sharedrop/components/peer-widget.js","sharedrop/components/popover-confirm.js","sharedrop/components/qr-code.js","sharedrop/components/room-url.js","sharedrop/components/user-widget.js","sharedrop/controllers/application.js","sharedrop/controllers/index.js","sharedrop/helpers/app-version.js","sharedrop/helpers/is-equal.js","sharedrop/initializers/app-version.js","sharedrop/initializers/container-debug-adapter.js","sharedrop/initializers/export-application-global.js","sharedrop/initializers/prerequisites.js","sharedrop/models/peer.js","sharedrop/models/user.js","sharedrop/router.js","sharedrop/routes/application.js","sharedrop/routes/error.js","sharedrop/routes/index.js","sharedrop/routes/room.js","sharedrop/services/analytics.js","sharedrop/services/avatar.js","sharedrop/services/file.js","sharedrop/services/room.js","sharedrop/services/web-rtc.js","sharedrop/templates/about-app.js","sharedrop/templates/about-room.js","sharedrop/templates/about-you.js","sharedrop/templates/application.js","sharedrop/templates/components/modal-dialog.js","sharedrop/templates/components/peer-widget.js","sharedrop/templates/components/popover-confirm.js","sharedrop/templates/components/user-widget.js","sharedrop/templates/errors/browser-unsupported.js","sharedrop/templates/errors/filesystem-unavailable.js","sharedrop/templates/errors/popovers/connection-failed.js","sharedrop/templates/errors/popovers/multiple-files.js","sharedrop/templates/index.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"names":["define","_exports","_emberResolver","_emberLoadInitializers","_environment","Sentry","_integrations","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","default","init","dsn","integrations","Ember","App","Application","[object Object]","args","super","this","modulePrefix","podModulePrefix","_emberComponentManager","get","_component","__COLOCATED_TEMPLATE__","HTMLBars","template","id","block","meta","moduleName","COLORS","blue","orange","CircularProgress","owner","rgb","color","style","String","htmlSafe","path","π","Math","PI","α","r","sin","cos","_setComponentTemplate","_jquery","_default","TextField","extend","type","classNames","event","stopPropagation","input","target","files","onChange","reset","field","element","wrap","closest","unwrap","Component","actions","onClose","tagName","attributeBindings","src","computed","alias","alt","title","data-sending-progress","data-receiving-progress","className","run","later","parent","addClass","delay","queue","removeClass","dequeue","_super","toggleTransferCompletedClass","bind","peer","on","off","canSendFile","find","click","cancelEvent","dt","originalEvent","dataTransfer","isTransferableBundle","onFileDrop","setProperties","state","errorCode","preventDefault","length","window","File","aggregatedSize","file","size","_jszip","classNameBindings","hasCustomRoomName","webrtc","label","isIdle","equal","isPreparingFileTransfer","hasSelectedFile","isSendingFileInfo","isAwaitingFileInfo","isAwaitingResponse","hasReceivedFileInfo","hasDeclinedFileTransfer","hasError","isReceivingFile","gt","isSendingFile","filename","info","name","errorTemplateName","data","set","_reduceFiles","then","connect","_cancelFileTransfer","connection","sendCancelRequest","_sendFileTransferResponse","progress","transfer.file","response","sendFileResponse","Promise","resolve","zip","Array","prototype","forEach","call","blob","generateAsync","streamFiles","metadata","percent","Date","toISOString","substring","replace","iconClass","regex","match","extension","toLowerCase","onConfirm","onCancel","_qrCode","focus","select","ClipboardEvent","pasteEvent","dataType","document","dispatchEvent","_uuid","_user","Controller","avatarService","inject","service","Sharedrop","userId","ip","publicIp","avatar","you","create","uuid","public_ip","avatarUrl","url","v4","sessionStorage","setItem","transitionToRoute","_webRtc","_peer","application","controller","room","firebaseRef","ref","model","clear","_addPeer","attrs","peerAttrs","pushObject","findBy","defaults","peers","removeObject","error","peer.connection","peer.state","getFileInfo","sendFileInfo","console","log","sendFile","close","trigger","_regexp","appVersion","_","hash","version","APP","versionOnly","hideSha","shaOnly","hideVersion","showExtended","versionExtendedRegExp","versionRegExp","shaRegExp","Helper","helper","leftSide","rightSide","_initializerFactory","initialize","_containerDebugAdapter","app","arguments","register","exportApplicationGlobal","theGlobal","global","self","globalName","classify","reopen","willDestroy","apply","_file","_analytics","deferReadiness","RSVP","reject","util","supports","sctp","removeAll","catch","getJSON","Firebase","FIREBASE_URL","authWithCustomToken","token","subscribe","trackEvent","event_category","event_label","round","advanceReadiness","Evented","transfer","initialPeerState","initialTransferState","sendingProgress","receivingProgress","stateChanged","observer","Router","locationType","rootURL","map","route","Route","modalName","render","outlet","into","disconnectOutlet","parentView","message","indexOf","_room","Error","ctrl","_onRoomConnected","_onRoomDisconnected","_onRoomUserAdded","_onRoomUserChanged","_onRoomUserRemoved","_onPeerP2PIncomingConnection","_onPeerDCIncomingConnection","_onPeerDCIncomingConnectionError","_onPeerP2POutgoingConnection","_onPeerDCOutgoingConnection","_onPeerDCOutgoingConnectionError","_onPeerP2PDisconnected","_onPeerP2PFileInfo","_onPeerP2PFileResponse","_onPeerP2PFileCanceled","_onPeerP2PFileReceived","_onPeerP2PFileSent","join","serialize","localStorage","getItem","send","unsubscribe","controllerFor","leave","_index","controllerName","params","room_id","transition","location","href","removeItem","parameters","gtag","_sample","_startCase","AVATARS","PREFIXES","Service","prefix","options","localName","getTime","_reset","requestFileSystem","webkitRequestFileSystem","TEMPORARY","filesystem","errorHandler","filer","Filer","persistent","ls","entries","rm","entry","pop","append","root","getFile","fileEntry","createWriter","writer","Blob","onwriteend","seek","onerror","write","save","a","createElement","finish","link","body","appendChild","addEventListener","setTimeout","remove","parentNode","removeChild","download","_isWebKit","toURL","URL","webkitURL","createObjectURL","debug","Room","_ref","user","_connectionRef","child","_roomRef","_usersRef","_userRef","connectionSnapshot","val","onDisconnect","warn","publish","userAddedSnapshot","addedUser","userRemovedSnapshot","removedUser","userChangedSnapshot","changedUser","update","WebRTC","conn","Peer","config","iceServers","urls","outgoing","incoming","_onConnection","CHUNK_MTU","CHUNKS_PER_ACK","reliable","serialization","undefined","byteLength","_onBinaryData","_onJSONData","JSON","parse","receivedChunkNum","chunksPerAck","emit","chunksTotal","push","nextChunkNum","lastChunkInFile","_requestFileBlock","payload","_sendBlock","lastModifiedDate","ceil","stringify","chunkNum","beginChunkNum","chunkSize","remainingChunks","chunksToSend","min","endChunkNum","blockBegin","blockEnd","reader","FileReader","blockBlob","slice","onload","readyState","DONE","blockBuffer","result","bufferBegin","bufferEnd","chunkBuffer","readAsArrayBuffer","metaName","rawConfig","querySelector","getAttribute","exports","decodeURIComponent","err","runningTests","require"],"mappings":"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","file":"sharedrop.js","sourcesContent":["'use strict';\n\n\n","define(\"sharedrop/app\", [\"exports\", \"ember-resolver\", \"ember-load-initializers\", \"sharedrop/config/environment\", \"@sentry/browser\", \"@sentry/integrations\"], function (_exports, _emberResolver, _emberLoadInitializers, _environment, Sentry, _integrations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n  Sentry.init({\n    dsn: 'https://ba1292a9c759401dbbda4272f183408d@o432021.ingest.sentry.io/5384091',\n    integrations: [new _integrations.Ember()]\n  });\n\n  class App extends Ember.Application {\n    constructor(...args) {\n      super(...args);\n\n      _defineProperty(this, \"modulePrefix\", _environment.default.modulePrefix);\n\n      _defineProperty(this, \"podModulePrefix\", _environment.default.podModulePrefix);\n\n      _defineProperty(this, \"Resolver\", _emberResolver.default);\n    }\n\n  }\n\n  _exports.default = App;\n  (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n});","define(\"sharedrop/component-managers/glimmer\", [\"exports\", \"@glimmer/component/-private/ember-component-manager\"], function (_exports, _emberComponentManager) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _emberComponentManager.default;\n    }\n  });\n});","define(\"sharedrop/components/circular-progress\", [\"exports\", \"@glimmer/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const __COLOCATED_TEMPLATE__ = Ember.HTMLBars.template(\n  /*\n    <svg width=\"76\" height=\"76\" viewport=\"0 0 76 76\" style={{this.style}}>\n    <path class=\"break\" transform=\"translate(38, 38)\" d={{this.path}} />\n  </svg>\n  */\n  {\"id\":\"PyuhpFmm\",\"block\":\"{\\\"symbols\\\":[],\\\"statements\\\":[[10,\\\"svg\\\"],[14,\\\"width\\\",\\\"76\\\"],[14,\\\"height\\\",\\\"76\\\"],[14,\\\"viewport\\\",\\\"0 0 76 76\\\"],[15,5,[32,0,[\\\"style\\\"]]],[12],[2,\\\"\\\\n  \\\"],[10,\\\"path\\\"],[14,0,\\\"break\\\"],[14,\\\"transform\\\",\\\"translate(38, 38)\\\"],[15,\\\"d\\\",[32,0,[\\\"path\\\"]]],[12],[13],[2,\\\"\\\\n\\\"],[13]],\\\"hasEval\\\":false,\\\"upvars\\\":[]}\",\"meta\":{\"moduleName\":\"sharedrop/components/circular-progress.hbs\"}});\n\n  const COLORS = {\n    blue: '0, 136, 204',\n    orange: '197, 197, 51'\n  };\n\n  class CircularProgress extends _component.default {\n    constructor(owner, args) {\n      super(owner, args);\n      const rgb = COLORS[args.color];\n      this.style = Ember.String.htmlSafe(`fill: rgba(${rgb}, .5)`);\n    }\n\n    get path() {\n      const π = Math.PI;\n      const α = this.args.value * 360;\n      const r = α * π / 180;\n      const mid = α > 180 ? 1 : 0;\n      const x = Math.sin(r) * 38;\n      const y = Math.cos(r) * -38;\n      return `M 0 0 v -38 A 38 38 1 ${mid} 1 ${x} ${y} z`;\n    }\n\n  }\n\n  _exports.default = CircularProgress;\n\n  Ember._setComponentTemplate(__COLOCATED_TEMPLATE__, CircularProgress);\n});","define(\"sharedrop/components/file-field\", [\"exports\", \"jquery\"], function (_exports, _jquery) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.TextField.extend({\n    type: 'file',\n    classNames: ['invisible'],\n\n    click(event) {\n      event.stopPropagation();\n    },\n\n    change(event) {\n      const input = event.target;\n      const {\n        files\n      } = input;\n      this.onChange({\n        files\n      });\n      this.reset();\n    },\n\n    // Hackish way to reset file input when sender cancels file transfer,\n    // so if sender wants later to send the same file again,\n    // the 'change' event is triggered correctly.\n    reset() {\n      const field = (0, _jquery.default)(this.element);\n      field.wrap('<form>').closest('form').get(0).reset();\n      field.unwrap();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/modal-dialog\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    actions: {\n      close() {\n        // This sends an action to application route.\n        // eslint-disable-next-line ember/closure-actions\n        return this.onClose();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/peer-avatar\", [\"exports\", \"jquery\"], function (_exports, _jquery) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: 'img',\n    classNames: ['gravatar'],\n    attributeBindings: ['src', 'alt', 'title', 'data-sending-progress', 'data-receiving-progress'],\n    src: Ember.computed.alias('peer.avatarUrl'),\n    alt: Ember.computed.alias('peer.label'),\n    title: Ember.computed.alias('peer.uuid'),\n    'data-sending-progress': Ember.computed.alias('peer.transfer.sendingProgress'),\n    'data-receiving-progress': Ember.computed.alias('peer.transfer.receivingProgress'),\n\n    toggleTransferCompletedClass() {\n      const className = 'transfer-completed';\n      Ember.run.later(this, function toggleClass() {\n        (0, _jquery.default)(this.element).parent('.avatar').addClass(className).delay(2000).queue(function removeClass() {\n          (0, _jquery.default)(this).removeClass(className).dequeue();\n        });\n      }, 250);\n    },\n\n    init(...args) {\n      this._super(args);\n\n      this.toggleTransferCompletedClass = this.toggleTransferCompletedClass.bind(this);\n    },\n\n    didInsertElement(...args) {\n      this._super(args);\n\n      const {\n        peer\n      } = this;\n      peer.on('didReceiveFile', this.toggleTransferCompletedClass);\n      peer.on('didSendFile', this.toggleTransferCompletedClass);\n    },\n\n    willDestroyElement(...args) {\n      this._super(args);\n\n      const {\n        peer\n      } = this;\n      peer.off('didReceiveFile', this.toggleTransferCompletedClass);\n      peer.off('didSendFile', this.toggleTransferCompletedClass);\n    },\n\n    // Delegate click to hidden file field in peer template\n    click() {\n      if (this.canSendFile()) {\n        (0, _jquery.default)(this.element).closest('.peer').find('input[type=file]').click();\n      }\n    },\n\n    // Handle drop events\n    dragEnter(event) {\n      this.cancelEvent(event);\n      (0, _jquery.default)(this.element).parent('.avatar').addClass('hover');\n    },\n\n    dragOver(event) {\n      this.cancelEvent(event);\n    },\n\n    dragLeave() {\n      (0, _jquery.default)(this.element).parent('.avatar').removeClass('hover');\n    },\n\n    drop(event) {\n      this.cancelEvent(event);\n      (0, _jquery.default)(this.element).parent('.avatar').removeClass('hover');\n      const {\n        peer\n      } = this;\n      const dt = event.originalEvent.dataTransfer;\n      const {\n        files\n      } = dt;\n\n      if (this.canSendFile()) {\n        if (!this.isTransferableBundle(files)) {\n          peer.setProperties({\n            state: 'error',\n            errorCode: 'multiple-files'\n          });\n        } else {\n          this.onFileDrop({\n            files\n          });\n        }\n      }\n    },\n\n    cancelEvent(event) {\n      event.stopPropagation();\n      event.preventDefault();\n    },\n\n    canSendFile() {\n      const {\n        peer\n      } = this; // Can't send files if another file transfer is already in progress\n\n      return !(peer.get('state') === 'is_preparing_file_transfer' || peer.get('transfer.file') || peer.get('transfer.info'));\n    },\n\n    isTransferableBundle(files) {\n      if (files.length === 1 && files[0] instanceof window.File) return true;\n      const fileSizeLimit = 50 * 1024 * 1024;\n      const bundleSizeLimit = 200 * 1024 * 1024;\n      let aggregatedSize = 0; // eslint-disable-next-line no-restricted-syntax\n\n      for (const file of files) {\n        if (!(file instanceof window.File)) {\n          return false;\n        }\n\n        if (file.size > fileSizeLimit) {\n          return false;\n        }\n\n        aggregatedSize += file.size;\n\n        if (aggregatedSize > bundleSizeLimit) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/peer-widget\", [\"exports\", \"jszip\"], function (_exports, _jszip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['peer'],\n    classNameBindings: ['peer.peer.state'],\n    peer: null,\n    hasCustomRoomName: false,\n    webrtc: null,\n    // TODO inject webrtc as a service\n    label: Ember.computed.alias('peer.label'),\n    isIdle: Ember.computed.equal('peer.state', 'idle'),\n    isPreparingFileTransfer: Ember.computed.equal('peer.state', 'is_preparing_file_transfer'),\n    hasSelectedFile: Ember.computed.equal('peer.state', 'has_selected_file'),\n    isSendingFileInfo: Ember.computed.equal('peer.state', 'sending_file_info'),\n    isAwaitingFileInfo: Ember.computed.equal('peer.state', 'awaiting_file_info'),\n    isAwaitingResponse: Ember.computed.equal('peer.state', 'awaiting_response'),\n    hasReceivedFileInfo: Ember.computed.equal('peer.state', 'received_file_info'),\n    hasDeclinedFileTransfer: Ember.computed.equal('peer.state', 'declined_file_transfer'),\n    hasError: Ember.computed.equal('peer.state', 'error'),\n    isReceivingFile: Ember.computed.gt('peer.transfer.receivingProgress', 0),\n    isSendingFile: Ember.computed.gt('peer.transfer.sendingProgress', 0),\n    filename: Ember.computed('peer.transfer.{file,info}', function () {\n      const file = this.get('peer.transfer.file');\n      const info = this.get('peer.transfer.info');\n\n      if (file) {\n        return file.name;\n      }\n\n      if (info) {\n        return info.name;\n      }\n\n      return null;\n    }),\n    errorTemplateName: Ember.computed('peer.errorCode', function () {\n      const errorCode = this.get('peer.errorCode');\n      return errorCode ? `errors/popovers/${errorCode}` : null;\n    }),\n    actions: {\n      // TODO: rename to something more meaningful (e.g. askIfWantToSendFile)\n      uploadFile(data) {\n        const {\n          peer\n        } = this;\n        const {\n          files\n        } = data;\n        peer.set('state', 'is_preparing_file_transfer');\n        peer.set('bundlingProgress', 0); // Cache the file, so that it's available\n        // when the response from the recipient comes in\n\n        this._reduceFiles(files).then(file => {\n          peer.set('transfer.file', file);\n          peer.set('state', 'has_selected_file');\n        });\n      },\n\n      sendFileTransferInquiry() {\n        const {\n          webrtc\n        } = this;\n        const {\n          peer\n        } = this;\n        webrtc.connect(peer.get('peer.id'));\n        peer.set('state', 'establishing_connection');\n      },\n\n      cancelFileTransfer() {\n        this._cancelFileTransfer();\n      },\n\n      abortFileTransfer() {\n        this._cancelFileTransfer();\n\n        const {\n          webrtc\n        } = this;\n        const connection = this.get('peer.peer.connection');\n        webrtc.sendCancelRequest(connection);\n      },\n\n      acceptFileTransfer() {\n        const {\n          peer\n        } = this;\n\n        this._sendFileTransferResponse(true);\n\n        peer.get('peer.connection').on('receiving_progress', progress => {\n          peer.set('transfer.receivingProgress', progress);\n        });\n        peer.set('state', 'sending_file_data');\n      },\n\n      rejectFileTransfer() {\n        const {\n          peer\n        } = this;\n\n        this._sendFileTransferResponse(false);\n\n        peer.set('transfer.info', null);\n        peer.set('state', 'idle');\n      }\n\n    },\n\n    _cancelFileTransfer() {\n      const {\n        peer\n      } = this;\n      peer.setProperties({\n        'transfer.file': null,\n        state: 'idle'\n      });\n    },\n\n    _sendFileTransferResponse(response) {\n      const {\n        webrtc\n      } = this;\n      const {\n        peer\n      } = this;\n      const connection = peer.get('peer.connection');\n      webrtc.sendFileResponse(connection, response);\n    },\n\n    async _reduceFiles(files) {\n      const {\n        peer\n      } = this;\n\n      if (files.length === 1) {\n        return Promise.resolve(files[0]);\n      }\n\n      const zip = new _jszip.default();\n      Array.prototype.forEach.call(files, file => {\n        zip.file(file.name, file);\n      });\n      const blob = await zip.generateAsync({\n        type: 'blob',\n        streamFiles: true\n      }, metadata => {\n        peer.set('bundlingProgress', metadata.percent / 100);\n      });\n      return new File([blob], `sharedrop-${new Date().toISOString().substring(0, 19).replace('T', '-')}.zip`, {\n        type: 'application/zip'\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/popover-confirm\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['popover-confirm'],\n    iconClass: Ember.computed('filename', function () {\n      const {\n        filename\n      } = this;\n\n      if (filename) {\n        const regex = /\\.([0-9a-z]+)$/i;\n        const match = filename.match(regex);\n        const extension = match && match[1];\n\n        if (extension) {\n          return `glyphicon-${extension.toLowerCase()}`;\n        }\n      }\n\n      return undefined;\n    }),\n    actions: {\n      confirm() {\n        this.onConfirm();\n      },\n\n      cancel() {\n        this.onCancel();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/qr-code\", [\"exports\", \"ember-qrcode-shim/components/qr-code\"], function (_exports, _qrCode) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _qrCode.default;\n    }\n  });\n});","define(\"sharedrop/components/room-url\", [\"exports\", \"jquery\"], function (_exports, _jquery) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.TextField.extend({\n    classNames: ['room-url'],\n\n    didInsertElement() {\n      (0, _jquery.default)(this.element).focus().select();\n    },\n\n    copyValueToClipboard() {\n      if (window.ClipboardEvent) {\n        const pasteEvent = new window.ClipboardEvent('paste', {\n          dataType: 'text/plain',\n          data: this.element.value\n        });\n        document.dispatchEvent(pasteEvent);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/components/user-widget\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['peer'],\n    classNameBindings: ['peer.peer.state']\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/controllers/application\", [\"exports\", \"uuid\", \"sharedrop/models/user\"], function (_exports, _uuid, _user) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    avatarService: Ember.inject.service('avatar'),\n\n    init(...args) {\n      this._super(args);\n\n      const id = window.Sharedrop.userId;\n      const ip = window.Sharedrop.publicIp;\n      const avatar = this.avatarService.get();\n\n      const you = _user.default.create({\n        uuid: id,\n        public_ip: ip,\n        avatarUrl: avatar.url,\n        label: avatar.label\n      });\n\n      you.set('peer.id', id);\n      this.set('you', you);\n    },\n\n    actions: {\n      redirect() {\n        const uuid = (0, _uuid.v4)();\n        const key = `show-instructions-for-room-${uuid}`;\n        sessionStorage.setItem(key, 'yup');\n        this.transitionToRoute('room', uuid);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/controllers/index\", [\"exports\", \"jquery\", \"sharedrop/services/web-rtc\", \"sharedrop/models/peer\"], function (_exports, _jquery, _webRtc, _peer) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    application: Ember.inject.controller('application'),\n    you: Ember.computed.alias('application.you'),\n    room: null,\n    webrtc: null,\n\n    _onRoomConnected(event, data) {\n      const {\n        you\n      } = this;\n      const {\n        room\n      } = this;\n      you.get('peer').setProperties(data.peer); // eslint-disable-next-line no-param-reassign\n\n      delete data.peer;\n      you.setProperties(data); // Initialize WebRTC\n\n      this.set('webrtc', new _webRtc.default(you.get('uuid'), {\n        room: room.name,\n        firebaseRef: window.Sharedrop.ref\n      }));\n    },\n\n    _onRoomDisconnected() {\n      this.model.clear();\n      this.set('webrtc', null);\n    },\n\n    _onRoomUserAdded(event, data) {\n      const {\n        you\n      } = this;\n\n      if (you.get('uuid') !== data.uuid) {\n        this._addPeer(data);\n      }\n    },\n\n    _addPeer(attrs) {\n      const peerAttrs = attrs.peer; // eslint-disable-next-line no-param-reassign\n\n      delete attrs.peer;\n\n      const peer = _peer.default.create(attrs);\n\n      peer.get('peer').setProperties(peerAttrs);\n      this.model.pushObject(peer);\n    },\n\n    _onRoomUserChanged(event, data) {\n      const peers = this.model;\n      const peer = peers.findBy('uuid', data.uuid);\n      const peerAttrs = data.peer;\n      const defaults = {\n        uuid: null,\n        public_ip: null\n      };\n\n      if (peer) {\n        // eslint-disable-next-line no-param-reassign\n        delete data.peer; // Firebase doesn't return keys with null values,\n        // so we have to add them back.\n\n        peer.setProperties(_jquery.default.extend({}, defaults, data));\n        peer.get('peer').setProperties(peerAttrs);\n      }\n    },\n\n    _onRoomUserRemoved(event, data) {\n      const peers = this.model;\n      const peer = peers.findBy('uuid', data.uuid);\n      peers.removeObject(peer);\n    },\n\n    _onPeerP2PIncomingConnection(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer); // Don't switch to 'connecting' state on incoming connection,\n      // as p2p connection may still fail.\n\n      peer.set('peer.connection', connection);\n    },\n\n    _onPeerDCIncomingConnection(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      peer.set('peer.state', 'connected');\n    },\n\n    _onPeerDCIncomingConnectionError(event, data) {\n      const {\n        connection,\n        error\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n\n      switch (error.type) {\n        case 'failed':\n          peer.setProperties({\n            'peer.connection': null,\n            'peer.state': 'disconnected',\n            state: 'error',\n            errorCode: 'connection-failed'\n          });\n          break;\n\n        case 'disconnected':\n          // TODO: notify both sides\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    _onPeerP2POutgoingConnection(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      peer.setProperties({\n        'peer.connection': connection,\n        'peer.state': 'connecting'\n      });\n    },\n\n    _onPeerDCOutgoingConnection(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      const file = peer.get('transfer.file');\n      const {\n        webrtc\n      } = this;\n      const info = webrtc.getFileInfo(file);\n      peer.set('peer.state', 'connected');\n      peer.set('state', 'awaiting_response');\n      webrtc.sendFileInfo(connection, info);\n      console.log('Sending a file info...', info);\n    },\n\n    _onPeerDCOutgoingConnectionError(event, data) {\n      const {\n        connection,\n        error\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n\n      switch (error.type) {\n        case 'failed':\n          peer.setProperties({\n            'peer.connection': null,\n            'peer.state': 'disconnected',\n            state: 'error',\n            errorCode: 'connection-failed'\n          });\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    _onPeerP2PDisconnected(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n\n      if (peer) {\n        peer.set('peer.connection', null);\n        peer.set('peer.state', 'disconnected');\n      }\n    },\n\n    _onPeerP2PFileInfo(event, data) {\n      console.log('Peer:\\t Received file info', data);\n      const {\n        connection,\n        info\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      peer.set('transfer.info', info);\n      peer.set('state', 'received_file_info');\n    },\n\n    _onPeerP2PFileResponse(event, data) {\n      console.log('Peer:\\t Received file response', data);\n      const {\n        connection,\n        response\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      const {\n        webrtc\n      } = this;\n\n      if (response) {\n        const file = peer.get('transfer.file');\n        connection.on('sending_progress', progress => {\n          peer.set('transfer.sendingProgress', progress);\n        });\n        webrtc.sendFile(connection, file);\n        peer.set('state', 'receiving_file_data');\n      } else {\n        peer.set('state', 'declined_file_transfer');\n      }\n    },\n\n    _onPeerP2PFileCanceled(event, data) {\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      connection.close();\n      peer.set('transfer.receivingProgress', 0);\n      peer.set('transfer.info', null);\n      peer.set('state', 'idle');\n    },\n\n    _onPeerP2PFileReceived(event, data) {\n      console.log('Peer:\\t Received file', data);\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      connection.close();\n      peer.set('transfer.receivingProgress', 0);\n      peer.set('transfer.info', null);\n      peer.set('state', 'idle');\n      peer.trigger('didReceiveFile');\n    },\n\n    _onPeerP2PFileSent(event, data) {\n      console.log('Peer:\\t Sent file', data);\n      const {\n        connection\n      } = data;\n      const peers = this.model;\n      const peer = peers.findBy('peer.id', connection.peer);\n      peer.set('transfer.sendingProgress', 0);\n      peer.set('transfer.file', null);\n      peer.set('state', 'idle');\n      peer.trigger('didSendFile');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/helpers/app-version\", [\"exports\", \"sharedrop/config/environment\", \"ember-cli-app-version/utils/regexp\"], function (_exports, _environment, _regexp) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.appVersion = appVersion;\n  _exports.default = void 0;\n\n  function appVersion(_, hash = {}) {\n    const version = _environment.default.APP.version; // e.g. 1.0.0-alpha.1+4jds75hf\n    // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n\n    let versionOnly = hash.versionOnly || hash.hideSha;\n    let shaOnly = hash.shaOnly || hash.hideVersion;\n    let match = null;\n\n    if (versionOnly) {\n      if (hash.showExtended) {\n        match = version.match(_regexp.versionExtendedRegExp); // 1.0.0-alpha.1\n      } // Fallback to just version\n\n\n      if (!match) {\n        match = version.match(_regexp.versionRegExp); // 1.0.0\n      }\n    }\n\n    if (shaOnly) {\n      match = version.match(_regexp.shaRegExp); // 4jds75hf\n    }\n\n    return match ? match[0] : version;\n  }\n\n  var _default = Ember.Helper.helper(appVersion);\n\n  _exports.default = _default;\n});","define(\"sharedrop/helpers/is-equal\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Helper.helper(([leftSide, rightSide]) => leftSide === rightSide);\n\n  _exports.default = _default;\n});","define(\"sharedrop/initializers/app-version\", [\"exports\", \"ember-cli-app-version/initializer-factory\", \"sharedrop/config/environment\"], function (_exports, _initializerFactory, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  let name, version;\n\n  if (_environment.default.APP) {\n    name = _environment.default.APP.name;\n    version = _environment.default.APP.version;\n  }\n\n  var _default = {\n    name: 'App Version',\n    initialize: (0, _initializerFactory.default)(name, version)\n  };\n  _exports.default = _default;\n});","define(\"sharedrop/initializers/container-debug-adapter\", [\"exports\", \"ember-resolver/resolvers/classic/container-debug-adapter\"], function (_exports, _containerDebugAdapter) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'container-debug-adapter',\n\n    initialize() {\n      let app = arguments[1] || arguments[0];\n      app.register('container-debug-adapter:main', _containerDebugAdapter.default);\n      app.inject('container-debug-adapter:main', 'namespace', 'application:main');\n    }\n\n  };\n  _exports.default = _default;\n});","define(\"sharedrop/initializers/export-application-global\", [\"exports\", \"sharedrop/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.initialize = initialize;\n  _exports.default = void 0;\n\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n\n    if (_environment.default.exportApplicationGlobal !== false) {\n      var theGlobal;\n\n      if (typeof window !== 'undefined') {\n        theGlobal = window;\n      } else if (typeof global !== 'undefined') {\n        theGlobal = global;\n      } else if (typeof self !== 'undefined') {\n        theGlobal = self;\n      } else {\n        // no reasonable global, just bail\n        return;\n      }\n\n      var value = _environment.default.exportApplicationGlobal;\n      var globalName;\n\n      if (typeof value === 'string') {\n        globalName = value;\n      } else {\n        globalName = Ember.String.classify(_environment.default.modulePrefix);\n      }\n\n      if (!theGlobal[globalName]) {\n        theGlobal[globalName] = application;\n        application.reopen({\n          willDestroy: function () {\n            this._super.apply(this, arguments);\n\n            delete theGlobal[globalName];\n          }\n        });\n      }\n    }\n  }\n\n  var _default = {\n    name: 'export-application-global',\n    initialize: initialize\n  };\n  _exports.default = _default;\n});","define(\"sharedrop/initializers/prerequisites\", [\"exports\", \"jquery\", \"sharedrop/config/environment\", \"sharedrop/services/file\", \"sharedrop/services/analytics\"], function (_exports, _jquery, _environment, _file, _analytics) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.initialize = initialize;\n  _exports.default = void 0;\n\n  /* jshint -W030 */\n  function initialize(application) {\n    function checkWebRTCSupport() {\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        // window.util is a part of PeerJS library\n        if (window.util.supports.sctp) {\n          resolve();\n        } else {\n          // eslint-disable-next-line prefer-promise-reject-errors\n          reject('browser-unsupported');\n        }\n      });\n    }\n\n    function clearFileSystem() {\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        // TODO: change File into a service and require it here\n        _file.default.removeAll().then(() => {\n          resolve();\n        }).catch(() => {\n          // eslint-disable-next-line prefer-promise-reject-errors\n          reject('filesystem-unavailable');\n        });\n      });\n    }\n\n    function authenticateToFirebase() {\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        const xhr = _jquery.default.getJSON('/auth');\n\n        xhr.then(data => {\n          const ref = new window.Firebase(_environment.default.FIREBASE_URL); // eslint-disable-next-line no-param-reassign\n\n          application.ref = ref; // eslint-disable-next-line no-param-reassign\n\n          application.userId = data.id; // eslint-disable-next-line no-param-reassign\n\n          application.publicIp = data.public_ip;\n          ref.authWithCustomToken(data.token, error => {\n            if (error) {\n              reject(error);\n            } else {\n              resolve();\n            }\n          });\n        });\n      });\n    } // TODO: move it to a separate initializer\n\n\n    function trackSizeOfReceivedFiles() {\n      _jquery.default.subscribe('file_received.p2p', (event, data) => {\n        _analytics.default.trackEvent('received', {\n          event_category: 'file',\n          event_label: 'size',\n          value: Math.round(data.info.size / 1000)\n        });\n      });\n    }\n\n    application.deferReadiness();\n    checkWebRTCSupport().then(clearFileSystem).catch(error => {\n      // eslint-disable-next-line no-param-reassign\n      application.error = error;\n    }).then(authenticateToFirebase).then(trackSizeOfReceivedFiles).then(() => {\n      application.advanceReadiness();\n    });\n  }\n\n  var _default = {\n    name: 'prerequisites',\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"sharedrop/models/peer\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    uuid: null,\n    label: null,\n    avatarUrl: null,\n    public_ip: null,\n    peer: null,\n    transfer: null,\n\n    init(...args) {\n      this._super(args);\n\n      const initialPeerState = Ember.Object.create({\n        id: null,\n        connection: null,\n        // State of data channel connection. Possible states:\n        // - disconnected\n        // - connecting\n        // - connected\n        state: 'disconnected'\n      });\n      const initialTransferState = Ember.Object.create({\n        file: null,\n        info: null,\n        sendingProgress: 0,\n        receivingProgress: 0\n      });\n      this.set('peer', initialPeerState);\n      this.set('transfer', initialTransferState);\n    },\n\n    // Used to display popovers. Possible states:\n    // - idle\n    // - has_selected_file\n    // - establishing_connection\n    // - awaiting_response\n    // - received_file_info\n    // - declined_file_transfer\n    // - receiving_file_data\n    // - sending_file_data\n    // - error\n    state: 'idle',\n    // Used to display error messages in popovers. Possible codes:\n    // - multiple_files\n    errorCode: null,\n    stateChanged: Ember.on('init', Ember.observer('state', function () {\n      console.log('Peer:\\t State has changed: ', this.state); // Automatically clear error code if transitioning to a non-error state\n\n      if (this.state !== 'error') {\n        this.set('errorCode', null);\n      }\n    }))\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/models/user\", [\"exports\", \"sharedrop/models/peer\"], function (_exports, _peer) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const User = _peer.default.extend({\n    serialize() {\n      const data = {\n        uuid: this.uuid,\n        public_ip: this.public_ip,\n        label: this.label,\n        avatarUrl: this.avatarUrl,\n        peer: {\n          id: this.get('peer.id')\n        }\n      };\n      return data;\n    }\n\n  });\n\n  var _default = User;\n  _exports.default = _default;\n});","define(\"sharedrop/router\", [\"exports\", \"sharedrop/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n  class Router extends Ember.Router {\n    constructor(...args) {\n      super(...args);\n\n      _defineProperty(this, \"location\", _environment.default.locationType);\n\n      _defineProperty(this, \"rootURL\", _environment.default.rootURL);\n    }\n\n  } // eslint-disable-next-line array-callback-return\n\n\n  _exports.default = Router;\n  Router.map(function () {\n    this.route('room', {\n      path: '/rooms/:room_id'\n    });\n  });\n});","define(\"sharedrop/routes/application\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    setupController(controller) {\n      controller.set('currentRoute', this);\n    },\n\n    actions: {\n      openModal(modalName) {\n        return this.render(modalName, {\n          outlet: 'modal',\n          into: 'application'\n        });\n      },\n\n      closeModal() {\n        return this.disconnectOutlet({\n          outlet: 'modal',\n          parentView: 'application'\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/routes/error\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    renderTemplate(controller, error) {\n      const errors = ['browser-unsupported', 'filesystem-unavailable'];\n      const name = `errors/${error.message}`;\n\n      if (errors.indexOf(error.message) !== -1) {\n        this.render(name);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/routes/index\", [\"exports\", \"jquery\", \"sharedrop/services/room\"], function (_exports, _jquery, _room) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    beforeModel() {\n      const {\n        error\n      } = window.Sharedrop;\n\n      if (error) {\n        throw new Error(error);\n      }\n    },\n\n    model() {\n      // Get room name from the server\n      return _jquery.default.getJSON('/room').then(data => data.name);\n    },\n\n    setupController(ctrl, model) {\n      ctrl.set('model', []);\n      ctrl.set('hasCustomRoomName', false); // Handle room events\n\n      _jquery.default.subscribe('connected.room', ctrl._onRoomConnected.bind(ctrl));\n\n      _jquery.default.subscribe('disconnected.room', ctrl._onRoomDisconnected.bind(ctrl));\n\n      _jquery.default.subscribe('user_added.room', ctrl._onRoomUserAdded.bind(ctrl));\n\n      _jquery.default.subscribe('user_changed.room', ctrl._onRoomUserChanged.bind(ctrl));\n\n      _jquery.default.subscribe('user_removed.room', ctrl._onRoomUserRemoved.bind(ctrl)); // Handle peer events\n\n\n      _jquery.default.subscribe('incoming_peer_connection.p2p', ctrl._onPeerP2PIncomingConnection.bind(ctrl));\n\n      _jquery.default.subscribe('incoming_dc_connection.p2p', ctrl._onPeerDCIncomingConnection.bind(ctrl));\n\n      _jquery.default.subscribe('incoming_dc_connection_error.p2p', ctrl._onPeerDCIncomingConnectionError.bind(ctrl));\n\n      _jquery.default.subscribe('outgoing_peer_connection.p2p', ctrl._onPeerP2POutgoingConnection.bind(ctrl));\n\n      _jquery.default.subscribe('outgoing_dc_connection.p2p', ctrl._onPeerDCOutgoingConnection.bind(ctrl));\n\n      _jquery.default.subscribe('outgoing_dc_connection_error.p2p', ctrl._onPeerDCOutgoingConnectionError.bind(ctrl));\n\n      _jquery.default.subscribe('disconnected.p2p', ctrl._onPeerP2PDisconnected.bind(ctrl));\n\n      _jquery.default.subscribe('info.p2p', ctrl._onPeerP2PFileInfo.bind(ctrl));\n\n      _jquery.default.subscribe('response.p2p', ctrl._onPeerP2PFileResponse.bind(ctrl));\n\n      _jquery.default.subscribe('file_canceled.p2p', ctrl._onPeerP2PFileCanceled.bind(ctrl));\n\n      _jquery.default.subscribe('file_received.p2p', ctrl._onPeerP2PFileReceived.bind(ctrl));\n\n      _jquery.default.subscribe('file_sent.p2p', ctrl._onPeerP2PFileSent.bind(ctrl)); // Join the room\n\n\n      const room = new _room.default(model, window.Sharedrop.ref);\n      room.join(ctrl.get('you').serialize());\n      ctrl.set('room', room);\n    },\n\n    renderTemplate() {\n      this.render();\n      this.render('about_you', {\n        into: 'application',\n        outlet: 'about_you'\n      });\n      const key = 'show-instructions-for-app';\n\n      if (!localStorage.getItem(key)) {\n        this.send('openModal', 'about_app');\n        localStorage.setItem(key, 'yup');\n      }\n    },\n\n    actions: {\n      willTransition() {\n        _jquery.default.unsubscribe('.room');\n\n        _jquery.default.unsubscribe('.p2p'); // eslint-disable-next-line ember/no-controller-access-in-routes\n\n\n        const controller = this.controllerFor('index');\n        controller.get('room').leave();\n        return true;\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/routes/room\", [\"exports\", \"sharedrop/routes/index\"], function (_exports, _index) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _index.default.extend({\n    controllerName: 'index',\n\n    model(params) {\n      // Get room name from params\n      return params.room_id;\n    },\n\n    afterModel(model, transition) {\n      transition.then(route => {\n        route.controllerFor('application').set('currentUrl', window.location.href);\n      });\n    },\n\n    setupController(ctrl, model) {\n      // Call this method on \"index\" controller\n      this._super(ctrl, model);\n\n      ctrl.set('hasCustomRoomName', true);\n    },\n\n    renderTemplate(ctrl) {\n      this.render('index');\n      this.render('about_you', {\n        into: 'application',\n        outlet: 'about_you'\n      });\n      const room = ctrl.get('room').name;\n      const key = `show-instructions-for-room-${room}`;\n\n      if (sessionStorage.getItem(key)) {\n        this.send('openModal', 'about_room');\n        sessionStorage.removeItem(key);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/services/analytics\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    trackEvent(name, parameters) {\n      if (window.gtag && typeof window.gtag === 'function') {\n        window.gtag('event', name, parameters);\n      }\n    }\n\n  };\n  _exports.default = _default;\n});","define(\"sharedrop/services/avatar\", [\"exports\", \"lodash/sample\", \"lodash/startCase\"], function (_exports, _sample, _startCase) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AVATARS = [{\n    name: 'Piglet',\n    id: '23'\n  }, {\n    name: 'Cat',\n    id: '36'\n  }, {\n    name: 'Fish',\n    id: '37'\n  }, {\n    name: 'Fox',\n    id: '38'\n  }, {\n    name: 'Chicken',\n    id: '46'\n  }, {\n    name: 'Goat',\n    id: '50'\n  }, {\n    name: 'Ram',\n    id: '51'\n  }, {\n    name: 'Sheep',\n    id: '52'\n  }, {\n    name: 'Bison',\n    id: '59'\n  }, {\n    name: 'Dog',\n    id: '61'\n  }, {\n    name: 'Walrus',\n    id: '62'\n  }, {\n    name: 'Dog',\n    id: '63'\n  }, {\n    name: 'Monkey',\n    id: '64'\n  }, {\n    name: 'Bear',\n    id: '65'\n  }, {\n    name: 'Lion',\n    id: '66'\n  }, {\n    name: 'Zebra',\n    id: '67'\n  }, {\n    name: 'Giraffe',\n    id: '68'\n  }, {\n    name: 'Bear',\n    id: '71'\n  }, {\n    name: 'Wolf',\n    id: '74'\n  }, {\n    name: 'Rhino',\n    id: '86'\n  }, {\n    name: 'Bat',\n    id: '87'\n  }, {\n    name: 'Cat',\n    id: '95'\n  }, {\n    name: 'Penguin',\n    id: '102'\n  }, {\n    name: 'Rhino',\n    id: '109'\n  }, {\n    name: 'Koala',\n    id: '112'\n  }];\n  const PREFIXES = ['adventurous', 'affable', 'ambitious', 'amiable ', 'amusing', 'brave', 'bright', 'charming', 'compassionate', 'convivial', 'courageous', 'creative', 'diligent', 'easygoing', 'emotional', 'energetic', 'enthusiastic', 'exuberant', 'fearless', 'friendly', 'funny', 'generous', 'gentle', 'good', 'helpful', 'honest', 'humorous', 'imaginative', 'independent', 'intelligent', 'intuitive', 'inventive', 'kind', 'loving', 'loyal', 'modest', 'neat', 'nice', 'optimistic', 'passionate', 'patient', 'persistent', 'polite', 'practical', 'rational', 'reliable', 'reserved', 'resourceful', 'romantic', 'sensible', 'sensitive', 'sincere', 'sympathetic', 'thoughtful', 'tough', 'understanding', 'versatile', 'warmhearted'];\n  const Avatar = Ember.Service.extend({\n    get() {\n      const avatar = (0, _sample.default)(AVATARS);\n      const prefix = (0, _sample.default)(PREFIXES);\n      return {\n        url: `/assets/images/avatars/${avatar.id}.svg`,\n        label: (0, _startCase.default)(`${prefix} ${avatar.name}`)\n      };\n    }\n\n  });\n  var _default = Avatar;\n  _exports.default = _default;\n});","define(\"sharedrop/services/file\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const File = function (options) {\n    const self = this;\n    this.name = options.name;\n    this.localName = `${new Date().getTime()}-${this.name}`;\n    this.size = options.size;\n    this.type = options.type;\n\n    this._reset();\n\n    return new Ember.RSVP.Promise((resolve, reject) => {\n      const requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;\n      requestFileSystem(window.TEMPORARY, options.size, filesystem => {\n        self.filesystem = filesystem;\n        resolve(self);\n      }, error => {\n        self.errorHandler(error);\n        reject(error);\n      });\n    });\n  };\n\n  File.removeAll = function () {\n    return new Ember.RSVP.Promise((resolve, reject) => {\n      const filer = new window.Filer();\n      filer.init({\n        persistent: false\n      }, () => {\n        filer.ls('/', entries => {\n          function rm(entry) {\n            if (entry) {\n              filer.rm(entry, () => {\n                rm(entries.pop());\n              });\n            } else {\n              resolve();\n            }\n          }\n\n          rm(entries.pop());\n        });\n      }, error => {\n        console.log(error);\n        reject(error);\n      });\n    });\n  };\n\n  File.prototype.append = function (data) {\n    const self = this;\n    const options = {\n      create: this.create\n    };\n    return new Ember.RSVP.Promise((resolve, reject) => {\n      self.filesystem.root.getFile(self.localName, options, fileEntry => {\n        if (self.create) {\n          self.create = false;\n        }\n\n        self.fileEntry = fileEntry;\n        fileEntry.createWriter(writer => {\n          const blob = new Blob(data, {\n            type: self.type\n          }); // console.log('File: Appending ' + blob.size + ' bytes at ' + self.seek);\n          // eslint-disable-next-line no-param-reassign\n\n          writer.onwriteend = function () {\n            self.seek += blob.size;\n            resolve(fileEntry);\n          }; // eslint-disable-next-line no-param-reassign\n\n\n          writer.onerror = function (error) {\n            self.errorHandler(error);\n            reject(error);\n          };\n\n          writer.seek(self.seek);\n          writer.write(blob);\n        }, error => {\n          self.errorHandler(error);\n          reject(error);\n        });\n      }, error => {\n        self.errorHandler(error);\n        reject(error);\n      });\n    });\n  };\n\n  File.prototype.save = function () {\n    const self = this;\n    console.log('File: Saving file: ', this.fileEntry);\n    const a = document.createElement('a');\n    a.download = this.name;\n\n    function finish(link) {\n      document.body.appendChild(a);\n      link.addEventListener('click', () => {\n        // Remove file entry from filesystem.\n        setTimeout(() => {\n          self.remove().then(self._reset.bind(self));\n        }, 100); // Hack, but otherwise browser doesn't save the file at all.\n\n        link.parentNode.removeChild(a);\n      });\n      link.click();\n    }\n\n    if (this._isWebKit()) {\n      a.href = this.fileEntry.toURL();\n      finish(a);\n    } else {\n      this.fileEntry.file(file => {\n        const URL = window.URL || window.webkitURL;\n        a.href = URL.createObjectURL(file);\n        finish(a);\n      });\n    }\n  };\n\n  File.prototype.errorHandler = function (error) {\n    console.error('File error: ', error);\n  };\n\n  File.prototype.remove = function () {\n    const self = this;\n    return new Ember.RSVP.Promise((resolve, reject) => {\n      self.filesystem.root.getFile(self.localName, {\n        create: false\n      }, fileEntry => {\n        fileEntry.remove(() => {\n          console.debug(`File: Removed file: ${self.localName}`);\n          resolve(fileEntry);\n        }, error => {\n          self.errorHandler(error);\n          reject(error);\n        });\n      }, error => {\n        self.errorHandler(error);\n        reject(error);\n      });\n    });\n  };\n\n  File.prototype._reset = function () {\n    this.create = true;\n    this.filesystem = null;\n    this.fileEntry = null;\n    this.seek = 0;\n  };\n\n  File.prototype._isWebKit = function () {\n    return !!window.webkitRequestFileSystem;\n  };\n\n  var _default = File;\n  _exports.default = _default;\n});","define(\"sharedrop/services/room\", [\"exports\", \"jquery\"], function (_exports, _jquery) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // TODO: use Ember.Object.extend()\n  const Room = function (name, firebaseRef) {\n    this._ref = firebaseRef;\n    this.name = name;\n  };\n\n  Room.prototype.join = function (user) {\n    const self = this; // Setup Firebase refs\n\n    self._connectionRef = self._ref.child('.info/connected');\n    self._roomRef = self._ref.child(`rooms/${this.name}`);\n    self._usersRef = self._roomRef.child('users');\n    self._userRef = self._usersRef.child(user.uuid);\n    console.log('Room:\\t Connecting to: ', this.name);\n\n    self._connectionRef.on('value', connectionSnapshot => {\n      // Once connected (or reconnected) to Firebase\n      if (connectionSnapshot.val() === true) {\n        console.log('Firebase: (Re)Connected'); // Remove yourself from the room when disconnected\n\n        self._userRef.onDisconnect().remove(); // Join the room\n\n\n        self._userRef.set(user, error => {\n          if (error) {\n            console.warn('Firebase: Adding user to the room failed: ', error);\n          } else {\n            console.log('Firebase: User added to the room'); // Create a copy of user data,\n            // so that deleting properties won't affect the original variable\n\n            _jquery.default.publish('connected.room', _jquery.default.extend(true, {}, user));\n          }\n        });\n\n        self._usersRef.on('child_added', userAddedSnapshot => {\n          const addedUser = userAddedSnapshot.val();\n          console.log('Room:\\t user_added: ', addedUser);\n\n          _jquery.default.publish('user_added.room', addedUser);\n        });\n\n        self._usersRef.on('child_removed', userRemovedSnapshot => {\n          const removedUser = userRemovedSnapshot.val();\n          console.log('Room:\\t user_removed: ', removedUser);\n\n          _jquery.default.publish('user_removed.room', removedUser);\n        }, () => {\n          // Handle case when the whole room is removed from Firebase\n          _jquery.default.publish('disconnected.room');\n        });\n\n        self._usersRef.on('child_changed', userChangedSnapshot => {\n          const changedUser = userChangedSnapshot.val();\n          console.log('Room:\\t user_changed: ', changedUser);\n\n          _jquery.default.publish('user_changed.room', changedUser);\n        });\n      } else {\n        console.log('Firebase: Disconnected');\n\n        _jquery.default.publish('disconnected.room');\n\n        self._usersRef.off();\n      }\n    });\n\n    return this;\n  };\n\n  Room.prototype.update = function (attrs) {\n    this._userRef.update(attrs);\n  };\n\n  Room.prototype.leave = function () {\n    this._userRef.remove();\n\n    this._usersRef.off();\n  };\n\n  var _default = Room;\n  _exports.default = _default;\n});","define(\"sharedrop/services/web-rtc\", [\"exports\", \"jquery\", \"sharedrop/services/file\"], function (_exports, _jquery, _file) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // TODO:\n  // - provide TURN server config once it's possible to create rooms with custom names\n  // - use Ember.Object.extend()\n  const WebRTC = function (id, options) {\n    const defaults = {\n      config: {\n        iceServers: [{\n          urls: 'stun:stun.l.google.com:19302'\n        }]\n      },\n      debug: 3\n    };\n    this.conn = new window.Peer(id, _jquery.default.extend(defaults, options));\n    this.files = {\n      outgoing: {},\n      incoming: {}\n    }; // Listen for incoming connections\n\n    this.conn.on('connection', connection => {\n      _jquery.default.publish('incoming_peer_connection.p2p', {\n        connection\n      });\n\n      connection.on('open', () => {\n        console.log('Peer:\\t Data channel connection opened: ', connection);\n\n        _jquery.default.publish('incoming_dc_connection.p2p', {\n          connection\n        });\n      });\n      connection.on('error', error => {\n        console.log('Peer:\\t Data channel connection error', error);\n\n        _jquery.default.publish('incoming_dc_connection_error.p2p', {\n          connection,\n          error\n        });\n      });\n\n      this._onConnection(connection);\n    });\n    this.conn.on('close', () => {\n      console.log('Peer:\\t Connection to server closed.');\n    });\n    this.conn.on('error', error => {\n      console.log('Peer:\\t Error while connecting to server: ', error);\n    });\n  };\n\n  WebRTC.CHUNK_MTU = 16000;\n  WebRTC.CHUNKS_PER_ACK = 64;\n\n  WebRTC.prototype.connect = function (id) {\n    const connection = this.conn.connect(id, {\n      label: 'file',\n      reliable: true,\n      serialization: 'none' // we handle serialization ourselves\n\n    });\n    connection.on('open', () => {\n      console.log('Peer:\\t Data channel connection opened: ', connection);\n\n      _jquery.default.publish('outgoing_dc_connection.p2p', {\n        connection\n      });\n    });\n    connection.on('error', error => {\n      console.log('Peer:\\t Data channel connection error', error);\n\n      _jquery.default.publish('outgoing_dc_connection_error.p2p', {\n        connection,\n        error\n      });\n    });\n\n    _jquery.default.publish('outgoing_peer_connection.p2p', {\n      connection\n    });\n\n    this._onConnection(connection);\n  };\n\n  WebRTC.prototype._onConnection = function (connection) {\n    const self = this;\n    console.log('Peer:\\t Opening data channel connection...', connection);\n    connection.on('data', data => {\n      // Lame type check\n      if (data.byteLength !== undefined) {\n        // ArrayBuffer\n        self._onBinaryData(data, connection);\n      } else {\n        // JSON string\n        self._onJSONData(JSON.parse(data), connection);\n      }\n    });\n    connection.on('close', () => {\n      _jquery.default.publish('disconnected.p2p', {\n        connection\n      });\n\n      console.log('Peer:\\t P2P connection closed: ', connection);\n    });\n  };\n\n  WebRTC.prototype._onBinaryData = function (data, connection) {\n    const self = this;\n    const incoming = this.files.incoming[connection.peer];\n    const {\n      info,\n      file,\n      block,\n      receivedChunkNum\n    } = incoming;\n    const chunksPerAck = WebRTC.CHUNKS_PER_ACK; // TODO move it after requesting a new block to speed things up\n\n    connection.emit('receiving_progress', (receivedChunkNum + 1) / info.chunksTotal); // console.log('Got chunk no ' + (receivedChunkNum + 1) + ' out of ' + info.chunksTotal);\n\n    block.push(data);\n    incoming.receivedChunkNum = receivedChunkNum + 1;\n    const nextChunkNum = incoming.receivedChunkNum;\n    const lastChunkInFile = receivedChunkNum === info.chunksTotal - 1;\n    const lastChunkInBlock = receivedChunkNum > 0 && (receivedChunkNum + 1) % chunksPerAck === 0;\n\n    if (lastChunkInFile || lastChunkInBlock) {\n      file.append(block).then(() => {\n        if (lastChunkInFile) {\n          file.save();\n\n          _jquery.default.publish('file_received.p2p', {\n            blob: file,\n            info,\n            connection\n          });\n        } else {\n          // console.log('Requesting block starting at: ' + (nextChunkNum));\n          incoming.block = [];\n\n          self._requestFileBlock(connection, nextChunkNum);\n        }\n      });\n    }\n  };\n\n  WebRTC.prototype._onJSONData = function (data, connection) {\n    switch (data.type) {\n      case 'info':\n        {\n          const info = data.payload;\n\n          _jquery.default.publish('info.p2p', {\n            connection,\n            info\n          }); // Store incoming file info for later\n\n\n          this.files.incoming[connection.peer] = {\n            info,\n            file: null,\n            block: [],\n            receivedChunkNum: 0\n          };\n          console.log('Peer:\\t File info: ', data);\n          break;\n        }\n\n      case 'cancel':\n        {\n          _jquery.default.publish('file_canceled.p2p', {\n            connection\n          });\n\n          console.log('Peer:\\t Sender canceled file transfer');\n          break;\n        }\n\n      case 'response':\n        {\n          const response = data.payload; // If recipient rejected the file, delete stored file\n\n          if (!response) {\n            delete this.files.outgoing[connection.peer];\n          }\n\n          _jquery.default.publish('response.p2p', {\n            connection,\n            response\n          });\n\n          console.log('Peer:\\t File response: ', data);\n          break;\n        }\n\n      case 'block_request':\n        {\n          const {\n            file\n          } = this.files.outgoing[connection.peer]; // console.log('Peer:\\t Block request: ', data.payload);\n\n          this._sendBlock(connection, file, data.payload);\n\n          break;\n        }\n\n      default:\n        console.log('Peer:\\t Unknown message: ', data);\n    }\n  };\n\n  WebRTC.prototype.getFileInfo = function (file) {\n    return {\n      lastModifiedDate: file.lastModifiedDate,\n      name: file.name,\n      size: file.size,\n      type: file.type,\n      chunksTotal: Math.ceil(file.size / WebRTC.CHUNK_MTU)\n    };\n  };\n\n  WebRTC.prototype.sendFileInfo = function (connection, info) {\n    const message = {\n      type: 'info',\n      payload: info\n    };\n    connection.send(JSON.stringify(message));\n  };\n\n  WebRTC.prototype.sendCancelRequest = function (connection) {\n    const message = {\n      type: 'cancel'\n    };\n    connection.send(JSON.stringify(message));\n  };\n\n  WebRTC.prototype.sendFileResponse = function (connection, response) {\n    const message = {\n      type: 'response',\n      payload: response\n    };\n\n    if (response) {\n      // If recipient accepted the file, request required space to store the file on HTML5 filesystem\n      const incoming = this.files.incoming[connection.peer];\n      const {\n        info\n      } = incoming;\n      new _file.default({\n        name: info.name,\n        size: info.size,\n        type: info.type\n      }).then(file => {\n        incoming.file = file;\n        connection.send(JSON.stringify(message));\n      });\n    } else {\n      // Otherwise, delete stored file info\n      delete this.files.incoming[connection.peer];\n      connection.send(JSON.stringify(message));\n    }\n  };\n\n  WebRTC.prototype.sendFile = function (connection, file) {\n    // Save the file for later\n    this.files.outgoing[connection.peer] = {\n      file,\n      info: this.getFileInfo(file)\n    }; // Send the first block. Next ones will be requested by recipient.\n\n    this._sendBlock(connection, file, 0);\n  };\n\n  WebRTC.prototype._requestFileBlock = function (connection, chunkNum) {\n    const message = {\n      type: 'block_request',\n      payload: chunkNum\n    };\n    connection.send(JSON.stringify(message));\n  };\n\n  WebRTC.prototype._sendBlock = function (connection, file, beginChunkNum) {\n    const {\n      info\n    } = this.files.outgoing[connection.peer];\n    const chunkSize = WebRTC.CHUNK_MTU;\n    const chunksPerAck = WebRTC.CHUNKS_PER_ACK;\n    const remainingChunks = info.chunksTotal - beginChunkNum;\n    const chunksToSend = Math.min(remainingChunks, chunksPerAck);\n    const endChunkNum = beginChunkNum + chunksToSend - 1;\n    const blockBegin = beginChunkNum * chunkSize;\n    const blockEnd = endChunkNum * chunkSize + chunkSize;\n    const reader = new FileReader();\n    let chunkNum; // Read the whole block from file\n\n    const blockBlob = file.slice(blockBegin, blockEnd); // console.log('Sending block: start chunk: ' + beginChunkNum + ' end chunk: ' + endChunkNum);\n    // console.log('Sending block: start byte : ' + begin + ' end byte : ' + end);\n\n    reader.onload = function (event) {\n      if (reader.readyState === FileReader.DONE) {\n        const blockBuffer = event.target.result;\n\n        for (chunkNum = beginChunkNum; chunkNum < endChunkNum + 1; chunkNum += 1) {\n          // Send each chunk (begin index is inclusive, end index is exclusive)\n          const bufferBegin = chunkNum % chunksPerAck * chunkSize;\n          const bufferEnd = Math.min(bufferBegin + chunkSize, blockBuffer.byteLength);\n          const chunkBuffer = blockBuffer.slice(bufferBegin, bufferEnd);\n          connection.send(chunkBuffer); // console.log('Sent chunk: start byte: ' + begin + ' end byte: ' + end + ' length: ' + chunkBuffer.byteLength);\n          // console.log('Sent chunk no ' + (chunkNum + 1) + ' out of ' + info.chunksTotal);\n\n          connection.emit('sending_progress', (chunkNum + 1) / info.chunksTotal);\n        }\n\n        if (endChunkNum === info.chunksTotal - 1) {\n          _jquery.default.publish('file_sent.p2p', {\n            connection\n          });\n        }\n      }\n    };\n\n    reader.readAsArrayBuffer(blockBlob);\n  };\n\n  var _default = WebRTC;\n  _exports.default = _default;\n});","define(\"sharedrop/templates/about-app\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TcYPNBxT\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,[37,2],null,[[\\\"onClose\\\"],[[30,[36,0],[[32,0],\\\"closeModal\\\"],[[\\\"target\\\"],[[35,1]]]]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"  \\\"],[10,\\\"h2\\\"],[14,0,\\\"logo\\\"],[12],[10,\\\"span\\\"],[12],[2,\\\"ShareDrop\\\"],[13],[13],[2,\\\"\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"What is it?\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    ShareDrop is a free, \\\"],[10,\\\"a\\\"],[14,6,\\\"https://github.com/szimek/sharedrop\\\"],[12],[2,\\\"open-source\\\"],[13],[2,\\\" web app that allows you to easily and securely share files directly between devices without uploading them to any server first.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"How to use it?\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"h4\\\"],[12],[2,\\\"Sharing files between devices in a local network\\\"],[10,\\\"sup\\\"],[12],[2,\\\"*\\\"],[13],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    To send a file to another device in the same local network, open this page (i.e. \\\"],[10,\\\"a\\\"],[14,6,\\\"https://www.sharedrop.io\\\"],[12],[2,\\\"www.sharedrop.io\\\"],[13],[2,\\\") on both devices. Drag and drop a file directly on another person's avatar or click the avatar and select the file you want to send. The file transfer will start once the recipient accepts the file.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"h4\\\"],[12],[2,\\\"Sharing files between devices in different networks\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    To send a file to another device in a different network, click \\\"],[10,\\\"span\\\"],[14,0,\\\"plus-icon\\\"],[12],[2,\\\"+\\\"],[13],[2,\\\" button in the upper right corner of the page and follow further instructions.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"Donate\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"ShareDrop is free, however, it still costs money to run. If you use it and like it, please consider making a small donation via \\\"],[10,\\\"a\\\"],[14,6,\\\"https://www.paypal.com/donate/?business=99MJKQUTTQVYY&no_recurring=0&item_name=Help+cover+the+server+costs+for+sharedrop.io&currency_code=EUR\\\"],[12],[2,\\\"PayPal\\\"],[13],[2,\\\" to help me keep it free for everyone.\\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"Security\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"ShareDrop uses a secure and encrypted peer-to-peer connection to transfer information about the file (its name and size) and file data itself. This means that this data is never transfered through any intermediate server but directly between the sender and recipient devices. To achieve this, ShareDrop uses a technology called WebRTC (Web Real-Time Communication), which is provided natively by browsers. You can read more about WebRTC security \\\"],[10,\\\"a\\\"],[14,6,\\\"https://bloggeek.me/is-webrtc-safe/\\\"],[12],[2,\\\"here\\\"],[13],[2,\\\".\\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"Feedback\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"Got a problem with using ShareDrop, suggestion how to improve it or just want to say hi? Send an email to \\\"],[10,\\\"a\\\"],[14,6,\\\"mailto:support@sharedrop.io\\\"],[12],[2,\\\"support@sharedrop.io\\\"],[13],[2,\\\" or report an issue on \\\"],[10,\\\"a\\\"],[14,6,\\\"https://github.com/szimek/sharedrop/issues\\\"],[12],[2,\\\"GitHub\\\"],[13],[2,\\\".\\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"actions\\\"],[12],[2,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,4,\\\"button\\\"],[4,[38,0],[[32,0],\\\"closeModal\\\"],null],[12],[2,\\\"Got it!\\\"],[13],[2,\\\"\\\\n    \\\"],[10,\\\"p\\\"],[14,0,\\\"note\\\"],[12],[10,\\\"sup\\\"],[12],[2,\\\"*\\\"],[13],[2,\\\"Devices need to have the same \\\"],[10,\\\"a\\\"],[14,6,\\\"https://www.google.com/search?q=what+is+my+ip\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[2,\\\"public IP\\\"],[13],[2,\\\" to see each other.\\\"],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"action\\\",\\\"currentRoute\\\",\\\"modal-dialog\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/about-app.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/about-room\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"djFMSDWt\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,[37,5],null,[[\\\"onClose\\\"],[[30,[36,3],[[32,0],\\\"closeModal\\\"],[[\\\"target\\\"],[[35,4]]]]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"  \\\"],[10,\\\"h2\\\"],[14,0,\\\"logo\\\"],[12],[10,\\\"span\\\"],[12],[2,\\\"ShareDrop\\\"],[13],[13],[2,\\\"\\\\n  \\\"],[10,\\\"h3\\\"],[12],[2,\\\"Share files between devices in different networks\\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    Copy provided address and send it to the other person...\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    \\\"],[1,[30,[36,1],null,[[\\\"value\\\",\\\"readonly\\\",\\\"style\\\"],[[35,0],\\\"readonly\\\",\\\"display: block; margin: auto;\\\"]]]],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    Or you can scan it on the other device.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[14,0,\\\"qr-code\\\"],[12],[2,\\\"\\\\n    \\\"],[1,[30,[36,2],null,[[\\\"text\\\"],[[35,0]]]]],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    Once the other person open this page in a browser, you'll see each other's avatars.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"\\\\n    Drag and drop a file directly on other person's avatar or click the avatar and select the file you want to send. The file transfer will start once the recipient accepts the file.\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"actions\\\"],[12],[2,\\\"\\\\n    \\\"],[11,\\\"button\\\"],[24,4,\\\"button\\\"],[4,[38,3],[[32,0],\\\"closeModal\\\"],null],[12],[2,\\\"Got it!\\\"],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"currentUrl\\\",\\\"room-url\\\",\\\"qr-code\\\",\\\"action\\\",\\\"currentRoute\\\",\\\"modal-dialog\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/about-room.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/about-you\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"r59cfOCB\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[2,\\\"ShareDrop lets you share files with others.\\\\nOther people will see you as \\\"],[10,\\\"b\\\"],[12],[1,[35,0,[\\\"label\\\"]]],[13],[2,\\\".\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"you\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/about-you.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/application\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"z/sHkqty\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[10,\\\"header\\\"],[14,0,\\\"l-header\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"nav\\\"],[14,0,\\\"navbar\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[14,0,\\\"logo\\\"],[12],[2,\\\"\\\\n      \\\"],[10,\\\"span\\\"],[14,0,\\\"logo-title\\\"],[12],[2,\\\"ShareDrop\\\"],[13],[2,\\\"\\\\n      \\\"],[10,\\\"span\\\"],[14,0,\\\"logo-subtitle\\\"],[12],[2,\\\"P2P file transfer\\\"],[13],[2,\\\"\\\\n    \\\"],[13],[2,\\\"\\\\n\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav\\\"],[12],[2,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[12],[2,\\\"\\\\n        \\\"],[11,\\\"a\\\"],[24,6,\\\"javascript:void(0)\\\"],[24,0,\\\"icon-create-room\\\"],[24,\\\"title\\\",\\\"Create a room. You'll leave the room you're currently in.\\\"],[4,[38,0],[[32,0],\\\"redirect\\\"],null],[12],[2,\\\"+\\\"],[13],[2,\\\"\\\\n      \\\"],[13],[2,\\\"\\\\n      \\\"],[10,\\\"li\\\"],[12],[2,\\\"\\\\n        \\\"],[11,\\\"a\\\"],[24,6,\\\"javascript:void(0)\\\"],[24,0,\\\"icon-help\\\"],[24,\\\"title\\\",\\\"About\\\"],[4,[38,0],[[32,0],\\\"openModal\\\",\\\"about_app\\\"],null],[12],[2,\\\"?\\\"],[13],[2,\\\"\\\\n      \\\"],[13],[2,\\\"\\\\n    \\\"],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\\n\\\"],[1,[30,[36,2],[[30,[36,1],null,null]],null]],[2,\\\"\\\\n\\\"],[1,[30,[36,2],[[30,[36,1],[\\\"modal\\\"],null]],null]],[2,\\\"\\\\n\\\\n\\\"],[10,\\\"footer\\\"],[14,0,\\\"l-footer\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[14,0,\\\"about\\\"],[12],[1,[30,[36,2],[[30,[36,1],[\\\"about_you\\\"],null]],null]],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"logos\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"div\\\"],[14,0,\\\"left\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"div\\\"],[14,0,\\\"right\\\"],[12],[2,\\\"\\\\n      \\\"],[10,\\\"a\\\"],[14,0,\\\"donate\\\"],[14,6,\\\"https://www.paypal.com/donate/?business=99MJKQUTTQVYY&no_recurring=0&item_name=Help+cover+the+server+costs+for+sharedrop.io&currency_code=EUR\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Donate\\\"],[14,\\\"src\\\",\\\"https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif\\\"],[12],[13],[13],[2,\\\"\\\\n      \\\"],[10,\\\"iframe\\\"],[14,\\\"title\\\",\\\"twitter\\\"],[14,\\\"loading\\\",\\\"lazy\\\"],[14,0,\\\"twitter\\\"],[14,\\\"src\\\",\\\"https://platform.twitter.com/widgets/tweet_button.html?url=https%3A%2F%2Fwww.sharedrop.io&text=ShareDrop%20%E2%80%93%20easily%20and%20securely%20share%20files%20of%20any%20size%20directly%20between%20devices%20using%20your%20browser&count=none\\\"],[14,\\\"scrolling\\\",\\\"no\\\"],[14,\\\"frameborder\\\",\\\"0\\\"],[14,\\\"allowtransparency\\\",\\\"true\\\"],[12],[13],[2,\\\"\\\\n      \\\"],[10,\\\"a\\\"],[14,6,\\\"https://github.com/szimek/sharedrop\\\"],[14,0,\\\"github\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[10,\\\"span\\\"],[12],[2,\\\"Github\\\"],[13],[13],[2,\\\"\\\\n    \\\"],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\\n\\\"],[10,\\\"a\\\"],[14,6,\\\"https://war.ukraine.ua/\\\"],[14,0,\\\"ribbon\\\"],[12],[10,\\\"span\\\"],[14,0,\\\"visually-hidden\\\"],[12],[2,\\\"We stand with Ukraine!\\\"],[13],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"action\\\",\\\"-outlet\\\",\\\"component\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/application.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/components/modal-dialog\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"rkjkC5ah\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,\\\"div\\\"],[24,0,\\\"modal-overlay\\\"],[4,[38,0],[[32,0],\\\"close\\\"],null],[12],[13],[2,\\\"\\\\n\\\"],[10,\\\"div\\\"],[14,0,\\\"modal-body\\\"],[12],[2,\\\"\\\\n  \\\"],[18,1,null],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"action\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/components/modal-dialog.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/components/peer-widget\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"GCruPtYQ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,[37,1],[[35,9]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,7],null,[[\\\"onConfirm\\\",\\\"onCancel\\\",\\\"confirmButtonLabel\\\",\\\"cancelButtonLabel\\\",\\\"filename\\\"],[[30,[36,6],[[32,0],\\\"sendFileTransferInquiry\\\"],null],[30,[36,6],[[32,0],\\\"cancelFileTransfer\\\"],null],\\\"Send\\\",\\\"Cancel\\\",[35,5]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    Do you want to send \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,5]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\" to \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,4]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\"?\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[6,[37,1],[[35,10]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,7],null,[[\\\"onCancel\\\",\\\"cancelButtonLabel\\\",\\\"filename\\\"],[[30,[36,6],[[32,0],\\\"abortFileTransfer\\\"],null],\\\"Cancel\\\",[35,5]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    Waiting for \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,4]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\" to accept…\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[6,[37,1],[[35,11]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,7],null,[[\\\"onConfirm\\\",\\\"confirmButtonLabel\\\",\\\"filename\\\"],[[30,[36,6],[[32,0],\\\"cancelFileTransfer\\\"],null],\\\"Ok\\\",[35,5]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,4]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\" has declined your request.\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[6,[37,1],[[35,12]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,7],null,[[\\\"onConfirm\\\",\\\"confirmButtonLabel\\\",\\\"filename\\\"],[[30,[36,6],[[32,0],\\\"cancelFileTransfer\\\"],null],\\\"Ok\\\",[35,5]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    \\\"],[19,[35,8],[]],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[6,[37,1],[[35,13]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,7],null,[[\\\"onConfirm\\\",\\\"onCancel\\\",\\\"confirmButtonLabel\\\",\\\"cancelButtonLabel\\\",\\\"filename\\\"],[[30,[36,6],[[32,0],\\\"acceptFileTransfer\\\"],null],[30,[36,6],[[32,0],\\\"rejectFileTransfer\\\"],null],\\\"Save\\\",\\\"Decline\\\",[35,5]]],[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,4]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\" wants to send you \\\"],[10,\\\"strong\\\"],[12],[2,\\\"\\\\\\\"\\\"],[1,[34,5]],[2,\\\"\\\\\\\"\\\"],[13],[2,\\\".\\\\n\\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[10,\\\"div\\\"],[14,0,\\\"avatar\\\"],[12],[2,\\\"\\\\n\\\"],[6,[37,1],[[35,14]],null,[[\\\"default\\\",\\\"else\\\"],[{\\\"statements\\\":[[2,\\\"    \\\"],[8,\\\"circular-progress\\\",[],[[\\\"@value\\\",\\\"@color\\\"],[[34,3,[\\\"bundlingProgress\\\"]],\\\"orange\\\"]],null],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[6,[37,1],[[35,3,[\\\"transfer\\\"]]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[6,[37,1],[[35,3,[\\\"transfer\\\",\\\"receivingProgress\\\"]]],null,[[\\\"default\\\",\\\"else\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[8,\\\"circular-progress\\\",[],[[\\\"@value\\\",\\\"@color\\\"],[[34,3,[\\\"transfer\\\",\\\"receivingProgress\\\"]],\\\"blue\\\"]],null],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[6,[37,1],[[35,3,[\\\"transfer\\\",\\\"sendingProgress\\\"]]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[8,\\\"circular-progress\\\",[],[[\\\"@value\\\",\\\"@color\\\"],[[34,3,[\\\"transfer\\\",\\\"sendingProgress\\\"]],\\\"blue\\\"]],null],[2,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"  \\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n  \\\"],[1,[30,[36,15],null,[[\\\"peer\\\",\\\"onFileDrop\\\"],[[35,3],[30,[36,6],[[32,0],\\\"uploadFile\\\"],null]]]]],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\\n\\\"],[10,\\\"div\\\"],[14,0,\\\"user-info\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"user-ip\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"div\\\"],[15,0,[31,[\\\"user-connection-status \\\",[34,3,[\\\"peer\\\",\\\"state\\\"]]]]],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"span\\\"],[12],[1,[35,3,[\\\"label\\\"]]],[13],[2,\\\"\\\\n\\\\n\\\"],[6,[37,1],[[35,14]],null,[[\\\"default\\\",\\\"else\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[10,\\\"div\\\"],[12],[2,\\\"\\\\n        Bundling files...\\\\n        \\\"],[10,\\\"br\\\"],[12],[13],[10,\\\"br\\\"],[12],[13],[2,\\\"\\\\n        TIP: You can archive files on your device beforehand to speed up the operation\\\\n      \\\"],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[6,[37,1],[[35,2]],null,[[\\\"default\\\",\\\"else\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[10,\\\"div\\\"],[12],[2,\\\"Receiving file...\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[6,[37,1],[[35,0]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[10,\\\"div\\\"],[12],[2,\\\"Sending file...\\\"],[13],[2,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]]],\\\"parameters\\\":[]}]]],[2,\\\"  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\\n\\\"],[1,[30,[36,16],null,[[\\\"multiple\\\",\\\"onChange\\\"],[true,[30,[36,6],[[32,0],\\\"uploadFile\\\"],null]]]]]],\\\"hasEval\\\":true,\\\"upvars\\\":[\\\"isSendingFile\\\",\\\"if\\\",\\\"isReceivingFile\\\",\\\"peer\\\",\\\"label\\\",\\\"filename\\\",\\\"action\\\",\\\"popover-confirm\\\",\\\"errorTemplateName\\\",\\\"hasSelectedFile\\\",\\\"isAwaitingResponse\\\",\\\"hasDeclinedFileTransfer\\\",\\\"hasError\\\",\\\"hasReceivedFileInfo\\\",\\\"isPreparingFileTransfer\\\",\\\"peer-avatar\\\",\\\"file-field\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/components/peer-widget.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/components/popover-confirm\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"+sbXHwlo\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[10,\\\"div\\\"],[14,0,\\\"popover\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"popover-body\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"div\\\"],[14,0,\\\"popover-icon\\\"],[12],[2,\\\"\\\\n      \\\"],[10,\\\"i\\\"],[15,0,[34,3]],[12],[13],[2,\\\"\\\\n    \\\"],[13],[2,\\\"\\\\n\\\\n    \\\"],[10,\\\"p\\\"],[12],[18,1,null],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"popover-buttons\\\"],[12],[2,\\\"\\\\n\\\"],[6,[37,4],[[35,2]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[11,\\\"button\\\"],[24,4,\\\"button\\\"],[4,[38,0],[[32,0],\\\"cancel\\\"],null],[12],[1,[34,2]],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n\\\"],[6,[37,4],[[35,1]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[11,\\\"button\\\"],[24,4,\\\"button\\\"],[4,[38,0],[[32,0],\\\"confirm\\\"],null],[12],[1,[34,1]],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]],[2,\\\"  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"action\\\",\\\"confirmButtonLabel\\\",\\\"cancelButtonLabel\\\",\\\"iconClass\\\",\\\"if\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/components/popover-confirm.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/components/user-widget\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7/SMpfeH\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[10,\\\"div\\\"],[14,0,\\\"avatar\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"img\\\"],[14,0,\\\"gravatar\\\"],[15,\\\"src\\\",[34,0,[\\\"avatarUrl\\\"]]],[15,\\\"alt\\\",[34,1,[\\\"label\\\"]]],[15,\\\"title\\\",[31,[\\\"peer id: \\\",[34,0,[\\\"uuid\\\"]]]]],[12],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"],[10,\\\"div\\\"],[14,0,\\\"user-info\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"user-label\\\"],[12],[2,\\\"You\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"user-ip\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"span\\\"],[12],[1,[35,0,[\\\"label\\\"]]],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"user\\\",\\\"users\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/components/user-widget.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/errors/browser-unsupported\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Za00Hs1z\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[10,\\\"div\\\"],[14,0,\\\"error\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"We're really sorry, but your browser is not supported.\\\"],[10,\\\"br\\\"],[12],[13],[2,\\\"Please use the latest desktop or Android version of\\\"],[10,\\\"br\\\"],[12],[13],[10,\\\"b\\\"],[12],[2,\\\"Chrome\\\"],[13],[2,\\\", \\\"],[10,\\\"b\\\"],[12],[2,\\\"Opera\\\"],[13],[2,\\\" or \\\"],[10,\\\"b\\\"],[12],[2,\\\"Firefox\\\"],[13],[2,\\\".\\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/errors/browser-unsupported.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/errors/filesystem-unavailable\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"t01tsazA\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[10,\\\"div\\\"],[14,0,\\\"error\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"Uh oh. Looks like there's some issue and we won't be able\\\"],[10,\\\"br\\\"],[12],[13],[2,\\\"to save your files.\\\"],[13],[2,\\\"\\\\n  \\\"],[10,\\\"p\\\"],[12],[2,\\\"If you've opened this app in incognito/private window,\\\"],[10,\\\"br\\\"],[12],[13],[2,\\\"try again in a normal one.\\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/errors/filesystem-unavailable.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/errors/popovers/connection-failed\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"G3G10YD7\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[2,\\\"It was not possible to establish direct connection with the other peer.\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/errors/popovers/connection-failed.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/errors/popovers/multiple-files\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ycMD5lMo\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[2,\\\"The files you have selected exceed the maximum allowed size of 200MB\\\\n\\\"],[10,\\\"br\\\"],[12],[13],[10,\\\"br\\\"],[12],[13],[2,\\\"\\\\nTIP: You can send single files without size restriction\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/errors/popovers/multiple-files.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"sharedrop/templates/index\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"NIu73Iwu\",\n    \"block\": \"{\\\"symbols\\\":[\\\"peer\\\"],\\\"statements\\\":[[10,\\\"main\\\"],[14,0,\\\"l-content\\\"],[12],[2,\\\"\\\\n  \\\"],[10,\\\"div\\\"],[14,0,\\\"user others\\\"],[12],[2,\\\"\\\\n\\\"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[35,5]],null]],null]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"      \\\"],[1,[30,[36,4],null,[[\\\"peer\\\",\\\"hasCustomRoomName\\\",\\\"webrtc\\\"],[[32,1],[35,3],[35,2]]]]],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]}]]],[2,\\\"  \\\"],[13],[2,\\\"\\\\n\\\\n\\\"],[6,[37,8],[[35,0,[\\\"uuid\\\"]]],null,[[\\\"default\\\"],[{\\\"statements\\\":[[2,\\\"    \\\"],[10,\\\"div\\\"],[14,0,\\\"user you\\\"],[12],[2,\\\"\\\\n      \\\"],[1,[30,[36,1],null,[[\\\"user\\\"],[[35,0]]]]],[2,\\\"\\\\n    \\\"],[13],[2,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]]],[2,\\\"\\\\n  \\\"],[10,\\\"svg\\\"],[14,0,\\\"circles\\\"],[14,\\\"viewBox\\\",\\\"-0.5 -0.5 1140 700\\\"],[12],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"30\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160, 1)\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"100\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160,.9)\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"200\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160,.8)\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"300\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160,.7)\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"400\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160,.6)\\\"],[12],[13],[2,\\\"\\\\n    \\\"],[10,\\\"circle\\\"],[14,0,\\\"circle\\\"],[14,\\\"cx\\\",\\\"570\\\"],[14,\\\"cy\\\",\\\"570\\\"],[14,\\\"r\\\",\\\"500\\\"],[14,\\\"stroke\\\",\\\"rgba(160,160,160,.5)\\\"],[12],[13],[2,\\\"\\\\n  \\\"],[13],[2,\\\"\\\\n\\\"],[13],[2,\\\"\\\\n\\\"]],\\\"hasEval\\\":false,\\\"upvars\\\":[\\\"you\\\",\\\"user-widget\\\",\\\"webrtc\\\",\\\"hasCustomRoomName\\\",\\\"peer-widget\\\",\\\"model\\\",\\\"-track-array\\\",\\\"each\\\",\\\"if\\\"]}\",\n    \"meta\": {\n      \"moduleName\": \"sharedrop/templates/index.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define('sharedrop/config/environment', [], function() {\n  var prefix = 'sharedrop';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","\n          if (!runningTests) {\n            require(\"sharedrop/app\")[\"default\"].create({\"name\":\"sharedrop\",\"version\":\"1.0.0+2b5b3b16\"});\n          }\n        \n"]}