{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?5b85","webpack:///./src/views/Spectate.vue?a2f8","webpack:///./src/proto/banana_pb_service.js","webpack:///./src/components/ActiveWord.vue?1bf9","webpack:///./src/proto/banana_pb.js","webpack:///./src/views/Game.vue?5e4b","webpack:///./src/components/BoardView.vue?c6b6","webpack:///./src/components/NewGameForm.vue?3dc4","webpack:///./src/assets/logo.svg","webpack:///./src/components/Board.vue?445c","webpack:///./src/App.vue?f2dd","webpack:///./src/App.vue?ec60","webpack:///./src/data.ts","webpack:///./src/App.vue?640d","webpack:///./src/App.vue","webpack:///./src/views/Game.vue?ca33","webpack:///./src/components/Board.vue?ca6d","webpack:///./src/components/Board.vue?9695","webpack:///./src/components/UnusedLetters.vue?c7d9","webpack:///./src/components/Board.vue?e1cf","webpack:///./src/components/Board.vue","webpack:///./src/components/UnusedLetters.vue?f2f5","webpack:///./src/components/UnusedLetters.vue?6d62","webpack:///./src/components/UnusedLetters.vue","webpack:///./src/components/ActiveWord.vue?109b","webpack:///./src/components/ActiveWord.vue?d3ec","webpack:///./src/components/ActiveWord.vue?24c2","webpack:///./src/components/ActiveWord.vue","webpack:///./src/components/Notice.vue?5ce5","webpack:///./src/components/Notice.vue?054d","webpack:///./src/components/Notice.vue?3f15","webpack:///./src/components/Notice.vue","webpack:///./src/views/Game.vue?3118","webpack:///./src/views/Game.vue?106a","webpack:///./src/views/Game.vue","webpack:///./src/views/Home.vue?b30e","webpack:///./src/components/NewGameForm.vue?56e2","webpack:///./src/components/NewGameForm.vue?755e","webpack:///./src/components/NewGameForm.vue?5657","webpack:///./src/components/NewGameForm.vue","webpack:///./src/views/Home.vue?42b8","webpack:///./src/views/Home.vue?102e","webpack:///./src/views/Home.vue","webpack:///./src/views/Spectate.vue?8aee","webpack:///./src/components/BoardView.vue?e5a2","webpack:///./src/components/BoardView.vue?3342","webpack:///./src/components/BoardView.vue?e838","webpack:///./src/components/BoardView.vue","webpack:///./src/views/Spectate.vue?8a65","webpack:///./src/views/Spectate.vue?e555","webpack:///./src/views/Spectate.vue","webpack:///./src/router.ts","webpack:///./src/main.ts","webpack:///./src/views/Home.vue?a46b","webpack:///./src/components/UnusedLetters.vue?085e","webpack:///./src/components/Notice.vue?1f65"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","grpc","web","require","proto","BananaServiceClient","hostname","credentials","options","this","client_","GrpcWebClientBase","hostname_","BananaServicePromiseClient","methodDescriptor_BananaService_Register","MethodDescriptor","MethodType","UNARY","RegisterRequest","RegisterResponse","request","serializeBinary","deserializeBinary","AbstractClientBase","MethodInfo","register","metadata","callback","rpcCall","unaryCall","methodDescriptor_BananaService_NewGame","NewGameRequest","NewGameResponse","newGame","methodDescriptor_BananaService_ListGames","ListGamesRequest","ListGamesResponse","listGames","methodDescriptor_BananaService_StreamGames","SERVER_STREAMING","GamesList","streamGames","serverStreaming","methodDescriptor_BananaService_StartGame","StartGameRequest","StartGameResponse","startGame","methodDescriptor_BananaService_JoinGame","JoinGameRequest","GameUpdate","joinGame","methodDescriptor_BananaService_StreamLogs","StreamLogsRequest","LogEntry","streamLogs","methodDescriptor_BananaService_UpdateBoard","UpdateBoardRequest","UpdateBoardResponse","updateBoard","methodDescriptor_BananaService_Dump","DumpRequest","DumpResponse","dump","methodDescriptor_BananaService_Spectate","SpectateRequest","SpectateUpdate","spectate","jspb","goog","global","Function","exportSymbol","opt_data","Message","initialize","inherits","DEBUG","COMPILED","displayName","repeatedFields_","Game","oneofGroups_","CurrentStatus","Tiles","PlayerUpdate","Player","GameStarted","GameEnded","SelfTileUpdate","OtherTileUpdates","OtherTileUpdate","PlayerMove","PlayerDump","PlayerPeel","Board","Word","CharLocs","CharLoc","GENERATE_TO_OBJECT","toObject","opt_includeInstance","includeInstance","msg","obj","getFieldWithDefault","$jspbMessageInstance","bytes","reader","BinaryReader","deserializeBinaryFromReader","nextField","isEndGroup","field","getFieldNumber","readString","setName","skipField","writer","BinaryWriter","serializeBinaryToWriter","getResultBuffer","message","f","undefined","getName","writeString","setProto3StringField","playerId","token","setPlayerId","setToken","getPlayerId","getToken","minLettersInWord","readInt32","setMinLettersInWord","getMinLettersInWord","writeInt32","setProto3IntField","id","setId","getId","gamesList","toObjectList","getGamesList","readMessage","addGames","writeRepeatedMessage","getRepeatedWrapperField","setGamesList","setRepeatedWrapperField","opt_value","opt_index","addToRepeatedWrapperField","clearGamesList","status","playerCount","creatorId","readEnum","setStatus","setPlayerCount","setCreatorId","getStatus","writeEnum","getPlayerCount","getCreatorId","setProto3EnumField","gameId","setGameId","getGameId","UpdateCase","UPDATE_NOT_SET","CURRENT_STATUS","PLAYER_UPDATE","GAME_STARTED","GAME_ENDED","SELF_TILE_UPDATE","OTHER_TILE_UPDATE","getUpdateCase","computeOneofCase","currentStatus","getCurrentStatus","playerUpdate","getPlayerUpdate","gameStarted","getGameStarted","gameEnded","getGameEnded","selfTileUpdate","getSelfTileUpdate","otherTileUpdate","getOtherTileUpdate","setCurrentStatus","setPlayerUpdate","setGameStarted","setGameEnded","setSelfTileUpdate","setOtherTileUpdate","writeMessage","getWrapperField","setOneofWrapperField","clearCurrentStatus","hasCurrentStatus","getField","clearPlayerUpdate","hasPlayerUpdate","clearGameStarted","hasGameStarted","clearGameEnded","hasGameEnded","clearSelfTileUpdate","hasSelfTileUpdate","clearOtherTileUpdate","hasOtherTileUpdate","yourId","playersList","getPlayersList","remainingTiles","board","getBoard","allTiles","getAllTiles","setYourId","addPlayers","setRemainingTiles","setBoard","setAllTiles","getYourId","getRemainingTiles","setPlayersList","clearPlayersList","setWrapperField","clearBoard","hasBoard","clearAllTiles","hasAllTiles","lettersList","getRepeatedField","addLetters","getLettersList","writeRepeatedString","setLettersList","setField","addToRepeatedField","clearLettersList","player","getPlayer","setPlayer","clearPlayer","hasPlayer","tilesInHand","tilesInBoard","setTilesInHand","setTilesInBoard","getTilesInHand","getTilesInBoard","standingsList","getStandingsList","addStandings","setStandingsList","clearStandingsList","fromOtherPeel","getBooleanFieldWithDefault","readBool","setFromOtherPeel","getFromOtherPeel","writeBool","setProto3BooleanField","updatesList","getUpdatesList","addUpdates","setUpdatesList","clearUpdatesList","EventCase","EVENT_NOT_SET","PLAYER_MOVE","PLAYER_DUMP","PLAYER_PEEL","getEventCase","playerMove","getPlayerMove","playerDump","getPlayerDump","playerPeel","getPlayerPeel","setPlayerMove","setPlayerDump","setPlayerPeel","clearPlayerMove","hasPlayerMove","clearPlayerDump","hasPlayerDump","clearPlayerPeel","hasPlayerPeel","playerName","word","wordValid","boardConnected","setPlayerName","setWord","setWordValid","setBoardConnected","getPlayerName","getWord","getWordValid","getBoardConnected","invalidWordsList","getInvalidWordsList","detachedBoard","addInvalidWords","setDetachedBoard","getDetachedBoard","setInvalidWordsList","clearInvalidWordsList","letter","setLetter","getLetter","latestWord","getLatestWord","setLatestWord","clearLatestWord","hasLatestWord","wordsList","getWordsList","addWords","setWordsList","clearWordsList","text","orientation","x","y","setText","setOrientation","setX","setY","getText","getOrientation","getX","getY","Orientation","UNKNOWN","HORIZONTAL","VERTICAL","locsList","getLocsList","addLocs","setLocsList","clearLocsList","shortWordsList","getShortWordsList","unusedLettersList","addShortWords","addUnusedLetters","getUnusedLettersList","setShortWordsList","clearShortWordsList","setUnusedLettersList","clearUnusedLettersList","GameStatus","WAITING_FOR_PLAYERS","IN_PROGRESS","FINISHED","extend","_vm","_h","$createElement","_c","_self","attrs","on","handleError","staticRenderFns","err","code","$cookies","remove","registerPlayer","$router","currentRoute","console","log","req","$client","resp","set","component","staticClass","ref","gameOver","addTileToHand","addSelected","sendBoard","notice","letters","dumpTile","_e","tilesInBunch","_v","_s","_m","_l","waitingForPlayers","isCreator","placedWords","invalidWords","shortWords","currentWord","lastFits","fitIndex","sizeX","sizeY","margin","grid","d3","detached","document","getElementById","classList","add","renderBoard","pws","clear","ll","letterLoc","wordIndex","letterIndex","substr","normalizeAndAdd","row","column","Horizontal","suggestion","fit","currentFit","inHand","toUpperCase","boardEmpty","missing","fromHand","Vertical","requiredLetters","split","map","valid","findFits","selectSuggestion","offset","offsetX","offsetY","pWord","iw","sw","removeLast","latest","words","pw","toPBWord","lpb","$emit","genBoard","charAt","fits","matches","overlaps","match","cache","sort","a","b","keyA","placementKey","keyB","numA","numB","countSurrounding","len","check","inc","buf","count","pos","opposite","res","locs","intX","intY","freq","toFreq","aggregateMissing","ss","out","input","target","append","attr","offsetWidth","offsetHeight","maxX","maxY","Array","suggestedWord","reqLetters","poses","wordToPositions","resizeSVG","dataFromBoard","selectAll","exit","newRows","enter","merge","cells","removeLetterLoc","select","cellRadius","cellSize","style","invalid","tooShort","boardResp","boardX","boardY","size","Math","min","paddingX","paddingY","xpos","ypos","cl","normalize","toRemove","spaceIndex","search","trim","reverse","index","Fit","selected","setTimeout","lowerSize","upperSize","perRow","rows","calculateFit","JUST_RIGHT","TOO_LARGE","TOO_SMALL","newLetters","toSet","clearSelected","renderLetters","deleting","floor","transition","ceil","numRowsWeCanFit","newWords","newNotices","game","playerID","players","logs","gameStatus","activeWord","hand","$route","params","$refs","addEventListener","keyup","gameID","stream","handleInitialGameState","handlePlayerUpdate","handleGameStarted","handleGameOver","tileUpdate","flash","updateTiles","updateTileCounts","pID","move","isWord","unshift","peel","up","ge","setWords","tiles","otus","idMap","otu","pu","indexMap","pbPlayer","need","requiredCount","entries","forEach","removeEventListener","e","stopPropagation","keyCode","clearDeleting","getSuggestions","place","String","fromCharCode","next","prev","indexOf","suggestPlacement","lettersAsStringArray","setNotice","join","placeCurrentWord","indicesToRemove","idx","prevSuggestion","nextSuggestion","addCell","setValidationResults","components","ActiveWord","UnusedLetters","Notice","changeName","$event","stat","showModal","nativeOn","type","_k","model","$$v","expression","directives","rawName","domProps","composing","gameName","minLetters","createGame","advancedOpen","parseInt","games","loadGames","playerNameFromCookies","gameUpdates","toGame","g","NewGameForm","color","ii","htmlGrid","boards","spectateGame","toBoard","BoardView","use","base","routes","path","config","productionTip","Infinity","router","render","h","$mount"],"mappings":"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","file":"js/app.55fd7151.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spectate.vue?vue&type=style&index=0&id=9cf01898&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spectate.vue?vue&type=style&index=0&id=9cf01898&scoped=true&lang=css&\"","/**\n * @fileoverview gRPC-Web generated client stub for \n * @enhanceable\n * @public\n */\n\n// GENERATED CODE -- DO NOT EDIT!\n\n\n\nconst grpc = {};\ngrpc.web = require('grpc-web');\n\nconst proto = require('./banana_pb.js');\n\n/**\n * @param {string} hostname\n * @param {?Object} credentials\n * @param {?Object} options\n * @constructor\n * @struct\n * @final\n */\nproto.BananaServiceClient =\n function(hostname, credentials, options) {\n if (!options) options = {};\n options['format'] = 'text';\n\n /**\n * @private @const {!grpc.web.GrpcWebClientBase} The client\n */\n this.client_ = new grpc.web.GrpcWebClientBase(options);\n\n /**\n * @private @const {string} The hostname\n */\n this.hostname_ = hostname;\n\n};\n\n\n/**\n * @param {string} hostname\n * @param {?Object} credentials\n * @param {?Object} options\n * @constructor\n * @struct\n * @final\n */\nproto.BananaServicePromiseClient =\n function(hostname, credentials, options) {\n if (!options) options = {};\n options['format'] = 'text';\n\n /**\n * @private @const {!grpc.web.GrpcWebClientBase} The client\n */\n this.client_ = new grpc.web.GrpcWebClientBase(options);\n\n /**\n * @private @const {string} The hostname\n */\n this.hostname_ = hostname;\n\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.RegisterRequest,\n * !proto.RegisterResponse>}\n */\nconst methodDescriptor_BananaService_Register = new grpc.web.MethodDescriptor(\n '/BananaService/Register',\n grpc.web.MethodType.UNARY,\n proto.RegisterRequest,\n proto.RegisterResponse,\n /**\n * @param {!proto.RegisterRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.RegisterResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.RegisterRequest,\n * !proto.RegisterResponse>}\n */\nconst methodInfo_BananaService_Register = new grpc.web.AbstractClientBase.MethodInfo(\n proto.RegisterResponse,\n /**\n * @param {!proto.RegisterRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.RegisterResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.RegisterRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.RegisterResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.register =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/Register',\n request,\n metadata || {},\n methodDescriptor_BananaService_Register,\n callback);\n};\n\n\n/**\n * @param {!proto.RegisterRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.register =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/Register',\n request,\n metadata || {},\n methodDescriptor_BananaService_Register);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.NewGameRequest,\n * !proto.NewGameResponse>}\n */\nconst methodDescriptor_BananaService_NewGame = new grpc.web.MethodDescriptor(\n '/BananaService/NewGame',\n grpc.web.MethodType.UNARY,\n proto.NewGameRequest,\n proto.NewGameResponse,\n /**\n * @param {!proto.NewGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.NewGameResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.NewGameRequest,\n * !proto.NewGameResponse>}\n */\nconst methodInfo_BananaService_NewGame = new grpc.web.AbstractClientBase.MethodInfo(\n proto.NewGameResponse,\n /**\n * @param {!proto.NewGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.NewGameResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.NewGameRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.NewGameResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.newGame =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/NewGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_NewGame,\n callback);\n};\n\n\n/**\n * @param {!proto.NewGameRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.newGame =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/NewGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_NewGame);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.ListGamesRequest,\n * !proto.ListGamesResponse>}\n */\nconst methodDescriptor_BananaService_ListGames = new grpc.web.MethodDescriptor(\n '/BananaService/ListGames',\n grpc.web.MethodType.UNARY,\n proto.ListGamesRequest,\n proto.ListGamesResponse,\n /**\n * @param {!proto.ListGamesRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.ListGamesResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.ListGamesRequest,\n * !proto.ListGamesResponse>}\n */\nconst methodInfo_BananaService_ListGames = new grpc.web.AbstractClientBase.MethodInfo(\n proto.ListGamesResponse,\n /**\n * @param {!proto.ListGamesRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.ListGamesResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.ListGamesRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.ListGamesResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.listGames =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/ListGames',\n request,\n metadata || {},\n methodDescriptor_BananaService_ListGames,\n callback);\n};\n\n\n/**\n * @param {!proto.ListGamesRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.listGames =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/ListGames',\n request,\n metadata || {},\n methodDescriptor_BananaService_ListGames);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.ListGamesRequest,\n * !proto.GamesList>}\n */\nconst methodDescriptor_BananaService_StreamGames = new grpc.web.MethodDescriptor(\n '/BananaService/StreamGames',\n grpc.web.MethodType.SERVER_STREAMING,\n proto.ListGamesRequest,\n proto.GamesList,\n /**\n * @param {!proto.ListGamesRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.GamesList.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.ListGamesRequest,\n * !proto.GamesList>}\n */\nconst methodInfo_BananaService_StreamGames = new grpc.web.AbstractClientBase.MethodInfo(\n proto.GamesList,\n /**\n * @param {!proto.ListGamesRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.GamesList.deserializeBinary\n);\n\n\n/**\n * @param {!proto.ListGamesRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.streamGames =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/StreamGames',\n request,\n metadata || {},\n methodDescriptor_BananaService_StreamGames);\n};\n\n\n/**\n * @param {!proto.ListGamesRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServicePromiseClient.prototype.streamGames =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/StreamGames',\n request,\n metadata || {},\n methodDescriptor_BananaService_StreamGames);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.StartGameRequest,\n * !proto.StartGameResponse>}\n */\nconst methodDescriptor_BananaService_StartGame = new grpc.web.MethodDescriptor(\n '/BananaService/StartGame',\n grpc.web.MethodType.UNARY,\n proto.StartGameRequest,\n proto.StartGameResponse,\n /**\n * @param {!proto.StartGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.StartGameResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.StartGameRequest,\n * !proto.StartGameResponse>}\n */\nconst methodInfo_BananaService_StartGame = new grpc.web.AbstractClientBase.MethodInfo(\n proto.StartGameResponse,\n /**\n * @param {!proto.StartGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.StartGameResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.StartGameRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.StartGameResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.startGame =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/StartGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_StartGame,\n callback);\n};\n\n\n/**\n * @param {!proto.StartGameRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.startGame =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/StartGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_StartGame);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.JoinGameRequest,\n * !proto.GameUpdate>}\n */\nconst methodDescriptor_BananaService_JoinGame = new grpc.web.MethodDescriptor(\n '/BananaService/JoinGame',\n grpc.web.MethodType.SERVER_STREAMING,\n proto.JoinGameRequest,\n proto.GameUpdate,\n /**\n * @param {!proto.JoinGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.GameUpdate.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.JoinGameRequest,\n * !proto.GameUpdate>}\n */\nconst methodInfo_BananaService_JoinGame = new grpc.web.AbstractClientBase.MethodInfo(\n proto.GameUpdate,\n /**\n * @param {!proto.JoinGameRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.GameUpdate.deserializeBinary\n);\n\n\n/**\n * @param {!proto.JoinGameRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.joinGame =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/JoinGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_JoinGame);\n};\n\n\n/**\n * @param {!proto.JoinGameRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServicePromiseClient.prototype.joinGame =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/JoinGame',\n request,\n metadata || {},\n methodDescriptor_BananaService_JoinGame);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.StreamLogsRequest,\n * !proto.LogEntry>}\n */\nconst methodDescriptor_BananaService_StreamLogs = new grpc.web.MethodDescriptor(\n '/BananaService/StreamLogs',\n grpc.web.MethodType.SERVER_STREAMING,\n proto.StreamLogsRequest,\n proto.LogEntry,\n /**\n * @param {!proto.StreamLogsRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.LogEntry.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.StreamLogsRequest,\n * !proto.LogEntry>}\n */\nconst methodInfo_BananaService_StreamLogs = new grpc.web.AbstractClientBase.MethodInfo(\n proto.LogEntry,\n /**\n * @param {!proto.StreamLogsRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.LogEntry.deserializeBinary\n);\n\n\n/**\n * @param {!proto.StreamLogsRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.streamLogs =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/StreamLogs',\n request,\n metadata || {},\n methodDescriptor_BananaService_StreamLogs);\n};\n\n\n/**\n * @param {!proto.StreamLogsRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServicePromiseClient.prototype.streamLogs =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/StreamLogs',\n request,\n metadata || {},\n methodDescriptor_BananaService_StreamLogs);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.UpdateBoardRequest,\n * !proto.UpdateBoardResponse>}\n */\nconst methodDescriptor_BananaService_UpdateBoard = new grpc.web.MethodDescriptor(\n '/BananaService/UpdateBoard',\n grpc.web.MethodType.UNARY,\n proto.UpdateBoardRequest,\n proto.UpdateBoardResponse,\n /**\n * @param {!proto.UpdateBoardRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.UpdateBoardResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.UpdateBoardRequest,\n * !proto.UpdateBoardResponse>}\n */\nconst methodInfo_BananaService_UpdateBoard = new grpc.web.AbstractClientBase.MethodInfo(\n proto.UpdateBoardResponse,\n /**\n * @param {!proto.UpdateBoardRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.UpdateBoardResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.UpdateBoardRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.UpdateBoardResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.updateBoard =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/UpdateBoard',\n request,\n metadata || {},\n methodDescriptor_BananaService_UpdateBoard,\n callback);\n};\n\n\n/**\n * @param {!proto.UpdateBoardRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.updateBoard =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/UpdateBoard',\n request,\n metadata || {},\n methodDescriptor_BananaService_UpdateBoard);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.DumpRequest,\n * !proto.DumpResponse>}\n */\nconst methodDescriptor_BananaService_Dump = new grpc.web.MethodDescriptor(\n '/BananaService/Dump',\n grpc.web.MethodType.UNARY,\n proto.DumpRequest,\n proto.DumpResponse,\n /**\n * @param {!proto.DumpRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.DumpResponse.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.DumpRequest,\n * !proto.DumpResponse>}\n */\nconst methodInfo_BananaService_Dump = new grpc.web.AbstractClientBase.MethodInfo(\n proto.DumpResponse,\n /**\n * @param {!proto.DumpRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.DumpResponse.deserializeBinary\n);\n\n\n/**\n * @param {!proto.DumpRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @param {function(?grpc.web.Error, ?proto.DumpResponse)}\n * callback The callback function(error, response)\n * @return {!grpc.web.ClientReadableStream|undefined}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.dump =\n function(request, metadata, callback) {\n return this.client_.rpcCall(this.hostname_ +\n '/BananaService/Dump',\n request,\n metadata || {},\n methodDescriptor_BananaService_Dump,\n callback);\n};\n\n\n/**\n * @param {!proto.DumpRequest} request The\n * request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!Promise}\n * A native promise that resolves to the response\n */\nproto.BananaServicePromiseClient.prototype.dump =\n function(request, metadata) {\n return this.client_.unaryCall(this.hostname_ +\n '/BananaService/Dump',\n request,\n metadata || {},\n methodDescriptor_BananaService_Dump);\n};\n\n\n/**\n * @const\n * @type {!grpc.web.MethodDescriptor<\n * !proto.SpectateRequest,\n * !proto.SpectateUpdate>}\n */\nconst methodDescriptor_BananaService_Spectate = new grpc.web.MethodDescriptor(\n '/BananaService/Spectate',\n grpc.web.MethodType.SERVER_STREAMING,\n proto.SpectateRequest,\n proto.SpectateUpdate,\n /**\n * @param {!proto.SpectateRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.SpectateUpdate.deserializeBinary\n);\n\n\n/**\n * @const\n * @type {!grpc.web.AbstractClientBase.MethodInfo<\n * !proto.SpectateRequest,\n * !proto.SpectateUpdate>}\n */\nconst methodInfo_BananaService_Spectate = new grpc.web.AbstractClientBase.MethodInfo(\n proto.SpectateUpdate,\n /**\n * @param {!proto.SpectateRequest} request\n * @return {!Uint8Array}\n */\n function(request) {\n return request.serializeBinary();\n },\n proto.SpectateUpdate.deserializeBinary\n);\n\n\n/**\n * @param {!proto.SpectateRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServiceClient.prototype.spectate =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/Spectate',\n request,\n metadata || {},\n methodDescriptor_BananaService_Spectate);\n};\n\n\n/**\n * @param {!proto.SpectateRequest} request The request proto\n * @param {?Object} metadata User defined\n * call metadata\n * @return {!grpc.web.ClientReadableStream}\n * The XHR Node Readable Stream\n */\nproto.BananaServicePromiseClient.prototype.spectate =\n function(request, metadata) {\n return this.client_.serverStreaming(this.hostname_ +\n '/BananaService/Spectate',\n request,\n metadata || {},\n methodDescriptor_BananaService_Spectate);\n};\n\n\nmodule.exports = proto;\n\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActiveWord.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActiveWord.vue?vue&type=style&index=0&lang=css&\"","// source: banana.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n * field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global = Function('return this')();\n\ngoog.exportSymbol('proto.Board', null, global);\ngoog.exportSymbol('proto.CharLoc', null, global);\ngoog.exportSymbol('proto.CharLocs', null, global);\ngoog.exportSymbol('proto.CurrentStatus', null, global);\ngoog.exportSymbol('proto.DumpRequest', null, global);\ngoog.exportSymbol('proto.DumpResponse', null, global);\ngoog.exportSymbol('proto.Game', null, global);\ngoog.exportSymbol('proto.GameEnded', null, global);\ngoog.exportSymbol('proto.GameStarted', null, global);\ngoog.exportSymbol('proto.GameStatus', null, global);\ngoog.exportSymbol('proto.GameUpdate', null, global);\ngoog.exportSymbol('proto.GameUpdate.UpdateCase', null, global);\ngoog.exportSymbol('proto.GamesList', null, global);\ngoog.exportSymbol('proto.JoinGameRequest', null, global);\ngoog.exportSymbol('proto.ListGamesRequest', null, global);\ngoog.exportSymbol('proto.ListGamesResponse', null, global);\ngoog.exportSymbol('proto.LogEntry', null, global);\ngoog.exportSymbol('proto.LogEntry.EventCase', null, global);\ngoog.exportSymbol('proto.NewGameRequest', null, global);\ngoog.exportSymbol('proto.NewGameResponse', null, global);\ngoog.exportSymbol('proto.OtherTileUpdate', null, global);\ngoog.exportSymbol('proto.OtherTileUpdates', null, global);\ngoog.exportSymbol('proto.Player', null, global);\ngoog.exportSymbol('proto.PlayerDump', null, global);\ngoog.exportSymbol('proto.PlayerMove', null, global);\ngoog.exportSymbol('proto.PlayerPeel', null, global);\ngoog.exportSymbol('proto.PlayerUpdate', null, global);\ngoog.exportSymbol('proto.RegisterRequest', null, global);\ngoog.exportSymbol('proto.RegisterResponse', null, global);\ngoog.exportSymbol('proto.SelfTileUpdate', null, global);\ngoog.exportSymbol('proto.SpectateRequest', null, global);\ngoog.exportSymbol('proto.SpectateUpdate', null, global);\ngoog.exportSymbol('proto.StartGameRequest', null, global);\ngoog.exportSymbol('proto.StartGameResponse', null, global);\ngoog.exportSymbol('proto.StreamLogsRequest', null, global);\ngoog.exportSymbol('proto.Tiles', null, global);\ngoog.exportSymbol('proto.UpdateBoardRequest', null, global);\ngoog.exportSymbol('proto.UpdateBoardResponse', null, global);\ngoog.exportSymbol('proto.Word', null, global);\ngoog.exportSymbol('proto.Word.Orientation', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.RegisterRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.RegisterRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.RegisterRequest.displayName = 'proto.RegisterRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.RegisterResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.RegisterResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.RegisterResponse.displayName = 'proto.RegisterResponse';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.NewGameRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.NewGameRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.NewGameRequest.displayName = 'proto.NewGameRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.NewGameResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.NewGameResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.NewGameResponse.displayName = 'proto.NewGameResponse';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.ListGamesRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.ListGamesRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.ListGamesRequest.displayName = 'proto.ListGamesRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.ListGamesResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.ListGamesResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.ListGamesResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.ListGamesResponse.displayName = 'proto.ListGamesResponse';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.GamesList = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.GamesList.repeatedFields_, null);\n};\ngoog.inherits(proto.GamesList, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.GamesList.displayName = 'proto.GamesList';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Game = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Game, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Game.displayName = 'proto.Game';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.StartGameRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.StartGameRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.StartGameRequest.displayName = 'proto.StartGameRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.StartGameResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.StartGameResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.StartGameResponse.displayName = 'proto.StartGameResponse';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.JoinGameRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.JoinGameRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.JoinGameRequest.displayName = 'proto.JoinGameRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.GameUpdate = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, proto.GameUpdate.oneofGroups_);\n};\ngoog.inherits(proto.GameUpdate, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.GameUpdate.displayName = 'proto.GameUpdate';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.CurrentStatus = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.CurrentStatus.repeatedFields_, null);\n};\ngoog.inherits(proto.CurrentStatus, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.CurrentStatus.displayName = 'proto.CurrentStatus';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Tiles = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.Tiles.repeatedFields_, null);\n};\ngoog.inherits(proto.Tiles, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Tiles.displayName = 'proto.Tiles';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.PlayerUpdate = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.PlayerUpdate, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.PlayerUpdate.displayName = 'proto.PlayerUpdate';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Player = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Player, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Player.displayName = 'proto.Player';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.GameStarted = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.GameStarted, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.GameStarted.displayName = 'proto.GameStarted';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.GameEnded = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.GameEnded.repeatedFields_, null);\n};\ngoog.inherits(proto.GameEnded, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.GameEnded.displayName = 'proto.GameEnded';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SelfTileUpdate = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.SelfTileUpdate, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SelfTileUpdate.displayName = 'proto.SelfTileUpdate';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.OtherTileUpdates = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.OtherTileUpdates.repeatedFields_, null);\n};\ngoog.inherits(proto.OtherTileUpdates, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.OtherTileUpdates.displayName = 'proto.OtherTileUpdates';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.OtherTileUpdate = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.OtherTileUpdate, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.OtherTileUpdate.displayName = 'proto.OtherTileUpdate';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.StreamLogsRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.StreamLogsRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.StreamLogsRequest.displayName = 'proto.StreamLogsRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.LogEntry = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, proto.LogEntry.oneofGroups_);\n};\ngoog.inherits(proto.LogEntry, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.LogEntry.displayName = 'proto.LogEntry';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.PlayerMove = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.PlayerMove, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.PlayerMove.displayName = 'proto.PlayerMove';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.PlayerDump = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.PlayerDump, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.PlayerDump.displayName = 'proto.PlayerDump';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.PlayerPeel = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.PlayerPeel, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.PlayerPeel.displayName = 'proto.PlayerPeel';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SpectateRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.SpectateRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SpectateRequest.displayName = 'proto.SpectateRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SpectateUpdate = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.SpectateUpdate.repeatedFields_, null);\n};\ngoog.inherits(proto.SpectateUpdate, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SpectateUpdate.displayName = 'proto.SpectateUpdate';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.DumpRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.DumpRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.DumpRequest.displayName = 'proto.DumpRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.DumpResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.DumpResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.DumpResponse.displayName = 'proto.DumpResponse';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.UpdateBoardRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.UpdateBoardRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.UpdateBoardRequest.displayName = 'proto.UpdateBoardRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Board = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.Board.repeatedFields_, null);\n};\ngoog.inherits(proto.Board, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Board.displayName = 'proto.Board';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Word = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Word, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Word.displayName = 'proto.Word';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.CharLocs = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.CharLocs.repeatedFields_, null);\n};\ngoog.inherits(proto.CharLocs, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.CharLocs.displayName = 'proto.CharLocs';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.CharLoc = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.CharLoc, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.CharLoc.displayName = 'proto.CharLoc';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.UpdateBoardResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.UpdateBoardResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.UpdateBoardResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.UpdateBoardResponse.displayName = 'proto.UpdateBoardResponse';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.RegisterRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.RegisterRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.RegisterRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.RegisterRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n name: jspb.Message.getFieldWithDefault(msg, 1, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.RegisterRequest}\n */\nproto.RegisterRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.RegisterRequest;\n return proto.RegisterRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.RegisterRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.RegisterRequest}\n */\nproto.RegisterRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setName(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.RegisterRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.RegisterRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.RegisterRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.RegisterRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getName();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * optional string name = 1;\n * @return {string}\n */\nproto.RegisterRequest.prototype.getName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.RegisterRequest} returns this\n */\nproto.RegisterRequest.prototype.setName = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.RegisterResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.RegisterResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.RegisterResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.RegisterResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n token: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.RegisterResponse}\n */\nproto.RegisterResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.RegisterResponse;\n return proto.RegisterResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.RegisterResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.RegisterResponse}\n */\nproto.RegisterResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setToken(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.RegisterResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.RegisterResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.RegisterResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.RegisterResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getToken();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.RegisterResponse.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.RegisterResponse} returns this\n */\nproto.RegisterResponse.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string token = 2;\n * @return {string}\n */\nproto.RegisterResponse.prototype.getToken = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.RegisterResponse} returns this\n */\nproto.RegisterResponse.prototype.setToken = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.NewGameRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.NewGameRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.NewGameRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.NewGameRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n name: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n minLettersInWord: jspb.Message.getFieldWithDefault(msg, 2, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.NewGameRequest}\n */\nproto.NewGameRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.NewGameRequest;\n return proto.NewGameRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.NewGameRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.NewGameRequest}\n */\nproto.NewGameRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setName(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setMinLettersInWord(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.NewGameRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.NewGameRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.NewGameRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.NewGameRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getName();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getMinLettersInWord();\n if (f !== 0) {\n writer.writeInt32(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional string name = 1;\n * @return {string}\n */\nproto.NewGameRequest.prototype.getName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.NewGameRequest} returns this\n */\nproto.NewGameRequest.prototype.setName = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional int32 min_letters_in_word = 2;\n * @return {number}\n */\nproto.NewGameRequest.prototype.getMinLettersInWord = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.NewGameRequest} returns this\n */\nproto.NewGameRequest.prototype.setMinLettersInWord = function(value) {\n return jspb.Message.setProto3IntField(this, 2, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.NewGameResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.NewGameResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.NewGameResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.NewGameResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.NewGameResponse}\n */\nproto.NewGameResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.NewGameResponse;\n return proto.NewGameResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.NewGameResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.NewGameResponse}\n */\nproto.NewGameResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.NewGameResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.NewGameResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.NewGameResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.NewGameResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.NewGameResponse.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.NewGameResponse} returns this\n */\nproto.NewGameResponse.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.ListGamesRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.ListGamesRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.ListGamesRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.ListGamesRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.ListGamesRequest}\n */\nproto.ListGamesRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.ListGamesRequest;\n return proto.ListGamesRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.ListGamesRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.ListGamesRequest}\n */\nproto.ListGamesRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.ListGamesRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.ListGamesRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.ListGamesRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.ListGamesRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.ListGamesResponse.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.ListGamesResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.ListGamesResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.ListGamesResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.ListGamesResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n gamesList: jspb.Message.toObjectList(msg.getGamesList(),\n proto.Game.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.ListGamesResponse}\n */\nproto.ListGamesResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.ListGamesResponse;\n return proto.ListGamesResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.ListGamesResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.ListGamesResponse}\n */\nproto.ListGamesResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Game;\n reader.readMessage(value,proto.Game.deserializeBinaryFromReader);\n msg.addGames(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.ListGamesResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.ListGamesResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.ListGamesResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.ListGamesResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGamesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.Game.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Game games = 1;\n * @return {!Array}\n */\nproto.ListGamesResponse.prototype.getGamesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.Game, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.ListGamesResponse} returns this\n*/\nproto.ListGamesResponse.prototype.setGamesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.Game=} opt_value\n * @param {number=} opt_index\n * @return {!proto.Game}\n */\nproto.ListGamesResponse.prototype.addGames = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.Game, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.ListGamesResponse} returns this\n */\nproto.ListGamesResponse.prototype.clearGamesList = function() {\n return this.setGamesList([]);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.GamesList.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.GamesList.prototype.toObject = function(opt_includeInstance) {\n return proto.GamesList.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.GamesList} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GamesList.toObject = function(includeInstance, msg) {\n var f, obj = {\n gamesList: jspb.Message.toObjectList(msg.getGamesList(),\n proto.Game.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.GamesList}\n */\nproto.GamesList.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.GamesList;\n return proto.GamesList.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.GamesList} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.GamesList}\n */\nproto.GamesList.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Game;\n reader.readMessage(value,proto.Game.deserializeBinaryFromReader);\n msg.addGames(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.GamesList.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.GamesList.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.GamesList} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GamesList.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGamesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.Game.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Game games = 1;\n * @return {!Array}\n */\nproto.GamesList.prototype.getGamesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.Game, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.GamesList} returns this\n*/\nproto.GamesList.prototype.setGamesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.Game=} opt_value\n * @param {number=} opt_index\n * @return {!proto.Game}\n */\nproto.GamesList.prototype.addGames = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.Game, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.GamesList} returns this\n */\nproto.GamesList.prototype.clearGamesList = function() {\n return this.setGamesList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Game.prototype.toObject = function(opt_includeInstance) {\n return proto.Game.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Game} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Game.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n name: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n status: jspb.Message.getFieldWithDefault(msg, 3, 0),\n playerCount: jspb.Message.getFieldWithDefault(msg, 4, 0),\n creatorId: jspb.Message.getFieldWithDefault(msg, 5, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Game}\n */\nproto.Game.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Game;\n return proto.Game.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Game} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Game}\n */\nproto.Game.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setName(value);\n break;\n case 3:\n var value = /** @type {!proto.GameStatus} */ (reader.readEnum());\n msg.setStatus(value);\n break;\n case 4:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setPlayerCount(value);\n break;\n case 5:\n var value = /** @type {string} */ (reader.readString());\n msg.setCreatorId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Game.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Game.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Game} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Game.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getStatus();\n if (f !== 0.0) {\n writer.writeEnum(\n 3,\n f\n );\n }\n f = message.getPlayerCount();\n if (f !== 0) {\n writer.writeInt32(\n 4,\n f\n );\n }\n f = message.getCreatorId();\n if (f.length > 0) {\n writer.writeString(\n 5,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.Game.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Game} returns this\n */\nproto.Game.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string name = 2;\n * @return {string}\n */\nproto.Game.prototype.getName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Game} returns this\n */\nproto.Game.prototype.setName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional GameStatus status = 3;\n * @return {!proto.GameStatus}\n */\nproto.Game.prototype.getStatus = function() {\n return /** @type {!proto.GameStatus} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {!proto.GameStatus} value\n * @return {!proto.Game} returns this\n */\nproto.Game.prototype.setStatus = function(value) {\n return jspb.Message.setProto3EnumField(this, 3, value);\n};\n\n\n/**\n * optional int32 player_count = 4;\n * @return {number}\n */\nproto.Game.prototype.getPlayerCount = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.Game} returns this\n */\nproto.Game.prototype.setPlayerCount = function(value) {\n return jspb.Message.setProto3IntField(this, 4, value);\n};\n\n\n/**\n * optional string creator_id = 5;\n * @return {string}\n */\nproto.Game.prototype.getCreatorId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Game} returns this\n */\nproto.Game.prototype.setCreatorId = function(value) {\n return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.StartGameRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.StartGameRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.StartGameRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StartGameRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.StartGameRequest}\n */\nproto.StartGameRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.StartGameRequest;\n return proto.StartGameRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.StartGameRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.StartGameRequest}\n */\nproto.StartGameRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.StartGameRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.StartGameRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.StartGameRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StartGameRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.StartGameRequest.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.StartGameRequest} returns this\n */\nproto.StartGameRequest.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.StartGameResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.StartGameResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.StartGameResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StartGameResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.StartGameResponse}\n */\nproto.StartGameResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.StartGameResponse;\n return proto.StartGameResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.StartGameResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.StartGameResponse}\n */\nproto.StartGameResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.StartGameResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.StartGameResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.StartGameResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StartGameResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.JoinGameRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.JoinGameRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.JoinGameRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.JoinGameRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n gameId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerId: jspb.Message.getFieldWithDefault(msg, 3, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.JoinGameRequest}\n */\nproto.JoinGameRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.JoinGameRequest;\n return proto.JoinGameRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.JoinGameRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.JoinGameRequest}\n */\nproto.JoinGameRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setGameId(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.JoinGameRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.JoinGameRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.JoinGameRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.JoinGameRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGameId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string game_id = 1;\n * @return {string}\n */\nproto.JoinGameRequest.prototype.getGameId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.JoinGameRequest} returns this\n */\nproto.JoinGameRequest.prototype.setGameId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_id = 3;\n * @return {string}\n */\nproto.JoinGameRequest.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.JoinGameRequest} returns this\n */\nproto.JoinGameRequest.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n\n/**\n * Oneof group definitions for this message. Each group defines the field\n * numbers belonging to that group. When of these fields' value is set, all\n * other fields in the group are cleared. During deserialization, if multiple\n * fields are encountered for a group, only the last value seen will be kept.\n * @private {!Array>}\n * @const\n */\nproto.GameUpdate.oneofGroups_ = [[1,2,3,4,5,6]];\n\n/**\n * @enum {number}\n */\nproto.GameUpdate.UpdateCase = {\n UPDATE_NOT_SET: 0,\n CURRENT_STATUS: 1,\n PLAYER_UPDATE: 2,\n GAME_STARTED: 3,\n GAME_ENDED: 4,\n SELF_TILE_UPDATE: 5,\n OTHER_TILE_UPDATE: 6\n};\n\n/**\n * @return {proto.GameUpdate.UpdateCase}\n */\nproto.GameUpdate.prototype.getUpdateCase = function() {\n return /** @type {proto.GameUpdate.UpdateCase} */(jspb.Message.computeOneofCase(this, proto.GameUpdate.oneofGroups_[0]));\n};\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.GameUpdate.prototype.toObject = function(opt_includeInstance) {\n return proto.GameUpdate.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.GameUpdate} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameUpdate.toObject = function(includeInstance, msg) {\n var f, obj = {\n currentStatus: (f = msg.getCurrentStatus()) && proto.CurrentStatus.toObject(includeInstance, f),\n playerUpdate: (f = msg.getPlayerUpdate()) && proto.PlayerUpdate.toObject(includeInstance, f),\n gameStarted: (f = msg.getGameStarted()) && proto.GameStarted.toObject(includeInstance, f),\n gameEnded: (f = msg.getGameEnded()) && proto.GameEnded.toObject(includeInstance, f),\n selfTileUpdate: (f = msg.getSelfTileUpdate()) && proto.SelfTileUpdate.toObject(includeInstance, f),\n otherTileUpdate: (f = msg.getOtherTileUpdate()) && proto.OtherTileUpdates.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.GameUpdate}\n */\nproto.GameUpdate.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.GameUpdate;\n return proto.GameUpdate.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.GameUpdate} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.GameUpdate}\n */\nproto.GameUpdate.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.CurrentStatus;\n reader.readMessage(value,proto.CurrentStatus.deserializeBinaryFromReader);\n msg.setCurrentStatus(value);\n break;\n case 2:\n var value = new proto.PlayerUpdate;\n reader.readMessage(value,proto.PlayerUpdate.deserializeBinaryFromReader);\n msg.setPlayerUpdate(value);\n break;\n case 3:\n var value = new proto.GameStarted;\n reader.readMessage(value,proto.GameStarted.deserializeBinaryFromReader);\n msg.setGameStarted(value);\n break;\n case 4:\n var value = new proto.GameEnded;\n reader.readMessage(value,proto.GameEnded.deserializeBinaryFromReader);\n msg.setGameEnded(value);\n break;\n case 5:\n var value = new proto.SelfTileUpdate;\n reader.readMessage(value,proto.SelfTileUpdate.deserializeBinaryFromReader);\n msg.setSelfTileUpdate(value);\n break;\n case 6:\n var value = new proto.OtherTileUpdates;\n reader.readMessage(value,proto.OtherTileUpdates.deserializeBinaryFromReader);\n msg.setOtherTileUpdate(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.GameUpdate.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.GameUpdate.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.GameUpdate} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameUpdate.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getCurrentStatus();\n if (f != null) {\n writer.writeMessage(\n 1,\n f,\n proto.CurrentStatus.serializeBinaryToWriter\n );\n }\n f = message.getPlayerUpdate();\n if (f != null) {\n writer.writeMessage(\n 2,\n f,\n proto.PlayerUpdate.serializeBinaryToWriter\n );\n }\n f = message.getGameStarted();\n if (f != null) {\n writer.writeMessage(\n 3,\n f,\n proto.GameStarted.serializeBinaryToWriter\n );\n }\n f = message.getGameEnded();\n if (f != null) {\n writer.writeMessage(\n 4,\n f,\n proto.GameEnded.serializeBinaryToWriter\n );\n }\n f = message.getSelfTileUpdate();\n if (f != null) {\n writer.writeMessage(\n 5,\n f,\n proto.SelfTileUpdate.serializeBinaryToWriter\n );\n }\n f = message.getOtherTileUpdate();\n if (f != null) {\n writer.writeMessage(\n 6,\n f,\n proto.OtherTileUpdates.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional CurrentStatus current_status = 1;\n * @return {?proto.CurrentStatus}\n */\nproto.GameUpdate.prototype.getCurrentStatus = function() {\n return /** @type{?proto.CurrentStatus} */ (\n jspb.Message.getWrapperField(this, proto.CurrentStatus, 1));\n};\n\n\n/**\n * @param {?proto.CurrentStatus|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setCurrentStatus = function(value) {\n return jspb.Message.setOneofWrapperField(this, 1, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearCurrentStatus = function() {\n return this.setCurrentStatus(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasCurrentStatus = function() {\n return jspb.Message.getField(this, 1) != null;\n};\n\n\n/**\n * optional PlayerUpdate player_update = 2;\n * @return {?proto.PlayerUpdate}\n */\nproto.GameUpdate.prototype.getPlayerUpdate = function() {\n return /** @type{?proto.PlayerUpdate} */ (\n jspb.Message.getWrapperField(this, proto.PlayerUpdate, 2));\n};\n\n\n/**\n * @param {?proto.PlayerUpdate|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setPlayerUpdate = function(value) {\n return jspb.Message.setOneofWrapperField(this, 2, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearPlayerUpdate = function() {\n return this.setPlayerUpdate(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasPlayerUpdate = function() {\n return jspb.Message.getField(this, 2) != null;\n};\n\n\n/**\n * optional GameStarted game_started = 3;\n * @return {?proto.GameStarted}\n */\nproto.GameUpdate.prototype.getGameStarted = function() {\n return /** @type{?proto.GameStarted} */ (\n jspb.Message.getWrapperField(this, proto.GameStarted, 3));\n};\n\n\n/**\n * @param {?proto.GameStarted|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setGameStarted = function(value) {\n return jspb.Message.setOneofWrapperField(this, 3, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearGameStarted = function() {\n return this.setGameStarted(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasGameStarted = function() {\n return jspb.Message.getField(this, 3) != null;\n};\n\n\n/**\n * optional GameEnded game_ended = 4;\n * @return {?proto.GameEnded}\n */\nproto.GameUpdate.prototype.getGameEnded = function() {\n return /** @type{?proto.GameEnded} */ (\n jspb.Message.getWrapperField(this, proto.GameEnded, 4));\n};\n\n\n/**\n * @param {?proto.GameEnded|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setGameEnded = function(value) {\n return jspb.Message.setOneofWrapperField(this, 4, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearGameEnded = function() {\n return this.setGameEnded(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasGameEnded = function() {\n return jspb.Message.getField(this, 4) != null;\n};\n\n\n/**\n * optional SelfTileUpdate self_tile_update = 5;\n * @return {?proto.SelfTileUpdate}\n */\nproto.GameUpdate.prototype.getSelfTileUpdate = function() {\n return /** @type{?proto.SelfTileUpdate} */ (\n jspb.Message.getWrapperField(this, proto.SelfTileUpdate, 5));\n};\n\n\n/**\n * @param {?proto.SelfTileUpdate|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setSelfTileUpdate = function(value) {\n return jspb.Message.setOneofWrapperField(this, 5, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearSelfTileUpdate = function() {\n return this.setSelfTileUpdate(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasSelfTileUpdate = function() {\n return jspb.Message.getField(this, 5) != null;\n};\n\n\n/**\n * optional OtherTileUpdates other_tile_update = 6;\n * @return {?proto.OtherTileUpdates}\n */\nproto.GameUpdate.prototype.getOtherTileUpdate = function() {\n return /** @type{?proto.OtherTileUpdates} */ (\n jspb.Message.getWrapperField(this, proto.OtherTileUpdates, 6));\n};\n\n\n/**\n * @param {?proto.OtherTileUpdates|undefined} value\n * @return {!proto.GameUpdate} returns this\n*/\nproto.GameUpdate.prototype.setOtherTileUpdate = function(value) {\n return jspb.Message.setOneofWrapperField(this, 6, proto.GameUpdate.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.GameUpdate} returns this\n */\nproto.GameUpdate.prototype.clearOtherTileUpdate = function() {\n return this.setOtherTileUpdate(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.GameUpdate.prototype.hasOtherTileUpdate = function() {\n return jspb.Message.getField(this, 6) != null;\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.CurrentStatus.repeatedFields_ = [2];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.CurrentStatus.prototype.toObject = function(opt_includeInstance) {\n return proto.CurrentStatus.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.CurrentStatus} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CurrentStatus.toObject = function(includeInstance, msg) {\n var f, obj = {\n yourId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playersList: jspb.Message.toObjectList(msg.getPlayersList(),\n proto.Player.toObject, includeInstance),\n remainingTiles: jspb.Message.getFieldWithDefault(msg, 3, 0),\n board: (f = msg.getBoard()) && proto.Board.toObject(includeInstance, f),\n allTiles: (f = msg.getAllTiles()) && proto.Tiles.toObject(includeInstance, f),\n status: jspb.Message.getFieldWithDefault(msg, 6, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.CurrentStatus}\n */\nproto.CurrentStatus.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.CurrentStatus;\n return proto.CurrentStatus.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.CurrentStatus} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.CurrentStatus}\n */\nproto.CurrentStatus.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setYourId(value);\n break;\n case 2:\n var value = new proto.Player;\n reader.readMessage(value,proto.Player.deserializeBinaryFromReader);\n msg.addPlayers(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setRemainingTiles(value);\n break;\n case 4:\n var value = new proto.Board;\n reader.readMessage(value,proto.Board.deserializeBinaryFromReader);\n msg.setBoard(value);\n break;\n case 5:\n var value = new proto.Tiles;\n reader.readMessage(value,proto.Tiles.deserializeBinaryFromReader);\n msg.setAllTiles(value);\n break;\n case 6:\n var value = /** @type {!proto.GameStatus} */ (reader.readEnum());\n msg.setStatus(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.CurrentStatus.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.CurrentStatus.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.CurrentStatus} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CurrentStatus.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getYourId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayersList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 2,\n f,\n proto.Player.serializeBinaryToWriter\n );\n }\n f = message.getRemainingTiles();\n if (f !== 0) {\n writer.writeInt32(\n 3,\n f\n );\n }\n f = message.getBoard();\n if (f != null) {\n writer.writeMessage(\n 4,\n f,\n proto.Board.serializeBinaryToWriter\n );\n }\n f = message.getAllTiles();\n if (f != null) {\n writer.writeMessage(\n 5,\n f,\n proto.Tiles.serializeBinaryToWriter\n );\n }\n f = message.getStatus();\n if (f !== 0.0) {\n writer.writeEnum(\n 6,\n f\n );\n }\n};\n\n\n/**\n * optional string your_id = 1;\n * @return {string}\n */\nproto.CurrentStatus.prototype.getYourId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.setYourId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * repeated Player players = 2;\n * @return {!Array}\n */\nproto.CurrentStatus.prototype.getPlayersList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.Player, 2));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.CurrentStatus} returns this\n*/\nproto.CurrentStatus.prototype.setPlayersList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 2, value);\n};\n\n\n/**\n * @param {!proto.Player=} opt_value\n * @param {number=} opt_index\n * @return {!proto.Player}\n */\nproto.CurrentStatus.prototype.addPlayers = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.Player, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.clearPlayersList = function() {\n return this.setPlayersList([]);\n};\n\n\n/**\n * optional int32 remaining_tiles = 3;\n * @return {number}\n */\nproto.CurrentStatus.prototype.getRemainingTiles = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.setRemainingTiles = function(value) {\n return jspb.Message.setProto3IntField(this, 3, value);\n};\n\n\n/**\n * optional Board board = 4;\n * @return {?proto.Board}\n */\nproto.CurrentStatus.prototype.getBoard = function() {\n return /** @type{?proto.Board} */ (\n jspb.Message.getWrapperField(this, proto.Board, 4));\n};\n\n\n/**\n * @param {?proto.Board|undefined} value\n * @return {!proto.CurrentStatus} returns this\n*/\nproto.CurrentStatus.prototype.setBoard = function(value) {\n return jspb.Message.setWrapperField(this, 4, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.clearBoard = function() {\n return this.setBoard(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.CurrentStatus.prototype.hasBoard = function() {\n return jspb.Message.getField(this, 4) != null;\n};\n\n\n/**\n * optional Tiles all_tiles = 5;\n * @return {?proto.Tiles}\n */\nproto.CurrentStatus.prototype.getAllTiles = function() {\n return /** @type{?proto.Tiles} */ (\n jspb.Message.getWrapperField(this, proto.Tiles, 5));\n};\n\n\n/**\n * @param {?proto.Tiles|undefined} value\n * @return {!proto.CurrentStatus} returns this\n*/\nproto.CurrentStatus.prototype.setAllTiles = function(value) {\n return jspb.Message.setWrapperField(this, 5, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.clearAllTiles = function() {\n return this.setAllTiles(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.CurrentStatus.prototype.hasAllTiles = function() {\n return jspb.Message.getField(this, 5) != null;\n};\n\n\n/**\n * optional GameStatus status = 6;\n * @return {!proto.GameStatus}\n */\nproto.CurrentStatus.prototype.getStatus = function() {\n return /** @type {!proto.GameStatus} */ (jspb.Message.getFieldWithDefault(this, 6, 0));\n};\n\n\n/**\n * @param {!proto.GameStatus} value\n * @return {!proto.CurrentStatus} returns this\n */\nproto.CurrentStatus.prototype.setStatus = function(value) {\n return jspb.Message.setProto3EnumField(this, 6, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.Tiles.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Tiles.prototype.toObject = function(opt_includeInstance) {\n return proto.Tiles.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Tiles} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Tiles.toObject = function(includeInstance, msg) {\n var f, obj = {\n lettersList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Tiles}\n */\nproto.Tiles.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Tiles;\n return proto.Tiles.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Tiles} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Tiles}\n */\nproto.Tiles.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.addLetters(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Tiles.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Tiles.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Tiles} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Tiles.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getLettersList();\n if (f.length > 0) {\n writer.writeRepeatedString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * repeated string letters = 1;\n * @return {!Array}\n */\nproto.Tiles.prototype.getLettersList = function() {\n return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.Tiles} returns this\n */\nproto.Tiles.prototype.setLettersList = function(value) {\n return jspb.Message.setField(this, 1, value || []);\n};\n\n\n/**\n * @param {string} value\n * @param {number=} opt_index\n * @return {!proto.Tiles} returns this\n */\nproto.Tiles.prototype.addLetters = function(value, opt_index) {\n return jspb.Message.addToRepeatedField(this, 1, value, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.Tiles} returns this\n */\nproto.Tiles.prototype.clearLettersList = function() {\n return this.setLettersList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.PlayerUpdate.prototype.toObject = function(opt_includeInstance) {\n return proto.PlayerUpdate.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.PlayerUpdate} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerUpdate.toObject = function(includeInstance, msg) {\n var f, obj = {\n player: (f = msg.getPlayer()) && proto.Player.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.PlayerUpdate}\n */\nproto.PlayerUpdate.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.PlayerUpdate;\n return proto.PlayerUpdate.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.PlayerUpdate} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.PlayerUpdate}\n */\nproto.PlayerUpdate.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Player;\n reader.readMessage(value,proto.Player.deserializeBinaryFromReader);\n msg.setPlayer(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.PlayerUpdate.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.PlayerUpdate.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.PlayerUpdate} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerUpdate.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayer();\n if (f != null) {\n writer.writeMessage(\n 1,\n f,\n proto.Player.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional Player player = 1;\n * @return {?proto.Player}\n */\nproto.PlayerUpdate.prototype.getPlayer = function() {\n return /** @type{?proto.Player} */ (\n jspb.Message.getWrapperField(this, proto.Player, 1));\n};\n\n\n/**\n * @param {?proto.Player|undefined} value\n * @return {!proto.PlayerUpdate} returns this\n*/\nproto.PlayerUpdate.prototype.setPlayer = function(value) {\n return jspb.Message.setWrapperField(this, 1, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.PlayerUpdate} returns this\n */\nproto.PlayerUpdate.prototype.clearPlayer = function() {\n return this.setPlayer(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.PlayerUpdate.prototype.hasPlayer = function() {\n return jspb.Message.getField(this, 1) != null;\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Player.prototype.toObject = function(opt_includeInstance) {\n return proto.Player.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Player} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Player.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n name: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n tilesInHand: jspb.Message.getFieldWithDefault(msg, 3, 0),\n tilesInBoard: jspb.Message.getFieldWithDefault(msg, 4, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Player}\n */\nproto.Player.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Player;\n return proto.Player.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Player} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Player}\n */\nproto.Player.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setName(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setTilesInHand(value);\n break;\n case 4:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setTilesInBoard(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Player.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Player.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Player} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Player.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getTilesInHand();\n if (f !== 0) {\n writer.writeInt32(\n 3,\n f\n );\n }\n f = message.getTilesInBoard();\n if (f !== 0) {\n writer.writeInt32(\n 4,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.Player.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Player} returns this\n */\nproto.Player.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string name = 2;\n * @return {string}\n */\nproto.Player.prototype.getName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Player} returns this\n */\nproto.Player.prototype.setName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional int32 tiles_in_hand = 3;\n * @return {number}\n */\nproto.Player.prototype.getTilesInHand = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.Player} returns this\n */\nproto.Player.prototype.setTilesInHand = function(value) {\n return jspb.Message.setProto3IntField(this, 3, value);\n};\n\n\n/**\n * optional int32 tiles_in_board = 4;\n * @return {number}\n */\nproto.Player.prototype.getTilesInBoard = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.Player} returns this\n */\nproto.Player.prototype.setTilesInBoard = function(value) {\n return jspb.Message.setProto3IntField(this, 4, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.GameStarted.prototype.toObject = function(opt_includeInstance) {\n return proto.GameStarted.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.GameStarted} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameStarted.toObject = function(includeInstance, msg) {\n var f, obj = {\n\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.GameStarted}\n */\nproto.GameStarted.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.GameStarted;\n return proto.GameStarted.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.GameStarted} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.GameStarted}\n */\nproto.GameStarted.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.GameStarted.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.GameStarted.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.GameStarted} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameStarted.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.GameEnded.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.GameEnded.prototype.toObject = function(opt_includeInstance) {\n return proto.GameEnded.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.GameEnded} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameEnded.toObject = function(includeInstance, msg) {\n var f, obj = {\n standingsList: jspb.Message.toObjectList(msg.getStandingsList(),\n proto.Player.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.GameEnded}\n */\nproto.GameEnded.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.GameEnded;\n return proto.GameEnded.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.GameEnded} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.GameEnded}\n */\nproto.GameEnded.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Player;\n reader.readMessage(value,proto.Player.deserializeBinaryFromReader);\n msg.addStandings(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.GameEnded.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.GameEnded.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.GameEnded} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.GameEnded.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getStandingsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.Player.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Player standings = 1;\n * @return {!Array}\n */\nproto.GameEnded.prototype.getStandingsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.Player, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.GameEnded} returns this\n*/\nproto.GameEnded.prototype.setStandingsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.Player=} opt_value\n * @param {number=} opt_index\n * @return {!proto.Player}\n */\nproto.GameEnded.prototype.addStandings = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.Player, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.GameEnded} returns this\n */\nproto.GameEnded.prototype.clearStandingsList = function() {\n return this.setStandingsList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SelfTileUpdate.prototype.toObject = function(opt_includeInstance) {\n return proto.SelfTileUpdate.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SelfTileUpdate} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SelfTileUpdate.toObject = function(includeInstance, msg) {\n var f, obj = {\n allTiles: (f = msg.getAllTiles()) && proto.Tiles.toObject(includeInstance, f),\n fromOtherPeel: jspb.Message.getBooleanFieldWithDefault(msg, 2, false)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SelfTileUpdate}\n */\nproto.SelfTileUpdate.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SelfTileUpdate;\n return proto.SelfTileUpdate.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SelfTileUpdate} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SelfTileUpdate}\n */\nproto.SelfTileUpdate.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Tiles;\n reader.readMessage(value,proto.Tiles.deserializeBinaryFromReader);\n msg.setAllTiles(value);\n break;\n case 2:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setFromOtherPeel(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SelfTileUpdate.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SelfTileUpdate.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SelfTileUpdate} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SelfTileUpdate.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getAllTiles();\n if (f != null) {\n writer.writeMessage(\n 1,\n f,\n proto.Tiles.serializeBinaryToWriter\n );\n }\n f = message.getFromOtherPeel();\n if (f) {\n writer.writeBool(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional Tiles all_tiles = 1;\n * @return {?proto.Tiles}\n */\nproto.SelfTileUpdate.prototype.getAllTiles = function() {\n return /** @type{?proto.Tiles} */ (\n jspb.Message.getWrapperField(this, proto.Tiles, 1));\n};\n\n\n/**\n * @param {?proto.Tiles|undefined} value\n * @return {!proto.SelfTileUpdate} returns this\n*/\nproto.SelfTileUpdate.prototype.setAllTiles = function(value) {\n return jspb.Message.setWrapperField(this, 1, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.SelfTileUpdate} returns this\n */\nproto.SelfTileUpdate.prototype.clearAllTiles = function() {\n return this.setAllTiles(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.SelfTileUpdate.prototype.hasAllTiles = function() {\n return jspb.Message.getField(this, 1) != null;\n};\n\n\n/**\n * optional bool from_other_peel = 2;\n * @return {boolean}\n */\nproto.SelfTileUpdate.prototype.getFromOtherPeel = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.SelfTileUpdate} returns this\n */\nproto.SelfTileUpdate.prototype.setFromOtherPeel = function(value) {\n return jspb.Message.setProto3BooleanField(this, 2, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.OtherTileUpdates.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.OtherTileUpdates.prototype.toObject = function(opt_includeInstance) {\n return proto.OtherTileUpdates.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.OtherTileUpdates} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.OtherTileUpdates.toObject = function(includeInstance, msg) {\n var f, obj = {\n updatesList: jspb.Message.toObjectList(msg.getUpdatesList(),\n proto.OtherTileUpdate.toObject, includeInstance),\n remainingTiles: jspb.Message.getFieldWithDefault(msg, 2, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.OtherTileUpdates}\n */\nproto.OtherTileUpdates.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.OtherTileUpdates;\n return proto.OtherTileUpdates.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.OtherTileUpdates} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.OtherTileUpdates}\n */\nproto.OtherTileUpdates.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.OtherTileUpdate;\n reader.readMessage(value,proto.OtherTileUpdate.deserializeBinaryFromReader);\n msg.addUpdates(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setRemainingTiles(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.OtherTileUpdates.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.OtherTileUpdates.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.OtherTileUpdates} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.OtherTileUpdates.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getUpdatesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.OtherTileUpdate.serializeBinaryToWriter\n );\n }\n f = message.getRemainingTiles();\n if (f !== 0) {\n writer.writeInt32(\n 2,\n f\n );\n }\n};\n\n\n/**\n * repeated OtherTileUpdate updates = 1;\n * @return {!Array}\n */\nproto.OtherTileUpdates.prototype.getUpdatesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.OtherTileUpdate, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.OtherTileUpdates} returns this\n*/\nproto.OtherTileUpdates.prototype.setUpdatesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.OtherTileUpdate=} opt_value\n * @param {number=} opt_index\n * @return {!proto.OtherTileUpdate}\n */\nproto.OtherTileUpdates.prototype.addUpdates = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.OtherTileUpdate, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.OtherTileUpdates} returns this\n */\nproto.OtherTileUpdates.prototype.clearUpdatesList = function() {\n return this.setUpdatesList([]);\n};\n\n\n/**\n * optional int32 remaining_tiles = 2;\n * @return {number}\n */\nproto.OtherTileUpdates.prototype.getRemainingTiles = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.OtherTileUpdates} returns this\n */\nproto.OtherTileUpdates.prototype.setRemainingTiles = function(value) {\n return jspb.Message.setProto3IntField(this, 2, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.OtherTileUpdate.prototype.toObject = function(opt_includeInstance) {\n return proto.OtherTileUpdate.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.OtherTileUpdate} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.OtherTileUpdate.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n tilesInHand: jspb.Message.getFieldWithDefault(msg, 2, 0),\n tilesInBoard: jspb.Message.getFieldWithDefault(msg, 3, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.OtherTileUpdate}\n */\nproto.OtherTileUpdate.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.OtherTileUpdate;\n return proto.OtherTileUpdate.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.OtherTileUpdate} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.OtherTileUpdate}\n */\nproto.OtherTileUpdate.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setTilesInHand(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setTilesInBoard(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.OtherTileUpdate.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.OtherTileUpdate.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.OtherTileUpdate} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.OtherTileUpdate.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getTilesInHand();\n if (f !== 0) {\n writer.writeInt32(\n 2,\n f\n );\n }\n f = message.getTilesInBoard();\n if (f !== 0) {\n writer.writeInt32(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.OtherTileUpdate.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.OtherTileUpdate} returns this\n */\nproto.OtherTileUpdate.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional int32 tiles_in_hand = 2;\n * @return {number}\n */\nproto.OtherTileUpdate.prototype.getTilesInHand = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.OtherTileUpdate} returns this\n */\nproto.OtherTileUpdate.prototype.setTilesInHand = function(value) {\n return jspb.Message.setProto3IntField(this, 2, value);\n};\n\n\n/**\n * optional int32 tiles_in_board = 3;\n * @return {number}\n */\nproto.OtherTileUpdate.prototype.getTilesInBoard = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.OtherTileUpdate} returns this\n */\nproto.OtherTileUpdate.prototype.setTilesInBoard = function(value) {\n return jspb.Message.setProto3IntField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.StreamLogsRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.StreamLogsRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.StreamLogsRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StreamLogsRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n gameId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerId: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.StreamLogsRequest}\n */\nproto.StreamLogsRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.StreamLogsRequest;\n return proto.StreamLogsRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.StreamLogsRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.StreamLogsRequest}\n */\nproto.StreamLogsRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setGameId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.StreamLogsRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.StreamLogsRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.StreamLogsRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.StreamLogsRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getGameId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional string game_id = 1;\n * @return {string}\n */\nproto.StreamLogsRequest.prototype.getGameId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.StreamLogsRequest} returns this\n */\nproto.StreamLogsRequest.prototype.setGameId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_id = 2;\n * @return {string}\n */\nproto.StreamLogsRequest.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.StreamLogsRequest} returns this\n */\nproto.StreamLogsRequest.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n\n/**\n * Oneof group definitions for this message. Each group defines the field\n * numbers belonging to that group. When of these fields' value is set, all\n * other fields in the group are cleared. During deserialization, if multiple\n * fields are encountered for a group, only the last value seen will be kept.\n * @private {!Array>}\n * @const\n */\nproto.LogEntry.oneofGroups_ = [[1,2,3]];\n\n/**\n * @enum {number}\n */\nproto.LogEntry.EventCase = {\n EVENT_NOT_SET: 0,\n PLAYER_MOVE: 1,\n PLAYER_DUMP: 2,\n PLAYER_PEEL: 3\n};\n\n/**\n * @return {proto.LogEntry.EventCase}\n */\nproto.LogEntry.prototype.getEventCase = function() {\n return /** @type {proto.LogEntry.EventCase} */(jspb.Message.computeOneofCase(this, proto.LogEntry.oneofGroups_[0]));\n};\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.LogEntry.prototype.toObject = function(opt_includeInstance) {\n return proto.LogEntry.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.LogEntry} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.LogEntry.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerMove: (f = msg.getPlayerMove()) && proto.PlayerMove.toObject(includeInstance, f),\n playerDump: (f = msg.getPlayerDump()) && proto.PlayerDump.toObject(includeInstance, f),\n playerPeel: (f = msg.getPlayerPeel()) && proto.PlayerPeel.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.LogEntry}\n */\nproto.LogEntry.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.LogEntry;\n return proto.LogEntry.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.LogEntry} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.LogEntry}\n */\nproto.LogEntry.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.PlayerMove;\n reader.readMessage(value,proto.PlayerMove.deserializeBinaryFromReader);\n msg.setPlayerMove(value);\n break;\n case 2:\n var value = new proto.PlayerDump;\n reader.readMessage(value,proto.PlayerDump.deserializeBinaryFromReader);\n msg.setPlayerDump(value);\n break;\n case 3:\n var value = new proto.PlayerPeel;\n reader.readMessage(value,proto.PlayerPeel.deserializeBinaryFromReader);\n msg.setPlayerPeel(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.LogEntry.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.LogEntry.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.LogEntry} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.LogEntry.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerMove();\n if (f != null) {\n writer.writeMessage(\n 1,\n f,\n proto.PlayerMove.serializeBinaryToWriter\n );\n }\n f = message.getPlayerDump();\n if (f != null) {\n writer.writeMessage(\n 2,\n f,\n proto.PlayerDump.serializeBinaryToWriter\n );\n }\n f = message.getPlayerPeel();\n if (f != null) {\n writer.writeMessage(\n 3,\n f,\n proto.PlayerPeel.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional PlayerMove player_move = 1;\n * @return {?proto.PlayerMove}\n */\nproto.LogEntry.prototype.getPlayerMove = function() {\n return /** @type{?proto.PlayerMove} */ (\n jspb.Message.getWrapperField(this, proto.PlayerMove, 1));\n};\n\n\n/**\n * @param {?proto.PlayerMove|undefined} value\n * @return {!proto.LogEntry} returns this\n*/\nproto.LogEntry.prototype.setPlayerMove = function(value) {\n return jspb.Message.setOneofWrapperField(this, 1, proto.LogEntry.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.LogEntry} returns this\n */\nproto.LogEntry.prototype.clearPlayerMove = function() {\n return this.setPlayerMove(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.LogEntry.prototype.hasPlayerMove = function() {\n return jspb.Message.getField(this, 1) != null;\n};\n\n\n/**\n * optional PlayerDump player_dump = 2;\n * @return {?proto.PlayerDump}\n */\nproto.LogEntry.prototype.getPlayerDump = function() {\n return /** @type{?proto.PlayerDump} */ (\n jspb.Message.getWrapperField(this, proto.PlayerDump, 2));\n};\n\n\n/**\n * @param {?proto.PlayerDump|undefined} value\n * @return {!proto.LogEntry} returns this\n*/\nproto.LogEntry.prototype.setPlayerDump = function(value) {\n return jspb.Message.setOneofWrapperField(this, 2, proto.LogEntry.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.LogEntry} returns this\n */\nproto.LogEntry.prototype.clearPlayerDump = function() {\n return this.setPlayerDump(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.LogEntry.prototype.hasPlayerDump = function() {\n return jspb.Message.getField(this, 2) != null;\n};\n\n\n/**\n * optional PlayerPeel player_peel = 3;\n * @return {?proto.PlayerPeel}\n */\nproto.LogEntry.prototype.getPlayerPeel = function() {\n return /** @type{?proto.PlayerPeel} */ (\n jspb.Message.getWrapperField(this, proto.PlayerPeel, 3));\n};\n\n\n/**\n * @param {?proto.PlayerPeel|undefined} value\n * @return {!proto.LogEntry} returns this\n*/\nproto.LogEntry.prototype.setPlayerPeel = function(value) {\n return jspb.Message.setOneofWrapperField(this, 3, proto.LogEntry.oneofGroups_[0], value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.LogEntry} returns this\n */\nproto.LogEntry.prototype.clearPlayerPeel = function() {\n return this.setPlayerPeel(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.LogEntry.prototype.hasPlayerPeel = function() {\n return jspb.Message.getField(this, 3) != null;\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.PlayerMove.prototype.toObject = function(opt_includeInstance) {\n return proto.PlayerMove.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.PlayerMove} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerMove.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerName: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n word: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n wordValid: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),\n boardConnected: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.PlayerMove}\n */\nproto.PlayerMove.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.PlayerMove;\n return proto.PlayerMove.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.PlayerMove} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.PlayerMove}\n */\nproto.PlayerMove.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerName(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setWord(value);\n break;\n case 4:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setWordValid(value);\n break;\n case 5:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setBoardConnected(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.PlayerMove.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.PlayerMove.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.PlayerMove} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerMove.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getWord();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getWordValid();\n if (f) {\n writer.writeBool(\n 4,\n f\n );\n }\n f = message.getBoardConnected();\n if (f) {\n writer.writeBool(\n 5,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.PlayerMove.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerMove} returns this\n */\nproto.PlayerMove.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_name = 2;\n * @return {string}\n */\nproto.PlayerMove.prototype.getPlayerName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerMove} returns this\n */\nproto.PlayerMove.prototype.setPlayerName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string word = 3;\n * @return {string}\n */\nproto.PlayerMove.prototype.getWord = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerMove} returns this\n */\nproto.PlayerMove.prototype.setWord = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional bool word_valid = 4;\n * @return {boolean}\n */\nproto.PlayerMove.prototype.getWordValid = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.PlayerMove} returns this\n */\nproto.PlayerMove.prototype.setWordValid = function(value) {\n return jspb.Message.setProto3BooleanField(this, 4, value);\n};\n\n\n/**\n * optional bool board_connected = 5;\n * @return {boolean}\n */\nproto.PlayerMove.prototype.getBoardConnected = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.PlayerMove} returns this\n */\nproto.PlayerMove.prototype.setBoardConnected = function(value) {\n return jspb.Message.setProto3BooleanField(this, 5, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.PlayerDump.prototype.toObject = function(opt_includeInstance) {\n return proto.PlayerDump.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.PlayerDump} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerDump.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerName: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.PlayerDump}\n */\nproto.PlayerDump.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.PlayerDump;\n return proto.PlayerDump.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.PlayerDump} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.PlayerDump}\n */\nproto.PlayerDump.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerName(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.PlayerDump.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.PlayerDump.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.PlayerDump} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerDump.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.PlayerDump.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerDump} returns this\n */\nproto.PlayerDump.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_name = 2;\n * @return {string}\n */\nproto.PlayerDump.prototype.getPlayerName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerDump} returns this\n */\nproto.PlayerDump.prototype.setPlayerName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.PlayerPeel.prototype.toObject = function(opt_includeInstance) {\n return proto.PlayerPeel.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.PlayerPeel} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerPeel.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerName: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.PlayerPeel}\n */\nproto.PlayerPeel.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.PlayerPeel;\n return proto.PlayerPeel.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.PlayerPeel} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.PlayerPeel}\n */\nproto.PlayerPeel.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerName(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.PlayerPeel.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.PlayerPeel.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.PlayerPeel} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.PlayerPeel.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.PlayerPeel.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerPeel} returns this\n */\nproto.PlayerPeel.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_name = 2;\n * @return {string}\n */\nproto.PlayerPeel.prototype.getPlayerName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.PlayerPeel} returns this\n */\nproto.PlayerPeel.prototype.setPlayerName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SpectateRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.SpectateRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SpectateRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SpectateRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SpectateRequest}\n */\nproto.SpectateRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SpectateRequest;\n return proto.SpectateRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SpectateRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SpectateRequest}\n */\nproto.SpectateRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SpectateRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SpectateRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SpectateRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SpectateRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.SpectateRequest.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SpectateRequest} returns this\n */\nproto.SpectateRequest.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.SpectateUpdate.repeatedFields_ = [4];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SpectateUpdate.prototype.toObject = function(opt_includeInstance) {\n return proto.SpectateUpdate.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SpectateUpdate} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SpectateUpdate.toObject = function(includeInstance, msg) {\n var f, obj = {\n playerId: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerName: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n board: (f = msg.getBoard()) && proto.Board.toObject(includeInstance, f),\n invalidWordsList: jspb.Message.toObjectList(msg.getInvalidWordsList(),\n proto.CharLocs.toObject, includeInstance),\n detachedBoard: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SpectateUpdate}\n */\nproto.SpectateUpdate.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SpectateUpdate;\n return proto.SpectateUpdate.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SpectateUpdate} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SpectateUpdate}\n */\nproto.SpectateUpdate.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerName(value);\n break;\n case 3:\n var value = new proto.Board;\n reader.readMessage(value,proto.Board.deserializeBinaryFromReader);\n msg.setBoard(value);\n break;\n case 4:\n var value = new proto.CharLocs;\n reader.readMessage(value,proto.CharLocs.deserializeBinaryFromReader);\n msg.addInvalidWords(value);\n break;\n case 5:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setDetachedBoard(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SpectateUpdate.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SpectateUpdate.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SpectateUpdate} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SpectateUpdate.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerName();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getBoard();\n if (f != null) {\n writer.writeMessage(\n 3,\n f,\n proto.Board.serializeBinaryToWriter\n );\n }\n f = message.getInvalidWordsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 4,\n f,\n proto.CharLocs.serializeBinaryToWriter\n );\n }\n f = message.getDetachedBoard();\n if (f) {\n writer.writeBool(\n 5,\n f\n );\n }\n};\n\n\n/**\n * optional string player_id = 1;\n * @return {string}\n */\nproto.SpectateUpdate.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SpectateUpdate} returns this\n */\nproto.SpectateUpdate.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_name = 2;\n * @return {string}\n */\nproto.SpectateUpdate.prototype.getPlayerName = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SpectateUpdate} returns this\n */\nproto.SpectateUpdate.prototype.setPlayerName = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional Board board = 3;\n * @return {?proto.Board}\n */\nproto.SpectateUpdate.prototype.getBoard = function() {\n return /** @type{?proto.Board} */ (\n jspb.Message.getWrapperField(this, proto.Board, 3));\n};\n\n\n/**\n * @param {?proto.Board|undefined} value\n * @return {!proto.SpectateUpdate} returns this\n*/\nproto.SpectateUpdate.prototype.setBoard = function(value) {\n return jspb.Message.setWrapperField(this, 3, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.SpectateUpdate} returns this\n */\nproto.SpectateUpdate.prototype.clearBoard = function() {\n return this.setBoard(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.SpectateUpdate.prototype.hasBoard = function() {\n return jspb.Message.getField(this, 3) != null;\n};\n\n\n/**\n * repeated CharLocs invalid_words = 4;\n * @return {!Array}\n */\nproto.SpectateUpdate.prototype.getInvalidWordsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.CharLocs, 4));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.SpectateUpdate} returns this\n*/\nproto.SpectateUpdate.prototype.setInvalidWordsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 4, value);\n};\n\n\n/**\n * @param {!proto.CharLocs=} opt_value\n * @param {number=} opt_index\n * @return {!proto.CharLocs}\n */\nproto.SpectateUpdate.prototype.addInvalidWords = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.CharLocs, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SpectateUpdate} returns this\n */\nproto.SpectateUpdate.prototype.clearInvalidWordsList = function() {\n return this.setInvalidWordsList([]);\n};\n\n\n/**\n * optional bool detached_board = 5;\n * @return {boolean}\n */\nproto.SpectateUpdate.prototype.getDetachedBoard = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.SpectateUpdate} returns this\n */\nproto.SpectateUpdate.prototype.setDetachedBoard = function(value) {\n return jspb.Message.setProto3BooleanField(this, 5, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.DumpRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.DumpRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.DumpRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.DumpRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerId: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n letter: jspb.Message.getFieldWithDefault(msg, 3, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.DumpRequest}\n */\nproto.DumpRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.DumpRequest;\n return proto.DumpRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.DumpRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.DumpRequest}\n */\nproto.DumpRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setLetter(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.DumpRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.DumpRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.DumpRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.DumpRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getLetter();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.DumpRequest.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.DumpRequest} returns this\n */\nproto.DumpRequest.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_id = 2;\n * @return {string}\n */\nproto.DumpRequest.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.DumpRequest} returns this\n */\nproto.DumpRequest.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string letter = 3;\n * @return {string}\n */\nproto.DumpRequest.prototype.getLetter = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.DumpRequest} returns this\n */\nproto.DumpRequest.prototype.setLetter = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.DumpResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.DumpResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.DumpResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.DumpResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n allTiles: (f = msg.getAllTiles()) && proto.Tiles.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.DumpResponse}\n */\nproto.DumpResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.DumpResponse;\n return proto.DumpResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.DumpResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.DumpResponse}\n */\nproto.DumpResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Tiles;\n reader.readMessage(value,proto.Tiles.deserializeBinaryFromReader);\n msg.setAllTiles(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.DumpResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.DumpResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.DumpResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.DumpResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getAllTiles();\n if (f != null) {\n writer.writeMessage(\n 1,\n f,\n proto.Tiles.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional Tiles all_tiles = 1;\n * @return {?proto.Tiles}\n */\nproto.DumpResponse.prototype.getAllTiles = function() {\n return /** @type{?proto.Tiles} */ (\n jspb.Message.getWrapperField(this, proto.Tiles, 1));\n};\n\n\n/**\n * @param {?proto.Tiles|undefined} value\n * @return {!proto.DumpResponse} returns this\n*/\nproto.DumpResponse.prototype.setAllTiles = function(value) {\n return jspb.Message.setWrapperField(this, 1, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.DumpResponse} returns this\n */\nproto.DumpResponse.prototype.clearAllTiles = function() {\n return this.setAllTiles(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.DumpResponse.prototype.hasAllTiles = function() {\n return jspb.Message.getField(this, 1) != null;\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.UpdateBoardRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.UpdateBoardRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.UpdateBoardRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.UpdateBoardRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n id: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n playerId: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n board: (f = msg.getBoard()) && proto.Board.toObject(includeInstance, f),\n latestWord: (f = msg.getLatestWord()) && proto.Word.toObject(includeInstance, f)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.UpdateBoardRequest}\n */\nproto.UpdateBoardRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.UpdateBoardRequest;\n return proto.UpdateBoardRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.UpdateBoardRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.UpdateBoardRequest}\n */\nproto.UpdateBoardRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setId(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setPlayerId(value);\n break;\n case 3:\n var value = new proto.Board;\n reader.readMessage(value,proto.Board.deserializeBinaryFromReader);\n msg.setBoard(value);\n break;\n case 4:\n var value = new proto.Word;\n reader.readMessage(value,proto.Word.deserializeBinaryFromReader);\n msg.setLatestWord(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.UpdateBoardRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.UpdateBoardRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.UpdateBoardRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.UpdateBoardRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getId();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getPlayerId();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getBoard();\n if (f != null) {\n writer.writeMessage(\n 3,\n f,\n proto.Board.serializeBinaryToWriter\n );\n }\n f = message.getLatestWord();\n if (f != null) {\n writer.writeMessage(\n 4,\n f,\n proto.Word.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional string id = 1;\n * @return {string}\n */\nproto.UpdateBoardRequest.prototype.getId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.UpdateBoardRequest} returns this\n */\nproto.UpdateBoardRequest.prototype.setId = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string player_id = 2;\n * @return {string}\n */\nproto.UpdateBoardRequest.prototype.getPlayerId = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.UpdateBoardRequest} returns this\n */\nproto.UpdateBoardRequest.prototype.setPlayerId = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional Board board = 3;\n * @return {?proto.Board}\n */\nproto.UpdateBoardRequest.prototype.getBoard = function() {\n return /** @type{?proto.Board} */ (\n jspb.Message.getWrapperField(this, proto.Board, 3));\n};\n\n\n/**\n * @param {?proto.Board|undefined} value\n * @return {!proto.UpdateBoardRequest} returns this\n*/\nproto.UpdateBoardRequest.prototype.setBoard = function(value) {\n return jspb.Message.setWrapperField(this, 3, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.UpdateBoardRequest} returns this\n */\nproto.UpdateBoardRequest.prototype.clearBoard = function() {\n return this.setBoard(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.UpdateBoardRequest.prototype.hasBoard = function() {\n return jspb.Message.getField(this, 3) != null;\n};\n\n\n/**\n * optional Word latest_word = 4;\n * @return {?proto.Word}\n */\nproto.UpdateBoardRequest.prototype.getLatestWord = function() {\n return /** @type{?proto.Word} */ (\n jspb.Message.getWrapperField(this, proto.Word, 4));\n};\n\n\n/**\n * @param {?proto.Word|undefined} value\n * @return {!proto.UpdateBoardRequest} returns this\n*/\nproto.UpdateBoardRequest.prototype.setLatestWord = function(value) {\n return jspb.Message.setWrapperField(this, 4, value);\n};\n\n\n/**\n * Clears the message field making it undefined.\n * @return {!proto.UpdateBoardRequest} returns this\n */\nproto.UpdateBoardRequest.prototype.clearLatestWord = function() {\n return this.setLatestWord(undefined);\n};\n\n\n/**\n * Returns whether this field is set.\n * @return {boolean}\n */\nproto.UpdateBoardRequest.prototype.hasLatestWord = function() {\n return jspb.Message.getField(this, 4) != null;\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.Board.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Board.prototype.toObject = function(opt_includeInstance) {\n return proto.Board.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Board} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Board.toObject = function(includeInstance, msg) {\n var f, obj = {\n wordsList: jspb.Message.toObjectList(msg.getWordsList(),\n proto.Word.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Board}\n */\nproto.Board.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Board;\n return proto.Board.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Board} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Board}\n */\nproto.Board.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.Word;\n reader.readMessage(value,proto.Word.deserializeBinaryFromReader);\n msg.addWords(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Board.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Board.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Board} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Board.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getWordsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.Word.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * repeated Word words = 1;\n * @return {!Array}\n */\nproto.Board.prototype.getWordsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.Word, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.Board} returns this\n*/\nproto.Board.prototype.setWordsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.Word=} opt_value\n * @param {number=} opt_index\n * @return {!proto.Word}\n */\nproto.Board.prototype.addWords = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.Word, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.Board} returns this\n */\nproto.Board.prototype.clearWordsList = function() {\n return this.setWordsList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Word.prototype.toObject = function(opt_includeInstance) {\n return proto.Word.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Word} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Word.toObject = function(includeInstance, msg) {\n var f, obj = {\n text: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n orientation: jspb.Message.getFieldWithDefault(msg, 2, 0),\n x: jspb.Message.getFieldWithDefault(msg, 3, 0),\n y: jspb.Message.getFieldWithDefault(msg, 4, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Word}\n */\nproto.Word.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Word;\n return proto.Word.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Word} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Word}\n */\nproto.Word.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setText(value);\n break;\n case 2:\n var value = /** @type {!proto.Word.Orientation} */ (reader.readEnum());\n msg.setOrientation(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setX(value);\n break;\n case 4:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setY(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Word.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Word.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Word} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Word.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getText();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getOrientation();\n if (f !== 0.0) {\n writer.writeEnum(\n 2,\n f\n );\n }\n f = message.getX();\n if (f !== 0) {\n writer.writeInt32(\n 3,\n f\n );\n }\n f = message.getY();\n if (f !== 0) {\n writer.writeInt32(\n 4,\n f\n );\n }\n};\n\n\n/**\n * @enum {number}\n */\nproto.Word.Orientation = {\n UNKNOWN: 0,\n HORIZONTAL: 1,\n VERTICAL: 2\n};\n\n/**\n * optional string text = 1;\n * @return {string}\n */\nproto.Word.prototype.getText = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Word} returns this\n */\nproto.Word.prototype.setText = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional Orientation orientation = 2;\n * @return {!proto.Word.Orientation}\n */\nproto.Word.prototype.getOrientation = function() {\n return /** @type {!proto.Word.Orientation} */ (jspb.Message.getFieldWithDefault(this, 2, 0));\n};\n\n\n/**\n * @param {!proto.Word.Orientation} value\n * @return {!proto.Word} returns this\n */\nproto.Word.prototype.setOrientation = function(value) {\n return jspb.Message.setProto3EnumField(this, 2, value);\n};\n\n\n/**\n * optional int32 x = 3;\n * @return {number}\n */\nproto.Word.prototype.getX = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.Word} returns this\n */\nproto.Word.prototype.setX = function(value) {\n return jspb.Message.setProto3IntField(this, 3, value);\n};\n\n\n/**\n * optional int32 y = 4;\n * @return {number}\n */\nproto.Word.prototype.getY = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.Word} returns this\n */\nproto.Word.prototype.setY = function(value) {\n return jspb.Message.setProto3IntField(this, 4, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.CharLocs.repeatedFields_ = [2];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.CharLocs.prototype.toObject = function(opt_includeInstance) {\n return proto.CharLocs.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.CharLocs} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CharLocs.toObject = function(includeInstance, msg) {\n var f, obj = {\n text: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n locsList: jspb.Message.toObjectList(msg.getLocsList(),\n proto.CharLoc.toObject, includeInstance)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.CharLocs}\n */\nproto.CharLocs.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.CharLocs;\n return proto.CharLocs.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.CharLocs} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.CharLocs}\n */\nproto.CharLocs.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setText(value);\n break;\n case 2:\n var value = new proto.CharLoc;\n reader.readMessage(value,proto.CharLoc.deserializeBinaryFromReader);\n msg.addLocs(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.CharLocs.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.CharLocs.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.CharLocs} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CharLocs.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getText();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getLocsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 2,\n f,\n proto.CharLoc.serializeBinaryToWriter\n );\n }\n};\n\n\n/**\n * optional string text = 1;\n * @return {string}\n */\nproto.CharLocs.prototype.getText = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.CharLocs} returns this\n */\nproto.CharLocs.prototype.setText = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * repeated CharLoc locs = 2;\n * @return {!Array}\n */\nproto.CharLocs.prototype.getLocsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.CharLoc, 2));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.CharLocs} returns this\n*/\nproto.CharLocs.prototype.setLocsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 2, value);\n};\n\n\n/**\n * @param {!proto.CharLoc=} opt_value\n * @param {number=} opt_index\n * @return {!proto.CharLoc}\n */\nproto.CharLocs.prototype.addLocs = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.CharLoc, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.CharLocs} returns this\n */\nproto.CharLocs.prototype.clearLocsList = function() {\n return this.setLocsList([]);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.CharLoc.prototype.toObject = function(opt_includeInstance) {\n return proto.CharLoc.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.CharLoc} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CharLoc.toObject = function(includeInstance, msg) {\n var f, obj = {\n letter: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n x: jspb.Message.getFieldWithDefault(msg, 2, 0),\n y: jspb.Message.getFieldWithDefault(msg, 3, 0)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.CharLoc}\n */\nproto.CharLoc.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.CharLoc;\n return proto.CharLoc.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.CharLoc} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.CharLoc}\n */\nproto.CharLoc.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setLetter(value);\n break;\n case 2:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setX(value);\n break;\n case 3:\n var value = /** @type {number} */ (reader.readInt32());\n msg.setY(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.CharLoc.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.CharLoc.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.CharLoc} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.CharLoc.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getLetter();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getX();\n if (f !== 0) {\n writer.writeInt32(\n 2,\n f\n );\n }\n f = message.getY();\n if (f !== 0) {\n writer.writeInt32(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string letter = 1;\n * @return {string}\n */\nproto.CharLoc.prototype.getLetter = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.CharLoc} returns this\n */\nproto.CharLoc.prototype.setLetter = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional int32 x = 2;\n * @return {number}\n */\nproto.CharLoc.prototype.getX = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.CharLoc} returns this\n */\nproto.CharLoc.prototype.setX = function(value) {\n return jspb.Message.setProto3IntField(this, 2, value);\n};\n\n\n/**\n * optional int32 y = 3;\n * @return {number}\n */\nproto.CharLoc.prototype.getY = function() {\n return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));\n};\n\n\n/**\n * @param {number} value\n * @return {!proto.CharLoc} returns this\n */\nproto.CharLoc.prototype.setY = function(value) {\n return jspb.Message.setProto3IntField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.UpdateBoardResponse.repeatedFields_ = [1,2,3];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.UpdateBoardResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.UpdateBoardResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.UpdateBoardResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.UpdateBoardResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n invalidWordsList: jspb.Message.toObjectList(msg.getInvalidWordsList(),\n proto.CharLocs.toObject, includeInstance),\n shortWordsList: jspb.Message.toObjectList(msg.getShortWordsList(),\n proto.CharLocs.toObject, includeInstance),\n unusedLettersList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,\n detachedBoard: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.UpdateBoardResponse}\n */\nproto.UpdateBoardResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.UpdateBoardResponse;\n return proto.UpdateBoardResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.UpdateBoardResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.UpdateBoardResponse}\n */\nproto.UpdateBoardResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.CharLocs;\n reader.readMessage(value,proto.CharLocs.deserializeBinaryFromReader);\n msg.addInvalidWords(value);\n break;\n case 2:\n var value = new proto.CharLocs;\n reader.readMessage(value,proto.CharLocs.deserializeBinaryFromReader);\n msg.addShortWords(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.addUnusedLetters(value);\n break;\n case 4:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setDetachedBoard(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.UpdateBoardResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.UpdateBoardResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.UpdateBoardResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.UpdateBoardResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getInvalidWordsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.CharLocs.serializeBinaryToWriter\n );\n }\n f = message.getShortWordsList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 2,\n f,\n proto.CharLocs.serializeBinaryToWriter\n );\n }\n f = message.getUnusedLettersList();\n if (f.length > 0) {\n writer.writeRepeatedString(\n 3,\n f\n );\n }\n f = message.getDetachedBoard();\n if (f) {\n writer.writeBool(\n 4,\n f\n );\n }\n};\n\n\n/**\n * repeated CharLocs invalid_words = 1;\n * @return {!Array}\n */\nproto.UpdateBoardResponse.prototype.getInvalidWordsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.CharLocs, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.UpdateBoardResponse} returns this\n*/\nproto.UpdateBoardResponse.prototype.setInvalidWordsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.CharLocs=} opt_value\n * @param {number=} opt_index\n * @return {!proto.CharLocs}\n */\nproto.UpdateBoardResponse.prototype.addInvalidWords = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.CharLocs, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.clearInvalidWordsList = function() {\n return this.setInvalidWordsList([]);\n};\n\n\n/**\n * repeated CharLocs short_words = 2;\n * @return {!Array}\n */\nproto.UpdateBoardResponse.prototype.getShortWordsList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.CharLocs, 2));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.UpdateBoardResponse} returns this\n*/\nproto.UpdateBoardResponse.prototype.setShortWordsList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 2, value);\n};\n\n\n/**\n * @param {!proto.CharLocs=} opt_value\n * @param {number=} opt_index\n * @return {!proto.CharLocs}\n */\nproto.UpdateBoardResponse.prototype.addShortWords = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.CharLocs, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.clearShortWordsList = function() {\n return this.setShortWordsList([]);\n};\n\n\n/**\n * repeated string unused_letters = 3;\n * @return {!Array}\n */\nproto.UpdateBoardResponse.prototype.getUnusedLettersList = function() {\n return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.setUnusedLettersList = function(value) {\n return jspb.Message.setField(this, 3, value || []);\n};\n\n\n/**\n * @param {string} value\n * @param {number=} opt_index\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.addUnusedLetters = function(value, opt_index) {\n return jspb.Message.addToRepeatedField(this, 3, value, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.clearUnusedLettersList = function() {\n return this.setUnusedLettersList([]);\n};\n\n\n/**\n * optional bool detached_board = 4;\n * @return {boolean}\n */\nproto.UpdateBoardResponse.prototype.getDetachedBoard = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.UpdateBoardResponse} returns this\n */\nproto.UpdateBoardResponse.prototype.setDetachedBoard = function(value) {\n return jspb.Message.setProto3BooleanField(this, 4, value);\n};\n\n\n/**\n * @enum {number}\n */\nproto.GameStatus = {\n UNKNOWN: 0,\n WAITING_FOR_PLAYERS: 1,\n IN_PROGRESS: 2,\n FINISHED: 3\n};\n\ngoog.object.extend(exports, proto);\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=4488bf9e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=style&index=0&id=4488bf9e&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoardView.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoardView.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewGameForm.vue?vue&type=style&index=0&id=3e3df4ed&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewGameForm.vue?vue&type=style&index=0&id=3e3df4ed&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/logo.14e646d8.svg\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Board.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Board.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view',{on:{\"rpcError\":_vm.handleError}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport * as grpcWeb from 'grpc-web';\n\nimport {RegisterRequest} from '@/proto/banana_pb';\n\n@Component\nexport default class App extends Vue {\n private handleError(err: any): void {\n if (err.code === 16) {\n // Clear our user info, since it's clearly trash.\n this.$cookies.remove('player-id');\n this.$cookies.remove('player-token');\n\n const playerName = this.$cookies.get('player-name');\n\n if (playerName) {\n this.registerPlayer(playerName);\n } else {\n if (this.$router.currentRoute.name !== 'home') {\n this.$router.push({ name: 'home' });\n }\n console.log(`user unauthenticated`);\n }\n }\n }\n\n private registerPlayer(playerName: string): void {\n if (!playerName) {\n return;\n }\n\n const req = new RegisterRequest();\n req.setName(playerName);\n this.$client.register(req, {}, (err, resp) => {\n if (err) {\n console.log(err);\n return;\n }\n this.$cookies.set('player-name', playerName);\n this.$cookies.set('player-id', resp.getPlayerId());\n this.$cookies.set('player-token', resp.getToken());\n\n if (this.$router.currentRoute.name !== 'home') {\n this.$router.push({ name: 'home' });\n }\n });\n }\n}\n","export interface Cell {\n x: number;\n y: number;\n row: number;\n column: number;\n letterLoc: LetterLoc;\n suggestion: boolean;\n invalid: boolean;\n tooShort: boolean;\n}\n\n// LetterLoc contains metadata about a cell position on the board.\nexport interface LetterLoc {\n letter: string;\n // The index of the word(s) on the board that contributed this letter.\n wordIndex: number[];\n // The index of the letter(s) in the board that contributed this letter.\n letterIndex: number[];\n}\n\n// Suggestion where to place a word.\nexport interface Placement {\n x: number;\n y: number;\n orientation: Orientation;\n missing: string[];\n fromHand: string[];\n}\n\n// Suggestion where to place a word, including the intersection.\nexport interface Match {\n x: number;\n y: number;\n intX: number;\n intY: number;\n orientation: Orientation;\n}\n\nexport interface PlacedWord {\n x: number;\n y: number;\n orientation: Orientation;\n word: string;\n suggestion: boolean;\n}\n\nexport interface Word {\n x: number;\n y: number;\n orientation: Orientation;\n word: string;\n}\n\nexport enum Orientation {\n Vertical = 1,\n Horizontal,\n}\n\nexport interface Letter {\n letter: string;\n deleting: boolean;\n selected: boolean;\n}\n\nexport interface Player {\n id: string;\n name: string;\n tilesInHand: number;\n tilesInBoard: number;\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=de13e9ec&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"game\"},[_c('div',{staticClass:\"columns is-gapless left-side\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"board\"},[_c('Board',{ref:\"board\",attrs:{\"gameOver\":_vm.gameOver},on:{\"removeTile\":_vm.addTileToHand,\"blankClicked\":_vm.addSelected,\"boardUpdated\":_vm.sendBoard}})],1),_c('div',{staticClass:\"active-word columns is-gapless\"},[_c('div',{staticClass:\"column is-3 active-display\"},[_c('ActiveWord',{ref:\"activeWord\",attrs:{\"word\":_vm.word}})],1),_c('div',{staticClass:\"column is-9 notice-msg\"},[_c('Notice',{ref:\"notice\",attrs:{\"notice\":_vm.notice}})],1)]),_c('div',{staticClass:\"letters\"},[(_vm.letters)?_c('UnusedLetters',{ref:\"hand\",attrs:{\"letters\":_vm.letters,\"gameOver\":_vm.gameOver},on:{\"dumpTile\":_vm.dumpTile}}):_vm._e()],1)]),_c('div',{staticClass:\"column is-one-fifth right-side\"},[_c('div',{staticClass:\"players\"},[(_vm.tilesInBunch !== null)?_c('div',[_c('strong',[_vm._v(\"Tiles left in bunch: \"+_vm._s(_vm.tilesInBunch))])]):_vm._e(),_c('hr'),_c('table',{staticClass:\"standings\"},[_vm._m(0),_vm._l((_vm.players),function(player){return _c('tr',[_c('td',[_vm._v(_vm._s(player.name))]),_c('td',{staticClass:\"player-scores\"},[_vm._v(_vm._s(player.tilesInBoard))]),_c('td',{staticClass:\"player-scores\"},[_vm._v(_vm._s(player.tilesInHand))])])})],2),_c('hr'),(_vm.waitingForPlayers && _vm.isCreator)?_c('div',{staticClass:\"start-game-button\"},[_c('a',{staticClass:\"button is-info\",on:{\"click\":_vm.startGame}},[_vm._v(\"\\n Start Game\\n \")])]):_vm._e()]),_c('div',{staticClass:\"logs\"},_vm._l((_vm.logs),function(log){return _c('div',[_vm._v(\"\\n \"+_vm._s(log)+\"\\n \"),_c('br')])}),0)])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',{staticClass:\"standing-header\"},[_c('td',[_vm._v(\"Player\")]),_c('td',{staticClass:\"player-scores\"},[_vm._v(\"Board\")]),_c('td',{staticClass:\"player-scores\"},[_vm._v(\"Hand\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"grid\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport * as d3 from 'd3';\nimport {BaseType, Selection} from 'd3';\n\nimport {Cell, LetterLoc, Orientation, Word, PlacedWord, Placement, Match} from '@/data';\n\nimport {Board as PBBoard, Word as PBWord, UpdateBoardRequest, CharLocs} from '@/proto/banana_pb';\n\n\ninterface Suggestion {\n requiredLetters: string[];\n valid: boolean;\n}\n\ninterface BoardData {\n cellSize: number;\n cellRadius: number;\n suggestion: Suggestion;\n data: Cell[][];\n}\n\ninterface Fit {\n fits: boolean;\n missing: string[];\n fromHand: string[];\n}\n\n@Component\nexport default class Board extends Vue {\n @Prop() private gameOver!: boolean;\n\n private placedWords: PlacedWord[] = [];\n private invalidWords: CharLocs[] = [];\n private shortWords: CharLocs[] = [];\n\n // Temporary variables used for suggestions.\n private currentWord = '';\n private lastFits: Placement[] = [];\n private fitIndex = 0;\n\n private sizeX = 0;\n private sizeY = 0;\n private margin = 2;\n private grid: Selection = d3.select('#grid');\n\n public setValidationResults(\n invalidWords: CharLocs[],\n shortWords: CharLocs[],\n detached: boolean): void {\n this.invalidWords = invalidWords;\n this.shortWords = shortWords;\n const grid = document.getElementById('grid');\n if (grid) {\n if (detached) {\n grid.classList.add('detached');\n } else {\n grid.classList.remove('detached');\n }\n }\n this.renderBoard();\n }\n\n public setWords(pws: PlacedWord[]): void {\n this.placedWords = pws;\n this.clear();\n }\n\n public addCell(c: Cell): void {\n const ll = c.letterLoc;\n for (let i = 0; i < ll.wordIndex.length; i++) {\n const wordIndex = ll.wordIndex[i];\n const letterIndex = ll.letterIndex[i];\n\n const word = this.placedWords[wordIndex].word;\n this.placedWords[wordIndex].word = word.substr(0, letterIndex) + ll.letter + word.substr(letterIndex + 1);\n }\n\n if (ll.wordIndex.length === 0) {\n this.normalizeAndAdd({\n word: ll.letter,\n x: c.row - 1,\n y: c.column - 1,\n orientation: Orientation.Horizontal,\n suggestion: false,\n });\n } else {\n this.sendBoard();\n }\n\n this.renderBoard();\n }\n\n // Returns true if we had a fit to place.\n public placeCurrentWord(): boolean {\n const fit = this.currentFit;\n if (!fit) {\n return false;\n }\n\n this.normalizeAndAdd({\n word: this.currentWord,\n x: fit.x,\n y: fit.y,\n orientation: fit.orientation,\n suggestion: false,\n });\n\n this.clear();\n\n return true;\n }\n\n public clear(): void {\n this.currentWord = '';\n this.lastFits = [];\n this.fitIndex = 0;\n\n this.renderBoard();\n }\n\n // Returns the letters required to place the given suggestion.\n public suggestPlacement(word: string, inHand: string[]): Suggestion {\n word = word.toUpperCase();\n this.fitIndex = 0;\n this.currentWord = word;\n\n // If nothing has been placed on the board, just suggest dropping that word\n // in the center of the board.\n if (this.boardEmpty) {\n this.lastFits = [\n {x: 0, y: 0, orientation: Orientation.Horizontal, missing: [], fromHand: []},\n {x: 0, y: 0, orientation: Orientation.Vertical, missing: [], fromHand: []},\n ];\n this.renderBoard();\n return {\n requiredLetters: word.split('').map((l) => l.toUpperCase()),\n valid: true,\n };\n }\n\n this.lastFits = this.findFits(word, inHand);\n return this.renderBoard();\n }\n\n public nextSuggestion(): Suggestion {\n return this.selectSuggestion(1);\n }\n\n public prevSuggestion(): Suggestion {\n return this.selectSuggestion(this.lastFits.length - 1);\n }\n\n private selectSuggestion(offset: number): Suggestion {\n if (this.lastFits.length === 0) {\n return {requiredLetters: [], valid: false};\n }\n\n this.fitIndex = (this.fitIndex + offset) % this.lastFits.length;\n return this.renderBoard();\n }\n\n private normalizeAndAdd(word: PlacedWord): void {\n let offsetX = 0;\n let offsetY = 0;\n if (word.x < 0) {\n offsetX = -word.x;\n }\n if (word.y < 0) {\n offsetY = -word.y;\n }\n\n this.placedWords.push(word);\n for (const pWord of this.placedWords) {\n pWord.x += offsetX;\n pWord.y += offsetY;\n }\n\n for (const iw of this.invalidWords) {\n const locsList = iw.getLocsList();\n for (const ll of locsList) {\n ll.setX(ll.getX() + offsetX);\n ll.setY(ll.getY() + offsetY);\n }\n iw.setLocsList(locsList);\n }\n\n for (const sw of this.shortWords) {\n const locsList = sw.getLocsList();\n for (const ll of locsList) {\n ll.setX(ll.getX() + offsetX);\n ll.setY(ll.getY() + offsetY);\n }\n sw.setLocsList(locsList);\n }\n\n if (!word.suggestion) {\n this.sendBoard(word);\n }\n }\n\n private normalize(removeLast: boolean): void {\n let suggestion = false;\n if (removeLast) {\n suggestion = this.placedWords.splice(-1)[0].suggestion;\n }\n\n if (this.placedWords.length === 0) {\n return;\n }\n\n let offsetX = this.placedWords[0].x;\n let offsetY = this.placedWords[0].y;\n\n for (const word of this.placedWords) {\n if (word.x < offsetX) {\n offsetX = word.x;\n }\n if (word.y < offsetY) {\n offsetY = word.y;\n }\n }\n\n for (const word of this.placedWords) {\n word.x -= offsetX;\n word.y -= offsetY;\n }\n\n for (const iw of this.invalidWords) {\n const locsList = iw.getLocsList();\n for (const ll of locsList) {\n ll.setX(ll.getX() - offsetX);\n ll.setY(ll.getY() - offsetY);\n }\n iw.setLocsList(locsList);\n }\n\n for (const sw of this.shortWords) {\n const locsList = sw.getLocsList();\n for (const ll of locsList) {\n ll.setX(ll.getX() - offsetX);\n ll.setY(ll.getY() - offsetY);\n }\n sw.setLocsList(locsList);\n }\n\n if (!suggestion) {\n this.sendBoard();\n }\n }\n\n private sendBoard(latest?: PlacedWord): void {\n const words: PBWord[] = [];\n\n for (const pw of this.placedWords) {\n words.push(this.toPBWord(pw));\n }\n\n const board = new PBBoard();\n board.setWordsList(words);\n\n let lpb: PBWord | null = null;\n if (latest) {\n lpb = this.toPBWord(latest);\n }\n\n this.$emit('boardUpdated', {board, latest: lpb});\n }\n\n private toPBWord(pw: PlacedWord): PBWord {\n\n const word = new PBWord();\n word.setX(pw.x);\n word.setY(pw.y);\n word.setText(pw.word);\n\n if (pw.orientation === Orientation.Horizontal) {\n word.setOrientation(PBWord.Orientation.HORIZONTAL);\n } else if (pw.orientation === Orientation.Vertical) {\n word.setOrientation(PBWord.Orientation.VERTICAL);\n }\n return word;\n }\n\n get boardEmpty(): boolean {\n return this.placedWords.length === 0;\n }\n\n get currentFit(): Placement | null {\n if (this.lastFits.length === 0) {\n return null;\n }\n return this.lastFits[this.fitIndex];\n }\n\n // findFits returns a list of places the given word could fit on the board.\n private findFits(word: string, inHand: string[]): Placement[] {\n // Build up a mapping of letters in our word to the index(es) they appear\n // at.\n const letters: { [s: string]: number[]; } = {};\n const board = this.genBoard().board;\n for (let i = 0; i < word.length; i++) {\n const c = word.charAt(i);\n if (letters[c] === undefined) {\n letters[c] = [];\n }\n letters[c].push(i);\n }\n\n const fits: Placement[] = [];\n for (const pWord of this.placedWords) {\n // Look and see if any letters of this word overlap with our words.\n const matches = this.overlaps(letters, pWord);\n for (const match of matches) {\n const fit = this.fits(match, word, board, inHand);\n if (fit.fits) {\n fits.push({\n x: match.x,\n y: match.y,\n orientation: match.orientation,\n missing: fit.missing,\n fromHand: fit.fromHand,\n });\n }\n }\n }\n\n const cache: { [s: string]: number } = {};\n fits.sort((a, b) => {\n // First, have a strong preference if only one word isn't missing any\n // letters.\n if (a.missing.length !== b.missing.length) {\n if (a.missing.length === 0) {\n return -1;\n }\n if (b.missing.length === 0) {\n return 1;\n }\n }\n\n // If they're both missing zero or any number of tiles, then sort by how\n // many are coming from their hand. Preference is for the least coming\n // from their hand.\n if (a.fromHand.length !== b.fromHand.length) {\n return a.fromHand.length < b.fromHand.length ? -1 : 1;\n }\n\n const keyA = this.placementKey(a);\n const keyB = this.placementKey(b);\n let numA = (word.length + 1) * 2;\n let numB = (word.length + 1) * 2;\n if (cache[keyA] === undefined) {\n cache[keyA] = this.countSurrounding(a, word.length, board);\n }\n if (cache[keyB] === undefined) {\n cache[keyB] = this.countSurrounding(b, word.length, board);\n }\n numA = cache[keyA];\n numB = cache[keyB];\n if (numA < numB) {\n return -1;\n }\n if (numA > numB) {\n return 1;\n }\n return 0;\n });\n\n return fits;\n }\n\n private placementKey(p: Placement): string {\n return p.x + ':' + p.y + ':' + p.orientation;\n }\n\n private countSurrounding(p: Placement, len: number, board: LetterLoc[][]): number {\n let x = p.x;\n let y = p.y;\n // List of positions to verify have a certain value.\n const check: Array<{x: number, y: number}> = [];\n\n let inc: () => void = () => { /* Blank until orientation is looked at */ };\n let buf: () => Array<{x: number, y: number}> = () => [];\n switch (p.orientation) {\n case Orientation.Horizontal:\n inc = () => x++;\n\n // Check that there's nothing immediately before or after the word.\n check.push({x: x - 1, y});\n check.push({x: x + len, y});\n\n buf = () => [{x, y: y - 1}, {x, y: y + 1}];\n\n break;\n case Orientation.Vertical:\n inc = () => y++;\n\n // Check that there's nothing immediately before or after the word.\n check.push({x, y: y - 1});\n check.push({x, y: y + len});\n\n buf = () => [{x: x - 1, y}, {x: x + 1, y}];\n\n break;\n }\n\n if (buf === undefined || inc === undefined) {\n // This is the highest possible count.\n return (len + 1) * 2;\n }\n\n for (let i = 0; i < len; i++) {\n check.push(...buf());\n inc();\n }\n\n let count = 0;\n for (const pos of check) {\n // If there's a character, increment our count.\n if (pos.x >= 0\n && pos.y >= 0\n && pos.x < board.length\n && pos.y < board[pos.x].length\n && board[pos.x][pos.y].letter !== ''\n && board[pos.x][pos.y].letter !== ' ') {\n count++;\n }\n }\n\n return count;\n }\n\n private overlaps(letters: { [s: string]: number[]; }, word: Word): Match[] {\n const o = this.opposite(word.orientation);\n const res: Match[] = [];\n\n // Go through each letter in our word, see if there are any letter\n // overlaps.\n for (let i = 0; i < word.word.length; i++) {\n const locs = letters[word.word.charAt(i)];\n if (locs === undefined) {\n continue;\n }\n\n\n // For each overlap, mark that as a placement.\n for (const offset of locs) {\n let x = word.x;\n let y = word.y;\n let intX = word.x;\n let intY = word.y;\n\n // The first character's location relative to this word depends on\n // where the overlap occurs.\n switch (o) {\n case Orientation.Horizontal:\n intY = y + i;\n x -= offset;\n y += i;\n break;\n case Orientation.Vertical:\n intX = x + i;\n y -= offset;\n x += i;\n break;\n }\n\n res.push({x, y, orientation: o, intX, intY});\n }\n }\n\n return res;\n }\n\n private opposite(o: Orientation): Orientation {\n if (o === Orientation.Horizontal) {\n return Orientation.Vertical;\n }\n return Orientation.Horizontal;\n }\n\n // fits returns if a given match fits on the board.\n private fits(m: Match, word: string, board: LetterLoc[][], inHand: string[]): Fit {\n let x = m.x;\n let y = m.y;\n\n // List of positions to verify have a certain value.\n const check: Array<{x: number, y: number, letter: string}> = [];\n\n let inc: () => void = () => { /* Blank until orientation is looked at */ };\n let buf: () => Array<{x: number, y: number, letter: string}> = () => [];\n switch (m.orientation) {\n case Orientation.Horizontal:\n inc = () => x++;\n\n // Check that there's nothing immediately before or after the word.\n check.push({x: x - 1, y, letter: ''});\n check.push({x: x + word.length, y, letter: ''});\n\n buf = () => [{x, y: y - 1, letter: ''}, {x, y: y + 1, letter: ''}];\n\n break;\n case Orientation.Vertical:\n inc = () => y++;\n\n // Check that there's nothing immediately before or after the word.\n check.push({x, y: y - 1, letter: ''});\n check.push({x, y: y + word.length, letter: ''});\n\n buf = () => [{x: x - 1, y, letter: ''}, {x: x + 1, y, letter: ''}];\n\n break;\n }\n\n if (buf === undefined || inc === undefined) {\n return {fits: false, missing: [], fromHand: []};\n }\n\n for (let i = 0; i < word.length; i++) {\n check.push({x, y, letter: word.charAt(i)});\n inc();\n }\n\n const freq = this.toFreq(inHand);\n const fromHand: string[] = [];\n for (const pos of check) {\n // Means it's coming from our hand.\n if (pos.x < 0\n || pos.y < 0\n || pos.x >= board.length\n || pos.y >= board[pos.x].length\n || board[pos.x][pos.y].letter === ''\n || board[pos.x][pos.y].letter === ' ') {\n if (pos.letter !== '') {\n if (!freq.hasOwnProperty(pos.letter)) {\n freq[pos.letter] = 0;\n }\n freq[pos.letter]--;\n fromHand.push(pos.letter);\n }\n continue;\n }\n\n // Means it's not valid\n if (board[pos.x][pos.y].letter !== pos.letter) {\n return {fits: false, missing: [], fromHand: []};\n }\n }\n\n // Don't offer suggestions that don't use any tiles from the hand.\n if (fromHand.length === 0) {\n return {fits: false, missing: [], fromHand: []};\n }\n\n\n return {fits: true, missing: this.aggregateMissing(freq), fromHand};\n }\n\n private toFreq(ss: string[]): { [s: string]: number; } {\n const out: { [s: string]: number; } = {};\n for (const s of ss) {\n if (out[s] === undefined) {\n out[s] = 0;\n }\n out[s]++;\n }\n return out;\n }\n\n private aggregateMissing(input: { [s: string]: number; }): string[] {\n const out: string[] = [];\n for (const letter in input) {\n if (!input.hasOwnProperty(letter)) {\n continue;\n }\n let n = input[letter];\n while (n < 0) {\n out.push(letter);\n n++;\n }\n }\n return out;\n }\n\n // isValid returns whether or not the given target is a valid location on the\n // board. A location is valid if it is:\n // - Out of bounds\n // - Empty\n // - The target letter we're looking for\n private isValid(x: number, y: number, target: string, board: LetterLoc[][]): boolean {\n return x < 0\n || y < 0\n || x >= board.length\n || y >= board[x].length\n || board[x][y].letter === ''\n || board[x][y].letter === ' '\n || board[x][y].letter === target;\n }\n\n private mounted(): void {\n this.grid = d3.select('#grid').append('svg')\n .attr('width', 0)\n .attr('height', 0);\n\n this.renderBoard();\n }\n\n private resizeSVG(): void {\n const grid = document.getElementById('grid');\n if (grid) {\n this.sizeX = grid.offsetWidth;\n this.sizeY = grid.offsetHeight;\n }\n\n this.grid\n .attr('width', this.sizeX + 'px')\n .attr('height', this.sizeY + 'px');\n }\n\n private wordToPositions(word: Word): Array<{x: number, y: number, letter: string}> {\n let inc: () => void = () => { /* Blank until orientation is looked at */};\n let x = word.x;\n let y = word.y;\n let offsetX = 0;\n let offsetY = 0;\n if (x < 0) {\n offsetX = -x;\n }\n if (y < 0) {\n offsetY = -y;\n }\n switch (word.orientation) {\n case Orientation.Horizontal:\n inc = () => x++;\n break;\n case Orientation.Vertical:\n inc = () => y++;\n break;\n }\n const locs: Array<{x: number, y: number, letter: string}> = [];\n for (let i = 0; i < word.word.length; i++) {\n locs.push({x: x + offsetX, y: y + offsetY, letter: word.word.charAt(i)});\n inc();\n }\n\n return locs;\n }\n\n private genBoard(): {board: LetterLoc[][], requiredLetters: string[]} {\n let maxX = 0;\n let maxY = 0;\n\n for (const word of this.placedWords) {\n let x = word.x;\n let y = word.y;\n switch (word.orientation) {\n case Orientation.Horizontal:\n x += word.word.length - 1;\n break;\n case Orientation.Vertical:\n y += word.word.length - 1;\n break;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n if (maxX === 0 && maxY === 0 && this.placedWords.length === 0) {\n return {board: [[{letter: '', wordIndex: [], letterIndex: []}]], requiredLetters: []};\n }\n\n const board: LetterLoc[][] = [];\n for (let i = 0; i < maxX + 1; i++) {\n board.push(new Array());\n for (let j = 0; j < maxY + 1; j++) {\n board[i].push({letter: '', wordIndex: [], letterIndex: []});\n }\n }\n\n let suggestedWord: PlacedWord | null = null;\n for (let i = 0; i < this.placedWords.length; i++) {\n const word = this.placedWords[i];\n if (word.suggestion) {\n suggestedWord = word;\n continue;\n }\n\n let inc: () => void = () => { /* Blank until orientation is looked at */};\n let x = word.x;\n let y = word.y;\n switch (word.orientation) {\n case Orientation.Horizontal:\n inc = () => x++;\n break;\n case Orientation.Vertical:\n inc = () => y++;\n break;\n }\n for (let j = 0; j < word.word.length; j++) {\n board[x][y].letter = word.word.charAt(j);\n board[x][y].wordIndex.push(i);\n board[x][y].letterIndex.push(j);\n inc();\n }\n }\n\n const reqLetters: string[] = [];\n if (suggestedWord) {\n const poses = this.wordToPositions(suggestedWord);\n for (const pos of poses) {\n if (board[pos.x][pos.y].letter === '') {\n reqLetters.push(pos.letter);\n }\n board[pos.x][pos.y].letter = pos.letter;\n }\n }\n\n return {board, requiredLetters: reqLetters};\n }\n\n private renderBoard(): Suggestion {\n this.resizeSVG();\n const board = this.dataFromBoard();\n\n // Set up the rows.\n const row = this.grid.selectAll('.row')\n .data(board.data);\n\n row.exit().remove();\n\n const newRows = row.enter().append('g')\n .attr('class', 'row');\n\n // Now that the rows we need exist, map each data cell to a square.\n const column = row.merge(newRows)\n .data(board.data).selectAll('.square')\n .data((d: any) => d);\n\n column.exit().remove();\n\n const cells = column.enter().append('g')\n .attr('class', 'square')\n .on('click', (d: any) => {\n if (this.gameOver || d.suggestion) {\n return;\n }\n if (d.letterLoc.letter === '' || d.letterLoc.letter === ' ') {\n this.$emit('blankClicked', d);\n return;\n }\n this.removeLetterLoc(d.letterLoc);\n });\n\n cells.append('rect');\n cells.append('text');\n\n column.merge(cells).select('rect')\n .attr('x', (d: any) => d.x)\n .attr('y', (d: any) => d.y)\n .attr('rx', board.cellRadius)\n .attr('rx', board.cellRadius)\n .attr('width', board.cellSize)\n .attr('height', board.cellSize)\n .style('fill', (d: any) => {\n if (d.suggestion) {\n return '#ffc';\n }\n if (d.invalid) {\n return '#fcc';\n }\n if (d.tooShort) {\n return '#ccf';\n }\n return '#fff';\n })\n .style('stroke', '#222');\n\n column.merge(cells).select('text')\n .attr('x', (d: any) => d.x + board.cellSize / 2)\n .attr('y', (d: any) => d.y + board.cellSize / 1.8)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d.letterLoc.letter)\n .style('font-size', (d: any) => {\n return board.cellSize * 0.7 + 'px';\n });\n\n return board.suggestion;\n }\n\n private dataFromBoard(): BoardData {\n const data: Cell[][] = new Array();\n\n const fit = this.currentFit;\n if (fit) {\n this.normalizeAndAdd({\n word: this.currentWord,\n x: fit.x,\n y: fit.y,\n orientation: fit.orientation,\n suggestion: true,\n });\n }\n\n const boardResp = this.genBoard();\n const board = boardResp.board;\n\n const boardX = board.length + 2;\n const boardY = board[0].length + 2;\n\n const size = Math.min(\n (this.sizeX / boardX) - this.margin,\n (this.sizeY / boardY) - this.margin);\n\n const paddingX = this.sizeX - ((size + this.margin) * boardX);\n const paddingY = this.sizeY - ((size + this.margin) * boardY);\n\n // Start xpos and ypos at margin so the stroke will show when we make the grid\n // below.\n let xpos = this.margin / 2 + paddingX / 2;\n let ypos = this.margin / 2 + paddingY / 2;\n\n // iterate for rows\n for (let x = 0; x < boardX; x++) {\n data.push(new Array());\n\n for (let y = 0; y < boardY; y++) {\n let ll: LetterLoc = {letter: '', wordIndex: [], letterIndex: []};\n if (x > 0 && x < boardX - 1 && y > 0 && y < boardY - 1) {\n ll = board[x - 1][y - 1];\n }\n\n data[x].push({\n x: xpos,\n y: ypos,\n letterLoc: ll,\n row: x,\n column: y,\n suggestion: false,\n invalid: false,\n tooShort: false,\n });\n\n // Increment the Y position.\n ypos += size + this.margin;\n }\n // Reset the Y position after a column is complete.\n ypos = this.margin / 2 + paddingY / 2;\n // Increment the X position.\n xpos += size + this.margin;\n }\n\n for (const iw of this.invalidWords) {\n for (const cl of iw.getLocsList()) {\n if (cl.getX() + 1 >= data.length) {\n continue;\n }\n if (cl.getY() + 1 >= data[cl.getX() + 1].length) {\n continue;\n }\n data[cl.getX() + 1][cl.getY() + 1].invalid = true;\n }\n }\n\n for (const sw of this.shortWords) {\n for (const cl of sw.getLocsList()) {\n if (cl.getX() + 1 >= data.length) {\n continue;\n }\n if (cl.getY() + 1 >= data[cl.getX() + 1].length) {\n continue;\n }\n data[cl.getX() + 1][cl.getY() + 1].tooShort = true;\n }\n }\n\n if (fit) {\n const poses = this.wordToPositions({word: this.currentWord, x: fit.x, y: fit.y, orientation: fit.orientation});\n for (const pos of poses) {\n const x = pos.x + 1;\n const y = pos.y + 1;\n data[x][y].suggestion = true;\n }\n this.normalize(true /* removeLast */);\n }\n\n return {\n cellSize: size,\n cellRadius: 5,\n suggestion: {\n requiredLetters: boardResp.requiredLetters,\n valid: !!fit,\n },\n data,\n };\n }\n\n private removeLetterLoc(ll: LetterLoc): void {\n const toRemove: number[] = [];\n for (let i = 0; i < ll.wordIndex.length; i++) {\n const wordIndex = ll.wordIndex[i];\n const letterIndex = ll.letterIndex[i];\n\n let word = this.placedWords[wordIndex].word;\n word = word.substr(0, letterIndex) + ' ' + word.substr(letterIndex + 1);\n\n const spaceIndex = word.search(/\\S/);\n // If there's space at the beginning, move the word forward.\n if (spaceIndex > 0) {\n switch (this.placedWords[wordIndex].orientation) {\n case Orientation.Vertical:\n this.placedWords[wordIndex].y += spaceIndex;\n break;\n case Orientation.Horizontal:\n this.placedWords[wordIndex].x += spaceIndex;\n break;\n }\n }\n word = word.trim();\n // Remove empty words.\n if (word.length === 0) {\n toRemove.push(wordIndex);\n }\n this.placedWords[wordIndex].word = word;\n }\n\n toRemove.sort().reverse();\n for (const index of toRemove) {\n this.placedWords.splice(index, 1);\n }\n this.normalize(false /* removeLast */);\n this.$emit('removeTile', ll.letter);\n this.renderBoard();\n }\n}\n\n\n","\n\n\n\n\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport * as d3 from 'd3';\nimport {BaseType, Selection} from 'd3';\nimport {Letter} from '@/data';\n\nenum Fit {\n TOO_SMALL,\n JUST_RIGHT,\n TOO_LARGE,\n}\n\ninterface BoardSizing {\n perRow: number;\n rows: number;\n fit: Fit;\n}\n\n@Component\nexport default class UnusedLetters extends Vue {\n @Prop() private letters!: Letter[];\n @Prop() private gameOver!: boolean;\n private board: Selection = d3.select('#letters');\n\n private sizeX = 0;\n private sizeY = 0;\n private margin = 10;\n\n public clearSelected(): void {\n for (const l of this.letters) {\n l.selected = false;\n }\n }\n\n public flash(): void {\n const letters = document.getElementById('letters');\n letters.classList.remove('flash');\n letters.classList.add('flash');\n setTimeout(() => { letters.classList.remove('flash'); }, 1000);\n }\n\n @Watch('letters')\n public renderLetters(): void {\n this.resizeSVG();\n\n // Start at a sane default.\n let size = Math.min(65, this.sizeY);\n let margin = 0.1 * size;\n\n // Determine if we can fit all of our tiles into this space.\n let lowerSize = 0;\n let upperSize = 2 * size;\n let perRow = 0;\n let rows = 0;\n for (let i = 0; i < 10; i++) {\n const fit = this.calculateFit(size + margin);\n perRow = fit.perRow;\n rows = fit.rows;\n if (fit.fit === Fit.JUST_RIGHT) {\n break;\n }\n\n if (fit.fit === Fit.TOO_LARGE) {\n upperSize -= (upperSize - lowerSize) / 4;\n }\n\n if (fit.fit === Fit.TOO_SMALL) {\n lowerSize += (upperSize - lowerSize) / 4;\n }\n\n size = (upperSize + lowerSize) / 2;\n margin = 0.1 * size;\n }\n\n const offsetX = ((margin + (this.sizeX - (size + margin) * perRow)) / 2);\n const offsetY = ((margin + (this.sizeY - (size + margin) * rows)) / 2);\n\n const letters = this.board.selectAll('g')\n .data(this.letters, (d: any, i: number) => `${d.letter}-${i}`);\n\n letters.exit().remove();\n\n const newLetters = letters.enter().append('g');\n\n newLetters\n .on('click', (d: any) => {\n if (this.gameOver) {\n return;\n }\n const toSet = !d.selected;\n this.clearSelected();\n d.selected = toSet;\n this.renderLetters();\n })\n .on('dblclick', (d: any) => {\n if (this.gameOver) {\n return;\n }\n d.selected = false;\n this.$emit('dumpTile', d.letter);\n });\n\n // Animation behavior for new letters: appear directly at desired position.\n newLetters.append('rect')\n .style('stroke', '#222')\n .style('fill', (d: any): string => {\n if (d.deleting) {\n return '#faa';\n }\n if (d.selected) {\n return '#afa';\n }\n return '#fff';\n })\n .attr('x', (d: any, i: number) => {\n return (i % perRow) * (size + margin) + offsetX;\n })\n .attr('y', (d: any, i: number) => {\n return Math.floor(i / perRow) * (size + margin) + offsetY;\n })\n .attr('width', size)\n .attr('height', size);\n\n newLetters.append('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d.letter)\n .attr('x', (d: any, i: number) => (i % perRow) * (size + margin) + size / 2 + offsetX)\n .attr('y', (d: any, i: number) => Math.floor(i / perRow) * (size + margin) + size / 2 + offsetY)\n .style('font-size', (d: any) => {\n return size * 0.5 + 'px';\n });\n\n // Animation behavior for existing letters: move and resize nicely.\n letters.merge(newLetters).select('rect')\n .style('stroke', '#222')\n .transition()\n .style('fill', (d: any): string => {\n if (d.deleting) {\n return '#faa';\n }\n if (d.selected) {\n return '#afa';\n }\n return '#fff';\n })\n .attr('x', (d: any, i: number) => {\n return (i % perRow) * (size + margin) + offsetX;\n })\n .attr('y', (d: any, i: number) => {\n return Math.floor(i / perRow) * (size + margin) + offsetY;\n })\n .attr('width', size)\n .attr('height', size);\n\n letters.merge(newLetters).select('text')\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d.letter)\n .transition()\n .attr('x', (d: any, i: number) => (i % perRow) * (size + margin) + size / 2 + offsetX)\n .attr('y', (d: any, i: number) => Math.floor(i / perRow) * (size + margin) + size / 2 + offsetY)\n .style('font-size', (d: any) => {\n return size * 0.5 + 'px';\n });\n }\n\n // Size includes the margin here.\n private calculateFit(size: number): BoardSizing {\n const perRow = Math.floor(this.sizeX / size);\n const rows = Math.ceil(this.letters.length / perRow);\n // This variable name is garbage, but it's a weird concept to express. Now\n // that we know how many letters we can fit per row and the number of rows\n // required to fit all the letters, we need to know how many rows are\n // actually available at the current size.\n const numRowsWeCanFit = Math.floor(this.sizeY / size);\n let fit = Fit.JUST_RIGHT;\n if (numRowsWeCanFit > rows) {\n fit = Fit.TOO_SMALL;\n }\n if (numRowsWeCanFit < rows) {\n fit = Fit.TOO_LARGE;\n }\n return {\n perRow,\n rows,\n fit,\n };\n }\n\n private resizeSVG(): void {\n const board = document.getElementById('letters');\n if (board) {\n this.sizeX = board.offsetWidth;\n this.sizeY = board.offsetHeight;\n }\n\n this.board\n .attr('width', this.sizeX + 'px')\n .attr('height', this.sizeY + 'px');\n }\n\n private mounted(): void {\n this.board = d3.select('#letters').append('svg')\n .attr('width', 0)\n .attr('height', 0);\n this.resizeSVG();\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Board.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Board.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Board.vue?vue&type=template&id=591db71c&\"\nimport script from \"./Board.vue?vue&type=script&lang=ts&\"\nexport * from \"./Board.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Board.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"letters\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UnusedLetters.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UnusedLetters.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UnusedLetters.vue?vue&type=template&id=7d06a044&\"\nimport script from \"./UnusedLetters.vue?vue&type=script&lang=ts&\"\nexport * from \"./UnusedLetters.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./UnusedLetters.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"word\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport * as d3 from 'd3';\nimport {BaseType, Selection} from 'd3';\nimport {Letter} from '@/data';\n\n@Component\nexport default class ActiveWord extends Vue {\n @Prop() private word!: string;\n private board: Selection = d3.select('#word');\n private sizeX = 0;\n private sizeY = 0;\n\n private mounted(): void {\n this.board = d3.select('#word').append('svg')\n .attr('width', 0)\n .attr('height', 0);\n }\n\n @Watch('word')\n private renderWord(): void {\n this.resizeSVG();\n\n const word = this.board.selectAll('text').data([this.word]);\n\n word.exit().remove();\n const newWords = word.enter().append('text');\n\n word.merge(newWords)\n .attr('x', this.sizeX / 2)\n .attr('y', this.sizeY / 2)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d)\n .style('font-size', '30px');\n }\n\n private resizeSVG(): void {\n const board = document.getElementById('word');\n if (board) {\n this.sizeX = board.offsetWidth;\n this.sizeY = board.offsetHeight;\n }\n\n this.board\n .attr('width', this.sizeX + 'px')\n .attr('height', this.sizeY + 'px');\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActiveWord.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActiveWord.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ActiveWord.vue?vue&type=template&id=1e8d7d15&\"\nimport script from \"./ActiveWord.vue?vue&type=script&lang=ts&\"\nexport * from \"./ActiveWord.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ActiveWord.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"notice\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport * as d3 from 'd3';\nimport {BaseType, Selection} from 'd3';\nimport {Letter} from '@/data';\n\n@Component\nexport default class Notice extends Vue {\n @Prop() private notice!: string[];\n private board: Selection = d3.select('#notice');\n private sizeX = 0;\n private sizeY = 0;\n\n private mounted(): void {\n this.board = d3.select('#notice').append('svg')\n .attr('width', 0)\n .attr('height', 0);\n }\n\n @Watch('notice')\n private renderNotice(): void {\n this.resizeSVG();\n\n const notice = this.board.selectAll('text').data(this.notice);\n\n notice.exit().remove();\n const newNotices = notice.enter().append('text');\n\n notice.merge(newNotices)\n .attr('x', this.sizeX / 2)\n .attr('y', (d: any, i: number) => {\n return (this.sizeY / this.notice.length) * (i + 1) - (this.sizeY / this.notice.length / 2);\n })\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d)\n .style('font-size', '30px');\n }\n\n private resizeSVG(): void {\n const board = document.getElementById('notice');\n if (board) {\n this.sizeX = board.offsetWidth;\n this.sizeY = board.offsetHeight;\n }\n\n this.board\n .attr('width', this.sizeX + 'px')\n .attr('height', this.sizeY + 'px');\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Notice.vue?vue&type=template&id=aa64df9a&\"\nimport script from \"./Notice.vue?vue&type=script&lang=ts&\"\nexport * from \"./Notice.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Notice.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport * as grpcWeb from 'grpc-web';\nimport { Component, Vue } from 'vue-property-decorator';\n\nimport Board from '@/components/Board.vue'; // @ is an alias to /src\nimport UnusedLetters from '@/components/UnusedLetters.vue'; // @ is an alias to /src\nimport ActiveWord from '@/components/ActiveWord.vue'; // @ is an alias to /src\nimport Notice from '@/components/Notice.vue'; // @ is an alias to /src\nimport {Cell, Letter, PlacedWord, Orientation, Player} from '@/data';\nimport {Game as PBGame, Board as PBBoard, ListGamesRequest, JoinGameRequest,\n GameUpdate, CurrentStatus, PlayerUpdate, GameStarted, GameEnded, StartGameRequest,\n Player as PBPlayer, DumpRequest, UpdateBoardRequest, Word, Tiles, GameStatus,\n StreamLogsRequest, LogEntry, OtherTileUpdates, OtherTileUpdate} from '@/proto/banana_pb';\n\n@Component({\n components: {\n Board,\n ActiveWord,\n UnusedLetters,\n Notice,\n },\n})\nexport default class Game extends Vue {\n private game: PBGame | null = null;\n private playerID: string | null = null;\n private players: Player[] = [];\n private tilesInBunch: number | null = null;\n private logs: string[] = [];\n private gameStatus: GameStatus = GameStatus.UNKNOWN;\n\n private word: string = '';\n private notice: string[] = [];\n private board: Board = new Board();\n private activeWord: ActiveWord = new ActiveWord();\n private invalidWords: boolean = false;\n private shortWords: boolean = false;\n private detachedBoard: boolean = false;\n\n // The component that renders our hand.\n private hand: UnusedLetters = new UnusedLetters();\n\n // Letters in our hand.\n private letters: Letter[] = [];\n // Letters required to complete the word on the current board.\n private requiredLetters: string[] = [];\n\n private mounted(): void {\n this.$client.listGames(new ListGamesRequest(), {}, (err, resp) => {\n if (!resp) {\n console.log(err);\n return;\n }\n for (const game of resp.getGamesList()) {\n if (game.getId() === this.$route.params.id) {\n this.game = game;\n break;\n }\n }\n\n if (!this.game) {\n this.$router.push({ name: 'home' });\n console.log(`Couldn't find game ID ${this.$route.params.id}`);\n return;\n }\n\n this.joinGame();\n });\n\n this.board = (this.$refs.board as Board);\n this.hand = (this.$refs.hand as UnusedLetters);\n\n document.addEventListener('keyup', this.keyup);\n }\n\n private startGame(): void {\n const req = new StartGameRequest();\n req.setId(this.game!.getId());\n\n this.$client.startGame(req, {}, (err, resp) => {\n if (!resp) {\n console.log(err);\n return;\n }\n });\n }\n\n private joinGame(): void {\n if (!this.game) {\n return;\n }\n\n const gameID = this.game.getId();\n const playerID = this.$cookies.get('player-id');\n const req = new JoinGameRequest();\n req.setGameId(gameID);\n req.setPlayerId(playerID);\n\n const stream = this.$client.joinGame(req, {});\n\n stream.on('data', (resp) => {\n switch (resp.getUpdateCase()) {\n case GameUpdate.UpdateCase.CURRENT_STATUS:\n this.handleInitialGameState(resp.getCurrentStatus()!);\n break;\n case GameUpdate.UpdateCase.PLAYER_UPDATE:\n this.handlePlayerUpdate(resp.getPlayerUpdate()!);\n break;\n case GameUpdate.UpdateCase.GAME_STARTED:\n this.handleGameStarted(resp.getGameStarted()!);\n break;\n case GameUpdate.UpdateCase.GAME_ENDED:\n this.handleGameOver(resp.getGameEnded()!);\n break;\n case GameUpdate.UpdateCase.SELF_TILE_UPDATE:\n const tileUpdate = resp.getSelfTileUpdate()!;\n if (tileUpdate.getFromOtherPeel()) {\n this.hand.flash();\n }\n this.updateTiles(tileUpdate.getAllTiles());\n break;\n case GameUpdate.UpdateCase.OTHER_TILE_UPDATE:\n this.updateTileCounts(resp.getOtherTileUpdate());\n }\n });\n stream.on('status', (status: grpcWeb.Status) => {\n console.log('status', status);\n });\n stream.on('error', (err: grpcWeb.Error) => {\n this.$emit('rpcError', err);\n });\n stream.on('end', () => {\n console.log('closed');\n if (!this.gameOver) {\n // Wait a second, then try joining again.\n window.setTimeout(() => this.joinGame(), 1000);\n }\n });\n }\n\n private streamLogs(pID: string): void {\n if (!this.game) {\n return;\n }\n\n const req = new StreamLogsRequest();\n req.setGameId(this.game.getId());\n req.setPlayerId(pID);\n\n const stream = this.$client.streamLogs(req, {});\n\n stream.on('data', (resp: LogEntry) => {\n switch (resp.getEventCase()) {\n case LogEntry.EventCase.PLAYER_MOVE:\n const move = resp.getPlayerMove();\n let isWord = 'word';\n if (!move.getWordValid()) {\n isWord = 'not-a-word';\n }\n if (move.getWord().length > 0) {\n this.logs.unshift(`${move.getPlayerName()} played ${isWord} ${move.getWord()}.`);\n if (!move.getBoardConnected()) {\n this.logs.unshift(`${move.getPlayerName()}'s board is in shambles.`);\n }\n }\n break;\n case LogEntry.EventCase.PLAYER_DUMP:\n const dump = resp.getPlayerDump();\n this.logs.unshift(`${dump.getPlayerName()} dumped.`);\n break;\n case LogEntry.EventCase.PLAYER_PEEL:\n const peel = resp.getPlayerPeel();\n this.logs.unshift(`${peel.getPlayerName()} peeled.`);\n }\n });\n stream.on('error', (err: grpcWeb.Error) => {\n this.$emit('rpcError', err);\n });\n }\n\n private handleInitialGameState(up: CurrentStatus): void {\n this.playerID = up.getYourId();\n for (const p of up.getPlayersList()) {\n this.players.push({\n id: p.getId(),\n name: p.getName(),\n tilesInHand: p.getTilesInHand(),\n tilesInBoard: p.getTilesInBoard(),\n });\n }\n this.tilesInBunch = up.getRemainingTiles();\n this.updateBoard(up.getBoard()!);\n this.updateTiles(up.getAllTiles()!);\n this.gameStatus = up.getStatus();\n if (up.getStatus() === GameStatus.FINISHED) {\n this.hand.clearSelected();\n const ge = new GameEnded();\n this.handleGameOver(ge);\n }\n this.streamLogs(this.playerID);\n }\n\n private handleGameStarted(gameStarted: GameStarted): void {\n this.gameStatus = GameStatus.IN_PROGRESS;\n }\n\n private handleGameOver(gameEnded: GameEnded): void {\n this.notice = ['Game Over'];\n this.gameStatus = GameStatus.FINISHED;\n }\n\n private updateBoard(board: PBBoard): void {\n const pws: PlacedWord[] = [];\n for (const word of board.getWordsList()) {\n let o = Orientation.Vertical;\n if (word.getOrientation() === Word.Orientation.HORIZONTAL) {\n o = Orientation.Horizontal;\n }\n pws.push({\n x: word.getX(),\n y: word.getY(),\n orientation: o,\n word: word.getText(),\n suggestion: false,\n });\n }\n this.board.setWords(pws);\n }\n\n private updateTiles(tiles: Tiles): void {\n const letters: Letter[] = [];\n\n for (const l of tiles.getLettersList()) {\n letters.push({\n letter: l,\n deleting: false,\n selected: false,\n });\n }\n\n this.letters = letters;\n }\n\n private updateTileCounts(otus: OtherTileUpdates): void {\n this.tilesInBunch = otus.getRemainingTiles();\n const idMap: { [s: string]: OtherTileUpdate; } = {};\n for (const up of otus.getUpdatesList()) {\n idMap[up.getPlayerId()] = up;\n }\n\n for (const p of this.players) {\n const otu = idMap[p.id];\n p.tilesInHand = otu.getTilesInHand();\n p.tilesInBoard = otu.getTilesInBoard();\n }\n }\n\n private handlePlayerUpdate(pu: PlayerUpdate): void {\n const indexMap: { [s: string]: number; } = {};\n let i = 0;\n for (const p of this.players) {\n indexMap[p.id] = i;\n i++;\n }\n\n const pbPlayer = pu.getPlayer();\n const player = {\n id: pbPlayer.getId(),\n name: pbPlayer.getName(),\n tilesInHand: pbPlayer.getTilesInHand(),\n tilesInBoard: pbPlayer.getTilesInBoard(),\n };\n // Player already exists, update them.\n if (indexMap.hasOwnProperty(player.id)) {\n Vue.set(this.players, indexMap[player.id], player);\n return;\n }\n\n // Board doesn't exist yet, add it.\n this.players.push(player);\n }\n\n private requiredCount(): { [s: string]: number; } {\n const need: { [s: string]: number; } = {};\n for (const letter of this.requiredLetters) {\n if (need[letter] === undefined) {\n need[letter] = 0;\n }\n need[letter]++;\n }\n return need;\n }\n\n private missing(): string[] {\n const need = this.requiredCount();\n\n for (const letter of this.letters) {\n if (need[letter.letter] !== undefined) {\n need[letter.letter]--;\n }\n }\n\n const missing: string[] = [];\n Object.entries(need).forEach(([letter, count]) => {\n if (count <= 0) {\n return;\n }\n\n for (let i = 0; i < count; i++) {\n missing.push(letter);\n }\n });\n\n return missing;\n }\n\n private destroy(): void {\n document.removeEventListener('keyup', this.keyup);\n }\n\n private keyup(e: KeyboardEvent): void {\n if (this.gameOver) {\n return;\n }\n\n e.stopPropagation();\n\n // Left\n if (e.keyCode === 37) {\n this.prev();\n return;\n }\n\n // Right\n if (e.keyCode === 39) {\n this.next();\n return;\n }\n\n // Escape\n if (e.keyCode === 27) {\n this.word = '';\n this.notice = [];\n this.requiredLetters = [];\n this.clearDeleting();\n this.board.clear();\n return;\n }\n\n // Backspace\n if (e.keyCode === 8) {\n this.word = this.word.slice(0, -1);\n this.getSuggestions();\n }\n\n // Enter\n if (e.keyCode === 13) {\n this.place();\n }\n\n // A letter character.\n if (e.keyCode >= 65 && e.keyCode <= 90) {\n this.word += String.fromCharCode(e.keyCode);\n this.getSuggestions();\n }\n }\n\n private selectIfExists(letter: string): void {\n const index = this.letters.map((x) => x.letter + (x.deleting ? '1' : '0')).indexOf(letter + '0');\n if (index > -1) {\n this.letters[index].deleting = true;\n this.hand.renderLetters();\n }\n }\n\n private clearDeleting(): void {\n for (const letter in this.letters) {\n if (this.letters.hasOwnProperty(letter)) {\n this.letters[letter].deleting = false;\n }\n }\n this.hand.renderLetters();\n }\n\n private getSuggestions(): void {\n const suggestion = this.board.suggestPlacement(this.word, this.lettersAsStringArray());\n this.requiredLetters = suggestion.requiredLetters;\n this.setNotice(suggestion.valid);\n }\n\n private setNotice(fit: boolean): void {\n if (this.gameOver) {\n return;\n }\n\n if (this.detachedBoard) {\n this.notice = ['Board is not all connected'];\n return;\n }\n\n const missing = this.missing();\n if (!fit) {\n this.notice = [`Couldn't find a place to put the word`];\n return;\n }\n\n if (missing.length > 0) {\n this.notice = [\n `Needed: ${this.requiredLetters.join(', ')}`,\n `Missing: ${missing.join(', ')}`,\n ];\n } else if (this.word.length > 0) {\n this.notice = [\n 'Have all needed letters:',\n this.requiredLetters.join(', '),\n ];\n } else {\n this.notice = [];\n if (this.invalidWords) {\n this.notice.push('Invalid words on board');\n }\n if (this.shortWords) {\n this.notice.push('Min word length not satisfied');\n }\n }\n }\n\n private place(): boolean {\n if (this.missing().length > 0) {\n return false;\n }\n\n this.board.placeCurrentWord();\n\n const toRemove = this.requiredCount();\n const indicesToRemove: number[] = [];\n\n for (let i = this.letters.length - 1; i >= 0; i--) {\n const l = this.letters[i].letter;\n if (toRemove[l] !== undefined && toRemove[l] > 0) {\n indicesToRemove.push(i);\n toRemove[l]--;\n }\n }\n\n this.requiredLetters = [];\n this.word = '';\n this.notice = [];\n\n for (const idx of indicesToRemove) {\n this.letters.splice(idx, 1);\n }\n this.letters.sort((a, b) => a.letter > b.letter ? 1 : (a.letter < b.letter ? -1 : 0));\n this.hand.renderLetters();\n\n return true;\n }\n\n private addTileToHand(letter: string): void {\n if (this.gameOver) {\n return;\n }\n this.letters.push({letter, deleting: false, selected: false});\n this.letters.sort((a, b) => a.letter > b.letter ? 1 : (a.letter < b.letter ? -1 : 0));\n }\n\n private dumpTile(letter: string): void {\n if (this.gameOver) {\n return;\n }\n const req = new DumpRequest();\n req.setId(this.game!.getId());\n req.setPlayerId(this.playerID!);\n req.setLetter(letter);\n this.$client.dump(req, {}, (err, resp) => {\n if (err) {\n console.log(err);\n return;\n }\n this.updateTiles(resp.getAllTiles());\n });\n }\n\n private prev(): void {\n const suggestion = this.board.prevSuggestion();\n this.requiredLetters = suggestion.requiredLetters;\n this.setNotice(suggestion.valid);\n }\n\n private next(): void {\n const suggestion = this.board.nextSuggestion();\n this.requiredLetters = suggestion.requiredLetters;\n this.setNotice(suggestion.valid);\n }\n\n private addSelected(c: Cell): void {\n let selected = '';\n let idx = 0;\n for (let i = 0; i < this.letters.length; i++) {\n const l = this.letters[i];\n if (l.selected) {\n selected = l.letter;\n idx = i;\n break;\n }\n }\n\n if (selected === '') {\n return;\n }\n\n c.letterLoc.letter = selected;\n this.board.addCell(c);\n this.hand.clearSelected();\n this.letters.splice(idx, 1);\n this.word = '';\n this.notice = [];\n this.requiredLetters = [];\n this.clearDeleting();\n this.board.clear();\n }\n\n private sendBoard(b: {board: PBBoard, latest: Word | null}): void {\n const req = new UpdateBoardRequest();\n req.setId(this.game!.getId());\n req.setPlayerId(this.playerID!);\n req.setBoard(b.board);\n if (b.latest) {\n req.setLatestWord(b.latest);\n }\n this.$client.updateBoard(req, {}, (err, resp) => {\n if (!resp) {\n console.log(err);\n return;\n }\n this.board.setValidationResults(\n resp.getInvalidWordsList(),\n resp.getShortWordsList(),\n resp.getDetachedBoard());\n this.invalidWords = resp.getInvalidWordsList().length > 0;\n this.shortWords = resp.getShortWordsList().length > 0;\n this.detachedBoard = resp.getDetachedBoard();\n this.setNotice(true);\n });\n }\n\n get gameOver(): boolean {\n return this.gameStatus === GameStatus.FINISHED;\n }\n\n get waitingForPlayers(): boolean {\n return this.gameStatus === GameStatus.WAITING_FOR_PLAYERS;\n }\n\n get isCreator(): boolean {\n if (!this.game) {\n return false;\n }\n if (!this.playerID) {\n return false;\n }\n return this.playerID === this.game.getCreatorId();\n }\n\n private lettersAsStringArray(): string[] {\n const out: string[] = [];\n for (const l of this.letters) {\n out.push(l.letter);\n }\n return out;\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Game.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Game.vue?vue&type=template&id=4488bf9e&scoped=true&\"\nimport script from \"./Game.vue?vue&type=script&lang=ts&\"\nexport * from \"./Game.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Game.vue?vue&type=style&index=0&id=4488bf9e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4488bf9e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"home\"},[_c('div',{staticClass:\"header-image\"},[_c('img',{staticClass:\"logo\",attrs:{\"src\":require(\"@/assets/logo.svg\")}}),(_vm.playerName)?_c('h2',{staticClass:\"has-text-centered is-size-5\"},[_vm._v(\"Playing as \"+_vm._s(_vm.playerName)+\" \"),_c('sup',[_c('a',{staticClass:\"is-size-6\",on:{\"click\":_vm.changeName}},[_vm._v(\"(change name)\")])])]):_vm._e()]),_c('div',{staticClass:\"columns is-gapless\"},[_vm._m(0),_c('div',{staticClass:\"vertical-rule column is-narrow\"}),_c('div',{staticClass:\"column\"},[_c('h1',{staticClass:\"has-text-centered is-size-4\"},[_vm._v(\"Create a Game\")]),_c('NewGameForm')],1)]),_c('hr'),_c('div',[_c('h2',{staticClass:\"has-text-centered is-size-3\"},[_vm._v(\"Game List\")]),_c('table',{staticClass:\"games\"},[_vm._m(1),_vm._l((_vm.games),function(game){return _c('tr',{staticClass:\"game-row\"},[_c('td',[_c('a',{on:{\"click\":function($event){return _vm.joinGame(game.id)}}},[_vm._v(_vm._s(game.name))])]),_c('td',[_vm._v(_vm._s(_vm.gameStatus(game.stat)))]),_c('td',[_vm._v(_vm._s(game.playerCount)+\" players\")]),_c('td',[_c('a',{on:{\"click\":function($event){return _vm.spectate(game.id)}}},[_vm._v(\"Spectate\")])])])})],2)]),_c('b-modal',{attrs:{\"active\":_vm.showModal},on:{\"update:active\":function($event){_vm.showModal=$event}}},[_c('div',{staticClass:\"modal-card\"},[_c('header',{staticClass:\"modal-card-head\"},[_c('p',{staticClass:\"modal-card-title\"},[_vm._v(\"Set your name\")])]),_c('section',{staticClass:\"modal-card-body\"},[_c('b-field',{attrs:{\"label\":\"Username\"}},[_c('b-input',{attrs:{\"type\":\"text\",\"placeholder\":\"e.g. \\\"Cave Johnson\\\"\",\"required\":\"\"},nativeOn:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.registerPlayer($event)}},model:{value:(_vm.playerName),callback:function ($$v) {_vm.playerName=$$v},expression:\"playerName\"}})],1)],1),_c('footer',{staticClass:\"modal-card-foot\"},[_c('button',{staticClass:\"button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.showModal = false}}},[_vm._v(\"Close\")]),_c('button',{staticClass:\"button is-primary\",on:{\"click\":_vm.registerPlayer}},[_vm._v(\"Set Name\")])])])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"column is-two-thirds\"},[_c('div',[_c('h1',{staticClass:\"has-text-centered is-size-4\"},[_vm._v(\"Welcome to B(r)ananagrams!\")]),_c('div',{staticClass:\"description\"},[_c('p',[_c('strong',[_vm._v(\"What is this?\")]),_vm._v(\" Brananagrams is my internet version/discount knockoff of\\n smash-hit \"),_c('a',{attrs:{\"href\":\"https://bananagrams.com/\"}},[_vm._v(\"Bananagrams\")]),_vm._v(\",\\n which itself is just \"),_c('a',{attrs:{\"href\":\"https://scrabble.hasbro.com/en-us\"}},[_vm._v(\"Scrabble\")]),_vm._v(\" for people\\n with short attention spans.\\n \")]),_c('p',[_c('strong',[_vm._v(\"How do I play?\")]),_vm._v(\" Create a new game, select it from the\\n game list, find at least one other friend (and up to 23 other\\n friends), and hit 'Start Game'. Tiles will be distributed. Add\\n words to your board by typing them out, entry locations will be\\n automatically suggested. If a location isn't suggested\\n automatically, you can click tiles in your hand and click to\\n place them on the grid. Double-click a tile to dump, and click\\n letters on the board to remove them.\\n \")]),_c('p',[_c('strong',[_vm._v(\"Can I contribute?\")]),_vm._v(\" Totally! If you'd like to\\n contribute, the code for this project is \"),_c('a',{attrs:{\"href\":\"https://github.com/bcspragu/Bananagrama\"}},[_vm._v(\"on GitHub\")]),_vm._v(\".\\n \")]),_c('p',[_c('strong',[_vm._v(\"Can I sue you?\")]),_vm._v(\" Definitely! If you're Hasbro or\\n whatever board game conglomerate owns Bananagrams, and would like\\n to send a cease and desist letter, my email address is: \\n \")]),_c('p',{staticClass:\"has-text-centered\"},[_c('a',{attrs:{\"href\":\"mailto:imshakinginmyboots@merrychristmasfuckers.com\"}},[_vm._v(\"\\n ImShakingInMyBoots@MerryChristmasFuckers.com\\n \")])]),_c('p',{staticClass:\"has-text-centered super-serious\"},[_vm._v(\"\\n (legitimately though, I will receive an email if you send it there)\\n \")])])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('td',[_vm._v(\"Game Name\")]),_c('td',[_vm._v(\"Status\")]),_c('td',[_vm._v(\"Number of Players\")]),_c('td')])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Game Name\")]),_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.gameName),expression:\"gameName\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"New Game\"},domProps:{\"value\":(_vm.gameName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.gameName=$event.target.value}}})])]),_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label\"},[_vm._v(\"Minimum Letters for Valid Word\")]),_c('div',{staticClass:\"control\"},[_c('div',{staticClass:\"select\"},[_c('b-select',{model:{value:(_vm.minLetters),callback:function ($$v) {_vm.minLetters=$$v},expression:\"minLetters\"}},[_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"2\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"3\")]),_c('option',{attrs:{\"value\":\"4\"}},[_vm._v(\"4\")]),_c('option',{attrs:{\"value\":\"5\"}},[_vm._v(\"5\")])])],1)])]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control has-text-centered\"},[_c('button',{staticClass:\"button is-info\",on:{\"click\":_vm.createGame}},[_vm._v(\"Create Game\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport {NewGameRequest} from '@/proto/banana_pb';\n\n@Component\nexport default class NewGameForm extends Vue {\n private gameName: string = '';\n private minLetters: string = '2';\n private advancedOpen = false;\n\n private createGame() {\n const req = new NewGameRequest();\n req.setName(this.gameName);\n req.setMinLettersInWord(parseInt(this.minLetters, 10));\n this.$client.newGame(req, {}, (err, resp) => {\n if (err) {\n console.log(err);\n }\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewGameForm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewGameForm.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NewGameForm.vue?vue&type=template&id=3e3df4ed&scoped=true&\"\nimport script from \"./NewGameForm.vue?vue&type=script&lang=ts&\"\nexport * from \"./NewGameForm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./NewGameForm.vue?vue&type=style&index=0&id=3e3df4ed&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e3df4ed\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport * as grpcWeb from 'grpc-web';\n\nimport NewGameForm from '@/components/NewGameForm.vue';\nimport {RegisterRequest, NewGameRequest, ListGamesRequest,\n Game as PBGame, GameStatus} from '@/proto/banana_pb';\n\ninterface Game {\n id: string;\n name: string;\n playerCount: number;\n stat: GameStatus;\n}\n\n@Component({\n components: {\n NewGameForm,\n },\n})\nexport default class Home extends Vue {\n private games: Game[] = [];\n\n private showModal = false;\n private playerName: string = '';\n\n private mounted(): void {\n const playerName = this.$cookies.get('player-name');\n if (playerName) {\n this.playerName = playerName;\n this.loadGames();\n } else {\n // Have them set their name.\n this.showModal = true;\n }\n\n }\n\n private registerPlayer(): void {\n if (!this.playerName) {\n // If they didn't set a name, just leave the dialog open.\n return;\n }\n const req = new RegisterRequest();\n req.setName(this.playerName);\n this.$client.register(req, {}, (err, resp) => {\n if (err) {\n console.log(err);\n return;\n }\n this.showModal = false;\n this.$cookies.set('player-name', this.playerName);\n this.$cookies.set('player-id', resp.getPlayerId());\n this.$cookies.set('player-token', resp.getToken());\n this.loadGames();\n });\n }\n\n private changeName(): void {\n this.showModal = true;\n }\n\n private joinGame(id: string): void {\n const playerName = this.playerNameFromCookies();\n if (playerName) {\n this.$router.push({ name: 'game', params: { id } });\n return;\n }\n\n // Show a login modal.\n this.showModal = true;\n }\n\n private spectate(id: string): void {\n this.$router.push({ name: 'spectate', params: { id } });\n }\n\n private playerNameFromCookies(): string | undefined {\n return this.$cookies.get('player-name');\n }\n\n private loadGames() {\n const stream = this.$client.streamGames(new ListGamesRequest(), {});\n\n stream.on('data', (resp) => {\n const indexMap: { [s: string]: number; } = {};\n let i = 0;\n for (const game of this.games) {\n indexMap[game.id] = i;\n i++;\n }\n\n const gameUpdates = resp.getGamesList();\n for (const game of gameUpdates) {\n // Game already exists, update it.\n if (indexMap.hasOwnProperty(game.getId())) {\n Vue.set(this.games, indexMap[game.getId()], this.toGame(game));\n continue;\n }\n\n // Game doesn't exist yet, add it.\n this.games.push(this.toGame(game));\n }\n });\n stream.on('error', (err: grpcWeb.Error) => {\n this.$emit('rpcError', err);\n });\n }\n\n private gameStatus(stat: GameStatus): string {\n switch (stat) {\n case GameStatus.WAITING_FOR_PLAYERS:\n return 'Waiting for players';\n case GameStatus.IN_PROGRESS:\n return 'In progress';\n case GameStatus.FINISHED:\n return 'Finished';\n default:\n return 'Unknown';\n }\n }\n\n private toGame(g: PBGame): Game {\n return {\n id: g.getId(),\n name: g.getName(),\n playerCount: g.getPlayerCount(),\n stat: g.getStatus(),\n };\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=136b73e8&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=136b73e8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"136b73e8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"spectator-board\"},_vm._l((_vm.boards),function(board){return _c('div',{staticClass:\"board\",style:({'background-color': board.color})},[_c('div',{staticClass:\"label\"},[_vm._v(_vm._s(board.playerName))]),_c('BoardView',{attrs:{\"board\":board.board,\"invalidWords\":board.invalidWords,\"detached\":board.detached}})],1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"grid\",staticClass:\"grid\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport * as d3 from 'd3';\nimport {BaseType, Selection} from 'd3';\n\nimport {LetterLoc} from '@/data';\n\nimport {Board as PBBoard, Word as PBWord, UpdateBoardRequest, CharLocs} from '@/proto/banana_pb';\n\nexport interface Cell {\n x: number;\n y: number;\n row: number;\n column: number;\n letterLoc: LetterLoc;\n invalid: boolean;\n}\n\ninterface BoardData {\n cellSize: number;\n cellRadius: number;\n data: Cell[][];\n}\n\n@Component\nexport default class BoardView extends Vue {\n @Prop() private board!: PBBoard;\n @Prop() private invalidWords!: CharLocs[];\n @Prop() private detached!: boolean;\n\n private sizeX = 0;\n private sizeY = 0;\n private margin = 2;\n private grid: Selection = d3.select('#grid');\n\n private mounted(): void {\n const grid = (this.$refs.grid as HTMLElement);\n this.grid = d3.select(grid).append('svg')\n .attr('width', 0)\n .attr('height', 0);\n\n this.renderBoard();\n }\n\n private resizeSVG(): void {\n const grid = (this.$refs.grid as HTMLElement);\n if (grid) {\n this.sizeX = grid.offsetWidth;\n this.sizeY = grid.offsetHeight;\n }\n\n this.grid\n .attr('width', this.sizeX + 'px')\n .attr('height', this.sizeY + 'px');\n }\n\n private genBoard(): LetterLoc[][] {\n let maxX = 0;\n let maxY = 0;\n\n for (const word of this.board.getWordsList()) {\n let x = word.getX();\n let y = word.getY();\n switch (word.getOrientation()) {\n case PBWord.Orientation.HORIZONTAL:\n x += word.getText().length - 1;\n break;\n case PBWord.Orientation.VERTICAL:\n y += word.getText().length - 1;\n break;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n if (maxX === 0 && maxY === 0) {\n return [[{letter: '', wordIndex: [], letterIndex: []}]];\n }\n\n const board: LetterLoc[][] = [];\n for (let i = 0; i < maxX + 1; i++) {\n board.push(new Array());\n for (let j = 0; j < maxY + 1; j++) {\n board[i].push({letter: '', wordIndex: [], letterIndex: []});\n }\n }\n\n let ii = 0;\n for (const word of this.board.getWordsList()) {\n let inc: () => void = () => { /* Blank until orientation is looked at */};\n let x = word.getX();\n let y = word.getY();\n switch (word.getOrientation()) {\n case PBWord.Orientation.HORIZONTAL:\n inc = () => x++;\n break;\n case PBWord.Orientation.VERTICAL:\n inc = () => y++;\n break;\n }\n for (let j = 0; j < word.getText().length; j++) {\n board[x][y].letter = word.getText().charAt(j);\n board[x][y].wordIndex.push(ii);\n board[x][y].letterIndex.push(j);\n inc();\n }\n ii++;\n }\n\n return board;\n }\n\n @Watch('board')\n private renderBoard() {\n this.resizeSVG();\n const board = this.dataFromBoard();\n\n const htmlGrid = (this.$refs.grid as HTMLElement);\n if (this.detached) {\n htmlGrid.classList.add('detached');\n } else {\n htmlGrid.classList.remove('detached');\n }\n\n // Set up the rows.\n const row = this.grid.selectAll('.row')\n .data(board.data);\n\n row.exit().remove();\n\n const newRows = row.enter().append('g')\n .attr('class', 'row');\n\n // Now that the rows we need exist, map each data cell to a square.\n const column = row.merge(newRows)\n .data(board.data).selectAll('.square')\n .data((d: any) => d);\n\n column.exit().remove();\n\n const cells = column.enter().append('g').attr('class', 'square');\n\n cells.append('rect');\n cells.append('text');\n\n column.merge(cells).select('rect')\n .attr('x', (d: any) => d.x)\n .attr('y', (d: any) => d.y)\n .attr('rx', board.cellRadius)\n .attr('rx', board.cellRadius)\n .attr('width', board.cellSize)\n .attr('height', board.cellSize)\n .style('fill', (d: any) => {\n if (d.invalid) {\n return '#fcc';\n }\n return '#fff';\n })\n .style('stroke', (d: any) => {\n if (d.letterLoc.letter === '') {\n return '#fff';\n }\n return '#222';\n });\n\n column.merge(cells).select('text')\n .attr('x', (d: any) => d.x + board.cellSize / 2)\n .attr('y', (d: any) => d.y + board.cellSize / 1.8)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .text((d: any) => d.letterLoc.letter)\n .style('font-size', (d: any) => {\n return board.cellSize * 0.7 + 'px';\n });\n }\n\n private dataFromBoard(): BoardData {\n const data: Cell[][] = new Array();\n\n const board = this.genBoard();\n\n const boardX = board.length;\n const boardY = board[0].length;\n\n const size = Math.min(\n (this.sizeX / boardX) - this.margin,\n (this.sizeY / boardY) - this.margin);\n\n const paddingX = this.sizeX - ((size + this.margin) * boardX);\n const paddingY = this.sizeY - ((size + this.margin) * boardY);\n\n // Start xpos and ypos at margin so the stroke will show when we make the grid\n // below.\n let xpos = this.margin / 2 + paddingX / 2;\n let ypos = this.margin / 2 + paddingY / 2;\n\n // iterate for rows\n for (let x = 0; x < boardX; x++) {\n data.push(new Array());\n for (let y = 0; y < boardY; y++) {\n data[x].push({\n x: xpos,\n y: ypos,\n letterLoc: board[x][y],\n row: x,\n column: y,\n invalid: false,\n });\n\n // Increment the Y position.\n ypos += size + this.margin;\n }\n // Reset the Y position after a column is complete.\n ypos = this.margin / 2 + paddingY / 2;\n // Increment the X position.\n xpos += size + this.margin;\n }\n\n for (const iw of this.invalidWords) {\n for (const cl of iw.getLocsList()) {\n if (cl.getX() >= data.length) {\n continue;\n }\n if (cl.getY() >= data[cl.getX()].length) {\n continue;\n }\n data[cl.getX()][cl.getY()].invalid = true;\n }\n }\n\n return {\n cellSize: size,\n cellRadius: 5,\n data,\n };\n }\n}\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoardView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoardView.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./BoardView.vue?vue&type=template&id=77f418f4&\"\nimport script from \"./BoardView.vue?vue&type=script&lang=ts&\"\nexport * from \"./BoardView.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./BoardView.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport * as grpcWeb from 'grpc-web';\n\nimport BoardView from '@/components/BoardView.vue'; // @ is an alias to /src\nimport {Game as PBGame, Board as PBBoard, ListGamesRequest,\n SpectateRequest, SpectateUpdate, CharLocs} from '@/proto/banana_pb';\n\ninterface Board {\n playerID: string;\n playerName: string;\n board: PBBoard;\n invalidWords: CharLocs[];\n detached: boolean;\n}\n\n@Component({\n components: {\n BoardView,\n },\n})\nexport default class Spectate extends Vue {\n private boards: Board[] = [];\n\n private mounted(): void {\n this.spectateGame();\n }\n\n private spectateGame(): void {\n const req = new SpectateRequest();\n req.setId(this.$route.params.id);\n\n const stream = this.$client.spectate(req, {});\n\n stream.on('data', (resp) => {\n const indexMap: { [s: string]: number; } = {};\n let i = 0;\n for (const board of this.boards) {\n indexMap[board.playerID] = i;\n i++;\n }\n\n // Game already exists, update it.\n if (indexMap.hasOwnProperty(resp.getPlayerId())) {\n Vue.set(this.boards, indexMap[resp.getPlayerId()], this.toBoard(resp));\n return;\n }\n\n // Board doesn't exist yet, add it.\n this.boards.push(this.toBoard(resp));\n });\n stream.on('error', (err: grpcWeb.Error) => {\n this.$emit('rpcError', err);\n });\n }\n\n private toBoard(resp: SpectateUpdate): Board {\n return {\n playerID: resp.getPlayerId(),\n playerName: resp.getPlayerName(),\n board: resp.getBoard(),\n invalidWords: resp.getInvalidWordsList(),\n detached: resp.getDetachedBoard(),\n };\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spectate.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spectate.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Spectate.vue?vue&type=template&id=9cf01898&scoped=true&\"\nimport script from \"./Spectate.vue?vue&type=script&lang=ts&\"\nexport * from \"./Spectate.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Spectate.vue?vue&type=style&index=0&id=9cf01898&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9cf01898\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport Router from 'vue-router';\nimport Game from './views/Game.vue';\nimport Home from './views/Home.vue';\nimport Spectate from './views/Spectate.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n name: 'home',\n component: Home,\n },\n {\n path: '/game/:id',\n name: 'game',\n component: Game,\n },\n {\n path: '/spectate/:id',\n name: 'spectate',\n component: Spectate,\n },\n ],\n});\n","import Vue from 'vue';\nimport VueCookies from 'vue-cookies';\n\nimport Buefy from 'buefy';\nimport 'buefy/dist/buefy.css';\n\nimport App from './App.vue';\nimport router from './router';\n\n\nimport {BananaServiceClient} from '@/proto/banana_pb_service';\n\nVue.use(VueCookies);\nVue.use(Buefy);\n\nVue.config.productionTip = false;\n\nVue.prototype.$client = new BananaServiceClient('');\nVue.prototype.$cookies.config(Infinity);\n\nnew Vue({\n router,\n render: (h) => h(App),\n}).$mount('#app');\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=136b73e8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=136b73e8&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UnusedLetters.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UnusedLetters.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=style&index=0&lang=css&\""],"sourceRoot":""}