{"version":3,"sources":["vendor/ember-cli/app-prefix.js","tower-defense/app.js","tower-defense/components/app-version.js","tower-defense/components/td-game/blockly-editor/component.js","tower-defense/components/td-game/blockly-editor/template.js","tower-defense/components/td-game/board/component.js","tower-defense/components/td-game/board/mob/component.js","tower-defense/components/td-game/board/mob/template.js","tower-defense/components/td-game/board/template.js","tower-defense/components/td-game/board/tower-group/component.js","tower-defense/components/td-game/board/tower-group/template.js","tower-defense/components/td-game/board/tower-group/tower/component.js","tower-defense/components/td-game/board/tower-group/tower/projectile/component.js","tower-defense/components/td-game/board/tower-group/tower/projectile/template.js","tower-defense/components/td-game/board/tower-group/tower/template.js","tower-defense/components/td-game/component.js","tower-defense/components/td-game/stylesheet/block/component.js","tower-defense/components/td-game/stylesheet/block/input/component.js","tower-defense/components/td-game/stylesheet/block/input/template.js","tower-defense/components/td-game/stylesheet/block/template.js","tower-defense/components/td-game/stylesheet/component.js","tower-defense/components/td-game/stylesheet/template.js","tower-defense/components/td-game/template.js","tower-defense/components/tool-tip.js","tower-defense/controllers/array.js","tower-defense/controllers/object.js","tower-defense/helpers/and.js","tower-defense/helpers/eq.js","tower-defense/helpers/gt.js","tower-defense/helpers/gte.js","tower-defense/helpers/is-array.js","tower-defense/helpers/lt.js","tower-defense/helpers/lte.js","tower-defense/helpers/not-eq.js","tower-defense/helpers/not.js","tower-defense/helpers/or.js","tower-defense/helpers/pluralize.js","tower-defense/helpers/singularize.js","tower-defense/helpers/xor.js","tower-defense/initializers/add-force-set.js","tower-defense/initializers/add-insertion-detection-to-components.js","tower-defense/initializers/app-version.js","tower-defense/initializers/container-debug-adapter.js","tower-defense/initializers/data-adapter.js","tower-defense/initializers/ember-data.js","tower-defense/initializers/export-application-global.js","tower-defense/initializers/extend-ember-text-field.js","tower-defense/initializers/injectStore.js","tower-defense/initializers/store.js","tower-defense/initializers/transforms.js","tower-defense/initializers/truth-helpers.js","tower-defense/instance-initializers/ember-data.js","tower-defense/mixins/google-pageview.js","tower-defense/objects/board.js","tower-defense/objects/flexbox-ref.js","tower-defense/objects/game.js","tower-defense/objects/mob.js","tower-defense/objects/path-coords.js","tower-defense/objects/projectile.js","tower-defense/objects/tower-group.js","tower-defense/objects/tower.js","tower-defense/objects/unit-code-line.js","tower-defense/objects/wave.js","tower-defense/router.js","tower-defense/services/ajax.js","tower-defense/templates/application.js","tower-defense/templates/components/tool-tip.js","tower-defense/templates/index.js","tower-defense/utils/create-flexbox-ref.js","tower-defense/utils/create-game.js","tower-defense/utils/create-unit-code-line.js","tower-defense/utils/create-wave-1.js","tower-defense/utils/create-wave-10.js","tower-defense/utils/create-wave-11.js","tower-defense/utils/create-wave-12.js","tower-defense/utils/create-wave-2.js","tower-defense/utils/create-wave-3.js","tower-defense/utils/create-wave-4.js","tower-defense/utils/create-wave-5.js","tower-defense/utils/create-wave-6.js","tower-defense/utils/create-wave-7.js","tower-defense/utils/create-wave-8.js","tower-defense/utils/create-wave-9.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["\"use strict\";\n/* jshint ignore:start */\n\n/* jshint ignore:end */\n","define('tower-defense/app', ['exports', 'ember', 'ember-resolver', 'ember/load-initializers', 'tower-defense/config/environment'], function (exports, _ember, _emberResolver, _emberLoadInitializers, _towerDefenseConfigEnvironment) {\n\n  var App = undefined;\n\n  _ember['default'].MODEL_FACTORY_INJECTIONS = true;\n\n  App = _ember['default'].Application.extend({\n    modulePrefix: _towerDefenseConfigEnvironment['default'].modulePrefix,\n    podModulePrefix: _towerDefenseConfigEnvironment['default'].podModulePrefix,\n    Resolver: _emberResolver['default']\n  });\n\n  (0, _emberLoadInitializers['default'])(App, _towerDefenseConfigEnvironment['default'].modulePrefix);\n\n  exports['default'] = App;\n});","define('tower-defense/components/app-version', ['exports', 'ember-cli-app-version/components/app-version', 'tower-defense/config/environment'], function (exports, _emberCliAppVersionComponentsAppVersion, _towerDefenseConfigEnvironment) {\n\n  var name = _towerDefenseConfigEnvironment['default'].APP.name;\n  var version = _towerDefenseConfigEnvironment['default'].APP.version;\n\n  exports['default'] = _emberCliAppVersionComponentsAppVersion['default'].extend({\n    version: version,\n    name: name\n  });\n});","define('tower-defense/components/td-game/blockly-editor/component', ['exports', 'ember'], function (exports, _ember) {\n\n  /*\n   * BlocklyEditorComponent\n   *\n   * Renders a Blockly workspace with custom CSS-Flexbox blocks.\n   * The \"Insertar código\" button injects the generated CSS string\n   * directly into the currently focused `.block__input` field,\n   * or the first empty one if nothing is focused.\n   *\n   * No changes to InputComponent needed. Uses native DOM events\n   * so Ember's existing input/blur handlers pick up the value.\n   */\n  exports['default'] = _ember['default'].Component.extend({\n\n    tagName: 'div',\n    classNames: ['blockly-editor-wrapper'],\n\n    // -------------------------------------------------------\n    // Lifecycle\n    // -------------------------------------------------------\n\n    didInsertElement: function didInsertElement() {\n      this._super.apply(this, arguments);\n      _ember['default'].run.schedule('afterRender', this, this._initBlockly);\n    },\n\n    willDestroyElement: function willDestroyElement() {\n      this._super.apply(this, arguments);\n      var ws = this.get('_workspace');\n      if (ws) {\n        ws.dispose();\n      }\n    },\n\n    // -------------------------------------------------------\n    // Blockly initialisation\n    // -------------------------------------------------------\n\n    _initBlockly: function _initBlockly() {\n      var _this = this;\n\n      this._defineBlocks();\n      this._defineGenerators();\n\n      var toolboxXml = '\\n      <xml>\\n        <block type=\"css_flex_property\"></block>\\n        <block type=\"css_order\"></block>\\n      </xml>\\n    ';\n\n      var workspace = Blockly.inject('blocklyDiv', {\n        toolbox: toolboxXml,\n        scrollbars: true,\n        trashcan: true,\n        grid: { spacing: 20, length: 3, colour: '#ddd', snap: true }\n      });\n\n      this.set('_workspace', workspace);\n\n      // Read code directly from blocks on every workspace change.\n      // IMPORTANT: use the local `workspace` variable (not Blockly.getMainWorkspace()\n      // which may return a different workspace if multiple are present).\n      workspace.addChangeListener(function () {\n        var code = _this._readCodeFromWorkspace(workspace);\n        _this.set('_generatedCode', code);\n      });\n\n      // Wire up the \"Insertar código\" button\n      var btn = document.getElementById('blockly-insert-btn');\n      if (btn) {\n        // preventDefault on mousedown keeps focus on the input field\n        btn.addEventListener('mousedown', function (e) {\n          e.preventDefault();\n        });\n        btn.addEventListener('click', function () {\n          _this._insertCode();\n        });\n      }\n    },\n\n    // Read CSS declarations directly from workspace blocks\n    // (avoids any dependency on Blockly.JavaScript generator registration)\n    _readCodeFromWorkspace: function _readCodeFromWorkspace(workspace) {\n      if (!workspace) {\n        return '';\n      }\n      var blocks = workspace.getAllBlocks();\n      var declarations = [];\n\n      blocks.forEach(function (block) {\n        if (block.type === 'css_flex_property') {\n          var prop = block.getFieldValue('PROP');\n          var val = block.getFieldValue('VAL');\n          if (prop && val) {\n            declarations.push(prop + ': ' + val + ';');\n          }\n        } else if (block.type === 'css_order') {\n          var num = block.getFieldValue('NUM');\n          if (num !== null && num !== undefined) {\n            declarations.push('order: ' + num + ';');\n          }\n        }\n      });\n\n      return declarations.join('\\n');\n    },\n\n    // -------------------------------------------------------\n    // Block & generator definitions\n    // -------------------------------------------------------\n\n    _defineBlocks: function _defineBlocks() {\n      // Block: css_flex_property\n      // Produces: \"property: value;\"\n      Blockly.Blocks['css_flex_property'] = {\n        init: function init() {\n          this.setColour(210);\n          this.setTooltip('Propiedad CSS Flexbox para el contenedor o el ítem');\n          this.appendDummyInput().appendField(new Blockly.FieldDropdown([['justify-content', 'justify-content'], ['align-items', 'align-items'], ['align-self', 'align-self'], ['flex-direction', 'flex-direction'], ['flex-wrap', 'flex-wrap']]), 'PROP').appendField(':').appendField(new Blockly.FieldDropdown([['flex-start', 'flex-start'], ['flex-end', 'flex-end'], ['center', 'center'], ['space-between', 'space-between'], ['space-around', 'space-around'], ['row', 'row'], ['row-reverse', 'row-reverse'], ['column', 'column'], ['column-reverse', 'column-reverse'], ['wrap', 'wrap'], ['nowrap', 'nowrap']]), 'VAL').appendField(';');\n          this.setNextStatement(true, null);\n          this.setPreviousStatement(true, null);\n        }\n      };\n\n      // Block: css_order\n      // Produces: \"order: N;\"\n      Blockly.Blocks['css_order'] = {\n        init: function init() {\n          this.setColour(30);\n          this.setTooltip('Propiedad \"order\" para reposicionar un ítem flex');\n          this.appendDummyInput().appendField('order :').appendField(new Blockly.FieldNumber(0, -100, 100, 1), 'NUM').appendField(';');\n          this.setNextStatement(true, null);\n          this.setPreviousStatement(true, null);\n        }\n      };\n    },\n\n    _defineGenerators: function _defineGenerators() {\n      // Ensure the generator object exists\n      if (!Blockly.JavaScript) {\n        Blockly.JavaScript = new Blockly.Generator('JavaScript');\n      }\n\n      Blockly.JavaScript['css_flex_property'] = function (block) {\n        return block.getFieldValue('PROP') + ': ' + block.getFieldValue('VAL') + ';';\n      };\n\n      Blockly.JavaScript['css_order'] = function (block) {\n        return 'order: ' + block.getFieldValue('NUM') + ';';\n      };\n    },\n\n    // -------------------------------------------------------\n    // Code injection\n    // -------------------------------------------------------\n\n    _insertCode: function _insertCode() {\n      var rawCode = this.get('_generatedCode') || '';\n      if (!rawCode) {\n        return;\n      }\n\n      // Take the first declaration\n      var declarations = rawCode.split('\\n').map(function (s) {\n        return s.trim();\n      }).filter(Boolean);\n      if (!declarations.length) {\n        return;\n      }\n\n      var value = declarations[0];\n\n      // Fire a global event that InputComponent instances listen for.\n      // Using stopImmediatePropagation inside the focused handler ensures\n      // only one InputComponent processes the event.\n      document.dispatchEvent(new CustomEvent('blockly:insert', {\n        detail: { value: value },\n        bubbles: false\n      }));\n    }\n\n  });\n});","define(\"tower-defense/components/td-game/blockly-editor/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"triple-curlies\"\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 10,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/blockly-editor/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createElement(\"div\");\n        dom.setAttribute(el1, \"class\", \"blockly-editor\");\n        var el2 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createElement(\"div\");\n        dom.setAttribute(el2, \"class\", \"blockly-editor__toolbar\");\n        var el3 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createElement(\"span\");\n        dom.setAttribute(el3, \"class\", \"blockly-editor__label\");\n        var el4 = dom.createTextNode(\"🧩 Editor Visual de CSS\");\n        dom.appendChild(el3, el4);\n        dom.appendChild(el2, el3);\n        var el3 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createElement(\"button\");\n        dom.setAttribute(el3, \"id\", \"blockly-insert-btn\");\n        dom.setAttribute(el3, \"class\", \"blockly-editor__btn\");\n        var el4 = dom.createTextNode(\"\\n      ▶ Insertar código\\n    \");\n        dom.appendChild(el3, el4);\n        dom.appendChild(el2, el3);\n        var el3 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el2, el3);\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createElement(\"div\");\n        dom.setAttribute(el2, \"id\", \"blocklyDiv\");\n        dom.setAttribute(el2, \"class\", \"blockly-editor__workspace\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes() {\n        return [];\n      },\n      statements: [],\n      locals: [],\n      templates: []\n    };\n  })());\n});","define('tower-defense/components/td-game/board/component', ['exports', 'ember'], function (exports, _ember) {\n\n  /**\n   * Basics\n   * Sound Effects\n   * Mob Basics\n   * Mob Generation\n   * Mob Modification\n   * Wave Scoring\n   * Reset\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var BoardComponent = _ember['default'].Component.extend({\n    classNames: ['td-game__board'],\n\n    waveCancelled: false,\n\n    _applyBackgroundImage: _ember['default'].on('didInsertElement', _ember['default'].observer('attrs.backgroundImage', function () {\n      this.$().css('background-image', 'url(' + this.attrs.backgroundImage + ')');\n    }))\n  });\n\n  ///////////////////////\n  //                   //\n  //   Sound Effects   //\n  //                   //\n  ///////////////////////\n\n  BoardComponent.reopen({\n    volumeSettings: ['volume-up', 'volume-down', 'volume-off'],\n\n    volumeKey: 0,\n\n    volume: _ember['default'].computed('volumeKey', function () {\n      var volumeKey = this.get('volumeKey');\n      return this.get('volumeSettings').objectAt('' + volumeKey);\n    }),\n\n    actions: {\n      toggleVolume: function toggleVolume() {\n        if (this.get('volumeKey') < 2) {\n          this.incrementProperty('volumeKey');\n        } else {\n          this.set('volumeKey', 0);\n        }\n      }\n    }\n  });\n\n  ////////////////////\n  //                //\n  //   Mob Basics   //\n  //                //\n  ////////////////////\n\n  BoardComponent.reopen({\n    mobIndex: 0,\n\n    mobs: []\n  });\n\n  ////////////////////////\n  //                    //\n  //   Mob Generation   //\n  //                    //\n  ////////////////////////\n\n  BoardComponent.reopen({\n    numMobsTerminated: 0,\n\n    _generateMobs: function _generateMobs() {\n      var _this = this;\n\n      if (this.get('waveCancelled')) {\n        this.set('waveCancelled', false);\n        return;\n      }\n\n      var mobIndex = this.get('mobIndex');\n      var currentMob = this.attrs.waveMobs.objectAt(mobIndex);\n      this.get('mobs').addObject(currentMob);\n\n      var anotherMobExists = !!this.attrs.waveMobs.objectAt(mobIndex + 1);\n      if (anotherMobExists) {\n        this.incrementProperty('mobIndex');\n\n        var mobFrequency = currentMob.get('frequency');\n        _ember['default'].run.later(this, function () {\n          if (_this.get('waveCancelled')) {\n            _this.set('waveCancelled', false);\n            return;\n          }\n\n          _this._generateMobs();\n        }, mobFrequency);\n      }\n    },\n\n    mobFrequency: _ember['default'].computed('mobIndex', function () {\n      var mobIndex = this.get('mobIndex');\n      var waveMob = this.attrs.waveMobs[mobIndex];\n      return waveMob.get('frequency');\n    }),\n\n    numMobsToTerminate: _ember['default'].computed('attrs.waveStarted', function () {\n      var firstMob = this.attrs.waveMobs.objectAt(0);\n      var firstMobExists = !!firstMob;\n      if (firstMobExists) {\n        return firstMob.get('quantity');\n      } else {\n        return 5;\n      }\n    }),\n\n    _kickOffMobGeneration: _ember['default'].observer('attrs.waveStarted', function () {\n      if (!this.attrs.waveStarted) {\n        this.set('mobIndex', 0);\n        this.set('mobs', []);\n\n        if (this.get('waveCancelled')) {\n          this.set('waveCancelled', false);\n        }\n\n        return;\n      }\n\n      this.set('numMobsTerminated', 0);\n      this._generateMobs();\n    })\n  });\n\n  //////////////////////////\n  //                      //\n  //   Mob Modification   //\n  //                      //\n  //////////////////////////\n\n  BoardComponent.reopen({\n    _reduceMobHealth: function _reduceMobHealth(mobId, healthToReduce) {\n      if (!healthToReduce) {\n        healthToReduce = 20;\n      }\n\n      this.get('mobs').forEach(function (mob) {\n        if (mobId === mob.get('id')) {\n          var currentHealth = mob.get('health');\n          mob.set('health', currentHealth - healthToReduce);\n        }\n      });\n    },\n\n    _resetMobs: _ember['default'].observer('attrs.cancellingWave', function () {\n      if (this.attrs.cancellingWave) {\n        this.set('waveCancelled', true);\n        return;\n      }\n    }),\n\n    actions: {\n      damageMob: function damageMob(mobId, attackPower) {\n        this._reduceMobHealth(mobId, attackPower);\n      },\n\n      destroyMob: function destroyMob(mob) {\n        var mobIndex = this.get('mobs').indexOf(mob);\n        this.get('mobs').removeAt(mobIndex);\n        this.incrementProperty('numMobsTerminated');\n\n        mob.set('active', false);\n      },\n\n      reportMobPosition: function reportMobPosition(mobId, axis, pos) {\n        this.get('mobs').forEach(function (mob) {\n          if (mobId === mob.get('id')) {\n            mob.set('pos' + axis, pos);\n          }\n        });\n      },\n\n      updateMobClass: function updateMobClass(mobId, newClass) {\n        this.get('mobs').forEach(function (mob) {\n          if (mobId === mob.get('id')) {\n            mob.set('posClass', newClass);\n          }\n        });\n      }\n    }\n  });\n\n  //////////////////////\n  //                  //\n  //   Wave Scoring   //\n  //                  //\n  //////////////////////\n\n  BoardComponent.reopen({\n    wavePoints: 0,\n\n    _getFinalScore: _ember['default'].observer('numMobsTerminated', function () {\n      if (this.get('numMobsTerminated') >= this.get('numMobsToTerminate')) {\n        this.attrs['score-wave'](this.get('wavePoints'));\n      }\n    }),\n\n    actions: {\n      addPoints: function addPoints(points) {\n        var currentWavePoints = this.get('wavePoints');\n\n        if (currentWavePoints + points >= 100) {\n          this.set('wavePoints', 100);\n        } else {\n          this.set('wavePoints', currentWavePoints + points);\n        }\n      }\n    }\n  });\n\n  // TODO: is this reset code necessary?\n\n  ///////////////\n  //           //\n  //   Reset   //\n  //           //\n  ///////////////\n\n  BoardComponent.reopen({\n    _resetBoard: _ember['default'].observer('attrs.waveStarted', function () {\n      if (!this.attrs.waveStarted) {\n        this.set('wavePoints', 0);\n      }\n    })\n  });\n\n  exports['default'] = BoardComponent;\n});","define('tower-defense/components/td-game/board/mob/component', ['exports', 'ember', 'tower-defense/objects/mob'], function (exports, _ember, _towerDefenseObjectsMob) {\n\n  /**\n   * Basics\n   * Movement\n   * Position Reporting\n   * Termination\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var MobComponent = _ember['default'].Component.extend({\n    classNames: ['mob'],\n\n    _getNumFromPx: function _getNumFromPx(pixels) {\n      var valWithoutPx = pixels.split('px')[0];\n      return parseInt(valWithoutPx, 10);\n    },\n\n    _getPercentageLeft: function _getPercentageLeft(leftPxStr) {\n      var leftPx = this._getNumFromPx(leftPxStr);\n      var boardWidthPx = this.$().parent().width();\n      return leftPx / boardWidthPx * 100;\n    },\n\n    _getPercentageTop: function _getPercentageTop(topPxStr) {\n      var topPx = this._getNumFromPx(topPxStr);\n      var boardHeightPx = this.$().parent().height();\n      return topPx / boardHeightPx * 100;\n    },\n\n    _setMobDimensions: _ember['default'].on('didInsertElement', function () {\n      this.$().css('width', _towerDefenseObjectsMob.mobDimensions + '%');\n      this.$().css('height', _towerDefenseObjectsMob.mobDimensions + '%');\n    }),\n\n    _updateIdSelector: _ember['default'].on('didInsertElement', function () {\n      this.$().attr('id', this.attrs.mob.get('id'));\n    })\n  });\n\n  //////////////////\n  //              //\n  //   Movement   //\n  //              //\n  //////////////////\n\n  MobComponent.reopen({\n    nextPathCoordsIndex: 1,\n\n    pathCoordsIndex: 0,\n\n    // Mob coordinates (which represent the top left of the mob) should always be\n    // a little bit above and to the left of path coordinates, so that the CENTER\n    // of the mob matches the path coordinates.\n    _getMobCoordsFromPathCoords: function _getMobCoordsFromPathCoords(pathCoords) {\n      var mobRadiusPct = _towerDefenseObjectsMob.mobDimensions / 2;\n      var mobLeftCoordPct = pathCoords.get('x') - mobRadiusPct;\n      var mobTopCoordPct = pathCoords.get('y') - mobRadiusPct;\n      return { mobXPct: mobLeftCoordPct, mobYPct: mobTopCoordPct };\n    },\n\n    _getTransitionSecs: function _getTransitionSecs(nextMobLeftPct, nextMobTopPct) {\n      var mobLeftPxStr = this.$().css('left');\n      var mobTopPxStr = this.$().css('top');\n      if (mobLeftPxStr === 'auto' || mobTopPxStr === 'auto') {\n        return 0;\n      }\n\n      var currentMobLeftPct = this._getPercentageLeft(mobLeftPxStr);\n      var currentMobTopPct = this._getPercentageTop(mobTopPxStr);\n\n      var pctDiff = Math.abs(currentMobLeftPct - nextMobLeftPct) + Math.abs(currentMobTopPct - nextMobTopPct);\n\n      return this.attrs.speed * (pctDiff / 100);\n    },\n\n    _moveMobAlongPath: function _moveMobAlongPath() {\n      var _this = this;\n\n      var nextPathCoordsIndex = this.get('nextPathCoordsIndex');\n      this.set('pathCoordsIndex', nextPathCoordsIndex);\n      this.incrementProperty('nextPathCoordsIndex');\n\n      var path = this.attrs.path;\n      var nextPathCoords = path.objectAt(nextPathCoordsIndex);\n\n      var _getMobCoordsFromPathCoords2 = this._getMobCoordsFromPathCoords(nextPathCoords);\n\n      var mobXPct = _getMobCoordsFromPathCoords2.mobXPct;\n      var mobYPct = _getMobCoordsFromPathCoords2.mobYPct;\n\n      var transitionSecs = this._getTransitionSecs(mobXPct, mobYPct);\n      this._moveMobToCoordinates(mobXPct, mobYPct, transitionSecs);\n\n      _ember['default'].run.later(this, function () {\n        if (_this.get('isDestroying')) {\n          return;\n        }\n\n        var pathLastIndex = path.get('length') - 1;\n        var morePathCoordsExist = pathLastIndex >= nextPathCoordsIndex + 1;\n        if (morePathCoordsExist) {\n          _this._moveMobAlongPath();\n        } else {\n          _this.set('endPointReached', true);\n        }\n      }, transitionSecs * 1000);\n    },\n\n    _moveMobToCoordinates: function _moveMobToCoordinates(mobXPct, mobYPct) {\n      var secs = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];\n\n      this.$().css('transition', 'all ' + secs + 's linear');\n      this.$().css('left', mobXPct + '%');\n      this.$().css('top', mobYPct + '%');\n    },\n\n    _placeMobAtStart: function _placeMobAtStart() {\n      var startingPathCoords = this.attrs.path.objectAt(0);\n\n      var _getMobCoordsFromPathCoords3 = this._getMobCoordsFromPathCoords(startingPathCoords);\n\n      var mobXPct = _getMobCoordsFromPathCoords3.mobXPct;\n      var mobYPct = _getMobCoordsFromPathCoords3.mobYPct;\n\n      this._moveMobToCoordinates(mobXPct, mobYPct);\n    },\n\n    _kickOffMovement: _ember['default'].on('didInsertElement', function () {\n      var _this2 = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        _this2._placeMobAtStart();\n        _this2._moveMobAlongPath();\n        _this2._reportPosition();\n      });\n    })\n  });\n\n  ////////////////////////////\n  //                        //\n  //   Position Reporting   //\n  //                        //\n  ////////////////////////////\n\n  MobComponent.reopen({\n    _reportPosition: function _reportPosition() {\n      var _this3 = this;\n\n      var mobRadiusPct = _towerDefenseObjectsMob.mobDimensions / 2;\n\n      var mobLeftPx = this.$().css('left');\n      var mobLeftPct = this._getPercentageLeft(mobLeftPx);\n      var pathLeftPct = mobLeftPct + mobRadiusPct;\n\n      var mobTopPx = this.$().css('top');\n      var mobTopPct = this._getPercentageTop(mobTopPx);\n      var pathTopPct = mobTopPct + mobRadiusPct;\n\n      // TODO: Will one of these ever be truthy without the other? Or either?\n      //       Not sure how this could occur.\n      if (mobLeftPct && mobTopPct) {\n        var mobId = this.attrs.mob.get('id');\n        // TODO: just send up the action ONCE with both X and Y data in it\n        this.attrs['report-position'](mobId, 'X', pathLeftPct);\n        this.attrs['report-position'](mobId, 'Y', pathTopPct);\n      }\n\n      _ember['default'].run.later(this, function () {\n        if (!_this3.get('isDestroying') && !_this3.get('endPointReached')) {\n          _this3._reportPosition();\n        }\n      }, 20);\n    }\n  });\n\n  /////////////////////\n  //                 //\n  //   Termination   //\n  //                 //\n  /////////////////////\n\n  MobComponent.reopen({\n    endPointReached: false,\n\n    healthBarClass: 'mob__health-bar--100',\n\n    _destroyMob: function _destroyMob() {\n      this.attrs['destroy-mob'](this.attrs.mob);\n    },\n\n    _checkMobStatus: _ember['default'].observer('attrs.health', 'endPointReached', function () {\n      if (this.attrs.health < 1) {\n        this.attrs['add-points'](this.attrs.mob.get('points'));\n\n        this._destroyMob();\n      } else if (this.get('endPointReached')) {\n        this._destroyMob();\n      }\n    }),\n\n    _updateHealth: _ember['default'].observer('attrs.health', function () {\n      var maxHealth = this.attrs.mob.get('maxHealth');\n      if (this.attrs.health > Math.floor(maxHealth * 0.90)) {\n        this.set('healthBarClass', 'mob__health-bar--100');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.80)) {\n        this.set('healthBarClass', 'mob__health-bar--90');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.70)) {\n        this.set('healthBarClass', 'mob__health-bar--80');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.60)) {\n        this.set('healthBarClass', 'mob__health-bar--70');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.50)) {\n        this.set('healthBarClass', 'mob__health-bar--60');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.40)) {\n        this.set('healthBarClass', 'mob__health-bar--50');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.30)) {\n        this.set('healthBarClass', 'mob__health-bar--40');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.20)) {\n        this.set('healthBarClass', 'mob__health-bar--30');\n      } else if (this.attrs.health > Math.floor(maxHealth * 0.10)) {\n        this.set('healthBarClass', 'mob__health-bar--20');\n      } else {\n        this.set('healthBarClass', 'mob__health-bar--10');\n      }\n    })\n  });\n\n  exports['default'] = MobComponent;\n});","define(\"tower-defense/components/td-game/board/mob/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"triple-curlies\"\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 4,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/board/mob/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createElement(\"div\");\n        dom.setAttribute(el1, \"class\", \"mob__health-bar-container\");\n        var el2 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createElement(\"div\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var element0 = dom.childAt(fragment, [0, 1]);\n        var morphs = new Array(1);\n        morphs[0] = dom.createAttrMorph(element0, 'class');\n        return morphs;\n      },\n      statements: [[\"attribute\", \"class\", [\"concat\", [\"mob__health-bar \", [\"get\", \"healthBarClass\", [\"loc\", [null, [2, 32], [2, 46]]]]]]]],\n      locals: [],\n      templates: []\n    };\n  })());\n});","define(\"tower-defense/components/td-game/board/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 3,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 7,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"      \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"div\");\n            dom.setAttribute(el1, \"class\", \"board__points\");\n            var el2 = dom.createTextNode(\"\\n        Puntos: \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createComment(\"\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n      \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 1, 1);\n            return morphs;\n          },\n          statements: [[\"content\", \"wavePoints\", [\"loc\", [null, [5, 16], [5, 30]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": {\n            \"name\": \"triple-curlies\"\n          },\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 1,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 13,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"board__info\");\n          var el2 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createComment(\"\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"button\");\n          dom.setAttribute(el2, \"class\", \"board__volume\");\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"i\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var element1 = dom.childAt(fragment, [1]);\n          var element2 = dom.childAt(element1, [3]);\n          var element3 = dom.childAt(element2, [1]);\n          var morphs = new Array(3);\n          morphs[0] = dom.createMorphAt(element1, 1, 1);\n          morphs[1] = dom.createElementMorph(element2);\n          morphs[2] = dom.createAttrMorph(element3, 'class');\n          return morphs;\n        },\n        statements: [[\"block\", \"if\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [3, 10], [3, 27]]]]], [], 0, null, [\"loc\", [null, [3, 4], [7, 11]]]], [\"element\", \"action\", [\"toggleVolume\"], [], [\"loc\", [null, [9, 34], [9, 59]]]], [\"attribute\", \"class\", [\"concat\", [\"fa fa-lg fa-\", [\"get\", \"volume\", [\"loc\", [null, [10, 30], [10, 36]]]]]]]],\n        locals: [],\n        templates: [child0]\n      };\n    })();\n    var child1 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 16,\n                \"column\": 2\n              },\n              \"end\": {\n                \"line\": 32,\n                \"column\": 2\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 1,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"    \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createComment(\"\");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n            return morphs;\n          },\n          statements: [[\"inline\", \"td-game/board/mob\", [], [\"add-points\", [\"subexpr\", \"action\", [\"addPoints\"], [], [\"loc\", [null, [17, 35], [17, 55]]]], \"class\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.posClass\", [\"loc\", [null, [18, 40], [18, 52]]]]], [], [\"loc\", [null, [18, 30], [18, 53]]]], \"destroy-mob\", [\"subexpr\", \"action\", [\"destroyMob\"], [], [\"loc\", [null, [19, 36], [19, 57]]]], \"mob\", [\"subexpr\", \"readonly\", [[\"get\", \"mob\", [\"loc\", [null, [20, 38], [20, 41]]]]], [], [\"loc\", [null, [20, 28], [20, 42]]]], \"number\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.number\", [\"loc\", [null, [21, 41], [21, 51]]]]], [], [\"loc\", [null, [21, 31], [21, 52]]]], \"path\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.path\", [\"loc\", [null, [22, 39], [22, 49]]]]], [], [\"loc\", [null, [22, 29], [22, 50]]]], \"points\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.points\", [\"loc\", [null, [23, 41], [23, 51]]]]], [], [\"loc\", [null, [23, 31], [23, 52]]]], \"posX\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.posX\", [\"loc\", [null, [24, 39], [24, 47]]]]], [], [\"loc\", [null, [24, 29], [24, 48]]]], \"posY\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.posY\", [\"loc\", [null, [25, 39], [25, 47]]]]], [], [\"loc\", [null, [25, 29], [25, 48]]]], \"health\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.health\", [\"loc\", [null, [26, 41], [26, 51]]]]], [], [\"loc\", [null, [26, 31], [26, 52]]]], \"speed\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.speed\", [\"loc\", [null, [27, 40], [27, 49]]]]], [], [\"loc\", [null, [27, 30], [27, 50]]]], \"type\", [\"subexpr\", \"readonly\", [[\"get\", \"mob.type\", [\"loc\", [null, [28, 39], [28, 47]]]]], [], [\"loc\", [null, [28, 29], [28, 48]]]], \"update-class\", [\"subexpr\", \"action\", [\"updateMobClass\"], [], [\"loc\", [null, [29, 37], [29, 62]]]], \"report-position\", [\"subexpr\", \"action\", [\"reportMobPosition\"], [], [\"loc\", [null, [30, 40], [30, 68]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [31, 46], [31, 63]]]]], [], [\"loc\", [null, [31, 36], [31, 64]]]]], [\"loc\", [null, [17, 4], [31, 66]]]]],\n          locals: [\"mob\"],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 15,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 33,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"each\", [[\"get\", \"mobs\", [\"loc\", [null, [16, 10], [16, 14]]]]], [], 0, null, [\"loc\", [null, [16, 2], [32, 11]]]]],\n        locals: [],\n        templates: [child0]\n      };\n    })();\n    var child2 = (function () {\n      var child0 = (function () {\n        var child0 = (function () {\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 39,\n                  \"column\": 6\n                },\n                \"end\": {\n                  \"line\": 44,\n                  \"column\": 6\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 0,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createTextNode(\"        \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createComment(\"\");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\\n        \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"div\");\n              dom.setAttribute(el1, \"class\", \"tower-group__pulse\");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var morphs = new Array(1);\n              morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n              return morphs;\n            },\n            statements: [[\"inline\", \"tool-tip\", [], [\"selector\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup.selector\", [\"loc\", [null, [40, 38], [40, 57]]]]], [], [\"loc\", [null, [40, 28], [40, 58]]]], \"type\", [\"subexpr\", \"readonly\", [\"tower-group\"], [], [\"loc\", [null, [41, 24], [41, 48]]]]], [\"loc\", [null, [40, 8], [41, 50]]]]],\n            locals: [],\n            templates: []\n          };\n        })();\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 36,\n                \"column\": 2\n              },\n              \"end\": {\n                \"line\": 46,\n                \"column\": 2\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"    \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"div\");\n            dom.setAttribute(el1, \"class\", \"board__tower-group--body\");\n            var el2 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createComment(\"\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"    \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element0 = dom.childAt(fragment, [1]);\n            var morphs = new Array(3);\n            morphs[0] = dom.createAttrMorph(element0, 'id');\n            morphs[1] = dom.createElementMorph(element0);\n            morphs[2] = dom.createMorphAt(element0, 1, 1);\n            return morphs;\n          },\n          statements: [[\"attribute\", \"id\", [\"concat\", [\"tower-group--overlay-\", [\"get\", \"towerGroup.groupNum\", [\"loc\", [null, [38, 36], [38, 55]]]]]]], [\"element\", \"action\", [[\"get\", \"attrs.select-tower-group\", [\"loc\", [null, [38, 68], [38, 92]]]], [\"get\", \"towerGroup\", [\"loc\", [null, [38, 93], [38, 103]]]]], [], [\"loc\", [null, [38, 59], [38, 105]]]], [\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"towerGroup\", [\"loc\", [null, [39, 16], [39, 26]]]], [\"get\", \"selectedTowerGroup\", [\"loc\", [null, [39, 27], [39, 45]]]]], [], [\"loc\", [null, [39, 12], [39, 46]]]]], [], 0, null, [\"loc\", [null, [39, 6], [44, 13]]]]],\n          locals: [],\n          templates: [child0]\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 35,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 65,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 1,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(2);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          morphs[1] = dom.createMorphAt(fragment, 2, 2, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          return morphs;\n        },\n        statements: [[\"block\", \"unless\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [36, 12], [36, 29]]]]], [], 0, null, [\"loc\", [null, [36, 2], [46, 13]]]], [\"inline\", \"td-game/board/tower-group\", [], [\"add-colliding-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.add-colliding-tower\", [\"loc\", [null, [48, 58], [48, 83]]]]], [], [\"loc\", [null, [48, 50], [48, 84]]]], \"allTowers\", [\"subexpr\", \"readonly\", [[\"get\", \"towers\", [\"loc\", [null, [49, 50], [49, 56]]]]], [], [\"loc\", [null, [49, 40], [49, 57]]]], \"damage-mob\", [\"subexpr\", \"action\", [\"damageMob\"], [], [\"loc\", [null, [50, 41], [50, 61]]]], \"groupNum\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup.groupNum\", [\"loc\", [null, [51, 49], [51, 68]]]]], [], [\"loc\", [null, [51, 39], [51, 69]]]], \"mobs\", [\"subexpr\", \"readonly\", [[\"get\", \"mobs\", [\"loc\", [null, [52, 45], [52, 49]]]]], [], [\"loc\", [null, [52, 35], [52, 50]]]], \"numRows\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup.numRows\", [\"loc\", [null, [53, 48], [53, 66]]]]], [], [\"loc\", [null, [53, 38], [53, 67]]]], \"path\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.path\", [\"loc\", [null, [54, 45], [54, 55]]]]], [], [\"loc\", [null, [54, 35], [54, 56]]]], \"posY\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup.posY\", [\"loc\", [null, [55, 45], [55, 60]]]]], [], [\"loc\", [null, [55, 35], [55, 61]]]], \"remove-colliding-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.remove-colliding-tower\", [\"loc\", [null, [56, 61], [56, 89]]]]], [], [\"loc\", [null, [56, 53], [56, 90]]]], \"report-tower-position\", [\"subexpr\", \"action\", [[\"get\", \"attrs.report-tower-position\", [\"loc\", [null, [57, 60], [57, 87]]]]], [], [\"loc\", [null, [57, 52], [57, 88]]]], \"select\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower-group\", [\"loc\", [null, [58, 45], [58, 69]]]], [\"get\", \"towerGroup\", [\"loc\", [null, [58, 70], [58, 80]]]]], [], [\"loc\", [null, [58, 37], [58, 81]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTower\", [\"loc\", [null, [59, 54], [59, 67]]]]], [], [\"loc\", [null, [59, 44], [59, 68]]]], \"selectedTowerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTowerGroup\", [\"loc\", [null, [60, 59], [60, 77]]]]], [], [\"loc\", [null, [60, 49], [60, 78]]]], \"select-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower\", [\"loc\", [null, [61, 51], [61, 69]]]]], [], [\"loc\", [null, [61, 43], [61, 70]]]], \"towerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup\", [\"loc\", [null, [62, 51], [62, 61]]]]], [], [\"loc\", [null, [62, 41], [62, 62]]]], \"volumeKey\", [\"subexpr\", \"readonly\", [[\"get\", \"volumeKey\", [\"loc\", [null, [63, 50], [63, 59]]]]], [], [\"loc\", [null, [63, 40], [63, 60]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [64, 52], [64, 69]]]]], [], [\"loc\", [null, [64, 42], [64, 70]]]]], [\"loc\", [null, [48, 2], [64, 72]]]]],\n        locals: [\"towerGroup\"],\n        templates: [child0]\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\", \"multiple-nodes\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 66,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/board/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(3);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        morphs[1] = dom.createMorphAt(fragment, 2, 2, contextualElement);\n        morphs[2] = dom.createMorphAt(fragment, 4, 4, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"unless\", [[\"get\", \"attrs.overlayShown\", [\"loc\", [null, [1, 10], [1, 28]]]]], [], 0, null, [\"loc\", [null, [1, 0], [13, 11]]]], [\"block\", \"if\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [15, 6], [15, 23]]]]], [], 1, null, [\"loc\", [null, [15, 0], [33, 7]]]], [\"block\", \"each\", [[\"get\", \"attrs.towerGroups\", [\"loc\", [null, [35, 8], [35, 25]]]]], [], 2, null, [\"loc\", [null, [35, 0], [65, 9]]]]],\n      locals: [],\n      templates: [child0, child1, child2]\n    };\n  })());\n});","define('tower-defense/components/td-game/board/tower-group/component', ['exports', 'ember', 'tower-defense/objects/board', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower'], function (exports, _ember, _towerDefenseObjectsBoard, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower) {\n\n  /**\n   * Basics\n   * Code Line Management\n   * Sizing\n   * Selection\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var TowerGroupComponent = _ember['default'].Component.extend({\n    classNameBindings: ['selected:board__tower-group--selected'],\n\n    classNames: ['board__tower-group'],\n\n    _setElementId: _ember['default'].on('init', function () {\n      this.set('elementId', 'board__tower-group-' + this.attrs.groupNum);\n    })\n  });\n\n  //////////////////////////////\n  //                          //\n  //   Code Line Management   //\n  //                          //\n  //////////////////////////////\n\n  TowerGroupComponent.reopen({\n    _clearPreviousStyles: function _clearPreviousStyles() {\n      this.$().css('align-items', 'initial');\n      this.$().css('flex-direction', 'initial');\n      this.$().css('justify-content', 'initial');\n    },\n\n    _getProperty: function _getProperty(codeLine) {\n      var codeLineLowerCase = codeLine.toLowerCase();\n      var colonLocation = codeLineLowerCase.indexOf(':');\n\n      return codeLineLowerCase.substring(0, colonLocation);\n    },\n\n    _getValue: function _getValue(codeLine, property) {\n      var startIndex = property.length + 1;\n      var endIndex = codeLine.length;\n      return codeLine.substring(startIndex, endIndex).trim();\n    },\n\n    _getValueWithoutSemiColon: function _getValueWithoutSemiColon(val) {\n      var lastIndex = val.length - 1;\n      if (val[lastIndex] === ';') {\n        return val.substring(0, lastIndex);\n      }\n    },\n\n    _styleFound: function _styleFound(styleNeedle) {\n      if (!styleNeedle) {\n        return;\n      }\n\n      var styleApplicable = false;\n      styleNeedle = styleNeedle.replace(/ /g, '');\n      var towerGroupStyles = this.attrs.towerGroup.get('styles');\n\n      if (towerGroupStyles) {\n        towerGroupStyles.forEach(function (styleHaystack) {\n          if (styleHaystack.get('codeLine')) {\n            var styleNoWhitespace = styleHaystack.get('codeLine').replace(/ /g, '');\n            styleHaystack.set('codeLine', styleNoWhitespace);\n\n            if (styleHaystack.get('codeLine') === styleNeedle) {\n              styleApplicable = true;\n            }\n          }\n        });\n      }\n\n      return styleApplicable;\n    },\n\n    _applyCodeLines: _ember['default'].observer('attrs.towerGroup.styles', 'attrs.towerGroup.styles.[]', 'attrs.towerGroup.styles.length', 'attrs.towerGroup.styles.@each.codeLine', 'attrs.towerGroup.styles.@each.submitted', function () {\n      var _this = this;\n\n      var styles = this.attrs.towerGroup.get('styles');\n      var styleFound = !!styles && styles.get('length') > 0;\n\n      var codeLineEmpty = true;\n      if (styleFound) {\n        var firstCodeLine = styles.get('firstObject');\n\n        var codeLineLength = firstCodeLine.get('codeLine.length');\n        codeLineEmpty = isNaN(codeLineLength) || codeLineLength < 1;\n      }\n\n      this._clearPreviousStyles();\n      if (!styleFound || codeLineEmpty) {\n        return;\n      }\n\n      styles.forEach(function (style) {\n        var codeLine = style.get('codeLine');\n\n        if (_this._styleFound(codeLine)) {\n          var property = _this._getProperty(codeLine);\n          var value = _this._getValue(codeLine, property);\n\n          if (property && value && style.get('valid')) {\n            var valueIsColumnOrCReverse = value === 'column;' || value === 'column-reverse;';\n\n            // NOTE: 'flexDirectionAllowed' is a misnomer; we are not checking\n            //       for the flex-direction property but rather for its value.\n            //       Accordingly, this variable and the towerGroup property it\n            //       references should be changed to something like\n            //       'flexDirectionColOrColReverse' for clarity's sake.\n            var flexDirectionAllowed = _this.attrs.towerGroup.get('flexDirectionAllowed');\n            if (valueIsColumnOrCReverse && !flexDirectionAllowed) {\n              return;\n            }\n\n            var semicolonFound = value[value.length - 1] === ';';\n\n            if (semicolonFound) {\n              _this.$().css(property, _this._getValueWithoutSemiColon(value));\n            } else {\n              _this.$().css(property, value);\n            }\n          }\n        }\n      });\n    })\n  });\n\n  ////////////////\n  //            //\n  //   Sizing   //\n  //            //\n  ////////////////\n\n  TowerGroupComponent.reopen({\n    stylesInitialized: false,\n\n    _setHeight: function _setHeight() {\n      var numRows = this.attrs.towerGroup.get('numRows');\n      var heightPct = _towerDefenseObjectsTower.towerDimensions * numRows + _towerDefenseObjectsTowerGroup.spaceBetweenTowersPct * 2 + _towerDefenseObjectsTowerGroup.spaceBetweenTowersPct * (numRows - 1);\n      this.$().css('height', heightPct + '%');\n      this.$('.board__tower-group--body').css('height', heightPct + '%');\n\n      this.get('$groupOverlay').css('height', heightPct + '%');\n    },\n\n    _setPadding: function _setPadding() {\n      this.$().css('padding', _towerDefenseObjectsTowerGroup.spaceBetweenTowersPct + '%');\n    },\n\n    _setPosition: function _setPosition() {\n      var offsetTopPx = this.$().offset().top;\n      var boardHeightVal = _ember['default'].$('.td-game__board').css('height');\n      var boardHeightPxStr = boardHeightVal.split('px')[0];\n      var boardHeightPx = parseInt(boardHeightPxStr, 10);\n      var offsetTopPct = offsetTopPx / boardHeightPx * 100;\n\n      this.$().css('margin-left', _towerDefenseObjectsBoard.boardPaddingPct + '%');\n      this.$().css('margin-top', this.attrs.posY - offsetTopPct + '%');\n\n      this.get('$groupOverlay').css('top', this.attrs.posY + '%');\n      this.get('$groupOverlay').css('left', _towerDefenseObjectsBoard.boardPaddingPct + '%');\n    },\n\n    _setWidth: function _setWidth() {\n      var width = 100 - _towerDefenseObjectsBoard.boardPaddingPct * 2;\n      this.$().css('width', width + '%');\n      this.$('.board__tower-group--body').css('width', width + '%');\n\n      this.get('$groupOverlay').css('width', width + '%');\n    },\n\n    $groupOverlay: _ember['default'].computed(function () {\n      var groupNum = this.attrs.groupNum;\n      return _ember['default'].$('#tower-group--overlay-' + groupNum);\n    }),\n\n    _initializeStyles: _ember['default'].on('didInsertElement', function () {\n      var _this2 = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        _this2._setHeight();\n        _this2._setPadding();\n        _this2._setWidth();\n        _this2._setPosition();\n\n        _this2.$('.board__tower-group--body').css('top', _this2.attrs.posY + '%');\n        _this2.$('.board__tower-group--body').css('left', _towerDefenseObjectsBoard.boardPaddingPct + '%');\n\n        _this2.set('stylesInitialized', true);\n      });\n    })\n  });\n\n  ///////////////////\n  //               //\n  //   Selection   //\n  //               //\n  ///////////////////\n\n  TowerGroupComponent.reopen({\n    selected: _ember['default'].computed('attrs.selectedTowerGroup', 'attrs.towerGroup', 'attrs.waveStarted', function () {\n      if (!this.attrs.waveStarted) {\n        return this.attrs.selectedTowerGroup === this.attrs.towerGroup ? true : false;\n      } else {\n        return false;\n      }\n    }),\n\n    _handleClick: _ember['default'].on('click', function (clickEvent) {\n      var $clickedEl = _ember['default'].$(clickEvent.target);\n      var $towerParents = $clickedEl.parents('.tower-group__tower');\n      var isChildOfTower = $towerParents.length > 0;\n      if (!isChildOfTower) {\n        this.attrs.select();\n      }\n    })\n  });\n\n  exports['default'] = TowerGroupComponent;\n});","define(\"tower-defense/components/td-game/board/tower-group/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": {\n            \"name\": \"missing-wrapper\",\n            \"problems\": [\"wrong-type\"]\n          },\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 1,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 19,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/tower-group/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 1,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n          return morphs;\n        },\n        statements: [[\"inline\", \"td-game/board/tower-group/tower\", [], [\"add-colliding-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.add-colliding-tower\", [\"loc\", [null, [2, 64], [2, 89]]]]], [], [\"loc\", [null, [2, 56], [2, 90]]]], \"damage-mob\", [\"subexpr\", \"action\", [[\"get\", \"attrs.damage-mob\", [\"loc\", [null, [3, 55], [3, 71]]]]], [], [\"loc\", [null, [3, 47], [3, 72]]]], \"mobs\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.mobs\", [\"loc\", [null, [4, 51], [4, 61]]]]], [], [\"loc\", [null, [4, 41], [4, 62]]]], \"path\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.path\", [\"loc\", [null, [5, 51], [5, 61]]]]], [], [\"loc\", [null, [5, 41], [5, 62]]]], \"remove-colliding-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.remove-colliding-tower\", [\"loc\", [null, [6, 67], [6, 95]]]]], [], [\"loc\", [null, [6, 59], [6, 96]]]], \"report-tower-position\", [\"subexpr\", \"action\", [[\"get\", \"attrs.report-tower-position\", [\"loc\", [null, [7, 66], [7, 93]]]]], [], [\"loc\", [null, [7, 58], [7, 94]]]], \"select\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower\", [\"loc\", [null, [8, 51], [8, 69]]]], [\"get\", \"tower\", [\"loc\", [null, [8, 70], [8, 75]]]]], [], [\"loc\", [null, [8, 43], [8, 76]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTower\", [\"loc\", [null, [9, 60], [9, 73]]]]], [], [\"loc\", [null, [9, 50], [9, 74]]]], \"stylesInitialized\", [\"subexpr\", \"readonly\", [[\"get\", \"stylesInitialized\", [\"loc\", [null, [10, 64], [10, 81]]]]], [], [\"loc\", [null, [10, 54], [10, 82]]]], \"towerGroupStyles\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.towerGroup.styles\", [\"loc\", [null, [11, 63], [11, 86]]]]], [], [\"loc\", [null, [11, 53], [11, 87]]]], \"tower\", [\"subexpr\", \"readonly\", [[\"get\", \"tower\", [\"loc\", [null, [12, 52], [12, 57]]]]], [], [\"loc\", [null, [12, 42], [12, 58]]]], \"towerAttackRange\", [\"subexpr\", \"readonly\", [[\"get\", \"tower.attackRange\", [\"loc\", [null, [13, 63], [13, 80]]]]], [], [\"loc\", [null, [13, 53], [13, 81]]]], \"towerAttackPower\", [\"subexpr\", \"readonly\", [[\"get\", \"tower.attackPower\", [\"loc\", [null, [14, 63], [14, 80]]]]], [], [\"loc\", [null, [14, 53], [14, 81]]]], \"towerId\", [\"subexpr\", \"readonly\", [[\"get\", \"tower.id\", [\"loc\", [null, [15, 54], [15, 62]]]]], [], [\"loc\", [null, [15, 44], [15, 63]]]], \"type\", [\"subexpr\", \"readonly\", [[\"get\", \"tower.type\", [\"loc\", [null, [16, 51], [16, 61]]]]], [], [\"loc\", [null, [16, 41], [16, 62]]]], \"volumeKey\", [\"subexpr\", \"readonly\", [[\"get\", \"volumeKey\", [\"loc\", [null, [17, 56], [17, 65]]]]], [], [\"loc\", [null, [17, 46], [17, 66]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [18, 58], [18, 75]]]]], [], [\"loc\", [null, [18, 48], [18, 76]]]]], [\"loc\", [null, [2, 2], [18, 78]]]]],\n        locals: [\"tower\"],\n        templates: []\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 20,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/board/tower-group/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"each\", [[\"get\", \"attrs.towerGroup.towers\", [\"loc\", [null, [1, 8], [1, 31]]]]], [], 0, null, [\"loc\", [null, [1, 0], [19, 9]]]]],\n      locals: [],\n      templates: [child0]\n    };\n  })());\n});","define('tower-defense/components/td-game/board/tower-group/tower/component', ['exports', 'ember', 'tower-defense/objects/projectile', 'tower-defense/objects/board', 'tower-defense/objects/tower'], function (exports, _ember, _towerDefenseObjectsProjectile, _towerDefenseObjectsBoard, _towerDefenseObjectsTower) {\n\n  /**\n   * Basics\n   * Upgrade Management\n   * Tower Selection\n   * Code Line Management\n   * Position Management\n   * Path Collision Detection\n   * Sizing\n   * Rotation (facing targets)\n   * Targeting\n   * Projectiles\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var TowerComponent = _ember['default'].Component.extend({\n    classNames: ['tower-group__tower']\n  });\n\n  ////////////////////////////\n  //                        //\n  //   Upgrade Management   //\n  //                        //\n  ////////////////////////////\n\n  TowerComponent.reopen({\n    classNameBindings: ['towerUpgraded:tower-group__tower--upgraded'],\n\n    towerUpgraded: false,\n\n    _applyTowerType: _ember['default'].on('didInsertElement', function () {\n      var _this = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        if (_this.attrs.type === 2) {\n          _this.set('towerUpgraded', true);\n        }\n      });\n    })\n  });\n\n  /////////////////////////\n  //                     //\n  //   Tower Selection   //\n  //                     //\n  /////////////////////////\n\n  TowerComponent.reopen({\n    classNameBindings: ['selected:tower-group__tower--selected'],\n\n    selected: _ember['default'].computed('attrs.selectedTower', 'attrs.tower', 'attrs.waveStarted', function () {\n      if (!this.attrs.waveStarted) {\n        return this.attrs.selectedTower === this.attrs.tower ? true : false;\n      } else {\n        return false;\n      }\n    }),\n\n    _handleClick: _ember['default'].on('click', function () {\n      this.attrs.select();\n    })\n  });\n\n  //////////////////////////////\n  //                          //\n  //   Code Line Management   //\n  //                          //\n  //////////////////////////////\n\n  TowerComponent.reopen({\n    _clearPreviousStyles: function _clearPreviousStyles() {\n      this.$().css('align-self', 'initial');\n      this.$().css('order', 'initial');\n    },\n\n    _getProperty: function _getProperty(codeLine) {\n      var codeLineLowerCase = codeLine.toLowerCase();\n      var colonLocation = codeLineLowerCase.indexOf(':');\n\n      return codeLineLowerCase.substring(0, colonLocation);\n    },\n\n    _getValue: function _getValue(codeLine, property) {\n      var startIndex = property.length + 1;\n      var endIndex = codeLine.length;\n      return codeLine.substring(startIndex, endIndex).trim();\n    },\n\n    _getValueWithoutSemiColon: function _getValueWithoutSemiColon(val) {\n      var lastIndex = val.length - 1;\n      if (val[lastIndex] === ';') {\n        return val.substring(0, lastIndex);\n      }\n    },\n\n    _styleFound: function _styleFound(styleNeedle) {\n      if (!styleNeedle) {\n        return;\n      }\n\n      var styleApplicable = false;\n      styleNeedle = styleNeedle.replace(/ /g, '');\n      var towerStyles = this.attrs.tower.get('styles');\n\n      if (towerStyles) {\n        towerStyles.forEach(function (styleHaystack) {\n          if (styleHaystack.get('codeLine')) {\n            var styleNoWhitespace = styleHaystack.get('codeLine').replace(/ /g, '');\n            styleHaystack.set('codeLine', styleNoWhitespace);\n\n            if (styleHaystack.get('codeLine') === styleNeedle) {\n              styleApplicable = true;\n            }\n          }\n        });\n      }\n\n      return styleApplicable;\n    },\n\n    _updateCodeLines: _ember['default'].observer('attrs.tower.styles', 'attrs.tower.styles.[]', 'attrs.tower.styles.length', 'attrs.tower.styles.@each.codeLine', 'attrs.tower.styles.@each.submitted', function () {\n      var _this2 = this;\n\n      var styles = this.attrs.tower.get('styles');\n      var styleFound = !!styles && styles.get('length') > 0;\n\n      var codeLineEmpty = true;\n      if (styleFound) {\n        var firstCodeLine = styles.get('firstObject');\n\n        var codeLineLength = firstCodeLine.get('codeLine.length');\n        codeLineEmpty = isNaN(codeLineLength) || codeLineLength < 1;\n      }\n\n      this._clearPreviousStyles();\n      if (!styleFound || codeLineEmpty) {\n        this.incrementProperty('positionChangeCount');\n        return;\n      }\n\n      styles.forEach(function (style) {\n        var codeLine = style.get('codeLine');\n\n        if (_this2._styleFound(codeLine)) {\n          var property = _this2._getProperty(codeLine);\n          var value = _this2._getValue(codeLine, property);\n\n          if (property && value && style.get('valid')) {\n            var semicolonFound = value[value.length - 1] === ';';\n\n            if (semicolonFound) {\n              _this2.$().css(property, _this2._getValueWithoutSemiColon(value));\n              _this2.incrementProperty('positionChangeCount');\n            } else {\n              _this2.$().css(property, value);\n              _this2.incrementProperty('positionChangeCount');\n            }\n          }\n        }\n      });\n    })\n  });\n\n  /////////////////////////////\n  //                         //\n  //   Position Management   //\n  //                         //\n  /////////////////////////////\n\n  TowerComponent.reopen({\n    // This must be manually incremented each time a tower style is applied (e.g.\n    // via this.incrementProperty('positionChangeCount'), as found at the end of\n    // this._updateCodeLines() above). Otherwise, centerLeftPct and centerTopPct\n    // won't wait for the jQuery positional updates at the end of\n    // this._updateCodeLines(), since each of these functions are triggered by\n    // many of the same properties.\n    positionChangeCount: 0,\n\n    // the % distance the center of the tower is from the left of the board\n    centerLeftPct: _ember['default'].computed('attrs.stylesInitialized', 'attrs.towerGroupStyles.[]', 'attrs.towerGroupStyles.@each.codeLine', 'attrs.towerGroupStyles.@each.submitted', 'attrs.tower.styles.[]', 'attrs.tower.styles.@each.codeLine', 'attrs.tower.styles.@each.submitted', 'elementInserted', 'positionChangeCount', function () {\n      if (!this.get('elementInserted')) {\n        return null;\n      }\n\n      var $board = _ember['default'].$('.td-game__board');\n      var boardLeftEdgePxFromPage = $board.offset().left;\n\n      var $tower = this.$();\n      var towerLeftEdgePxFromPage = $tower.offset().left;\n\n      var towerLeftEdgePxFromBoard = towerLeftEdgePxFromPage - boardLeftEdgePxFromPage;\n      var towerCenterPxFromBoard = towerLeftEdgePxFromBoard;\n\n      var towerRadiusPct = _towerDefenseObjectsTower.towerDimensions / 2;\n      var boardDimensionsPx = $board.innerHeight(); // height === width\n      return Math.floor(100 * (towerCenterPxFromBoard / boardDimensionsPx)) + towerRadiusPct;\n    }),\n\n    // the % distance the center of the tower is from the top of the board\n    centerTopPct: _ember['default'].computed('attrs.stylesInitialized', 'attrs.towerGroupStyles.[]', 'attrs.towerGroupStyles.@each.codeLine', 'attrs.towerGroupStyles.@each.submitted', 'attrs.tower.styles.[]', 'attrs.tower.styles.@each.codeLine', 'attrs.tower.styles.@each.submitted', 'elementInserted', 'positionChangeCount', function () {\n      if (!this.get('elementInserted')) {\n        return null;\n      }\n\n      var $board = _ember['default'].$('.td-game__board');\n      var boardTopEdgePxFromPage = $board.offset().top;\n\n      var $tower = this.$();\n      var towerTopEdgePxFromPage = $tower.offset().top;\n\n      var towerTopEdgePxFromBoard = towerTopEdgePxFromPage - boardTopEdgePxFromPage;\n      var towerCenterPxFromBoard = towerTopEdgePxFromBoard;\n\n      var towerRadiusPct = _towerDefenseObjectsTower.towerDimensions / 2;\n      var boardDimensionsPx = $board.innerHeight(); // height === width\n      return Math.floor(100 * (towerCenterPxFromBoard / boardDimensionsPx)) + towerRadiusPct;\n    }),\n\n    _reportPosition: _ember['default'].observer('centerLeftPct', 'centerTopPct', function () {\n      var towerId = this.attrs.tower.get('id');\n      var centerLeftPct = this.get('centerLeftPct');\n      var centerTopPct = this.get('centerTopPct');\n      this.attrs['report-tower-position'](towerId, 'X', centerLeftPct);\n      this.attrs['report-tower-position'](towerId, 'Y', centerTopPct);\n    })\n  });\n\n  //////////////////////////////////\n  //                              //\n  //   Path Collision Detection   //\n  //                              //\n  //////////////////////////////////\n\n  TowerComponent.reopen({\n    classNameBindings: ['collidesWithPath:tower--colliding'],\n\n    collidesWithPath: _ember['default'].computed('attrs.path.[]', 'elementInserted', 'centerLeftPct', 'centerTopPct', function () {\n      var _this3 = this;\n\n      if (!this.get('elementInserted')) {\n        return false;\n      }\n\n      var towerLeftPct = this.get('centerLeftPct');\n      var towerTopPct = this.get('centerTopPct');\n      var towerRadius = _towerDefenseObjectsTower.towerDimensions / 2;\n      var pathRadius = _towerDefenseObjectsBoard.pathWidth / 2;\n\n      // The path is an array of points, and if you draw a line from one point\n      // to the next, you have created a \"segment\". This function loops through\n      // each of the points, creates a segment, and checks to see if tower\n      // intersects the segment.\n      return this.attrs.path.any(function (pathCoords, index) {\n        var nextCoords = _this3.attrs.path.objectAt(index + 1);\n        if (!nextCoords) {\n          return false;\n        }\n\n        var pathCoordsX = pathCoords.get('x');\n        var nextCoordsX = nextCoords.get('x');\n        var lowestPathLeftPct = Math.min(pathCoordsX, nextCoordsX) - pathRadius;\n        var highestPathLeftPct = Math.max(pathCoordsX, nextCoordsX) + pathRadius;\n        var xIntersects = towerLeftPct + towerRadius >= lowestPathLeftPct && towerLeftPct - towerRadius <= highestPathLeftPct;\n        if (!xIntersects) {\n          return false;\n        }\n\n        var pathCoordsY = pathCoords.get('y');\n        var nextCoordsY = nextCoords.get('y');\n        var lowestPathTopPct = Math.min(pathCoordsY, nextCoordsY) - pathRadius;\n        var highestPathTopPct = Math.max(pathCoordsY, nextCoordsY) + pathRadius;\n        var yIntersects = towerTopPct + towerRadius >= lowestPathTopPct && towerTopPct - towerRadius <= highestPathTopPct;\n        return yIntersects;\n      });\n    }),\n\n    _updateTowersColliding: _ember['default'].observer('collidesWithPath', function () {\n      var collisionAction = this.get('collidesWithPath') ? 'add-colliding-tower' : 'remove-colliding-tower';\n      this.attrs[collisionAction](this.attrs.tower.get('id'));\n    })\n  });\n\n  ////////////////\n  //            //\n  //   Sizing   //\n  //            //\n  ////////////////\n\n  TowerComponent.reopen({\n    resizeFn: null, // will be set to a function that we call on window resize\n\n    _setTowerDimensions: _ember['default'].on('didInsertElement', function () {\n      var $board = _ember['default'].$('.td-game__board');\n      var boardDimensions = $board.width(); // width === height\n      var towerDimensionsPx = _towerDefenseObjectsTower.towerDimensions / 100 * boardDimensions;\n      this.$().css('width', towerDimensionsPx);\n      this.$().css('height', towerDimensionsPx);\n\n      // the tower's cannon forms a rectangle using the following border styles\n      _ember['default'].$('.turret__cannon').css({\n        'height': towerDimensionsPx / 2 + 'px',\n        'width': towerDimensionsPx / 4 + 'px '\n      });\n    }),\n\n    _stopWatchingWindowResize: _ember['default'].on('willDestroyElement', function () {\n      _ember['default'].$(window).off('resize', this.get('resizeFn'));\n    }),\n\n    _updateDimensionsOnWindowResize: _ember['default'].on('didInsertElement', function () {\n      var _this4 = this;\n\n      var resizeFn = _ember['default'].run.bind(this, '_setTowerDimensions');\n      _ember['default'].$(window).on('resize', resizeFn);\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        _this4.set('resizeFn', resizeFn);\n      });\n    })\n  });\n\n  ///////////////////////////////////\n  //                               //\n  //   Rotation (Facing Targets)   //\n  //                               //\n  ///////////////////////////////////\n\n  TowerComponent.reopen({\n    // facingTarget: false,\n\n    _getNumFromPx: function _getNumFromPx(pixels) {\n      if (!pixels) {\n        return undefined;\n      }\n\n      var valWithoutPx = pixels.split('px')[0];\n      return parseInt(valWithoutPx, 10);\n    },\n\n    _getTargetPercentageLeft: function _getTargetPercentageLeft() {\n      var leftPxStr = _ember['default'].$('#' + this.attrs.tower.get('targetId')).css('left');\n      var leftPx = this._getNumFromPx(leftPxStr);\n      var boardWidthPx = _ember['default'].$('.td-game__board').width();\n      return leftPx / boardWidthPx * 100;\n    },\n\n    _getTargetPercentageTop: function _getTargetPercentageTop() {\n      var topPxStr = _ember['default'].$('#' + this.attrs.tower.get('targetId')).css('top');\n      var topPx = this._getNumFromPx(topPxStr);\n      var boardHeightPx = _ember['default'].$('.td-game__board').height();\n      return topPx / boardHeightPx * 100;\n    },\n\n    _faceTarget: _ember['default'].observer('targetId', function () {\n      var _this5 = this;\n\n      if (!this.attrs.waveStarted || !this.get('targetId') || this.get('towerUpgraded')) {\n        return;\n      }\n\n      var target = this._getMobById(this.get('targetId'));\n      if (!target) {\n        this.set('targetId', null);\n        return;\n      }\n\n      var targetLeftPct = target.get('posX');\n      var targetTopPct = target.get('posY');\n\n      // find the target's position relative to this tower\n      // e.g. given a tower position of [1,1] and a target position of [3,3], the\n      //      relative target position would be [2, -2]\n      var relTargetPctLeft = targetLeftPct - this.get('centerLeftPct');\n      var relTargetPctTop = this.get('centerTopPct') - targetTopPct;\n\n      var rotationDegrees = Math.atan2(relTargetPctLeft, relTargetPctTop) / Math.PI * 180;\n\n      this.$('.tower__body').css({ '-webkit-transform': 'rotate(' + rotationDegrees + 'deg)',\n        '-moz-transform': 'rotate(' + rotationDegrees + 'deg)',\n        '-ms-transform': 'rotate(' + rotationDegrees + 'deg)',\n        'transform': 'rotate(' + rotationDegrees + 'deg)' });\n\n      _ember['default'].run.later(this, function () {\n        if (!_this5.get('isDestroying')) {\n          _this5._faceTarget();\n        }\n      }, 50);\n    }),\n\n    _startSpinning: _ember['default'].observer('attrs.waveStarted', function () {\n      if (this.get('towerUpgraded') && this.attrs.waveStarted) {\n        this.$('.tower__body').css({ '-webkit-animation': 'rotating 2s linear infinite',\n          '-moz-animation': 'rotating 2s linear infinite',\n          '-ms-animation': 'rotating 2s linear infinite',\n          '-o-animation': 'rotating 2s linear infinite',\n          'animation': 'rotating 2s linear infinite' });\n      }\n    })\n  });\n\n  ///////////////////\n  //               //\n  //   Targeting   //\n  //               //\n  ///////////////////\n\n  TowerComponent.reopen({\n    targetId: null,\n\n    _attackMobsInRange: function _attackMobsInRange() {\n      var _this6 = this;\n\n      if (this.attrs.mobs.length < 1) {\n        return;\n      }\n\n      var range = this.attrs.towerAttackRange;\n      var towerHasShot = false;\n      this.attrs.mobs.forEach(function (mob) {\n        var mobInRange = _this6._mobInRange(mob, range);\n        var mobAlive = mob.get('health') > 0;\n\n        if (mobInRange && mobAlive && !towerHasShot) {\n          if (!_this6.get('towerUpgraded')) {\n            towerHasShot = true;\n          }\n\n          var mobId = mob.get('id');\n          _this6.set('targetId', mobId);\n          _this6._buildProjectile(mobId);\n        }\n      });\n\n      if (!towerHasShot) {\n        this.set('targetId', null);\n      }\n\n      _ember['default'].run.later(this, function () {\n        if (!_this6.get('isDestroying') && _this6.attrs.waveStarted) {\n          _this6._attackMobsInRange();\n        }\n      }, this.get('towerUpgraded') ? 1500 : 500);\n    },\n\n    _getTargetDistance: function _getTargetDistance(target) {\n      var tower = this.attrs.tower;\n      var latDiff = Math.abs(tower.get('posX') - target.get('posX'));\n      var lngDiff = Math.abs(tower.get('posY') - target.get('posY'));\n      return latDiff + lngDiff;\n    },\n\n    _mobInRange: function _mobInRange(mob, range) {\n      if (!mob) {\n        return false;\n      }\n\n      return this._getTargetDistance(mob) < range ? true : false;\n    },\n\n    _beginAttackingMobsInRange: _ember['default'].observer('attrs.waveStarted', function () {\n      if (this.attrs.waveStarted) {\n        this._attackMobsInRange();\n      }\n    })\n  });\n\n  /////////////////////\n  //                 //\n  //   Projectiles   //\n  //                 //\n  /////////////////////\n\n  TowerComponent.reopen({\n    _buildProjectile: function _buildProjectile(mobId) {\n      var targetedMob = this._getMobById(mobId);\n      if (targetedMob) {\n        var newProjectile = _towerDefenseObjectsProjectile['default'].create({\n          id: this._generateIdForProjectile(),\n          mobId: mobId,\n\n          mobX: targetedMob.get('posX'),\n          mobY: targetedMob.get('posY')\n        });\n\n        this.get('projectiles').addObject(newProjectile);\n\n        this._playCannonSound(mobId);\n\n        return;\n      }\n    },\n\n    _generateIdForProjectile: function _generateIdForProjectile() {\n      function generate4DigitString() {\n        var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n        return baseInt.toString(16).substring(1);\n      }\n\n      return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n    },\n\n    _getMobById: function _getMobById(mobId) {\n      var needle = undefined;\n      this.attrs.mobs.forEach(function (mob) {\n        if (mob.get('id') === mobId) {\n          needle = mob;\n        }\n      });\n      return needle;\n    },\n\n    _getProjectileById: function _getProjectileById(projectileId) {\n      var needle = undefined;\n      this.get('projectiles').forEach(function (projectile) {\n        if (projectile.get('id') === projectileId) {\n          needle = projectile;\n        }\n      });\n      return needle;\n    },\n\n    _playCannonSound: function _playCannonSound(mobId) {\n      var _this7 = this;\n\n      var cannonType = this.get('towerUpgraded') ? 2 : 1;\n      var $cannonSoundEl = _ember['default'].$('<audio class=\"cannon-sound cannon-sound-' + mobId + '\" autoplay>\\n         <source src=\"/sounds/cannon-' + cannonType + '.mp3\" type=\"audio/mpeg\">\\n       </audio>');\n\n      $cannonSoundEl.appendTo(this.$());\n\n      //  volumeKey: 0: up, 1: down, 2: off\n      switch (this.attrs.volumeKey) {\n        case 0:\n          this.$('.cannon-sound').prop('volume', 0.5);\n          break;\n        case 1:\n          this.$('.cannon-sound').prop('volume', 0.2);\n          break;\n        case 2:\n          this.$('.cannon-sound').prop('volume', 0);\n          break;\n      }\n\n      // batch remove audio tags\n      _ember['default'].run.later(this, function () {\n        // allow this._cleanUpAudioTags to remove\n        // remainder of tags on this.willDestroyElement\n        if (_this7.isDestroying) {\n          return;\n        }\n\n        _this7.$('.cannon-sound-' + mobId).remove();\n      }, this.get('towerUpgraded') ? 3000 : 2000);\n    },\n\n    projectiles: _ember['default'].computed(function () {\n      return [];\n    }),\n\n    _cleanUpAudioTags: _ember['default'].on('willDestroyElement', function () {\n      this.$('.cannon-sound').remove();\n    }),\n\n    actions: {\n      destroyProjectile: function destroyProjectile(projectileId) {\n        if (this.get('isDestroying') || !this.attrs.waveStarted) {\n          return;\n        }\n\n        var projectile = this._getProjectileById(projectileId);\n        var projectileFound = !!projectile;\n        var projectilesFound = this.get('projectiles.length') > 0;\n        if (projectileFound && projectilesFound) {\n          var projectileIndex = this.get('projectiles').indexOf(projectile);\n          this.get('projectiles').removeAt(projectileIndex);\n        }\n      }\n    }\n  });\n\n  exports['default'] = TowerComponent;\n});","define('tower-defense/components/td-game/board/tower-group/tower/projectile/component', ['exports', 'ember'], function (exports, _ember) {\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var ProjectileComponent = _ember['default'].Component.extend({\n    classNameBindings: ['attrs.upgraded:projectile--upgraded:projectile--standard'],\n\n    classNames: ['tower__projectile'],\n\n    _applyBackgroundImage: _ember['default'].on('didInsertElement', _ember['default'].observer('attrs.backgroundImage', function () {\n      this.$().css('background-image', 'url(\\'/images/explosion.gif\\')');\n    }))\n  });\n\n  /////////////////////\n  //                 //\n  //   Positioning   //\n  //                 //\n  /////////////////////\n\n  ProjectileComponent.reopen({\n    _positionProjectileOnMob: _ember['default'].on('didInsertElement', function () {\n      var _this = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        var targetPosX = _this.attrs.targetPosX;\n        var targetPosY = _this.attrs.targetPosY;\n        _this.$().css('left', targetPosX - 2 + '%');\n        _this.$().css('top', targetPosY - 1 + '%');\n\n        _this.attrs['damage-mob'](_this.attrs.targetId, _this.attrs.attackPower);\n\n        _ember['default'].run.later(_this, function () {\n          _this._destroy();\n        }, 300);\n      });\n    })\n  });\n\n  /////////////////////\n  //                 //\n  //   Termination   //\n  //                 //\n  /////////////////////\n\n  ProjectileComponent.reopen({\n    _destroy: function _destroy() {\n      this.attrs.destroy(this.attrs.projectileId, this.attrs.targetId);\n    }\n  });\n\n  exports['default'] = ProjectileComponent;\n});","define(\"tower-defense/components/td-game/board/tower-group/tower/projectile/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"empty-body\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 1,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/projectile/template.hbs\"\n      },\n      isEmpty: true,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes() {\n        return [];\n      },\n      statements: [],\n      locals: [],\n      templates: []\n    };\n  })());\n});","define(\"tower-defense/components/td-game/board/tower-group/tower/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 2,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 8,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tower__pulse\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tower__radius\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n          return morphs;\n        },\n        statements: [[\"inline\", \"tool-tip\", [], [\"selector\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.tower.selector\", [\"loc\", [null, [3, 34], [3, 54]]]]], [], [\"loc\", [null, [3, 24], [3, 55]]]], \"type\", \"tower\"], [\"loc\", [null, [3, 4], [4, 29]]]]],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child1 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 11,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 15,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tower__turret--upgraded\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"cannon cannon--1\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"cannon cannon--2\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes() {\n          return [];\n        },\n        statements: [],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child2 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 15,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 19,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tower__turret\");\n          var el2 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"div\");\n          dom.setAttribute(el2, \"class\", \"turret__cannon turret__cannon--1\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes() {\n          return [];\n        },\n        statements: [],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child3 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 22,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 31,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 1,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n          return morphs;\n        },\n        statements: [[\"inline\", \"td-game/board/tower-group/tower/projectile\", [], [\"damage-mob\", [\"subexpr\", \"action\", [[\"get\", \"attrs.damage-mob\", [\"loc\", [null, [23, 66], [23, 82]]]]], [], [\"loc\", [null, [23, 58], [23, 83]]]], \"destroy\", [\"subexpr\", \"action\", [\"destroyProjectile\"], [], [\"loc\", [null, [24, 55], [24, 83]]]], \"projectileId\", [\"subexpr\", \"readonly\", [[\"get\", \"projectile.id\", [\"loc\", [null, [25, 70], [25, 83]]]]], [], [\"loc\", [null, [25, 60], [25, 84]]]], \"attackPower\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.towerAttackPower\", [\"loc\", [null, [26, 69], [26, 91]]]]], [], [\"loc\", [null, [26, 59], [26, 92]]]], \"targetId\", [\"subexpr\", \"readonly\", [[\"get\", \"projectile.mobId\", [\"loc\", [null, [27, 66], [27, 82]]]]], [], [\"loc\", [null, [27, 56], [27, 83]]]], \"targetPosX\", [\"subexpr\", \"readonly\", [[\"get\", \"projectile.mobX\", [\"loc\", [null, [28, 68], [28, 83]]]]], [], [\"loc\", [null, [28, 58], [28, 84]]]], \"targetPosY\", [\"subexpr\", \"readonly\", [[\"get\", \"projectile.mobY\", [\"loc\", [null, [29, 68], [29, 83]]]]], [], [\"loc\", [null, [29, 58], [29, 84]]]], \"upgraded\", [\"subexpr\", \"readonly\", [[\"get\", \"towerUpgraded\", [\"loc\", [null, [30, 66], [30, 79]]]]], [], [\"loc\", [null, [30, 56], [30, 80]]]]], [\"loc\", [null, [23, 2], [30, 82]]]]],\n        locals: [\"projectile\"],\n        templates: []\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"multiple-nodes\", \"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 32,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/board/tower-group/tower/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createElement(\"div\");\n        dom.setAttribute(el1, \"class\", \"tower__body\");\n        var el2 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createComment(\"\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createComment(\"\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var element0 = dom.childAt(fragment, [0]);\n        var morphs = new Array(3);\n        morphs[0] = dom.createMorphAt(element0, 1, 1);\n        morphs[1] = dom.createMorphAt(element0, 3, 3);\n        morphs[2] = dom.createMorphAt(fragment, 2, 2, contextualElement);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"if\", [[\"get\", \"selected\", [\"loc\", [null, [2, 8], [2, 16]]]]], [], 0, null, [\"loc\", [null, [2, 2], [8, 9]]]], [\"block\", \"if\", [[\"get\", \"towerUpgraded\", [\"loc\", [null, [11, 8], [11, 21]]]]], [], 1, 2, [\"loc\", [null, [11, 2], [19, 9]]]], [\"block\", \"each\", [[\"get\", \"projectiles\", [\"loc\", [null, [22, 8], [22, 19]]]]], [], 3, null, [\"loc\", [null, [22, 0], [31, 9]]]]],\n      locals: [],\n      templates: [child0, child1, child2, child3]\n    };\n  })());\n});","define('tower-defense/components/td-game/component', ['exports', 'ember', 'tower-defense/utils/create-game'], function (exports, _ember, _towerDefenseUtilsCreateGame) {\n  /* global marked */\n\n  /**\n   * Basics\n   * Wave Management\n   * Tower Selection\n   * Tower Collisions\n   * Instructions Tooltip\n   * Dropdown Menu\n   * Tower Input Checkbox\n   * Deselect Units\n   * Modal: Grade (Score Management)\n   * Modal: Instructions\n   * Modal: Cancellation (Wave Cancellation)\n   * Modal: Support\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var GameComponent = _ember['default'].Component.extend({\n    classNames: ['td-game']\n  });\n\n  /////////////////////////\n  //                     //\n  //   Wave Management   //\n  //                     //\n  /////////////////////////\n\n  GameComponent.reopen({\n    currentWaveNumber: 1,\n\n    game: (0, _towerDefenseUtilsCreateGame['default'])(),\n\n    waveStarted: false,\n\n    currentWave: _ember['default'].computed('currentWaveNumber', 'game.waves.[]', function () {\n      return this.get('game.waves').objectAt(this.get('currentWaveNumber') - 1);\n    }),\n\n    isFirstWave: _ember['default'].computed('currentWaveNumber', function () {\n      return this.get('currentWaveNumber') === 1 ? true : false;\n    }),\n\n    isLastWave: _ember['default'].computed('currentWaveNumber', function () {\n      return this.get('currentWaveNumber') === this.get('game.waves.length') ? true : false;\n    }),\n\n    _resetGame: _ember['default'].observer('waveStarted', function () {\n      if (!this.get('waveStarted')) {\n        this.set('cancellingWave', false);\n        this.set('game', (0, _towerDefenseUtilsCreateGame['default'])());\n      }\n    }),\n\n    actions: {\n      changeWaveNext: function changeWaveNext() {\n        if (this.get('waveStarted')) {\n          console.error('You cannot start a new wave until this wave ends.');\n          return;\n        }\n\n        var currentWaveNum = this.get('currentWaveNumber');\n        if (currentWaveNum < this.get('game.waves.length')) {\n          this.incrementProperty('currentWaveNumber');\n          this._refreshOverlayAndModal();\n        }\n      },\n\n      changeWavePrevious: function changeWavePrevious() {\n        if (this.get('waveStarted')) {\n          console.error('You cannot start a new wave until this wave ends.');\n          return;\n        }\n\n        var currentWaveNum = this.get('currentWaveNumber');\n        if (currentWaveNum > 1) {\n          this.decrementProperty('currentWaveNumber');\n          this._refreshOverlayAndModal();\n        }\n      },\n\n      // TODO THIS COMMIT: this is never currently called\n      changeWaveSelect: function changeWaveSelect(waveNum) {\n        if (this.get('waveStarted')) {\n          console.error('You cannot start a new wave until this wave ends.');\n          return;\n        }\n\n        this.set('currentWaveNumber', waveNum);\n\n        this._refreshOverlayAndModal();\n      },\n\n      startWave: function startWave() {\n        this.set('waveStarted', true);\n      }\n    }\n  });\n\n  /////////////////////////\n  //                     //\n  //   Tower Selection   //\n  //                     //\n  /////////////////////////\n\n  GameComponent.reopen({\n    selectedTower: null,\n\n    selectedTowerGroup: null,\n\n    actions: {\n      selectTower: function selectTower(tower) {\n        if (this.get('waveStarted')) {\n          return;\n        }\n\n        if (this.get('selectedTowerGroup')) {\n          this.forceSet('selectedTowerGroup', null);\n        }\n\n        this.forceSet('selectedTower', tower);\n      },\n\n      selectTowerGroup: function selectTowerGroup(towerGroup) {\n        if (this.get('waveStarted')) {\n          return;\n        }\n\n        if (this.get('selectedTower')) {\n          this.forceSet('selectedTower', null);\n        }\n\n        this.forceSet('selectedTowerGroup', towerGroup);\n      }\n    }\n  });\n\n  //////////////////////////\n  //                      //\n  //   Tower Collisions   //\n  //                      //\n  //////////////////////////\n\n  GameComponent.reopen({\n    collidingTowers: _ember['default'].computed('currentWaveNumber', function () {\n      return [];\n    }),\n\n    towersColliding: _ember['default'].computed('collidingTowers.[]', function () {\n      return !!this.get('collidingTowers.length');\n    }),\n\n    actions: {\n      addCollidingTower: function addCollidingTower(towerId) {\n        this.get('collidingTowers').addObject(towerId);\n      },\n\n      removeCollidingTower: function removeCollidingTower(towerId) {\n        this.get('collidingTowers').removeObject(towerId);\n      }\n    }\n  });\n\n  GameComponent.reopen({\n    actions: {\n      reportTowerPosition: function reportTowerPosition(id, axis, pos) {\n        axis = axis.toUpperCase();\n\n        this.get('currentWave.towerGroups').forEach(function (tg) {\n          tg.get('towers').forEach(function (tower) {\n            if (tower.get('id') === id) {\n              tower.set('pos' + axis, pos);\n            }\n          });\n        });\n      }\n    }\n  });\n\n  //////////////////////////////\n  //                          //\n  //   Instructions Tooltip   //\n  //                          //\n  //////////////////////////////\n\n  GameComponent.reopen({\n    instructionToolTipProperty: null,\n\n    instructionToolTipShown: false,\n\n    _showInstructionTooltip: _ember['default'].on('didInsertElement', _ember['default'].observer('overlayShown', function () {\n      var _this = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        if (!_this.get('overlayShown')) {\n          _this.$('.text__code').on('mouseover', function (mouseoverEvent) {\n            _this.set('instructionToolTipShown', true);\n\n            var $hoverElement = _ember['default'].$(mouseoverEvent.target);\n            _this.set('instructionToolTipProperty', $hoverElement.text());\n            _ember['default'].$('.instructions__tooltip').css({\n              display: 'block',\n              left: $hoverElement.offset().left + 'px',\n              top: $hoverElement.offset().top + 20 + 'px'\n            });\n          });\n\n          _this.$('.text__code').on('mouseout', function () {\n            _ember['default'].$('.instructions__tooltip').css('display', 'none');\n            _this.set('instructionToolTipShown', false);\n            _this.set('instructionToolTipProperty', null);\n          });\n        }\n      });\n    }))\n  });\n\n  ///////////////////////\n  //                   //\n  //   Dropdown Menu   //\n  //                   //\n  ///////////////////////\n\n  GameComponent.reopen({\n    closeDropdownFn: null,\n\n    dropdownActive: false,\n\n    numDropdownClicks: 0,\n\n    _deactivateDropdown: function _deactivateDropdown(clickEvent) {\n      clickEvent.stopPropagation();\n\n      var $clickedElement = _ember['default'].$(clickEvent.target);\n      var clickedDropdownBtn = $clickedElement.hasClass('nav__button--selector') || $clickedElement.parents('.nav__button--selector').length > 0;\n      var clickedButtonMenu = $clickedElement.hasClass('button__menu') || $clickedElement.parents('.button__menu').length > 0;\n\n      if (clickedDropdownBtn) {\n        this.incrementProperty('numDropdownClicks');\n      }\n\n      if (clickedDropdownBtn && this.get('numDropdownClicks') < 2 || clickedButtonMenu) {\n        return;\n      }\n\n      this.set('numDropdownClicks', 0);\n      this.set('dropdownActive', false);\n    },\n\n    waveLinks: _ember['default'].computed('game', function () {\n      var waveLink = [];\n\n      for (var i = 1; i <= this.get('game.waves.length'); i++) {\n        waveLink.addObject(i);\n      }\n\n      return waveLink;\n    }),\n\n    _toggleDropdown: _ember['default'].observer('dropdownActive', function () {\n      if (this.get('dropdownActive')) {\n        var closeDropdownFn = _ember['default'].run.bind(this, '_deactivateDropdown');\n\n        _ember['default'].$(window).on('click', closeDropdownFn);\n\n        this.set('closeDropdownFn', closeDropdownFn);\n      } else {\n        _ember['default'].$(window).off('click', this.get('closeDropdownFn'));\n      }\n    }),\n\n    _preventSidebarScroll: _ember['default'].observer('dropdownActive', function () {\n      if (this.get('dropdownActive')) {\n        this.$('.td-game__sidebar').css('overflow-y', 'visible');\n      } else {\n        this.$('.td-game__sidebar').css('overflow-y', 'auto');\n      }\n    }),\n\n    actions: {\n      openDropdown: function openDropdown() {\n        this.set('dropdownActive', true);\n      }\n    }\n  });\n\n  //////////////////////////////\n  //                          //\n  //   Tower Input Checkbox   //\n  //                          //\n  //////////////////////////////\n\n  GameComponent.reopen({\n    towerStylesHidden: true,\n\n    _resetTowerStylesHidden: _ember['default'].observer('currentWaveNumber', function () {\n      this.set('towerStylesHidden', this.get('currentWave.towerStylesHidden'));\n    }),\n\n    actions: {\n      hideTowerInputs: function hideTowerInputs() {\n        this.set('towerStylesHidden', true);\n      },\n\n      showTowerInputs: function showTowerInputs() {\n        this.set('towerStylesHidden', false);\n      }\n    }\n  });\n\n  ////////////////////////\n  //                    //\n  //   Deselect Units   //\n  //                    //\n  ////////////////////////\n\n  GameComponent.reopen({\n    _handleClick: _ember['default'].on('didInsertElement', function () {\n      var _this2 = this;\n\n      this.$().click(function (clickEvent) {\n        var $clickedEl = _ember['default'].$(clickEvent.target);\n\n        var $towerGroupParents = $clickedEl.closest('.board__tower-group');\n        var isChildOfTowerGroup = $towerGroupParents.length > 0;\n\n        var $inputContainerParents = $clickedEl.closest('.block__input-container');\n        var isChildOfInputContainer = $inputContainerParents.length > 0;\n\n        var $toolTipParents = $clickedEl.closest('.tool-tip');\n        var isChildOfToolTip = $toolTipParents.length > 0;\n\n        var isOverlay = $clickedEl.hasClass('overlay');\n\n        var isPulse = $clickedEl.hasClass('tower-group__pulse');\n\n        if (!isChildOfTowerGroup && !isChildOfInputContainer && !isChildOfToolTip && !isOverlay && !isPulse) {\n          _this2.set('selectedTower', null);\n          _this2.set('selectedTowerGroup', null);\n        }\n      });\n    })\n  });\n\n  /////////////////\n  //             //\n  //   Overlay   //\n  //             //\n  /////////////////\n\n  GameComponent.reopen({\n    overlayShown: true,\n\n    _hideModalsOnly: function _hideModalsOnly() {\n      this._hideInstructionsModal();\n      this._hideGradeModal();\n      this._hideCancellationModal();\n      this._hideSupportModal();\n    },\n\n    _hideOverlay: function _hideOverlay() {\n      this.set('overlayShown', false);\n    },\n\n    _hideOverlayAndModals: function _hideOverlayAndModals() {\n      this._hideOverlay();\n      this._hideModalsOnly();\n    },\n\n    _refreshOverlayAndModal: function _refreshOverlayAndModal() {\n      this._hideModalsOnly();\n      this._showInstructionsModal();\n      this._showOverlay();\n    },\n\n    _showOverlay: function _showOverlay() {\n      this.set('overlayShown', true);\n    },\n\n    _escapeOverlay: _ember['default'].on('didInsertElement', function () {\n      var _this3 = this;\n\n      _ember['default'].$(window).on('keydown', function (keyEvent) {\n        if (_this3.get('overlayShown') && keyEvent.which === 27) {\n          _this3._hideOverlayAndModals();\n        }\n      });\n    }),\n\n    actions: {\n      // hide overlay whenever user \"clicks out\" of modal\n      handleOverlayClick: function handleOverlayClick(event) {\n        // the directly-clicked element (event.target), must be the overlay\n        // (event.currentTarget) for the overlay to remain\n        if (event.currentTarget === event.target) {\n          this._hideOverlayAndModals();\n        }\n      },\n\n      hideOverlay: function hideOverlay() {\n        this._hideOverlayAndModals();\n      },\n\n      showOverlay: function showOverlay() {\n        this._showInstructionsModal();\n        this._showOverlay();\n      }\n    }\n  });\n\n  ////////////////////////////\n  //                        //\n  //      Modal: Grade      //\n  //   (Score Management)   //\n  //                        //\n  ////////////////////////////\n\n  GameComponent.reopen({\n    gradeModalShown: false,\n\n    passed: false,\n\n    score: null,\n\n    _hideGradeModal: function _hideGradeModal() {\n      this.set('gradeModalShown', false);\n    },\n\n    _showGradeModal: function _showGradeModal() {\n      this.set('gradeModalShown', true);\n    },\n\n    actions: {\n      scoreWave: function scoreWave(wavePoints) {\n        var _this4 = this;\n\n        this.set('score', wavePoints);\n\n        if (wavePoints >= this.get('currentWave.minimumScore')) {\n          this.set('passed', true);\n        } else {\n          this.set('passed', false);\n        }\n\n        _ember['default'].run.later(this, function () {\n          _this4._showGradeModal();\n          _this4._showOverlay();\n\n          _this4.set('waveStarted', false);\n        }, 1000);\n      }\n    }\n  });\n\n  /////////////////////////////\n  //                         //\n  //   Modal: Instructions   //\n  //                         //\n  /////////////////////////////\n\n  GameComponent.reopen({\n    instructionsModalShown: true,\n\n    _hideInstructionsModal: function _hideInstructionsModal() {\n      this.set('instructionsModalShown', false);\n    },\n\n    _showInstructionsModal: function _showInstructionsModal() {\n      this.set('instructionsModalShown', true);\n    },\n\n    instructionsMain: _ember['default'].computed('currentWaveNumber', function () {\n      return marked(this.get('currentWave.instructions.main'));\n    }),\n\n    instructionsTldr: _ember['default'].computed('currentWaveNumber', function () {\n      return marked(this.get('currentWave.instructions.tldr'));\n    })\n  });\n\n  /////////////////////////////\n  //                         //\n  //   Modal: Cancellation   //\n  //   (Wave Cancellation)   //\n  //                         //\n  /////////////////////////////\n\n  GameComponent.reopen({\n    cancellationModalShown: false,\n\n    cancellingWave: false,\n\n    _beginWaveCancellation: function _beginWaveCancellation() {\n      var _this5 = this;\n\n      this.set('cancellingWave', true);\n\n      var mobFrequency = this.get('currentWave.mobs').objectAt(0).get('frequency');\n      _ember['default'].run.later(this, function () {\n        _this5.set('waveStarted', false);\n      }, mobFrequency);\n    },\n\n    _hideCancellationModal: function _hideCancellationModal() {\n      this.set('cancellationModalShown', false);\n    },\n\n    _showCancellationModal: function _showCancellationModal() {\n      this.set('cancellationModalShown', true);\n    },\n\n    // until timing functions account for tabbing out, cancel waves on blur\n    _autoBeginWaveCancellation: _ember['default'].on('didInsertElement', function () {\n      var _this6 = this;\n\n      _ember['default'].$(document).on('visibilitychange', function () {\n        if (_this6.get('waveStarted')) {\n          _this6._beginWaveCancellation();\n\n          _this6._showCancellationModal();\n          _this6._showOverlay();\n        }\n      });\n    }),\n\n    actions: {\n      beginWaveCancellation: function beginWaveCancellation() {\n        this._beginWaveCancellation();\n      }\n    }\n  });\n\n  ////////////////////////\n  //                    //\n  //   Modal: Support   //\n  //                    //\n  ////////////////////////\n\n  GameComponent.reopen({\n    supportModalShown: false,\n\n    _hideSupportModal: function _hideSupportModal() {\n      this.set('supportModalShown', false);\n    },\n\n    _showSupportModal: function _showSupportModal() {\n      this.set('supportModalShown', true);\n    },\n\n    actions: {\n      hideSupportModal: function hideSupportModal() {\n        this.set('supportModalShown', false);\n      },\n\n      showSupportModal: function showSupportModal() {\n        this._hideModalsOnly();\n        this._showSupportModal();\n      }\n    }\n  });\n\n  exports['default'] = GameComponent;\n});","define('tower-defense/components/td-game/stylesheet/block/component', ['exports', 'ember', 'tower-defense/utils/create-unit-code-line'], function (exports, _ember, _towerDefenseUtilsCreateUnitCodeLine) {\n\n  /**\n   * Basics\n   * Code Line Management\n   * Wave Initiation\n   * Auto Focus\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var BlockComponent = _ember['default'].Component.extend({\n    classNames: ['stylesheet__block'],\n\n    tagName: 'ol'\n  });\n\n  //////////////////////////////\n  //                          //\n  //   Code Line Management   //\n  //                          //\n  //////////////////////////////\n\n  BlockComponent.reopen({\n    _deleteCodeLine: function _deleteCodeLine(id) {\n      var codeLines = this.get('codeLines');\n      var codeLine = this._getCodeLineById(id);\n\n      if (codeLine.get('codeLine') || this.attrs.waveStarting || this._otherUnsubmittedCodeLinesExist(id)) {\n        var index = codeLines.indexOf(codeLine);\n        codeLines.removeAt(index);\n      }\n    },\n\n    _getCodeLineById: function _getCodeLineById(id) {\n      var codeLines = this.get('codeLines');\n      var targetCodeLine = undefined;\n      codeLines.forEach(function (codeLine) {\n        if (id === codeLine.get('id')) {\n          targetCodeLine = codeLine;\n        }\n      });\n\n      return targetCodeLine;\n    },\n\n    _otherUnsubmittedCodeLinesExist: function _otherUnsubmittedCodeLinesExist(id) {\n      var codeLines = this.get('codeLines');\n      var otherUnsubmittedCodeLinesExist = false;\n      codeLines.forEach(function (codeLine) {\n        if (id !== codeLine.get('id')) {\n          if (!codeLine.get('submitted')) {\n            otherUnsubmittedCodeLinesExist = true;\n          }\n        }\n      });\n\n      return otherUnsubmittedCodeLinesExist;\n    },\n\n    codeLines: _ember['default'].computed('attrs.towerGroup.styles.[]', 'attrs.tower.styles.[]', function () {\n      return this.attrs.tower ? this.attrs.tower.get('styles') : this.attrs.towerGroup.get('styles');\n    }),\n\n    actions: {\n      deleteCodeLine: function deleteCodeLine(id) {\n        this._deleteCodeLine(id);\n      },\n\n      submitCodeLine: function submitCodeLine(codeStr, id, valid) {\n        this.get('codeLines').forEach(function (unitCodeLine) {\n          if (unitCodeLine.get('id') === id) {\n            unitCodeLine.set('valid', valid);\n            unitCodeLine.set('codeLine', codeStr);\n            unitCodeLine.set('submitted', true);\n          }\n        });\n      }\n    }\n  });\n\n  /////////////////////////\n  //                     //\n  //   Wave Initiation   //\n  //                     //\n  /////////////////////////\n\n  BlockComponent.reopen({\n    removeUnsubmittedCodeLines: _ember['default'].observer('attrs.waveStarting', function () {\n      var _this = this;\n\n      if (this.attrs.waveStarting) {\n        this.get('codeLines').forEach(function (codeLine) {\n          if (!codeLine.submitted) {\n            _this._deleteCodeLine(codeLine.get('id'));\n          }\n        });\n      }\n    })\n  });\n\n  ////////////////////\n  //                //\n  //   Auto Focus   //\n  //                //\n  ////////////////////\n\n  BlockComponent.reopen({\n    inputIdSelectedManually: null,\n\n    inputIdToFocus: null,\n\n    _getUnsubmittedId: function _getUnsubmittedId() {\n      var unsubmittedId = undefined;\n\n      this.get('codeLines').forEach(function (codeLine) {\n        if (!codeLine.submitted) {\n          unsubmittedId = codeLine.get('id');\n        }\n      });\n\n      return unsubmittedId;\n    },\n\n    _ensureUnsubmittedCodeLinesExist: _ember['default'].observer('codeLines.@each.submitted', function () {\n      var _this2 = this;\n\n      if (this.attrs.waveStarting) {\n        return;\n      }\n\n      var codeLines = this.get('codeLines');\n      if (codeLines.isEvery('submitted')) {\n        codeLines.addObject((0, _towerDefenseUtilsCreateUnitCodeLine['default'])());\n\n        _ember['default'].run.schedule('afterRender', this, function () {\n          _this2.set('inputIdSelectedManually', null);\n          _this2._focusProperInput(); // TODO THIS COMMIT: confirm this works\n        });\n      }\n    }),\n\n    // Two separate processes invoke this autofocusing function:\n    // 1. The tower or group containing this block is selected and the watched\n    //    objects change.\n    // 2. A codeline submission from *within* this block triggers a new input to\n    //    be created, and this function is called *explicitly*. For an example\n    //    see the final lines of _ensureUnsubmittedCodeLinesExist above.\n    _focusProperInput: _ember['default'].observer('attrs.selectedTower', 'attrs.selectedTowerGroup', 'attrs.tower', 'attrs.towerGroup', function () {\n      if (this.attrs.waveStarted) {\n        return;\n      }\n      var towerSelected = this.attrs.selectedTower && this.attrs.selectedTower === this.attrs.tower;\n\n      var towerGroupSelected = this.attrs.selectedTowerGroup && this.attrs.selectedTowerGroup === this.attrs.towerGroup;\n\n      if (towerSelected || towerGroupSelected) {\n        var inputAutoSelected = !this.get('inputIdSelectedManually');\n        if (inputAutoSelected) {\n          var unsubmittedInputId = this._getUnsubmittedId();\n          this.forceSet('inputIdToFocus', unsubmittedInputId);\n        } else {\n          this.forceSet('inputIdToFocus', this.get('inputIdSelectedManually'));\n        }\n      }\n    }),\n\n    actions: {\n      disableAutoFocus: function disableAutoFocus(id) {\n        this.set('inputIdSelectedManually', id);\n      },\n\n      enableAutoFocus: function enableAutoFocus() {\n        this.set('inputIdSelectedManually', null);\n      }\n    }\n  });\n\n  exports['default'] = BlockComponent;\n});","define('tower-defense/components/td-game/stylesheet/block/input/component', ['exports', 'ember', 'tower-defense/utils/create-flexbox-ref'], function (exports, _ember, _towerDefenseUtilsCreateFlexboxRef) {\n\n  /**\n   * Basics\n   * Submission Processing\n   * Focus\n   * Flexbox Validation\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var InputComponent = _ember['default'].Component.extend({\n    inputValue: null,\n\n    inputViewName: 'input', // This can be called anything.\n\n    _isFocused: false,\n\n    inputEmpty: _ember['default'].computed('inputValue', function () {\n      if (!this.get('inputValue')) {\n        return true;\n      }\n\n      return this.get('inputValue') === '' ? true : false;\n    }),\n\n    didInsertElement: function didInsertElement() {\n      var _this = this;\n\n      this._super.apply(this, arguments);\n      // Listen for Blockly insert events\n      this._blocklyHandler = function (e) {\n        var value = e.detail && e.detail.value;\n        if (!value) {\n          return;\n        }\n        var isFocused = _this.get('_isFocused');\n        var isUnsubmitted = !_this.attrs.blockSubmitted;\n        // Only one component should handle the event:\n        // - the focused one takes priority (stopImmediatePropagation)\n        // - otherwise the first unsubmitted one handles it\n        if (isFocused || isUnsubmitted) {\n          _this.set('inputValue', value);\n          _ember['default'].run.later(_this, function () {\n            _this._submitCode();\n          }, 100);\n          if (isFocused) {\n            e.stopImmediatePropagation();\n          }\n        }\n      };\n      document.addEventListener('blockly:insert', this._blocklyHandler);\n    },\n\n    willDestroyElement: function willDestroyElement() {\n      this._super.apply(this, arguments);\n      document.removeEventListener('blockly:insert', this._blocklyHandler);\n    },\n\n    actions: {\n      handleInputEnter: function handleInputEnter() {\n        this._submitCode();\n      },\n\n      handleKeyDown: function handleKeyDown(keyDownVal, keyDownEvent) {\n        var tabKey = 9;\n        var enterKey = 13;\n        if (keyDownEvent.which === tabKey || keyDownEvent.which === enterKey) {\n          this.set('inputValue', keyDownVal);\n        }\n      },\n\n      handleKeyUp: function handleKeyUp(keyUpVal) {\n        this.set('inputValue', keyUpVal);\n      }\n    }\n  });\n\n  ///////////////////////////////\n  //                           //\n  //   Submission Processing   //\n  //                           //\n  ///////////////////////////////\n\n  InputComponent.reopen({\n    _appendSemicolon: function _appendSemicolon() {\n      var inputValue = this.get('inputValue');\n      this.set('inputValue', inputValue.concat(';'));\n    },\n\n    _checkForSemicolon: function _checkForSemicolon() {\n      return this.get('inputValue').endsWith(';');\n    },\n\n    _submitCode: function _submitCode() {\n      if (this.get('inputValid')) {\n        if (!this._checkForSemicolon()) {\n          this._appendSemicolon();\n        }\n\n        this.attrs['submit-code-line'](this.get('inputValue'), this.attrs.codeLineId, true);\n      } else if (this.get('inputEmpty')) {\n        this.attrs['delete-code-line'](this.attrs.codeLineId);\n      } else {\n        this.attrs['shake-stylesheet']();\n\n        this.attrs['submit-code-line'](this.get('inputValue'), this.attrs.codeLineId, false);\n      }\n    }\n  });\n\n  ///////////////\n  //           //\n  //   Focus   //\n  //           //\n  ///////////////\n\n  InputComponent.reopen({\n    focusInCount: 0,\n\n    focusOutCount: 0,\n\n    _focusInput: function _focusInput() {\n      var inputViewName = this.get('inputViewName');\n      var inputComponent = this.get(inputViewName);\n      var inputEl = inputComponent.get('element');\n      inputEl.focus();\n    },\n\n    shouldFocusNewInput: _ember['default'].computed('attrs.blockSubmitted', function () {\n      if (!this.attrs.finalInputFound || this.attrs.overlayShown) {\n        return false;\n      }\n\n      return !this.attrs.blockSubmitted;\n    }),\n\n    _focusIfFirstInput: _ember['default'].on('didInsertElement', _ember['default'].observer('overlayShown', function () {\n      var _this2 = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        if (_this2.attrs.unitId === _this2.attrs.firstTowerGroupId && !_this2.attrs.overlayShown) {\n          _this2._focusInput();\n        }\n      });\n    })),\n\n    // This function will only fire if the current input field was manually\n    // selected (by a click or tab event) or if it is the unsubmitted input at the\n    // end of the block. The business logic contained in the block's\n    // _focusProperInput() function determines when to select which.\n    _focusMatchedInput: _ember['default'].observer('attrs.inputIdToFocus', function () {\n      if (this.attrs.inputIdToFocus === this.attrs.codeLineId) {\n        this._focusInput();\n      }\n    }),\n\n    _notifyOnFinalInput: _ember['default'].on('didInsertElement', function () {\n      var _this3 = this;\n\n      _ember['default'].run.schedule('afterRender', this, function () {\n        if (_this3.attrs.unitId === _this3.attrs.finalTowerId) {\n          _this3.attrs['notify-final-input']();\n        }\n      });\n    }),\n\n    _sendFocusedState: _ember['default'].observer('focusInCount', 'focusOutCount', function () {\n      var focusInCount = this.get('focusInCount');\n      var focusOutCount = this.get('focusOutCount');\n\n      // autofocus is the block's function for automatically focusing on the\n      // unsubmitted input\n      if (focusInCount > focusOutCount) {\n        this.attrs['disable-autofocus'](this.attrs.codeLineId);\n      } else {\n        this.attrs['enable-autofocus'](this.attrs.codeLineId);\n      }\n    }),\n\n    actions: {\n      handleFocusIn: function handleFocusIn() {\n        var focusInCount = this.get('focusInCount');\n        this.set('focusInCount', focusInCount + 1);\n        this.set('_isFocused', true);\n\n        var unit = undefined;\n        var attribute = undefined;\n\n        if (this.attrs.tower) {\n          unit = this.attrs.tower;\n          attribute = 'tower';\n        } else {\n          unit = this.attrs.towerGroup;\n          attribute = 'tower-group';\n        }\n\n        this.attrs['select-' + attribute](unit);\n      },\n\n      handleFocusOut: function handleFocusOut() {\n        var focusOutCount = this.get('focusOutCount');\n        this.set('focusOutCount', focusOutCount + 1);\n        this.set('_isFocused', false);\n\n        this._submitCode();\n      }\n    }\n  });\n\n  ////////////////////////////\n  //                        //\n  //   Flexbox Validation   //\n  //                        //\n  ////////////////////////////\n\n  InputComponent.reopen({\n    flexboxRef: (0, _towerDefenseUtilsCreateFlexboxRef['default'])(),\n\n    _getProperty: function _getProperty() {\n      var inputValueLowerCase = this.get('inputValue').toLowerCase();\n      var colonLocation = inputValueLowerCase.indexOf(':');\n\n      return inputValueLowerCase.substring(0, colonLocation);\n    },\n\n    _getValWithoutSemiColon: function _getValWithoutSemiColon(val) {\n      var lastIndex = val.length - 1;\n      if (val[lastIndex] === ';') {\n        return val.substring(0, lastIndex);\n      }\n    },\n\n    _propertyFound: function _propertyFound() {\n      if (this.get('inputEmpty')) {\n        return false;\n      }\n\n      var colonLocation = this.get('inputValue').indexOf(':');\n      return colonLocation < 1 ? false : true;\n    },\n\n    _validPropertyFound: function _validPropertyFound() {\n      if (!this._propertyFound()) {\n        return false;\n      }\n\n      var propertyType = this.attrs.tower ? 'item' : 'container';\n      var property = this._getProperty();\n      if (!this.get('flexboxRef').get(propertyType)[property]) {\n        return false;\n      }\n\n      return true;\n    },\n\n    _validValueFound: function _validValueFound() {\n      if (!this._propertyFound()) {\n        return false;\n      }\n\n      var property = this._getProperty();\n      var startIndex = property.length + 1;\n      var endIndex = this.get('inputValue.length');\n\n      var inputValueLowerCase = this.get('inputValue').toLowerCase();\n      var fullValue = inputValueLowerCase.substring(startIndex, endIndex).trim();\n      var semicolonFound = fullValue[fullValue.length - 1] === ';';\n      var value = undefined;\n      if (semicolonFound) {\n        value = this._getValWithoutSemiColon(fullValue);\n      } else {\n        value = fullValue;\n      }\n\n      var propertyType = this.attrs.tower ? 'item' : 'container';\n      var valueFound = false;\n      this.get('flexboxRef').get(propertyType)[property].forEach(function (validValue) {\n        if (value === validValue.toString()) {\n          valueFound = true;\n        }\n      });\n\n      return valueFound ? true : false;\n    },\n\n    inputValid: _ember['default'].computed('inputValue', function () {\n      return this._validPropertyFound() && this._validValueFound();\n    })\n  });\n\n  exports['default'] = InputComponent;\n});","define(\"tower-defense/components/td-game/stylesheet/block/input/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 1,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 5,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/input/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createComment(\"\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 1, 1);\n          return morphs;\n        },\n        statements: [[\"content\", \"inputValue\", [\"loc\", [null, [3, 4], [3, 18]]]]],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child1 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 5,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 15,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/input/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 1, 1, contextualElement);\n          return morphs;\n        },\n        statements: [[\"inline\", \"input\", [], [\"class\", \"block__input\", \"enter\", [\"subexpr\", \"action\", [\"handleInputEnter\"], [], [\"loc\", [null, [7, 16], [7, 43]]]], \"focus-in\", [\"subexpr\", \"action\", [\"handleFocusIn\"], [], [\"loc\", [null, [8, 19], [8, 43]]]], \"focus-out\", [\"subexpr\", \"action\", [\"handleFocusOut\"], [], [\"loc\", [null, [9, 20], [9, 45]]]], \"focusOnInsert\", [\"subexpr\", \"readonly\", [[\"get\", \"focusNewInput\", [\"loc\", [null, [10, 34], [10, 47]]]]], [], [\"loc\", [null, [10, 24], [10, 48]]]], \"key-down\", [\"subexpr\", \"action\", [\"handleKeyDown\"], [], [\"loc\", [null, [11, 19], [11, 43]]]], \"key-up\", [\"subexpr\", \"action\", [\"handleKeyUp\"], [], [\"loc\", [null, [12, 17], [12, 39]]]], \"value\", [\"subexpr\", \"readonly\", [[\"get\", \"inputValue\", [\"loc\", [null, [13, 26], [13, 36]]]]], [], [\"loc\", [null, [13, 16], [13, 37]]]], \"viewName\", [\"subexpr\", \"readonly\", [[\"get\", \"inputViewName\", [\"loc\", [null, [14, 29], [14, 42]]]]], [], [\"loc\", [null, [14, 19], [14, 43]]]]], [\"loc\", [null, [6, 2], [14, 45]]]]],\n        locals: [],\n        templates: []\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 16,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/input/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"if\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [1, 6], [1, 23]]]]], [], 0, 1, [\"loc\", [null, [1, 0], [15, 7]]]]],\n      locals: [],\n      templates: [child0, child1]\n    };\n  })());\n});","define(\"tower-defense/components/td-game/stylesheet/block/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": {\n            \"name\": \"triple-curlies\"\n          },\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 1,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 5,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"li\");\n          dom.setAttribute(el1, \"class\", \"block__line block__declaration\");\n          var el2 = dom.createTextNode(\"\\n    display: flex;\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes() {\n          return [];\n        },\n        statements: [],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child1 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 8,\n                \"column\": 2\n              },\n              \"end\": {\n                \"line\": 32,\n                \"column\": 2\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 1,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"    \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"li\");\n            dom.setAttribute(el1, \"class\", \"block__line block__declaration\");\n            var el2 = dom.createTextNode(\"\\n      \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createComment(\"\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n    \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 1, 1);\n            return morphs;\n          },\n          statements: [[\"inline\", \"td-game/stylesheet/block/input\", [], [\"blockCodeLine\", [\"subexpr\", \"readonly\", [[\"get\", \"twrCodeLine.codeLine\", [\"loc\", [null, [10, 63], [10, 83]]]]], [], [\"loc\", [null, [10, 53], [10, 84]]]], \"blockSubmitted\", [\"subexpr\", \"readonly\", [[\"get\", \"twrCodeLine.submitted\", [\"loc\", [null, [11, 64], [11, 85]]]]], [], [\"loc\", [null, [11, 54], [11, 86]]]], \"class\", \"block__input-container\", \"codeLineId\", [\"subexpr\", \"readonly\", [[\"get\", \"twrCodeLine.id\", [\"loc\", [null, [13, 60], [13, 74]]]]], [], [\"loc\", [null, [13, 50], [13, 75]]]], \"delete-code-line\", [\"subexpr\", \"action\", [\"deleteCodeLine\"], [], [\"loc\", [null, [14, 56], [14, 81]]]], \"disable-autofocus\", [\"subexpr\", \"action\", [\"disableAutoFocus\"], [], [\"loc\", [null, [15, 57], [15, 84]]]], \"enable-autofocus\", [\"subexpr\", \"action\", [\"enableAutoFocus\"], [], [\"loc\", [null, [16, 56], [16, 82]]]], \"finalInputFound\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.finalInputFound\", [\"loc\", [null, [17, 65], [17, 86]]]]], [], [\"loc\", [null, [17, 55], [17, 87]]]], \"finalTowerId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.finalTowerId\", [\"loc\", [null, [18, 62], [18, 80]]]]], [], [\"loc\", [null, [18, 52], [18, 81]]]], \"firstTowerGroupId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.firstTowerGroupId\", [\"loc\", [null, [19, 67], [19, 90]]]]], [], [\"loc\", [null, [19, 57], [19, 91]]]], \"inputIdToFocus\", [\"subexpr\", \"readonly\", [[\"get\", \"inputIdToFocus\", [\"loc\", [null, [20, 64], [20, 78]]]]], [], [\"loc\", [null, [20, 54], [20, 79]]]], \"notify-final-input\", [\"subexpr\", \"action\", [[\"get\", \"attrs.notify-final-input\", [\"loc\", [null, [21, 66], [21, 90]]]]], [], [\"loc\", [null, [21, 58], [21, 91]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.overlayShown\", [\"loc\", [null, [22, 62], [22, 80]]]]], [], [\"loc\", [null, [22, 52], [22, 81]]]], \"shake-stylesheet\", [\"subexpr\", \"action\", [[\"get\", \"attrs.shake-stylesheet\", [\"loc\", [null, [23, 64], [23, 86]]]]], [], [\"loc\", [null, [23, 56], [23, 87]]]], \"submit-code-line\", [\"subexpr\", \"action\", [\"submitCodeLine\"], [], [\"loc\", [null, [24, 56], [24, 81]]]], \"select-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower\", [\"loc\", [null, [25, 60], [25, 78]]]]], [], [\"loc\", [null, [25, 52], [25, 79]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.selectedTower\", [\"loc\", [null, [26, 63], [26, 82]]]]], [], [\"loc\", [null, [26, 53], [26, 83]]]], \"tower\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.tower\", [\"loc\", [null, [27, 55], [27, 66]]]]], [], [\"loc\", [null, [27, 45], [27, 67]]]], \"unitId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.tower.id\", [\"loc\", [null, [28, 56], [28, 70]]]]], [], [\"loc\", [null, [28, 46], [28, 71]]]], \"unitType\", [\"subexpr\", \"readonly\", [\"tower\"], [], [\"loc\", [null, [29, 48], [29, 66]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [30, 61], [30, 78]]]]], [], [\"loc\", [null, [30, 51], [30, 79]]]]], [\"loc\", [null, [10, 6], [30, 81]]]]],\n          locals: [\"twrCodeLine\"],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 7,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 33,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"each\", [[\"get\", \"codeLines\", [\"loc\", [null, [8, 10], [8, 19]]]]], [], 0, null, [\"loc\", [null, [8, 2], [32, 11]]]]],\n        locals: [],\n        templates: [child0]\n      };\n    })();\n    var child2 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 34,\n                \"column\": 2\n              },\n              \"end\": {\n                \"line\": 57,\n                \"column\": 2\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 1,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"    \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"li\");\n            dom.setAttribute(el1, \"class\", \"block__line block__declaration\");\n            var el2 = dom.createTextNode(\"\\n      \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createComment(\"\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n    \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 1, 1);\n            return morphs;\n          },\n          statements: [[\"inline\", \"td-game/stylesheet/block/input\", [], [\"blockCodeLine\", [\"subexpr\", \"readonly\", [[\"get\", \"twrGrpCodeLine.codeLine\", [\"loc\", [null, [36, 63], [36, 86]]]]], [], [\"loc\", [null, [36, 53], [36, 87]]]], \"blockSubmitted\", [\"subexpr\", \"readonly\", [[\"get\", \"twrGrpCodeLine.submitted\", [\"loc\", [null, [37, 64], [37, 88]]]]], [], [\"loc\", [null, [37, 54], [37, 89]]]], \"class\", \"block__input-container\", \"codeLineId\", [\"subexpr\", \"readonly\", [[\"get\", \"twrGrpCodeLine.id\", [\"loc\", [null, [39, 60], [39, 77]]]]], [], [\"loc\", [null, [39, 50], [39, 78]]]], \"delete-code-line\", [\"subexpr\", \"action\", [\"deleteCodeLine\"], [], [\"loc\", [null, [40, 56], [40, 81]]]], \"disable-autofocus\", [\"subexpr\", \"action\", [\"disableAutoFocus\"], [], [\"loc\", [null, [41, 57], [41, 84]]]], \"enable-autofocus\", [\"subexpr\", \"action\", [\"enableAutoFocus\"], [], [\"loc\", [null, [42, 56], [42, 82]]]], \"finalInputFound\", [\"subexpr\", \"readonly\", [[\"get\", \"finalInputFound\", [\"loc\", [null, [43, 65], [43, 80]]]]], [], [\"loc\", [null, [43, 55], [43, 81]]]], \"finalTowerId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.finalTowerId\", [\"loc\", [null, [44, 62], [44, 80]]]]], [], [\"loc\", [null, [44, 52], [44, 81]]]], \"firstTowerGroupId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.firstTowerGroupId\", [\"loc\", [null, [45, 67], [45, 90]]]]], [], [\"loc\", [null, [45, 57], [45, 91]]]], \"inputIdToFocus\", [\"subexpr\", \"readonly\", [[\"get\", \"inputIdToFocus\", [\"loc\", [null, [46, 64], [46, 78]]]]], [], [\"loc\", [null, [46, 54], [46, 79]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.overlayShown\", [\"loc\", [null, [47, 62], [47, 80]]]]], [], [\"loc\", [null, [47, 52], [47, 81]]]], \"shake-stylesheet\", [\"subexpr\", \"action\", [[\"get\", \"attrs.shake-stylesheet\", [\"loc\", [null, [48, 64], [48, 86]]]]], [], [\"loc\", [null, [48, 56], [48, 87]]]], \"submit-code-line\", [\"subexpr\", \"action\", [\"submitCodeLine\"], [], [\"loc\", [null, [49, 56], [49, 81]]]], \"select-tower-group\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower-group\", [\"loc\", [null, [50, 66], [50, 90]]]]], [], [\"loc\", [null, [50, 58], [50, 91]]]], \"selectedTowerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.selectedTowerGroup\", [\"loc\", [null, [51, 68], [51, 92]]]]], [], [\"loc\", [null, [51, 58], [51, 93]]]], \"towerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.towerGroup\", [\"loc\", [null, [52, 60], [52, 76]]]]], [], [\"loc\", [null, [52, 50], [52, 77]]]], \"unitId\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.towerGroup.id\", [\"loc\", [null, [53, 56], [53, 75]]]]], [], [\"loc\", [null, [53, 46], [53, 76]]]], \"unitType\", [\"subexpr\", \"readonly\", [\"tower group\"], [], [\"loc\", [null, [54, 48], [54, 72]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [55, 61], [55, 78]]]]], [], [\"loc\", [null, [55, 51], [55, 79]]]]], [\"loc\", [null, [36, 6], [55, 81]]]]],\n          locals: [\"twrGrpCodeLine\"],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 33,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 58,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"each\", [[\"get\", \"codeLines\", [\"loc\", [null, [34, 10], [34, 19]]]]], [], 0, null, [\"loc\", [null, [34, 2], [57, 11]]]]],\n        locals: [],\n        templates: [child0]\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\", \"multiple-nodes\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 59,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/stylesheet/block/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(2);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        morphs[1] = dom.createMorphAt(fragment, 2, 2, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"if\", [[\"get\", \"attrs.towerGroup\", [\"loc\", [null, [1, 6], [1, 22]]]]], [], 0, null, [\"loc\", [null, [1, 0], [5, 7]]]], [\"block\", \"if\", [[\"get\", \"attrs.tower\", [\"loc\", [null, [7, 6], [7, 17]]]]], [], 1, 2, [\"loc\", [null, [7, 0], [58, 7]]]]],\n      locals: [],\n      templates: [child0, child1, child2]\n    };\n  })());\n});","define('tower-defense/components/td-game/stylesheet/component', ['exports', 'ember'], function (exports, _ember) {\n\n  /**\n   * Basics\n   * Toggle Tower Inputs\n   * Wave Initiation\n   * Wave Cancellation\n   * Block Lines\n   * Shake Error\n   * Input Reporting\n   * Help Button\n   */\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var StylesheetComponent = _ember['default'].Component.extend({\n    classNames: ['sidebar__stylesheet']\n  });\n\n  /////////////////////////////\n  //                         //\n  //   Toggle Tower Inputs   //\n  //                         //\n  /////////////////////////////\n\n  StylesheetComponent.reopen({\n    towerInputsHidden: true,\n\n    _hideTowerInputs: _ember['default'].observer('towerInputsHidden', function () {\n      if (this.get('towerInputsHidden')) {\n        this.attrs['hide-tower-inputs']();\n      }\n    }),\n\n    _resetTowerInputsHidden: _ember['default'].observer('attrs.towerStylesHidden', function () {\n      this.set('towerInputsHidden', this.attrs.towerStylesHidden);\n    }),\n\n    _showTowerInputs: _ember['default'].observer('towerInputsHidden', function () {\n      if (!this.get('towerInputsHidden')) {\n        this.attrs['show-tower-inputs']();\n      }\n    }),\n\n    actions: {\n      toggleHideInputs: function toggleHideInputs() {\n        this.set('towerInputsHidden', !this.get('towerInputsHidden'));\n      }\n    }\n  });\n\n  /////////////////////////\n  //                     //\n  //   Wave Initiation   //\n  //                     //\n  /////////////////////////\n\n  StylesheetComponent.reopen({\n    waveStarting: false,\n\n    _cancelWaveStarting: _ember['default'].observer('waveStarted', function () {\n      if (this.attrs.waveStarted) {\n        this.set('waveStarting', false);\n      }\n    }),\n\n    // shift + enter hotkey\n    _startWave: _ember['default'].observer('attrs.overlayShown', function () {\n      var _this = this;\n\n      if (this.attrs.overlayShown) {\n        _ember['default'].$(window).off('keypress');\n        return;\n      }\n\n      _ember['default'].$(window).on('keypress', function (keyEvent) {\n        if (keyEvent.shiftKey && keyEvent.which === 13) {\n          if (_this.attrs.towersColliding) {\n            _this._shake();\n            return;\n          }\n\n          _this.set('waveStarting', true);\n          _this.attrs['start-wave']();\n        }\n      });\n    }),\n\n    actions: {\n      startWave: function startWave() {\n        this.set('waveStarting', true);\n        this.attrs['start-wave']();\n      }\n    }\n  });\n\n  ///////////////////////////\n  //                       //\n  //   Wave Cancellation   //\n  //                       //\n  ///////////////////////////\n\n  StylesheetComponent.reopen({\n    actions: {\n      cancelWave: function cancelWave() {\n        this.attrs['cancel-wave']();\n      }\n    }\n  });\n\n  /////////////////////\n  //                 //\n  //   Block Lines   //\n  //                 //\n  /////////////////////\n\n  StylesheetComponent.reopen({\n    _getLinesForBraces: function _getLinesForBraces() {\n      var count = 0;\n      var towerGroups = this.attrs.towerGroups;\n      var towersAndTowerGroups = this.attrs.towerStylesHidden ? towerGroups : towerGroups.concat(this.get('towers'));\n\n      towersAndTowerGroups.forEach(function () {\n        for (var i = 0; i < 2; i++) {\n          count++;\n        }\n      });\n\n      return count;\n    },\n\n    _getLinesForInputs: function _getLinesForInputs() {\n      var count = 0;\n      var towerGroupStyles = this.get('towerGroupStyles');\n      var towerAndTowerGroupStyles = this.attrs.towerStylesHidden ? towerGroupStyles : towerGroupStyles.concat(this.get('towerStyles'));\n\n      towerAndTowerGroupStyles.forEach(function () {\n        count++;\n      });\n\n      return count;\n    },\n\n    // Line breaks: TG + T - 1\n    _getLinesForLineBreaks: function _getLinesForLineBreaks() {\n      var count = 0;\n      var numTowers = this.get('towers.length');\n      var numTowerGroups = this.attrs.towerGroups.length;\n      var numTowersAndTowerGroups = this.attrs.towerStylesHidden ? numTowerGroups : numTowers + numTowerGroups;\n      var numLineBreakLines = numTowersAndTowerGroups - 1;\n\n      for (var i = 0; i < numLineBreakLines; i++) {\n        count++;\n      }\n\n      return count;\n    },\n\n    // Manual properties (display: flex): 1 per tower group\n    _getLinesForManualProperties: function _getLinesForManualProperties() {\n      return this.attrs.towerGroups.length;\n    },\n\n    _flatten: function _flatten(arrays) {\n      var items = _ember['default'].A([]);\n\n      arrays.forEach(function (array) {\n        array.forEach(function (item) {\n          items.addObject(item);\n        });\n      });\n\n      return items;\n    },\n\n    lineNumbers: _ember['default'].computed('attrs.currentWaveNumber', 'attrs.towersGroups.[]', 'attrs.waveStarted', 'towerGroupStyles.[]', 'towerStylesHidden', 'towers.[]', 'towerStyles.[]', function () {\n      var lineCount = this._getLinesForManualProperties() + this._getLinesForBraces() + this._getLinesForInputs() + this._getLinesForLineBreaks(); // TG + T - 1\n\n      var lineNumbers = [];\n      for (var i = 1; i <= lineCount; i++) {\n        lineNumbers.push(i);\n      }\n\n      return lineNumbers;\n    }),\n\n    towerGroupStylesMapped: _ember['default'].computed.mapBy('attrs.towerGroups', 'styles'),\n\n    towerGroupStyles: _ember['default'].computed('attrs.currentWaveNumber', 'attrs.waveStarted', 'towerGroupStylesMapped.@each.[]', function () {\n      return this._flatten(this.get('towerGroupStylesMapped'));\n    }),\n\n    towersMapped: _ember['default'].computed.mapBy('attrs.towerGroups', 'towers'),\n\n    towers: _ember['default'].computed('towersMapped.@each.[]', function () {\n      return this._flatten(this.get('towersMapped'));\n    }),\n\n    towerStylesMapped: _ember['default'].computed.mapBy('towers', 'styles'),\n\n    towerStyles: _ember['default'].computed('towerStylesMapped.@each.[]', function () {\n      return this._flatten(this.get('towerStylesMapped'));\n    })\n  });\n\n  /////////////////////\n  //                 //\n  //   Shake Error   //\n  //                 //\n  /////////////////////\n\n  StylesheetComponent.reopen({\n    shakeActive: false,\n\n    _delayNextShake: function _delayNextShake() {\n      var _this2 = this;\n\n      this.set('shakeActive', true);\n\n      _ember['default'].run.later(this, function () {\n        _this2.set('shakeActive', false);\n      }, 1300);\n    },\n\n    _shake: function _shake() {\n      if (this.get('shakeActive')) {\n        return;\n      }\n\n      this._delayNextShake();\n\n      var l = 20;\n      for (var i = 0; i < 10; i++) {\n        this.$().animate({\n          'margin-left': \"+=\" + (l = -l) + 'px',\n          'margin-right': \"-=\" + l + 'px'\n        }, 115);\n      }\n    },\n\n    actions: {\n      shake: function shake() {\n        this._shake();\n      }\n    }\n  });\n\n  /////////////////////////\n  //                     //\n  //   Input Reporting   //\n  //                     //\n  /////////////////////////\n\n  StylesheetComponent.reopen({\n    finalInputFound: false,\n\n    finalTowerId: null,\n\n    firstTowerGroupId: null,\n\n    _setFirstAndFinalUnitIds: _ember['default'].on('init', _ember['default'].observer('attrs.currentWaveNumber', 'attrs.waveStarted', function () {\n      if (!this.attrs.waveStarted) {\n        var firstTowerGroup = this.attrs.towerGroups.get('firstObject');\n        var firstTowerGroupId = firstTowerGroup.get('id');\n        this.set('firstTowerGroupId', firstTowerGroupId);\n\n        var finalTowerGroup = this.attrs.towerGroups.get('lastObject');\n        var finalTower = finalTowerGroup.get('towers').get('lastObject');\n        var finalTowerId = finalTower.get('id');\n        this.set('finalTowerId', finalTowerId);\n      }\n    })),\n\n    actions: {\n      notifyFinalInput: function notifyFinalInput() {\n        this.set('finalInputFound', true);\n      }\n    }\n  });\n\n  /////////////////////\n  //                 //\n  //   Help Button   //\n  //                 //\n  /////////////////////\n\n  StylesheetComponent.reopen({\n    actions: {\n      showOverlay: function showOverlay() {\n        this.attrs['show-overlay']();\n      }\n    }\n  });\n\n  exports['default'] = StylesheetComponent;\n});","define(\"tower-defense/components/td-game/stylesheet/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 2,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 4,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 1,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"stylesheet__line-number\");\n          var el2 = dom.createComment(\"\");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 0, 0);\n          return morphs;\n        },\n        statements: [[\"content\", \"lineNumber\", [\"loc\", [null, [3, 41], [3, 55]]]]],\n        locals: [\"lineNumber\"],\n        templates: []\n      };\n    })();\n    var child1 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 36,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 37,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: true,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes() {\n            return [];\n          },\n          statements: [],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child1 = (function () {\n        var child0 = (function () {\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 38,\n                  \"column\": 6\n                },\n                \"end\": {\n                  \"line\": 57,\n                  \"column\": 6\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 1,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createTextNode(\"        \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"li\");\n              dom.setAttribute(el1, \"class\", \"block__line block__brace-line\");\n              var el2 = dom.createTextNode(\"\\n          \");\n              dom.appendChild(el1, el2);\n              var el2 = dom.createElement(\"span\");\n              dom.setAttribute(el2, \"class\", \"block__selector\");\n              var el3 = dom.createTextNode(\".\");\n              dom.appendChild(el2, el3);\n              var el3 = dom.createComment(\"\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\"\\n          \");\n              dom.appendChild(el1, el2);\n              var el2 = dom.createElement(\"span\");\n              dom.setAttribute(el2, \"class\", \"block__brace\");\n              var el3 = dom.createTextNode(\"{\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\"\\n        \");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n        \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createComment(\"\");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n        \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"li\");\n              dom.setAttribute(el1, \"class\", \"block__line block__brace-line block__brace-line--close\");\n              var el2 = dom.createTextNode(\"\\n          \");\n              dom.appendChild(el1, el2);\n              var el2 = dom.createElement(\"span\");\n              dom.setAttribute(el2, \"class\", \"block__brace\");\n              var el3 = dom.createTextNode(\"}\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\"\\n        \");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var morphs = new Array(2);\n              morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1, 1]), 1, 1);\n              morphs[1] = dom.createMorphAt(fragment, 3, 3, contextualElement);\n              return morphs;\n            },\n            statements: [[\"content\", \"tower.selector\", [\"loc\", [null, [40, 41], [40, 59]]]], [\"inline\", \"td-game/stylesheet/block\", [], [\"finalInputFound\", [\"subexpr\", \"readonly\", [[\"get\", \"finalInputFound\", [\"loc\", [null, [43, 61], [43, 76]]]]], [], [\"loc\", [null, [43, 51], [43, 77]]]], \"finalTowerId\", [\"subexpr\", \"readonly\", [[\"get\", \"finalTowerId\", [\"loc\", [null, [44, 58], [44, 70]]]]], [], [\"loc\", [null, [44, 48], [44, 71]]]], \"firstTowerGroupId\", [\"subexpr\", \"readonly\", [[\"get\", \"firstTowerGroupId\", [\"loc\", [null, [45, 63], [45, 80]]]]], [], [\"loc\", [null, [45, 53], [45, 81]]]], \"notify-final-input\", [\"subexpr\", \"action\", [\"notifyFinalInput\"], [], [\"loc\", [null, [46, 54], [46, 81]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.overlayShown\", [\"loc\", [null, [47, 58], [47, 76]]]]], [], [\"loc\", [null, [47, 48], [47, 77]]]], \"select-tower\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower\", [\"loc\", [null, [48, 56], [48, 74]]]]], [], [\"loc\", [null, [48, 48], [48, 75]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.selectedTower\", [\"loc\", [null, [49, 59], [49, 78]]]]], [], [\"loc\", [null, [49, 49], [49, 79]]]], \"shake-stylesheet\", [\"subexpr\", \"action\", [\"shake\"], [], [\"loc\", [null, [50, 52], [50, 68]]]], \"tower\", [\"subexpr\", \"readonly\", [[\"get\", \"tower\", [\"loc\", [null, [51, 51], [51, 56]]]]], [], [\"loc\", [null, [51, 41], [51, 57]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [52, 57], [52, 74]]]]], [], [\"loc\", [null, [52, 47], [52, 75]]]], \"waveStarting\", [\"subexpr\", \"readonly\", [[\"get\", \"waveStarting\", [\"loc\", [null, [53, 58], [53, 70]]]]], [], [\"loc\", [null, [53, 48], [53, 71]]]]], [\"loc\", [null, [43, 8], [53, 73]]]]],\n            locals: [\"tower\"],\n            templates: []\n          };\n        })();\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 37,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 58,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createComment(\"\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n            dom.insertBoundary(fragment, 0);\n            dom.insertBoundary(fragment, null);\n            return morphs;\n          },\n          statements: [[\"block\", \"each\", [[\"get\", \"towerGroup.towers\", [\"loc\", [null, [38, 14], [38, 31]]]]], [], 0, null, [\"loc\", [null, [38, 6], [57, 15]]]]],\n          locals: [],\n          templates: [child0]\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 14,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 59,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 1,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"li\");\n          dom.setAttribute(el1, \"class\", \"block__line block__brace-line\");\n          var el2 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"span\");\n          dom.setAttribute(el2, \"class\", \"block__selector\");\n          var el3 = dom.createTextNode(\".\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createComment(\"\");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"span\");\n          dom.setAttribute(el2, \"class\", \"block__brace\");\n          var el3 = dom.createTextNode(\"{\");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"li\");\n          dom.setAttribute(el1, \"class\", \"block__line block__brace-line block__brace-line--close\");\n          var el2 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"span\");\n          dom.setAttribute(el2, \"class\", \"block__brace\");\n          var el3 = dom.createTextNode(\"}\");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(3);\n          morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1, 1]), 1, 1);\n          morphs[1] = dom.createMorphAt(fragment, 3, 3, contextualElement);\n          morphs[2] = dom.createMorphAt(fragment, 7, 7, contextualElement);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"content\", \"towerGroup.selector\", [\"loc\", [null, [16, 37], [16, 60]]]], [\"inline\", \"td-game/stylesheet/block\", [], [\"currentWaveNumber\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.currentWaveNumber\", [\"loc\", [null, [20, 59], [20, 82]]]]], [], [\"loc\", [null, [20, 49], [20, 83]]]], \"finalInputFound\", [\"subexpr\", \"readonly\", [[\"get\", \"finalInputFound\", [\"loc\", [null, [21, 57], [21, 72]]]]], [], [\"loc\", [null, [21, 47], [21, 73]]]], \"finalTowerId\", [\"subexpr\", \"readonly\", [[\"get\", \"finalTowerId\", [\"loc\", [null, [22, 54], [22, 66]]]]], [], [\"loc\", [null, [22, 44], [22, 67]]]], \"firstTowerGroupId\", [\"subexpr\", \"readonly\", [[\"get\", \"firstTowerGroupId\", [\"loc\", [null, [23, 59], [23, 76]]]]], [], [\"loc\", [null, [23, 49], [23, 77]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.overlayShown\", [\"loc\", [null, [24, 54], [24, 72]]]]], [], [\"loc\", [null, [24, 44], [24, 73]]]], \"select-tower-group\", [\"subexpr\", \"action\", [[\"get\", \"attrs.select-tower-group\", [\"loc\", [null, [25, 58], [25, 82]]]]], [], [\"loc\", [null, [25, 50], [25, 83]]]], \"selectedTowerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.selectedTowerGroup\", [\"loc\", [null, [26, 60], [26, 84]]]]], [], [\"loc\", [null, [26, 50], [26, 85]]]], \"shake-stylesheet\", [\"subexpr\", \"action\", [\"shake\"], [], [\"loc\", [null, [27, 48], [27, 64]]]], \"towerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"towerGroup\", [\"loc\", [null, [28, 52], [28, 62]]]]], [], [\"loc\", [null, [28, 42], [28, 63]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [29, 53], [29, 70]]]]], [], [\"loc\", [null, [29, 43], [29, 71]]]], \"waveStarting\", [\"subexpr\", \"readonly\", [[\"get\", \"waveStarting\", [\"loc\", [null, [30, 54], [30, 66]]]]], [], [\"loc\", [null, [30, 44], [30, 67]]]]], [\"loc\", [null, [20, 4], [30, 69]]]], [\"block\", \"if\", [[\"get\", \"attrs.towerStylesHidden\", [\"loc\", [null, [36, 10], [36, 33]]]]], [], 0, 1, [\"loc\", [null, [36, 4], [58, 11]]]]],\n        locals: [\"towerGroup\"],\n        templates: [child0, child1]\n      };\n    })();\n    var child2 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 70,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 72,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"      \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"stylesheet__cancel-wave-button\");\n            var el2 = dom.createTextNode(\"Cancelar Oleada\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes() {\n            return [];\n          },\n          statements: [],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child1 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 72,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 74,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"      \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"stylesheet__cancel-wave-button stylesheet__cancel-wave-button--active\");\n            var el2 = dom.createTextNode(\"Cancelar Oleada\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element1 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element1);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"cancelWave\"], [], [\"loc\", [null, [73, 92], [73, 115]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 69,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 75,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"if\", [[\"get\", \"attrs.cancellingWave\", [\"loc\", [null, [70, 10], [70, 30]]]]], [], 0, 1, [\"loc\", [null, [70, 4], [74, 11]]]]],\n        locals: [],\n        templates: [child0, child1]\n      };\n    })();\n    var child3 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 76,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 78,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"      \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"stylesheet__start-wave-button\");\n            var el2 = dom.createTextNode(\"Comenzar Oleada\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes() {\n            return [];\n          },\n          statements: [],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child1 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 78,\n                \"column\": 4\n              },\n              \"end\": {\n                \"line\": 80,\n                \"column\": 4\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"      \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"stylesheet__start-wave-button stylesheet__start-wave-button--active\");\n            var el2 = dom.createTextNode(\"Comenzar Oleada\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element0 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element0);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"startWave\"], [], [\"loc\", [null, [79, 90], [79, 112]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 75,\n              \"column\": 2\n            },\n            \"end\": {\n              \"line\": 81,\n              \"column\": 2\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n          dom.insertBoundary(fragment, 0);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"if\", [[\"get\", \"attrs.towersColliding\", [\"loc\", [null, [76, 10], [76, 31]]]]], [], 0, 1, [\"loc\", [null, [76, 4], [80, 11]]]]],\n        locals: [],\n        templates: [child0, child1]\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"multiple-nodes\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 83,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/stylesheet/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createElement(\"div\");\n        dom.setAttribute(el1, \"class\", \"stylesheet__line-numbers\");\n        var el2 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createComment(\"\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createElement(\"div\");\n        dom.setAttribute(el1, \"class\", \"stylesheet__content\");\n        var el2 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createElement(\"button\");\n        dom.setAttribute(el2, \"class\", \"stylesheet__help--button\");\n        var el3 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createElement(\"a\");\n        dom.setAttribute(el3, \"class\", \"help__link\");\n        var el4 = dom.createTextNode(\"\\n      \");\n        dom.appendChild(el3, el4);\n        var el4 = dom.createElement(\"i\");\n        dom.setAttribute(el4, \"class\", \"fa fa-lg fa-question-circle\");\n        dom.appendChild(el3, el4);\n        var el4 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el3, el4);\n        dom.appendChild(el2, el3);\n        var el3 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el2, el3);\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createComment(\"\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createElement(\"div\");\n        dom.setAttribute(el2, \"class\", \"stylesheet__hide-inputs\");\n        var el3 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createComment(\"\");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createTextNode(\"\\n    \");\n        dom.appendChild(el2, el3);\n        var el3 = dom.createElement(\"span\");\n        dom.setAttribute(el3, \"class\", \"hide-inputs__text\");\n        var el4 = dom.createTextNode(\"ocultar entradas de las torres\");\n        dom.appendChild(el3, el4);\n        dom.appendChild(el2, el3);\n        var el3 = dom.createTextNode(\"\\n  \");\n        dom.appendChild(el2, el3);\n        dom.appendChild(el1, el2);\n        var el2 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el1, el2);\n        var el2 = dom.createComment(\"\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var element2 = dom.childAt(fragment, [2]);\n        var element3 = dom.childAt(element2, [1]);\n        var element4 = dom.childAt(element2, [5]);\n        var element5 = dom.childAt(element4, [3]);\n        var morphs = new Array(6);\n        morphs[0] = dom.createMorphAt(dom.childAt(fragment, [0]), 1, 1);\n        morphs[1] = dom.createElementMorph(element3);\n        morphs[2] = dom.createMorphAt(element2, 3, 3);\n        morphs[3] = dom.createMorphAt(element4, 1, 1);\n        morphs[4] = dom.createElementMorph(element5);\n        morphs[5] = dom.createMorphAt(element2, 7, 7);\n        return morphs;\n      },\n      statements: [[\"block\", \"each\", [[\"get\", \"lineNumbers\", [\"loc\", [null, [2, 10], [2, 21]]]]], [], 0, null, [\"loc\", [null, [2, 2], [4, 11]]]], [\"element\", \"action\", [\"showOverlay\"], [], [\"loc\", [null, [8, 43], [8, 67]]]], [\"block\", \"each\", [[\"get\", \"attrs.towerGroups\", [\"loc\", [null, [14, 10], [14, 27]]]]], [], 1, null, [\"loc\", [null, [14, 2], [59, 11]]]], [\"inline\", \"input\", [], [\"class\", \"hide-inputs__checkbox\", \"checked\", [\"subexpr\", \"@mut\", [[\"get\", \"towerInputsHidden\", [\"loc\", [null, [63, 20], [63, 37]]]]], [], []], \"name\", \"towerInputsHidden\", \"type\", \"checkbox\"], [\"loc\", [null, [62, 4], [65, 29]]]], [\"element\", \"action\", [\"toggleHideInputs\"], [], [\"loc\", [null, [66, 36], [66, 65]]]], [\"block\", \"if\", [[\"get\", \"attrs.waveStarted\", [\"loc\", [null, [69, 8], [69, 25]]]]], [], 2, 3, [\"loc\", [null, [69, 2], [81, 9]]]]],\n      locals: [],\n      templates: [child0, child1, child2, child3]\n    };\n  })());\n});","define(\"tower-defense/components/td-game/template\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      var child0 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 9,\n                \"column\": 8\n              },\n              \"end\": {\n                \"line\": 15,\n                \"column\": 7\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"          \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"nav__button\");\n            dom.setAttribute(el1, \"type\", \"button\");\n            dom.setAttribute(el1, \"name\", \"button\");\n            var el2 = dom.createTextNode(\"\\n            \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"i\");\n            dom.setAttribute(el2, \"class\", \"fa fa-angle-double-left\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n          \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createComment(\"\\n    \");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element21 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element21);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"changeWavePrevious\"], [], [\"loc\", [null, [12, 32], [12, 63]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child1 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 15,\n                \"column\": 7\n              },\n              \"end\": {\n                \"line\": 21,\n                \"column\": 8\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createComment(\"\\n        \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"nav__button nav__button--active\");\n            dom.setAttribute(el1, \"type\", \"button\");\n            dom.setAttribute(el1, \"name\", \"button\");\n            var el2 = dom.createTextNode(\"\\n            \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"i\");\n            dom.setAttribute(el2, \"class\", \"fa fa-angle-double-left\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n          \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createComment(\"\\n     \");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element20 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element20);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"changeWavePrevious\"], [], [\"loc\", [null, [18, 32], [18, 63]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child2 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 33,\n                \"column\": 8\n              },\n              \"end\": {\n                \"line\": 39,\n                \"column\": 8\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createComment(\"\\n       \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"nav__button\");\n            dom.setAttribute(el1, \"type\", \"button\");\n            dom.setAttribute(el1, \"name\", \"button\");\n            var el2 = dom.createTextNode(\"\\n            \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"i\");\n            dom.setAttribute(el2, \"class\", \"fa fa-angle-double-right\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n          \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createComment(\"\\n     \");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element19 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element19);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"changeWaveNext\"], [], [\"loc\", [null, [36, 32], [36, 59]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child3 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 39,\n                \"column\": 8\n              },\n              \"end\": {\n                \"line\": 45,\n                \"column\": 8\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createComment(\"\\n       \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"button\");\n            dom.setAttribute(el1, \"class\", \"nav__button nav__button--active\");\n            dom.setAttribute(el1, \"type\", \"button\");\n            dom.setAttribute(el1, \"name\", \"button\");\n            var el2 = dom.createTextNode(\"\\n            \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"i\");\n            dom.setAttribute(el2, \"class\", \"fa fa-angle-double-right\");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n          \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element18 = dom.childAt(fragment, [1]);\n            var morphs = new Array(1);\n            morphs[0] = dom.createElementMorph(element18);\n            return morphs;\n          },\n          statements: [[\"element\", \"action\", [\"changeWaveNext\"], [], [\"loc\", [null, [42, 32], [42, 59]]]]],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child4 = (function () {\n        var child0 = (function () {\n          var child0 = (function () {\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 51,\n                    \"column\": 16\n                  },\n                  \"end\": {\n                    \"line\": 53,\n                    \"column\": 16\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createTextNode(\"                  \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"button\");\n                dom.setAttribute(el1, \"class\", \"menu__wave-link menu__wave-link\");\n                var el2 = dom.createComment(\"\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                var morphs = new Array(1);\n                morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1]), 0, 0);\n                return morphs;\n              },\n              statements: [[\"content\", \"waveLink\", [\"loc\", [null, [52, 66], [52, 78]]]]],\n              locals: [],\n              templates: []\n            };\n          })();\n          var child1 = (function () {\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 53,\n                    \"column\": 16\n                  },\n                  \"end\": {\n                    \"line\": 55,\n                    \"column\": 16\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createTextNode(\"                  \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"button\");\n                dom.setAttribute(el1, \"class\", \"menu__wave-link menu__wave-link--active\");\n                var el2 = dom.createComment(\"\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                var element17 = dom.childAt(fragment, [1]);\n                var morphs = new Array(2);\n                morphs[0] = dom.createElementMorph(element17);\n                morphs[1] = dom.createMorphAt(element17, 0, 0);\n                return morphs;\n              },\n              statements: [[\"element\", \"action\", [\"changeWaveSelect\", [\"get\", \"waveLink\", [\"loc\", [null, [54, 102], [54, 110]]]]], [], [\"loc\", [null, [54, 74], [54, 112]]]], [\"content\", \"waveLink\", [\"loc\", [null, [54, 113], [54, 125]]]]],\n              locals: [],\n              templates: []\n            };\n          })();\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 50,\n                  \"column\": 14\n                },\n                \"end\": {\n                  \"line\": 56,\n                  \"column\": 14\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 1,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createComment(\"\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var morphs = new Array(1);\n              morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n              dom.insertBoundary(fragment, 0);\n              dom.insertBoundary(fragment, null);\n              return morphs;\n            },\n            statements: [[\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"waveLink\", [\"loc\", [null, [51, 26], [51, 34]]]], [\"get\", \"currentWaveNumber\", [\"loc\", [null, [51, 35], [51, 52]]]]], [], [\"loc\", [null, [51, 22], [51, 53]]]]], [], 0, 1, [\"loc\", [null, [51, 16], [55, 23]]]]],\n            locals: [\"waveLink\"],\n            templates: [child0, child1]\n          };\n        })();\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 47,\n                \"column\": 8\n              },\n              \"end\": {\n                \"line\": 59,\n                \"column\": 8\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"          \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"div\");\n            dom.setAttribute(el1, \"class\", \"button__menu\");\n            var el2 = dom.createTextNode(\"\\n            \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"div\");\n            dom.setAttribute(el2, \"class\", \"menu__wave-links\");\n            var el3 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el2, el3);\n            var el3 = dom.createComment(\"\");\n            dom.appendChild(el2, el3);\n            var el3 = dom.createTextNode(\"            \");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n          \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1, 1]), 1, 1);\n            return morphs;\n          },\n          statements: [[\"block\", \"each\", [[\"get\", \"waveLinks\", [\"loc\", [null, [50, 22], [50, 31]]]]], [], 0, null, [\"loc\", [null, [50, 14], [56, 23]]]]],\n          locals: [],\n          templates: [child0]\n        };\n      })();\n      var child5 = (function () {\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 74,\n                \"column\": 14\n              },\n              \"end\": {\n                \"line\": 80,\n                \"column\": 14\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"                \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"p\");\n            var el2 = dom.createElement(\"u\");\n            var el3 = dom.createTextNode(\"flex-start\");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\": group items at the start of a container's main axis\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n                \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"p\");\n            var el2 = dom.createElement(\"u\");\n            var el3 = dom.createTextNode(\"flex-end\");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\": group items at the end of the main axis\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n                \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"p\");\n            var el2 = dom.createElement(\"u\");\n            var el3 = dom.createTextNode(\"center\");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\": group items in the center of the main axis\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n                \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"p\");\n            var el2 = dom.createElement(\"u\");\n            var el3 = dom.createTextNode(\"space-between\");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\": evenly distribute items along the main axis such that the first item aligns at the start and the final item aligns at the end\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n                \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"p\");\n            var el2 = dom.createElement(\"u\");\n            var el3 = dom.createTextNode(\"space-around\");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\": evenly distribute items along the main axis such that all items have equal space around them\");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes() {\n            return [];\n          },\n          statements: [],\n          locals: [],\n          templates: []\n        };\n      })();\n      var child6 = (function () {\n        var child0 = (function () {\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 80,\n                  \"column\": 14\n                },\n                \"end\": {\n                  \"line\": 84,\n                  \"column\": 14\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 0,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createTextNode(\"                \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"p\");\n              var el2 = dom.createElement(\"u\");\n              var el3 = dom.createTextNode(\"flex-start\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\": align items across the start of a container's cross axis\");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n                \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"p\");\n              var el2 = dom.createElement(\"u\");\n              var el3 = dom.createTextNode(\"flex-end\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\": align items across the end of the cross axis\");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n                \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"p\");\n              var el2 = dom.createElement(\"u\");\n              var el3 = dom.createTextNode(\"center\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\": align items across the center of the cross axis\");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes() {\n              return [];\n            },\n            statements: [],\n            locals: [],\n            templates: []\n          };\n        })();\n        var child1 = (function () {\n          var child0 = (function () {\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 84,\n                    \"column\": 14\n                  },\n                  \"end\": {\n                    \"line\": 89,\n                    \"column\": 14\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createTextNode(\"                \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"p\");\n                var el2 = dom.createElement(\"u\");\n                var el3 = dom.createTextNode(\"row\");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\": lay out the main axis from left to right\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n                \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"p\");\n                var el2 = dom.createElement(\"u\");\n                var el3 = dom.createTextNode(\"row-reverse\");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\": lay out the main axis from right to left\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n                \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"p\");\n                var el2 = dom.createElement(\"u\");\n                var el3 = dom.createTextNode(\"column\");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\": lay out the main axis from top to bottom\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n                \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"p\");\n                var el2 = dom.createElement(\"u\");\n                var el3 = dom.createTextNode(\"column-reverse\");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\": lay out the main axis from bottom to top\");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes() {\n                return [];\n              },\n              statements: [],\n              locals: [],\n              templates: []\n            };\n          })();\n          var child1 = (function () {\n            var child0 = (function () {\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 89,\n                      \"column\": 14\n                    },\n                    \"end\": {\n                      \"line\": 91,\n                      \"column\": 14\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createTextNode(\"                \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"p\");\n                  var el2 = dom.createElement(\"u\");\n                  var el3 = dom.createTextNode(\"#\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\": position an item relative to the other items in the container\");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes() {\n                  return [];\n                },\n                statements: [],\n                locals: [],\n                templates: []\n              };\n            })();\n            var child1 = (function () {\n              var child0 = (function () {\n                return {\n                  meta: {\n                    \"fragmentReason\": false,\n                    \"revision\": \"Ember@2.2.0\",\n                    \"loc\": {\n                      \"source\": null,\n                      \"start\": {\n                        \"line\": 91,\n                        \"column\": 14\n                      },\n                      \"end\": {\n                        \"line\": 95,\n                        \"column\": 14\n                      }\n                    },\n                    \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                  },\n                  isEmpty: false,\n                  arity: 0,\n                  cachedFragment: null,\n                  hasRendered: false,\n                  buildFragment: function buildFragment(dom) {\n                    var el0 = dom.createDocumentFragment();\n                    var el1 = dom.createTextNode(\"                \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"p\");\n                    var el2 = dom.createElement(\"u\");\n                    var el3 = dom.createTextNode(\"flex-start\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\": align item at the start of a container's cross axis\");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n                \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"p\");\n                    var el2 = dom.createElement(\"u\");\n                    var el3 = dom.createTextNode(\"flex-end\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\": align item at the end of the cross axis\");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n                \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"p\");\n                    var el2 = dom.createElement(\"u\");\n                    var el3 = dom.createTextNode(\"center\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\": align item at the center of the cross axis\");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n              \");\n                    dom.appendChild(el0, el1);\n                    return el0;\n                  },\n                  buildRenderNodes: function buildRenderNodes() {\n                    return [];\n                  },\n                  statements: [],\n                  locals: [],\n                  templates: []\n                };\n              })();\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 91,\n                      \"column\": 14\n                    },\n                    \"end\": {\n                      \"line\": 95,\n                      \"column\": 14\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createComment(\"\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var morphs = new Array(1);\n                  morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n                  dom.insertBoundary(fragment, 0);\n                  dom.insertBoundary(fragment, null);\n                  return morphs;\n                },\n                statements: [[\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"instructionToolTipProperty\", [\"loc\", [null, [91, 28], [91, 54]]]], \"align-self ▾\"], [], [\"loc\", [null, [91, 24], [91, 70]]]]], [], 0, null, [\"loc\", [null, [91, 14], [95, 14]]]]],\n                locals: [],\n                templates: [child0]\n              };\n            })();\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 89,\n                    \"column\": 14\n                  },\n                  \"end\": {\n                    \"line\": 95,\n                    \"column\": 14\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createComment(\"\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                var morphs = new Array(1);\n                morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n                dom.insertBoundary(fragment, 0);\n                dom.insertBoundary(fragment, null);\n                return morphs;\n              },\n              statements: [[\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"instructionToolTipProperty\", [\"loc\", [null, [89, 28], [89, 54]]]], \"order ▾\"], [], [\"loc\", [null, [89, 24], [89, 65]]]]], [], 0, 1, [\"loc\", [null, [89, 14], [95, 14]]]]],\n              locals: [],\n              templates: [child0, child1]\n            };\n          })();\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 84,\n                  \"column\": 14\n                },\n                \"end\": {\n                  \"line\": 95,\n                  \"column\": 14\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 0,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createComment(\"\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var morphs = new Array(1);\n              morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n              dom.insertBoundary(fragment, 0);\n              dom.insertBoundary(fragment, null);\n              return morphs;\n            },\n            statements: [[\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"instructionToolTipProperty\", [\"loc\", [null, [84, 28], [84, 54]]]], \"flex-direction ▾\"], [], [\"loc\", [null, [84, 24], [84, 74]]]]], [], 0, 1, [\"loc\", [null, [84, 14], [95, 14]]]]],\n            locals: [],\n            templates: [child0, child1]\n          };\n        })();\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 80,\n                \"column\": 14\n              },\n              \"end\": {\n                \"line\": 95,\n                \"column\": 14\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createComment(\"\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var morphs = new Array(1);\n            morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n            dom.insertBoundary(fragment, 0);\n            dom.insertBoundary(fragment, null);\n            return morphs;\n          },\n          statements: [[\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"instructionToolTipProperty\", [\"loc\", [null, [80, 28], [80, 54]]]], \"align-items ▾\"], [], [\"loc\", [null, [80, 24], [80, 71]]]]], [], 0, 1, [\"loc\", [null, [80, 14], [95, 14]]]]],\n          locals: [],\n          templates: [child0, child1]\n        };\n      })();\n      var child7 = (function () {\n        var child0 = (function () {\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 160,\n                  \"column\": 8\n                },\n                \"end\": {\n                  \"line\": 168,\n                  \"column\": 8\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 0,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createTextNode(\"          \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"div\");\n              dom.setAttribute(el1, \"class\", \"modal__instructions\");\n              var el2 = dom.createComment(\"\");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\\n          \");\n              dom.appendChild(el0, el1);\n              var el1 = dom.createElement(\"div\");\n              dom.setAttribute(el1, \"class\", \"modal__actions\");\n              var el2 = dom.createTextNode(\"\\n            \");\n              dom.appendChild(el1, el2);\n              var el2 = dom.createElement(\"button\");\n              dom.setAttribute(el2, \"class\", \"modal__button\");\n              var el3 = dom.createTextNode(\"Ok, got it!\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\"\\n            \");\n              dom.appendChild(el1, el2);\n              var el2 = dom.createElement(\"a\");\n              dom.setAttribute(el2, \"class\", \"modal__support-link\");\n              var el3 = dom.createTextNode(\"Support this project\");\n              dom.appendChild(el2, el3);\n              dom.appendChild(el1, el2);\n              var el2 = dom.createTextNode(\"\\n          \");\n              dom.appendChild(el1, el2);\n              dom.appendChild(el0, el1);\n              var el1 = dom.createTextNode(\"\\n\\n\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var element13 = dom.childAt(fragment, [3]);\n              var element14 = dom.childAt(element13, [1]);\n              var element15 = dom.childAt(element13, [3]);\n              var morphs = new Array(3);\n              morphs[0] = dom.createUnsafeMorphAt(dom.childAt(fragment, [1]), 0, 0);\n              morphs[1] = dom.createElementMorph(element14);\n              morphs[2] = dom.createElementMorph(element15);\n              return morphs;\n            },\n            statements: [[\"content\", \"instructionsMain\", [\"loc\", [null, [161, 43], [161, 65]]]], [\"element\", \"action\", [\"hideOverlay\"], [], [\"loc\", [null, [164, 42], [164, 66]]]], [\"element\", \"action\", [\"showSupportModal\"], [], [\"loc\", [null, [165, 43], [165, 72]]]]],\n            locals: [],\n            templates: []\n          };\n        })();\n        var child1 = (function () {\n          var child0 = (function () {\n            var child0 = (function () {\n              var child0 = (function () {\n                return {\n                  meta: {\n                    \"fragmentReason\": false,\n                    \"revision\": \"Ember@2.2.0\",\n                    \"loc\": {\n                      \"source\": null,\n                      \"start\": {\n                        \"line\": 173,\n                        \"column\": 14\n                      },\n                      \"end\": {\n                        \"line\": 182,\n                        \"column\": 14\n                      }\n                    },\n                    \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                  },\n                  isEmpty: false,\n                  arity: 0,\n                  cachedFragment: null,\n                  hasRendered: false,\n                  buildFragment: function buildFragment(dom) {\n                    var el0 = dom.createDocumentFragment();\n                    var el1 = dom.createTextNode(\"                \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"p\");\n                    var el2 = dom.createTextNode(\"You beat the game! If you had a good time, follow me for\\n                   updates and spread the word about flexboxdefense.com!\");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n                \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"div\");\n                    dom.setAttribute(el1, \"class\", \"custom-follow-button\");\n                    var el2 = dom.createTextNode(\"\\n                  \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"a\");\n                    dom.setAttribute(el2, \"href\", \"https://twitter.com/intent/user?screen_name=channingallen\");\n                    dom.setAttribute(el2, \"target\", \"_blank\");\n                    dom.setAttribute(el2, \"alt\", \"Follow Channing Allen\");\n                    var el3 = dom.createTextNode(\"\\n                    \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"i\");\n                    dom.setAttribute(el3, \"class\", \"btn-icon\");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n                    \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"span\");\n                    dom.setAttribute(el3, \"class\", \"btn-text\");\n                    var el4 = dom.createTextNode(\"Follow @ChanningAllen\");\n                    dom.appendChild(el3, el4);\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n                  \");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n                \");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n\");\n                    dom.appendChild(el0, el1);\n                    return el0;\n                  },\n                  buildRenderNodes: function buildRenderNodes() {\n                    return [];\n                  },\n                  statements: [],\n                  locals: [],\n                  templates: []\n                };\n              })();\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 169,\n                      \"column\": 10\n                    },\n                    \"end\": {\n                      \"line\": 184,\n                      \"column\": 10\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createTextNode(\"            \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"div\");\n                  dom.setAttribute(el1, \"class\", \"modal__grade\");\n                  var el2 = dom.createTextNode(\"\\n              \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"p\");\n                  var el3 = dom.createTextNode(\"Congratulations! You scored \");\n                  dom.appendChild(el2, el3);\n                  var el3 = dom.createComment(\"\");\n                  dom.appendChild(el2, el3);\n                  var el3 = dom.createTextNode(\" points!\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n\\n\");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createComment(\"\");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"            \");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var element8 = dom.childAt(fragment, [1]);\n                  var morphs = new Array(2);\n                  morphs[0] = dom.createMorphAt(dom.childAt(element8, [1]), 1, 1);\n                  morphs[1] = dom.createMorphAt(element8, 3, 3);\n                  return morphs;\n                },\n                statements: [[\"content\", \"score\", [\"loc\", [null, [171, 45], [171, 54]]]], [\"block\", \"if\", [[\"get\", \"isLastWave\", [\"loc\", [null, [173, 20], [173, 30]]]]], [], 0, null, [\"loc\", [null, [173, 14], [182, 21]]]]],\n                locals: [],\n                templates: [child0]\n              };\n            })();\n            var child1 = (function () {\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 184,\n                      \"column\": 10\n                    },\n                    \"end\": {\n                      \"line\": 188,\n                      \"column\": 10\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createTextNode(\"            \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"div\");\n                  dom.setAttribute(el1, \"class\", \"modal__grade\");\n                  var el2 = dom.createTextNode(\"\\n              \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"p\");\n                  var el3 = dom.createTextNode(\"You scored \");\n                  dom.appendChild(el2, el3);\n                  var el3 = dom.createComment(\"\");\n                  dom.appendChild(el2, el3);\n                  var el3 = dom.createTextNode(\" points. See if you can get 80 or more!\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n            \");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var morphs = new Array(1);\n                  morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1, 1]), 1, 1);\n                  return morphs;\n                },\n                statements: [[\"content\", \"score\", [\"loc\", [null, [186, 28], [186, 37]]]]],\n                locals: [],\n                templates: []\n              };\n            })();\n            var child2 = (function () {\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 193,\n                      \"column\": 14\n                    },\n                    \"end\": {\n                      \"line\": 195,\n                      \"column\": 14\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createTextNode(\"              \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"button\");\n                  dom.setAttribute(el1, \"class\", \"modal__button\");\n                  var el2 = dom.createTextNode(\"Next wave\");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var element7 = dom.childAt(fragment, [1]);\n                  var morphs = new Array(1);\n                  morphs[0] = dom.createElementMorph(element7);\n                  return morphs;\n                },\n                statements: [[\"element\", \"action\", [\"changeWaveNext\"], [], [\"loc\", [null, [194, 44], [194, 71]]]]],\n                locals: [],\n                templates: []\n              };\n            })();\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 168,\n                    \"column\": 8\n                  },\n                  \"end\": {\n                    \"line\": 200,\n                    \"column\": 8\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createComment(\"\");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n          \");\n                dom.appendChild(el0, el1);\n                var el1 = dom.createElement(\"div\");\n                dom.setAttribute(el1, \"class\", \"modal__actions\");\n                var el2 = dom.createTextNode(\"\\n            \");\n                dom.appendChild(el1, el2);\n                var el2 = dom.createElement(\"div\");\n                dom.setAttribute(el2, \"class\", \"modal__buttons\");\n                var el3 = dom.createTextNode(\"\\n              \");\n                dom.appendChild(el2, el3);\n                var el3 = dom.createElement(\"button\");\n                dom.setAttribute(el3, \"class\", \"modal__button\");\n                var el4 = dom.createTextNode(\"Try again\");\n                dom.appendChild(el3, el4);\n                dom.appendChild(el2, el3);\n                var el3 = dom.createTextNode(\"\\n\");\n                dom.appendChild(el2, el3);\n                var el3 = dom.createComment(\"\");\n                dom.appendChild(el2, el3);\n                var el3 = dom.createTextNode(\"            \");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\"\\n            \");\n                dom.appendChild(el1, el2);\n                var el2 = dom.createElement(\"a\");\n                dom.setAttribute(el2, \"class\", \"modal__support-link\");\n                var el3 = dom.createTextNode(\"Support this project\");\n                dom.appendChild(el2, el3);\n                dom.appendChild(el1, el2);\n                var el2 = dom.createTextNode(\"\\n          \");\n                dom.appendChild(el1, el2);\n                dom.appendChild(el0, el1);\n                var el1 = dom.createTextNode(\"\\n\\n\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                var element9 = dom.childAt(fragment, [2]);\n                var element10 = dom.childAt(element9, [1]);\n                var element11 = dom.childAt(element10, [1]);\n                var element12 = dom.childAt(element9, [3]);\n                var morphs = new Array(4);\n                morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n                morphs[1] = dom.createElementMorph(element11);\n                morphs[2] = dom.createMorphAt(element10, 3, 3);\n                morphs[3] = dom.createElementMorph(element12);\n                dom.insertBoundary(fragment, 0);\n                return morphs;\n              },\n              statements: [[\"block\", \"if\", [[\"get\", \"passed\", [\"loc\", [null, [169, 16], [169, 22]]]]], [], 0, 1, [\"loc\", [null, [169, 10], [188, 17]]]], [\"element\", \"action\", [\"hideOverlay\"], [], [\"loc\", [null, [192, 44], [192, 68]]]], [\"block\", \"unless\", [[\"get\", \"isLastWave\", [\"loc\", [null, [193, 24], [193, 34]]]]], [], 2, null, [\"loc\", [null, [193, 14], [195, 25]]]], [\"element\", \"action\", [\"showSupportModal\"], [], [\"loc\", [null, [197, 43], [197, 72]]]]],\n              locals: [],\n              templates: [child0, child1, child2]\n            };\n          })();\n          var child1 = (function () {\n            var child0 = (function () {\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 200,\n                      \"column\": 8\n                    },\n                    \"end\": {\n                      \"line\": 211,\n                      \"column\": 8\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createTextNode(\"          \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"div\");\n                  dom.setAttribute(el1, \"class\", \"modal__cancellation\");\n                  var el2 = dom.createTextNode(\"\\n            \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"p\");\n                  var el3 = dom.createTextNode(\"Sorry! Flexbox Defense doesn't run well in the background just yet.\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n            \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"p\");\n                  var el3 = dom.createTextNode(\"Mind trying again?\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n          \");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\\n          \");\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createElement(\"div\");\n                  dom.setAttribute(el1, \"class\", \"modal__actions\");\n                  var el2 = dom.createTextNode(\"\\n            \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"button\");\n                  dom.setAttribute(el2, \"class\", \"modal__button\");\n                  var el3 = dom.createTextNode(\"Try again\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n            \");\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createElement(\"a\");\n                  dom.setAttribute(el2, \"class\", \"modal__support-link\");\n                  var el3 = dom.createTextNode(\"Support this project\");\n                  dom.appendChild(el2, el3);\n                  dom.appendChild(el1, el2);\n                  var el2 = dom.createTextNode(\"\\n          \");\n                  dom.appendChild(el1, el2);\n                  dom.appendChild(el0, el1);\n                  var el1 = dom.createTextNode(\"\\n\\n\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var element4 = dom.childAt(fragment, [3]);\n                  var element5 = dom.childAt(element4, [1]);\n                  var element6 = dom.childAt(element4, [3]);\n                  var morphs = new Array(2);\n                  morphs[0] = dom.createElementMorph(element5);\n                  morphs[1] = dom.createElementMorph(element6);\n                  return morphs;\n                },\n                statements: [[\"element\", \"action\", [\"hideOverlay\"], [], [\"loc\", [null, [207, 42], [207, 66]]]], [\"element\", \"action\", [\"showSupportModal\"], [], [\"loc\", [null, [208, 43], [208, 72]]]]],\n                locals: [],\n                templates: []\n              };\n            })();\n            var child1 = (function () {\n              var child0 = (function () {\n                return {\n                  meta: {\n                    \"fragmentReason\": false,\n                    \"revision\": \"Ember@2.2.0\",\n                    \"loc\": {\n                      \"source\": null,\n                      \"start\": {\n                        \"line\": 211,\n                        \"column\": 8\n                      },\n                      \"end\": {\n                        \"line\": 229,\n                        \"column\": 8\n                      }\n                    },\n                    \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                  },\n                  isEmpty: false,\n                  arity: 0,\n                  cachedFragment: null,\n                  hasRendered: false,\n                  buildFragment: function buildFragment(dom) {\n                    var el0 = dom.createDocumentFragment();\n                    var el1 = dom.createTextNode(\"          \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"div\");\n                    dom.setAttribute(el1, \"class\", \"modal__support\");\n                    var el2 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"p\");\n                    var el3 = dom.createTextNode(\"Have you found Flexbox Defense useful? Please make a $5 donation and follow \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"a\");\n                    dom.setAttribute(el3, \"class\", \"support__twitter-link\");\n                    dom.setAttribute(el3, \"href\", \"https://twitter.com/intent/user?screen_name=channingallen\");\n                    dom.setAttribute(el3, \"target\", \"_blank\");\n                    dom.setAttribute(el3, \"alt\", \"Follow Channing Allen\");\n                    var el4 = dom.createTextNode(\"@ChanningAllen\");\n                    dom.appendChild(el3, el4);\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\" on Twitter for updates on this and other projects!\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"form\");\n                    dom.setAttribute(el2, \"action\", \"https://www.paypal.com/cgi-bin/webscr\");\n                    dom.setAttribute(el2, \"class\", \"support__form\");\n                    dom.setAttribute(el2, \"method\", \"post\");\n                    dom.setAttribute(el2, \"target\", \"_blank\");\n                    var el3 = dom.createTextNode(\"\\n              \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"input\");\n                    dom.setAttribute(el3, \"type\", \"hidden\");\n                    dom.setAttribute(el3, \"name\", \"cmd\");\n                    dom.setAttribute(el3, \"value\", \"_s-xclick\");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n              \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"input\");\n                    dom.setAttribute(el3, \"type\", \"hidden\");\n                    dom.setAttribute(el3, \"name\", \"encrypted\");\n                    dom.setAttribute(el3, \"value\", \"-----BEGIN PKCS7-----MIIHFgYJKoZIhvcNAQcEoIIHBzCCBwMCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYC4tjV1A/uLFYH5zLlZJqhacYxWYg+7a8s0C8qBTyWzAy9aF/zQEF0hFiAYYGR0phdSgc/JcAuH2dcXGaPk26qCnDH+hOq9a/eoa5xQIrlpvxekYBlh17xe15burf5hPQEIF4noTxmTqH1APY0BKfC2iIqKpNGkw795S+jwWQXNezELMAkGBSsOAwIaBQAwgZMGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIGgxLxd8AFdqAcNCyiTTIjEJl7nbfzH/Q94ArvpbPPMpZttJnz25lprJSXgk2YgIFWxnyhoR2tC7Z1bEDitpbxMfb9yOXFKlhw6ylGAvJO77qOYT7Dx8sx2DNvRM6F30exh84YnywN/LF/O8rGp/k44t5YHcB4lgGcsSgggOHMIIDgzCCAuygAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wHhcNMDQwMjEzMTAxMzE1WhcNMzUwMjEzMTAxMzE1WjCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFHTt38RMxLXJyO2SmS+Ndl72T7oKJ4u4uw+6awntALWh03PewmIJuzbALScsTS4sZoS1fKciBGoh11gIfHzylvkdNe/hJl66/RGqrj5rFb08sAABNTzDTiqqNpJeBsYs/c2aiGozptX2RlnBktH+SUNpAajW724Nv2Wvhif6sFAgMBAAGjge4wgeswHQYDVR0OBBYEFJaffLvGbxe9WT9S1wob7BDWZJRrMIG7BgNVHSMEgbMwgbCAFJaffLvGbxe9WT9S1wob7BDWZJRroYGUpIGRMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIFfOlaagFrl71+jq6OKidbWFSE+Q4FqROvdgIONth+8kSK//Y/4ihuE4Ymvzn5ceE3S/iBSQQMjyvb+s2TWbQYDwcp129OPIbD9epdr4tJOUNiSojw7BHwYRiPh58S1xGlFgHFXwrEBb3dgNbMUa+u4qectsMAXpVHnD9wIyfmHMYIBmjCCAZYCAQEwgZQwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNjAzMDcwNTQ4MDRaMCMGCSqGSIb3DQEJBDEWBBSrax2Fvj/83f1nFnkaHO+0y7PS0DANBgkqhkiG9w0BAQEFAASBgFgWrz0F95RF/11VsX2/L0Aw0yLTf2eJcEgbbnu0wIqT/9Cwst9uSXCBxTcJ2eSY06vZrAsQsql3pttC1vEKAD4eG+HU8/cC0bQw0Ry9BVILZB9M8PDIfIQ5NaEFoSwNa0kU2DYHbx+ZbbXp+Oawu2dFNqB4PSb7zvzOt9JYpdpX-----END PKCS7-----\");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n              \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"input\");\n                    dom.setAttribute(el3, \"type\", \"image\");\n                    dom.setAttribute(el3, \"src\", \"https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif\");\n                    dom.setAttribute(el3, \"border\", \"0\");\n                    dom.setAttribute(el3, \"name\", \"submit\");\n                    dom.setAttribute(el3, \"alt\", \"PayPal - The safer, easier way to pay online!\");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n              \");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createElement(\"img\");\n                    dom.setAttribute(el3, \"alt\", \"\");\n                    dom.setAttribute(el3, \"border\", \"0\");\n                    dom.setAttribute(el3, \"src\", \"https://www.paypalobjects.com/en_US/i/scr/pixel.gif\");\n                    dom.setAttribute(el3, \"width\", \"1\");\n                    dom.setAttribute(el3, \"height\", \"1\");\n                    dom.appendChild(el2, el3);\n                    var el3 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n          \");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n\\n          \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"div\");\n                    dom.setAttribute(el1, \"class\", \"modal__actions\");\n                    var el2 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"button\");\n                    dom.setAttribute(el2, \"class\", \"modal__button\");\n                    var el3 = dom.createTextNode(\"Dismiss\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n          \");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n\\n\");\n                    dom.appendChild(el0, el1);\n                    return el0;\n                  },\n                  buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                    var element3 = dom.childAt(fragment, [3, 1]);\n                    var morphs = new Array(1);\n                    morphs[0] = dom.createElementMorph(element3);\n                    return morphs;\n                  },\n                  statements: [[\"element\", \"action\", [\"hideOverlay\"], [], [\"loc\", [null, [226, 42], [226, 66]]]]],\n                  locals: [],\n                  templates: []\n                };\n              })();\n              var child1 = (function () {\n                return {\n                  meta: {\n                    \"fragmentReason\": false,\n                    \"revision\": \"Ember@2.2.0\",\n                    \"loc\": {\n                      \"source\": null,\n                      \"start\": {\n                        \"line\": 229,\n                        \"column\": 8\n                      },\n                      \"end\": {\n                        \"line\": 234,\n                        \"column\": 8\n                      }\n                    },\n                    \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                  },\n                  isEmpty: false,\n                  arity: 0,\n                  cachedFragment: null,\n                  hasRendered: false,\n                  buildFragment: function buildFragment(dom) {\n                    var el0 = dom.createDocumentFragment();\n                    var el1 = dom.createTextNode(\"          \");\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createElement(\"div\");\n                    dom.setAttribute(el1, \"class\", \"modal__actions\");\n                    var el2 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"button\");\n                    dom.setAttribute(el2, \"class\", \"modal__button\");\n                    var el3 = dom.createTextNode(\"Dismiss\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n            \");\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createElement(\"a\");\n                    dom.setAttribute(el2, \"class\", \"modal__support-link\");\n                    var el3 = dom.createTextNode(\"Support this project\");\n                    dom.appendChild(el2, el3);\n                    dom.appendChild(el1, el2);\n                    var el2 = dom.createTextNode(\"\\n          \");\n                    dom.appendChild(el1, el2);\n                    dom.appendChild(el0, el1);\n                    var el1 = dom.createTextNode(\"\\n        \");\n                    dom.appendChild(el0, el1);\n                    return el0;\n                  },\n                  buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                    var element0 = dom.childAt(fragment, [1]);\n                    var element1 = dom.childAt(element0, [1]);\n                    var element2 = dom.childAt(element0, [3]);\n                    var morphs = new Array(2);\n                    morphs[0] = dom.createElementMorph(element1);\n                    morphs[1] = dom.createElementMorph(element2);\n                    return morphs;\n                  },\n                  statements: [[\"element\", \"action\", [\"hideOverlay\"], [], [\"loc\", [null, [231, 42], [231, 66]]]], [\"element\", \"action\", [\"showSupportModal\"], [], [\"loc\", [null, [232, 43], [232, 72]]]]],\n                  locals: [],\n                  templates: []\n                };\n              })();\n              return {\n                meta: {\n                  \"fragmentReason\": false,\n                  \"revision\": \"Ember@2.2.0\",\n                  \"loc\": {\n                    \"source\": null,\n                    \"start\": {\n                      \"line\": 211,\n                      \"column\": 8\n                    },\n                    \"end\": {\n                      \"line\": 234,\n                      \"column\": 8\n                    }\n                  },\n                  \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n                },\n                isEmpty: false,\n                arity: 0,\n                cachedFragment: null,\n                hasRendered: false,\n                buildFragment: function buildFragment(dom) {\n                  var el0 = dom.createDocumentFragment();\n                  var el1 = dom.createComment(\"\");\n                  dom.appendChild(el0, el1);\n                  return el0;\n                },\n                buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                  var morphs = new Array(1);\n                  morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n                  dom.insertBoundary(fragment, 0);\n                  dom.insertBoundary(fragment, null);\n                  return morphs;\n                },\n                statements: [[\"block\", \"if\", [[\"get\", \"supportModalShown\", [\"loc\", [null, [211, 18], [211, 35]]]]], [], 0, 1, [\"loc\", [null, [211, 8], [234, 8]]]]],\n                locals: [],\n                templates: [child0, child1]\n              };\n            })();\n            return {\n              meta: {\n                \"fragmentReason\": false,\n                \"revision\": \"Ember@2.2.0\",\n                \"loc\": {\n                  \"source\": null,\n                  \"start\": {\n                    \"line\": 200,\n                    \"column\": 8\n                  },\n                  \"end\": {\n                    \"line\": 234,\n                    \"column\": 8\n                  }\n                },\n                \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n              },\n              isEmpty: false,\n              arity: 0,\n              cachedFragment: null,\n              hasRendered: false,\n              buildFragment: function buildFragment(dom) {\n                var el0 = dom.createDocumentFragment();\n                var el1 = dom.createComment(\"\");\n                dom.appendChild(el0, el1);\n                return el0;\n              },\n              buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n                var morphs = new Array(1);\n                morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n                dom.insertBoundary(fragment, 0);\n                dom.insertBoundary(fragment, null);\n                return morphs;\n              },\n              statements: [[\"block\", \"if\", [[\"get\", \"cancellationModalShown\", [\"loc\", [null, [200, 18], [200, 40]]]]], [], 0, 1, [\"loc\", [null, [200, 8], [234, 8]]]]],\n              locals: [],\n              templates: [child0, child1]\n            };\n          })();\n          return {\n            meta: {\n              \"fragmentReason\": false,\n              \"revision\": \"Ember@2.2.0\",\n              \"loc\": {\n                \"source\": null,\n                \"start\": {\n                  \"line\": 168,\n                  \"column\": 8\n                },\n                \"end\": {\n                  \"line\": 234,\n                  \"column\": 8\n                }\n              },\n              \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n            },\n            isEmpty: false,\n            arity: 0,\n            cachedFragment: null,\n            hasRendered: false,\n            buildFragment: function buildFragment(dom) {\n              var el0 = dom.createDocumentFragment();\n              var el1 = dom.createComment(\"\");\n              dom.appendChild(el0, el1);\n              return el0;\n            },\n            buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n              var morphs = new Array(1);\n              morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n              dom.insertBoundary(fragment, 0);\n              dom.insertBoundary(fragment, null);\n              return morphs;\n            },\n            statements: [[\"block\", \"if\", [[\"get\", \"gradeModalShown\", [\"loc\", [null, [168, 18], [168, 33]]]]], [], 0, 1, [\"loc\", [null, [168, 8], [234, 8]]]]],\n            locals: [],\n            templates: [child0, child1]\n          };\n        })();\n        return {\n          meta: {\n            \"fragmentReason\": false,\n            \"revision\": \"Ember@2.2.0\",\n            \"loc\": {\n              \"source\": null,\n              \"start\": {\n                \"line\": 156,\n                \"column\": 2\n              },\n              \"end\": {\n                \"line\": 237,\n                \"column\": 2\n              }\n            },\n            \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n          },\n          isEmpty: false,\n          arity: 0,\n          cachedFragment: null,\n          hasRendered: false,\n          buildFragment: function buildFragment(dom) {\n            var el0 = dom.createDocumentFragment();\n            var el1 = dom.createTextNode(\"    \");\n            dom.appendChild(el0, el1);\n            var el1 = dom.createElement(\"div\");\n            dom.setAttribute(el1, \"class\", \"overlay\");\n            var el2 = dom.createTextNode(\"\\n      \");\n            dom.appendChild(el1, el2);\n            var el2 = dom.createElement(\"div\");\n            dom.setAttribute(el2, \"class\", \"modal\");\n            var el3 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el2, el3);\n            var el3 = dom.createComment(\"\");\n            dom.appendChild(el2, el3);\n            var el3 = dom.createTextNode(\"      \");\n            dom.appendChild(el2, el3);\n            dom.appendChild(el1, el2);\n            var el2 = dom.createTextNode(\"\\n    \");\n            dom.appendChild(el1, el2);\n            dom.appendChild(el0, el1);\n            var el1 = dom.createTextNode(\"\\n\");\n            dom.appendChild(el0, el1);\n            return el0;\n          },\n          buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n            var element16 = dom.childAt(fragment, [1]);\n            var morphs = new Array(2);\n            morphs[0] = dom.createAttrMorph(element16, 'onclick');\n            morphs[1] = dom.createMorphAt(dom.childAt(element16, [1]), 1, 1);\n            return morphs;\n          },\n          statements: [[\"attribute\", \"onclick\", [\"subexpr\", \"action\", [\"handleOverlayClick\"], [], [\"loc\", [null, [158, 17], [158, 48]]]]], [\"block\", \"if\", [[\"get\", \"instructionsModalShown\", [\"loc\", [null, [160, 14], [160, 36]]]]], [], 0, 1, [\"loc\", [null, [160, 8], [234, 15]]]]],\n          locals: [],\n          templates: [child0, child1]\n        };\n      })();\n      return {\n        meta: {\n          \"fragmentReason\": {\n            \"name\": \"missing-wrapper\",\n            \"problems\": [\"multiple-nodes\", \"wrong-type\"]\n          },\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 1,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 238,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"td-game__sidebar\");\n          var el2 = dom.createTextNode(\"\\n\\n\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"div\");\n          dom.setAttribute(el2, \"class\", \"td-game__header\");\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"div\");\n          dom.setAttribute(el3, \"class\", \"header__title\");\n          var el4 = dom.createTextNode(\"Flexbox Defense\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"div\");\n          dom.setAttribute(el3, \"class\", \"header__nav\");\n          var el4 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\\n\\n       \");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createElement(\"button\");\n          dom.setAttribute(el4, \"class\", \"nav__button nav__button--active nav__button--selector\");\n          dom.setAttribute(el4, \"type\", \"button\");\n          dom.setAttribute(el4, \"name\", \"button\");\n          var el5 = dom.createTextNode(\"\\n          \");\n          dom.appendChild(el4, el5);\n          var el5 = dom.createElement(\"span\");\n          dom.setAttribute(el5, \"class\", \"selector__content\");\n          var el6 = dom.createTextNode(\"\\n            Wave \");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createComment(\"\");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createTextNode(\" of \");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createComment(\"\");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createTextNode(\"\\n            \");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createElement(\"i\");\n          dom.setAttribute(el6, \"class\", \"fa fa-caret-down selector__caret\");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createTextNode(\"\\n          \");\n          dom.appendChild(el5, el6);\n          dom.appendChild(el4, el5);\n          var el5 = dom.createTextNode(\"\\n        \");\n          dom.appendChild(el4, el5);\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\\n\\n     \");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createTextNode(\"      \");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n\\n\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"div\");\n          dom.setAttribute(el2, \"class\", \"sidebar__instructions\");\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"div\");\n          dom.setAttribute(el3, \"class\", \"instructions__text\");\n          var el4 = dom.createTextNode(\"\\n        \");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createComment(\"\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"        \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"div\");\n          dom.setAttribute(el3, \"class\", \"instructions__tooltip\");\n          var el4 = dom.createTextNode(\"\\n          \");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createElement(\"div\");\n          dom.setAttribute(el4, \"class\", \"tooltip__caret tooltip__caret--below\");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createTextNode(\"\\n          \");\n          dom.appendChild(el3, el4);\n          var el4 = dom.createElement(\"div\");\n          dom.setAttribute(el4, \"class\", \"tooltip__content tooltip__content--below\");\n          var el5 = dom.createTextNode(\"\\n            \");\n          dom.appendChild(el4, el5);\n          var el5 = dom.createElement(\"div\");\n          dom.setAttribute(el5, \"class\", \"tooltip__text\");\n          var el6 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createComment(\"\");\n          dom.appendChild(el5, el6);\n          var el6 = dom.createTextNode(\"            \");\n          dom.appendChild(el5, el6);\n          dom.appendChild(el4, el5);\n          var el5 = dom.createTextNode(\"\\n          \");\n          dom.appendChild(el4, el5);\n          dom.appendChild(el3, el4);\n          var el4 = dom.createTextNode(\"\\n        \");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"    \");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createComment(\"\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createComment(\"\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"footer\");\n          dom.setAttribute(el2, \"class\", \"sidebar__footer\");\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"p\");\n          dom.setAttribute(el3, \"class\", \"footer__text\");\n          var el4 = dom.createTextNode(\"Made by Channing Allen\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"a\");\n          dom.setAttribute(el3, \"class\", \"footer__link\");\n          dom.setAttribute(el3, \"href\", \"https://www.facebook.com/TheChanningAllen\");\n          dom.setAttribute(el3, \"target\", \"_blank\");\n          var el4 = dom.createElement(\"i\");\n          dom.setAttribute(el4, \"class\", \"fa fa-facebook-square\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"a\");\n          dom.setAttribute(el3, \"class\", \"footer__link\");\n          dom.setAttribute(el3, \"href\", \"https://twitter.com/ChanningAllen\");\n          dom.setAttribute(el3, \"target\", \"_blank\");\n          var el4 = dom.createElement(\"i\");\n          dom.setAttribute(el4, \"class\", \"fa fa-twitter-square\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"a\");\n          dom.setAttribute(el3, \"class\", \"footer__link\");\n          dom.setAttribute(el3, \"href\", \"https://www.linkedin.com/in/channingallen\");\n          dom.setAttribute(el3, \"target\", \"_blank\");\n          var el4 = dom.createElement(\"i\");\n          dom.setAttribute(el4, \"class\", \"fa fa-linkedin-square\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n      \");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createElement(\"a\");\n          dom.setAttribute(el3, \"class\", \"footer__link\");\n          dom.setAttribute(el3, \"href\", \"https://github.com/channingallen\");\n          dom.setAttribute(el3, \"target\", \"_blank\");\n          var el4 = dom.createElement(\"i\");\n          dom.setAttribute(el4, \"class\", \"fa fa-github-square\");\n          dom.appendChild(el3, el4);\n          dom.appendChild(el2, el3);\n          var el3 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\\n\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createComment(\"\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var element22 = dom.childAt(fragment, [1]);\n          var element23 = dom.childAt(element22, [2, 3]);\n          var element24 = dom.childAt(element23, [3]);\n          var element25 = dom.childAt(element24, [1]);\n          var element26 = dom.childAt(element22, [5]);\n          var morphs = new Array(12);\n          morphs[0] = dom.createMorphAt(element23, 1, 1);\n          morphs[1] = dom.createAttrMorph(element24, 'onclick');\n          morphs[2] = dom.createMorphAt(element25, 1, 1);\n          morphs[3] = dom.createMorphAt(element25, 3, 3);\n          morphs[4] = dom.createMorphAt(element23, 5, 5);\n          morphs[5] = dom.createMorphAt(element23, 7, 7);\n          morphs[6] = dom.createUnsafeMorphAt(dom.childAt(element26, [1]), 1, 1);\n          morphs[7] = dom.createMorphAt(dom.childAt(element26, [4, 3, 1]), 1, 1);\n          morphs[8] = dom.createMorphAt(element22, 7, 7);\n          morphs[9] = dom.createMorphAt(element22, 9, 9);\n          morphs[10] = dom.createMorphAt(fragment, 3, 3, contextualElement);\n          morphs[11] = dom.createMorphAt(fragment, 5, 5, contextualElement);\n          dom.insertBoundary(fragment, null);\n          return morphs;\n        },\n        statements: [[\"block\", \"if\", [[\"get\", \"isFirstWave\", [\"loc\", [null, [9, 14], [9, 25]]]]], [], 0, 1, [\"loc\", [null, [9, 8], [21, 15]]]], [\"attribute\", \"onclick\", [\"subexpr\", \"action\", [\"openDropdown\"], [], [\"loc\", [null, [26, 24], [26, 49]]]]], [\"content\", \"currentWaveNumber\", [\"loc\", [null, [28, 17], [28, 38]]]], [\"content\", \"game.waves.length\", [\"loc\", [null, [28, 42], [28, 63]]]], [\"block\", \"if\", [[\"get\", \"isLastWave\", [\"loc\", [null, [33, 14], [33, 24]]]]], [], 2, 3, [\"loc\", [null, [33, 8], [45, 15]]]], [\"block\", \"if\", [[\"get\", \"dropdownActive\", [\"loc\", [null, [47, 14], [47, 28]]]]], [], 4, null, [\"loc\", [null, [47, 8], [59, 15]]]], [\"content\", \"instructionsTldr\", [\"loc\", [null, [67, 8], [67, 30]]]], [\"block\", \"if\", [[\"subexpr\", \"eq\", [[\"get\", \"instructionToolTipProperty\", [\"loc\", [null, [74, 24], [74, 50]]]], \"justify-content ▾\"], [], [\"loc\", [null, [74, 20], [74, 71]]]]], [], 5, 6, [\"loc\", [null, [74, 14], [95, 21]]]], [\"inline\", \"td-game/stylesheet\", [], [\"cancel-wave\", [\"subexpr\", \"action\", [\"beginWaveCancellation\"], [], [\"loc\", [null, [102, 37], [102, 69]]]], \"cancellingWave\", [\"subexpr\", \"readonly\", [[\"get\", \"cancellingWave\", [\"loc\", [null, [103, 50], [103, 64]]]]], [], [\"loc\", [null, [103, 40], [103, 65]]]], \"currentWaveNumber\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWaveNumber\", [\"loc\", [null, [104, 53], [104, 70]]]]], [], [\"loc\", [null, [104, 43], [104, 71]]]], \"hide-tower-inputs\", [\"subexpr\", \"action\", [\"hideTowerInputs\"], [], [\"loc\", [null, [105, 43], [105, 69]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"overlayShown\", [\"loc\", [null, [106, 48], [106, 60]]]]], [], [\"loc\", [null, [106, 38], [106, 61]]]], \"select-tower\", [\"subexpr\", \"action\", [\"selectTower\"], [], [\"loc\", [null, [107, 38], [107, 60]]]], \"select-tower-group\", [\"subexpr\", \"action\", [\"selectTowerGroup\"], [], [\"loc\", [null, [108, 44], [108, 71]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTower\", [\"loc\", [null, [109, 49], [109, 62]]]]], [], [\"loc\", [null, [109, 39], [109, 63]]]], \"selectedTowerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTowerGroup\", [\"loc\", [null, [110, 54], [110, 72]]]]], [], [\"loc\", [null, [110, 44], [110, 73]]]], \"show-tower-inputs\", [\"subexpr\", \"action\", [\"showTowerInputs\"], [], [\"loc\", [null, [111, 43], [111, 69]]]], \"show-overlay\", [\"subexpr\", \"action\", [\"showOverlay\"], [], [\"loc\", [null, [112, 38], [112, 60]]]], \"start-wave\", [\"subexpr\", \"action\", [\"startWave\"], [], [\"loc\", [null, [113, 36], [113, 56]]]], \"towersColliding\", [\"subexpr\", \"readonly\", [[\"get\", \"towersColliding\", [\"loc\", [null, [114, 51], [114, 66]]]]], [], [\"loc\", [null, [114, 41], [114, 67]]]], \"towerStylesHidden\", [\"subexpr\", \"readonly\", [[\"get\", \"towerStylesHidden\", [\"loc\", [null, [115, 53], [115, 70]]]]], [], [\"loc\", [null, [115, 43], [115, 71]]]], \"towerGroups\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.towerGroups\", [\"loc\", [null, [116, 47], [116, 70]]]]], [], [\"loc\", [null, [116, 37], [116, 71]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"waveStarted\", [\"loc\", [null, [117, 47], [117, 58]]]]], [], [\"loc\", [null, [117, 37], [117, 59]]]]], [\"loc\", [null, [102, 4], [117, 61]]]], [\"content\", \"td-game/blockly-editor\", [\"loc\", [null, [119, 4], [119, 30]]]], [\"inline\", \"td-game/board\", [], [\"add-colliding-tower\", [\"subexpr\", \"action\", [\"addCollidingTower\"], [], [\"loc\", [null, [138, 38], [138, 66]]]], \"backgroundImage\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.board.imageUrl\", [\"loc\", [null, [139, 44], [139, 70]]]]], [], [\"loc\", [null, [139, 34], [139, 71]]]], \"cancellingWave\", [\"subexpr\", \"readonly\", [[\"get\", \"cancellingWave\", [\"loc\", [null, [140, 43], [140, 57]]]]], [], [\"loc\", [null, [140, 33], [140, 58]]]], \"minimumPoints\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.minimumPoints\", [\"loc\", [null, [141, 42], [141, 67]]]]], [], [\"loc\", [null, [141, 32], [141, 68]]]], \"overlayShown\", [\"subexpr\", \"readonly\", [[\"get\", \"overlayShown\", [\"loc\", [null, [142, 41], [142, 53]]]]], [], [\"loc\", [null, [142, 31], [142, 54]]]], \"path\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.board.pathData\", [\"loc\", [null, [143, 33], [143, 59]]]]], [], [\"loc\", [null, [143, 23], [143, 60]]]], \"remove-colliding-tower\", [\"subexpr\", \"action\", [\"removeCollidingTower\"], [], [\"loc\", [null, [144, 41], [144, 72]]]], \"report-tower-position\", [\"subexpr\", \"action\", [\"reportTowerPosition\"], [], [\"loc\", [null, [145, 40], [145, 70]]]], \"score-wave\", [\"subexpr\", \"action\", [\"scoreWave\"], [], [\"loc\", [null, [146, 29], [146, 49]]]], \"select-tower\", [\"subexpr\", \"action\", [\"selectTower\"], [], [\"loc\", [null, [147, 31], [147, 53]]]], \"select-tower-group\", [\"subexpr\", \"action\", [\"selectTowerGroup\"], [], [\"loc\", [null, [148, 37], [148, 64]]]], \"selectedTower\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTower\", [\"loc\", [null, [149, 42], [149, 55]]]]], [], [\"loc\", [null, [149, 32], [149, 56]]]], \"selectedTowerGroup\", [\"subexpr\", \"readonly\", [[\"get\", \"selectedTowerGroup\", [\"loc\", [null, [150, 47], [150, 65]]]]], [], [\"loc\", [null, [150, 37], [150, 66]]]], \"towerGroups\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.towerGroups\", [\"loc\", [null, [151, 40], [151, 63]]]]], [], [\"loc\", [null, [151, 30], [151, 64]]]], \"waveMobs\", [\"subexpr\", \"readonly\", [[\"get\", \"currentWave.mobs\", [\"loc\", [null, [152, 37], [152, 53]]]]], [], [\"loc\", [null, [152, 27], [152, 54]]]], \"waveStarted\", [\"subexpr\", \"readonly\", [[\"get\", \"waveStarted\", [\"loc\", [null, [153, 40], [153, 51]]]]], [], [\"loc\", [null, [153, 30], [153, 52]]]]], [\"loc\", [null, [138, 2], [153, 54]]]], [\"block\", \"if\", [[\"get\", \"overlayShown\", [\"loc\", [null, [156, 8], [156, 20]]]]], [], 7, null, [\"loc\", [null, [156, 2], [237, 9]]]]],\n        locals: [],\n        templates: [child0, child1, child2, child3, child4, child5, child6, child7]\n      };\n    })();\n    var child1 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 238,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 242,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"td-game__loading-container\");\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"i\");\n          dom.setAttribute(el2, \"class\", \"fa fa-5x fa-spinner fa-spin\");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes() {\n          return [];\n        },\n        statements: [],\n        locals: [],\n        templates: []\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 243,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/components/td-game/template.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"if\", [[\"get\", \"currentWave\", [\"loc\", [null, [1, 6], [1, 17]]]]], [], 0, 1, [\"loc\", [null, [1, 0], [242, 7]]]]],\n      locals: [],\n      templates: [child0, child1]\n    };\n  })());\n});","define('tower-defense/components/tool-tip', ['exports', 'ember'], function (exports, _ember) {\n\n  ////////////////\n  //            //\n  //   Basics   //\n  //            //\n  ////////////////\n\n  var ToolTipComponent = _ember['default'].Component.extend({\n    atTop: null,\n\n    classNameBindings: ['atTop:tool-tip--below:tool-tip--above'],\n\n    classNames: ['tool-tip'],\n\n    _keepTowerToolTipsOnScreen: _ember['default'].on('didInsertElement', _ember['default'].observer('atTop', function () {\n      var _this = this;\n\n      var windowWidth = _ember['default'].$(window).width();\n      var offsetLeft = this.$().offset().left;\n      var textOuterWidth = this.$('nobr').outerWidth();\n      var offsetLeftPlusOuterWidth = offsetLeft + textOuterWidth;\n      var offsetRight = windowWidth - offsetLeftPlusOuterWidth;\n      var atRight = offsetRight < 0;\n\n      if (this.attrs.type === 'tower' && atRight) {\n        _ember['default'].run.schedule('afterRender', this, function () {\n          _this.$('.tool-tip__content').css('margin-left', offsetRight + 'px');\n        });\n      }\n    })),\n\n    _updateAtTop: _ember['default'].on('didInsertElement', function () {\n      var atTop = this.$().offset().top < 100;\n      this.set('atTop', atTop);\n    })\n  });\n\n  exports['default'] = ToolTipComponent;\n});","define('tower-defense/controllers/array', ['exports', '@ember/controller'], function (exports, _emberController) {\n  exports['default'] = _emberController['default'];\n});","define('tower-defense/controllers/object', ['exports', '@ember/controller'], function (exports, _emberController) {\n  exports['default'] = _emberController['default'];\n});","define('tower-defense/helpers/and', ['exports', 'ember', 'ember-truth-helpers/helpers/and'], function (exports, _ember, _emberTruthHelpersHelpersAnd) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersAnd.andHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersAnd.andHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/eq', ['exports', 'ember', 'ember-truth-helpers/helpers/equal'], function (exports, _ember, _emberTruthHelpersHelpersEqual) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersEqual.equalHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersEqual.equalHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/gt', ['exports', 'ember', 'ember-truth-helpers/helpers/gt'], function (exports, _ember, _emberTruthHelpersHelpersGt) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersGt.gtHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersGt.gtHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/gte', ['exports', 'ember', 'ember-truth-helpers/helpers/gte'], function (exports, _ember, _emberTruthHelpersHelpersGte) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersGte.gteHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersGte.gteHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/is-array', ['exports', 'ember', 'ember-truth-helpers/helpers/is-array'], function (exports, _ember, _emberTruthHelpersHelpersIsArray) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersIsArray.isArrayHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersIsArray.isArrayHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/lt', ['exports', 'ember', 'ember-truth-helpers/helpers/lt'], function (exports, _ember, _emberTruthHelpersHelpersLt) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersLt.ltHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersLt.ltHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/lte', ['exports', 'ember', 'ember-truth-helpers/helpers/lte'], function (exports, _ember, _emberTruthHelpersHelpersLte) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersLte.lteHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersLte.lteHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/not-eq', ['exports', 'ember', 'ember-truth-helpers/helpers/not-equal'], function (exports, _ember, _emberTruthHelpersHelpersNotEqual) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersNotEqual.notEqualHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersNotEqual.notEqualHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/not', ['exports', 'ember', 'ember-truth-helpers/helpers/not'], function (exports, _ember, _emberTruthHelpersHelpersNot) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersNot.notHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersNot.notHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/or', ['exports', 'ember', 'ember-truth-helpers/helpers/or'], function (exports, _ember, _emberTruthHelpersHelpersOr) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersOr.orHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersOr.orHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/helpers/pluralize', ['exports', 'ember-inflector/lib/helpers/pluralize'], function (exports, _emberInflectorLibHelpersPluralize) {\n  exports['default'] = _emberInflectorLibHelpersPluralize['default'];\n});","define('tower-defense/helpers/singularize', ['exports', 'ember-inflector/lib/helpers/singularize'], function (exports, _emberInflectorLibHelpersSingularize) {\n  exports['default'] = _emberInflectorLibHelpersSingularize['default'];\n});","define('tower-defense/helpers/xor', ['exports', 'ember', 'ember-truth-helpers/helpers/xor'], function (exports, _ember, _emberTruthHelpersHelpersXor) {\n\n  var forExport = null;\n\n  if (_ember['default'].Helper) {\n    forExport = _ember['default'].Helper.helper(_emberTruthHelpersHelpersXor.xorHelper);\n  } else if (_ember['default'].HTMLBars.makeBoundHelper) {\n    forExport = _ember['default'].HTMLBars.makeBoundHelper(_emberTruthHelpersHelpersXor.xorHelper);\n  }\n\n  exports['default'] = forExport;\n});","define('tower-defense/initializers/add-force-set', ['exports', 'ember'], function (exports, _ember) {\n  exports.initialize = initialize;\n\n  function initialize() {\n    _ember['default'].Object.reopen({\n      forceSet: function forceSet(key, newValue) {\n        var _this = this;\n\n        var _ref = arguments.length <= 2 || arguments[2] === undefined ? { queue: 'afterRender' } : arguments[2];\n\n        var queue = _ref.queue;\n\n        var currentValue = this.get(key);\n\n        if (currentValue === newValue) {\n          this.set(key, undefined);\n          _ember['default'].run.scheduleOnce(queue, this, function () {\n            _this.set(key, newValue);\n          });\n        } else {\n          this.set(key, newValue);\n        }\n      }\n    });\n  }\n\n  exports['default'] = {\n    name: 'add-force-set',\n    initialize: initialize\n  };\n});","define('tower-defense/initializers/add-insertion-detection-to-components', ['exports', 'ember'], function (exports, _ember) {\n  exports.initialize = initialize;\n\n  function initialize() /* application */{\n    _ember['default'].Component.reopen({\n      elementInserted: false,\n\n      _updateElementInserted: _ember['default'].on('didInsertElement', function () {\n        var _this = this;\n\n        _ember['default'].run.schedule('afterRender', this, function () {\n          _this.set('elementInserted', true);\n        });\n      })\n    });\n  }\n\n  exports['default'] = {\n    name: 'add-insertion-detection-to-components',\n    initialize: initialize\n  };\n});","define('tower-defense/initializers/app-version', ['exports', 'ember-cli-app-version/initializer-factory', 'tower-defense/config/environment'], function (exports, _emberCliAppVersionInitializerFactory, _towerDefenseConfigEnvironment) {\n  exports['default'] = {\n    name: 'App Version',\n    initialize: (0, _emberCliAppVersionInitializerFactory['default'])(_towerDefenseConfigEnvironment['default'].APP.name, _towerDefenseConfigEnvironment['default'].APP.version)\n  };\n});","define('tower-defense/initializers/container-debug-adapter', ['exports', 'ember-resolver/container-debug-adapter'], function (exports, _emberResolverContainerDebugAdapter) {\n  exports['default'] = {\n    name: 'container-debug-adapter',\n\n    initialize: function initialize() {\n      var app = arguments[1] || arguments[0];\n\n      app.register('container-debug-adapter:main', _emberResolverContainerDebugAdapter['default']);\n      app.inject('container-debug-adapter:main', 'namespace', 'application:main');\n    }\n  };\n});","define('tower-defense/initializers/data-adapter', ['exports'], function (exports) {\n  /*\n    This initializer is here to keep backwards compatibility with code depending\n    on the `data-adapter` initializer (before Ember Data was an addon).\n  \n    Should be removed for Ember Data 3.x\n  */\n\n  exports['default'] = {\n    name: 'data-adapter',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('tower-defense/initializers/ember-data', ['exports', 'ember-data/setup-container', 'ember-data'], function (exports, _emberDataSetupContainer, _emberData) {\n\n  /*\n  \n    This code initializes Ember-Data onto an Ember application.\n  \n    If an Ember.js developer defines a subclass of DS.Store on their application,\n    as `App.StoreService` (or via a module system that resolves to `service:store`)\n    this code will automatically instantiate it and make it available on the\n    router.\n  \n    Additionally, after an application's controllers have been injected, they will\n    each have the store made available to them.\n  \n    For example, imagine an Ember.js application with the following classes:\n  \n    ```app/services/store.js\n    import DS from 'ember-data';\n  \n    export default DS.Store.extend({\n      adapter: 'custom'\n    });\n    ```\n  \n    ```app/controllers/posts.js\n    import { Controller } from '@ember/controller';\n  \n    export default Controller.extend({\n      // ...\n    });\n  \n    When the application is initialized, `ApplicationStore` will automatically be\n    instantiated, and the instance of `PostsController` will have its `store`\n    property set to that instance.\n  \n    Note that this code will only be run if the `ember-application` package is\n    loaded. If Ember Data is being used in an environment other than a\n    typical application (e.g., node.js where only `ember-runtime` is available),\n    this code will be ignored.\n  */\n\n  exports['default'] = {\n    name: 'ember-data',\n    initialize: _emberDataSetupContainer['default']\n  };\n});","define('tower-defense/initializers/export-application-global', ['exports', 'ember', 'tower-defense/config/environment'], function (exports, _ember, _towerDefenseConfigEnvironment) {\n  exports.initialize = initialize;\n\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n    if (_towerDefenseConfigEnvironment['default'].exportApplicationGlobal !== false) {\n      var theGlobal;\n      if (typeof window !== 'undefined') {\n        theGlobal = window;\n      } else if (typeof global !== 'undefined') {\n        theGlobal = global;\n      } else if (typeof self !== 'undefined') {\n        theGlobal = self;\n      } else {\n        // no reasonable global, just bail\n        return;\n      }\n\n      var value = _towerDefenseConfigEnvironment['default'].exportApplicationGlobal;\n      var globalName;\n\n      if (typeof value === 'string') {\n        globalName = value;\n      } else {\n        globalName = _ember['default'].String.classify(_towerDefenseConfigEnvironment['default'].modulePrefix);\n      }\n\n      if (!theGlobal[globalName]) {\n        theGlobal[globalName] = application;\n\n        application.reopen({\n          willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            delete theGlobal[globalName];\n          }\n        });\n      }\n    }\n  }\n\n  exports['default'] = {\n    name: 'export-application-global',\n\n    initialize: initialize\n  };\n});","define('tower-defense/initializers/extend-ember-text-field', ['exports', 'ember'], function (exports, _ember) {\n  exports.initialize = initialize;\n\n  function initialize() {\n    _ember['default'].TextField.reopen({\n      _focusInput: _ember['default'].on('didInsertElement', function () {\n        if (this.attrs.focusOnInsert) {\n          this.$().focus(); // this.$() === this.get('element'): fn vs const\n        }\n      })\n    });\n  }\n\n  exports['default'] = {\n    name: 'extend-ember-text-field',\n    initialize: initialize\n  };\n});","define('tower-defense/initializers/injectStore', ['exports'], function (exports) {\n  /*\n    This initializer is here to keep backwards compatibility with code depending\n    on the `injectStore` initializer (before Ember Data was an addon).\n  \n    Should be removed for Ember Data 3.x\n  */\n\n  exports['default'] = {\n    name: 'injectStore',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('tower-defense/initializers/store', ['exports'], function (exports) {\n  /*\n    This initializer is here to keep backwards compatibility with code depending\n    on the `store` initializer (before Ember Data was an addon).\n  \n    Should be removed for Ember Data 3.x\n  */\n\n  exports['default'] = {\n    name: 'store',\n    after: 'ember-data',\n    initialize: function initialize() {}\n  };\n});","define('tower-defense/initializers/transforms', ['exports'], function (exports) {\n  /*\n    This initializer is here to keep backwards compatibility with code depending\n    on the `transforms` initializer (before Ember Data was an addon).\n  \n    Should be removed for Ember Data 3.x\n  */\n\n  exports['default'] = {\n    name: 'transforms',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('tower-defense/initializers/truth-helpers', ['exports', 'ember', 'ember-truth-helpers/utils/register-helper', 'ember-truth-helpers/helpers/and', 'ember-truth-helpers/helpers/or', 'ember-truth-helpers/helpers/equal', 'ember-truth-helpers/helpers/not', 'ember-truth-helpers/helpers/is-array', 'ember-truth-helpers/helpers/not-equal', 'ember-truth-helpers/helpers/gt', 'ember-truth-helpers/helpers/gte', 'ember-truth-helpers/helpers/lt', 'ember-truth-helpers/helpers/lte'], function (exports, _ember, _emberTruthHelpersUtilsRegisterHelper, _emberTruthHelpersHelpersAnd, _emberTruthHelpersHelpersOr, _emberTruthHelpersHelpersEqual, _emberTruthHelpersHelpersNot, _emberTruthHelpersHelpersIsArray, _emberTruthHelpersHelpersNotEqual, _emberTruthHelpersHelpersGt, _emberTruthHelpersHelpersGte, _emberTruthHelpersHelpersLt, _emberTruthHelpersHelpersLte) {\n  exports.initialize = initialize;\n\n  function initialize() /* container, application */{\n\n    // Do not register helpers from Ember 1.13 onwards, starting from 1.13 they\n    // will be auto-discovered.\n    if (_ember['default'].Helper) {\n      return;\n    }\n\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('and', _emberTruthHelpersHelpersAnd.andHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('or', _emberTruthHelpersHelpersOr.orHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('eq', _emberTruthHelpersHelpersEqual.equalHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('not', _emberTruthHelpersHelpersNot.notHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('is-array', _emberTruthHelpersHelpersIsArray.isArrayHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('not-eq', _emberTruthHelpersHelpersNotEqual.notEqualHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('gt', _emberTruthHelpersHelpersGt.gtHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('gte', _emberTruthHelpersHelpersGte.gteHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('lt', _emberTruthHelpersHelpersLt.ltHelper);\n    (0, _emberTruthHelpersUtilsRegisterHelper.registerHelper)('lte', _emberTruthHelpersHelpersLte.lteHelper);\n  }\n\n  exports['default'] = {\n    name: 'truth-helpers',\n    initialize: initialize\n  };\n});","define(\"tower-defense/instance-initializers/ember-data\", [\"exports\", \"ember-data/initialize-store-service\"], function (exports, _emberDataInitializeStoreService) {\n  exports[\"default\"] = {\n    name: \"ember-data\",\n    initialize: _emberDataInitializeStoreService[\"default\"]\n  };\n});","define('tower-defense/mixins/google-pageview', ['exports', 'ember', 'tower-defense/config/environment'], function (exports, _ember, _towerDefenseConfigEnvironment) {\n  exports['default'] = _ember['default'].Mixin.create({\n    beforePageviewToGA: function beforePageviewToGA(ga) {},\n\n    pageviewToGA: _ember['default'].on('didTransition', function (page, title) {\n      var page = page ? page : this.get('url');\n      var title = title ? title : this.get('url');\n\n      if (_ember['default'].get(_towerDefenseConfigEnvironment['default'], 'googleAnalytics.webPropertyId') != null) {\n        var trackerType = _ember['default'].getWithDefault(_towerDefenseConfigEnvironment['default'], 'googleAnalytics.tracker', 'analytics.js');\n\n        if (trackerType === 'analytics.js') {\n          var globalVariable = _ember['default'].getWithDefault(_towerDefenseConfigEnvironment['default'], 'googleAnalytics.globalVariable', 'ga');\n\n          this.beforePageviewToGA(window[globalVariable]);\n\n          window[globalVariable]('send', 'pageview', {\n            page: page,\n            title: title\n          });\n        } else if (trackerType === 'ga.js') {\n          window._gaq.push(['_trackPageview']);\n        }\n      }\n    })\n\n  });\n});","define('tower-defense/objects/board', ['exports', 'ember', 'tower-defense/objects/mob'], function (exports, _ember, _towerDefenseObjectsMob) {\n  var pathWidth = _towerDefenseObjectsMob.mobDimensions * 2;\n  exports.pathWidth = pathWidth;\n  var boardPaddingPct = 2;\n\n  exports.boardPaddingPct = boardPaddingPct;\n  var Board = _ember['default'].Object.extend({\n    imageUrl: null,\n\n    pathData: null,\n\n    _initializePathData: _ember['default'].on('init', function () {\n      this.set('pathData', _ember['default'].A());\n    })\n  });\n\n  exports['default'] = Board;\n});","define('tower-defense/objects/flexbox-ref', ['exports', 'ember'], function (exports, _ember) {\n\n  var FlexboxRef = _ember['default'].Object.extend({\n    container: _ember['default'].Object.extend({\n      'align-content': ['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around', 'initial', 'inherit'],\n\n      'align-items': ['stretch', 'center', 'flex-start', 'flex-end', 'baseline', 'initial', 'inherit'],\n\n      'flex-direction': ['row', 'row-reverse', 'column', 'column-reverse', 'initial', 'inherit'],\n\n      'flex-wrap': ['nowrap', 'wrap', 'wrap-reverse', 'initial', 'inherit'],\n\n      'justify-content': ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'initial', 'inherit']\n    }).create(),\n\n    item: _ember['default'].Object.extend({\n      order: ['initial', 'inherit'],\n\n      'align-self': ['auto', 'stetch', 'center', 'flex-start', 'flex-end', 'baseline', 'initial', 'inherit'],\n\n      _populateOrder: _ember['default'].on('init', function () {\n        for (var i = -100; i < 101; i++) {\n          this.get('order').push(i);\n        }\n      })\n    }).create()\n  });\n\n  exports['default'] = FlexboxRef;\n});","define('tower-defense/objects/game', ['exports', 'ember'], function (exports, _ember) {\n\n  var Game = _ember['default'].Object.extend({\n    waves: null\n  });\n\n  exports['default'] = Game;\n});","define('tower-defense/objects/mob', ['exports', 'ember'], function (exports, _ember) {\n\n  // mobs are 4% the width/height of the board\n  var mobDimensions = 4;\n\n  exports.mobDimensions = mobDimensions;\n  var Mob = _ember['default'].Object.extend({\n    id: null,\n    active: null,\n    frequency: null,\n    health: null,\n    maxHealth: null,\n    points: null,\n    posX: null,\n    posY: null,\n    quantity: null,\n    speed: null,\n    type: null,\n\n    _initializeMobActive: _ember['default'].on('init', function () {\n      this.set('active', true);\n    })\n  });\n\n  exports['default'] = Mob;\n});","define('tower-defense/objects/path-coords', ['exports', 'ember'], function (exports, _ember) {\n\n  var PathCoords = _ember['default'].Object.extend({\n    x: null,\n    y: null\n  });\n\n  exports['default'] = PathCoords;\n});","define('tower-defense/objects/projectile', ['exports', 'ember'], function (exports, _ember) {\n\n  var Projectile = _ember['default'].Object.extend({\n    id: null,\n    mobId: null,\n    mobX: null,\n    mobY: null,\n    towerX: null,\n    towerY: null\n  });\n\n  exports['default'] = Projectile;\n});","define('tower-defense/objects/tower-group', ['exports', 'ember'], function (exports, _ember) {\n  var spaceBetweenTowersPct = 1;\n\n  exports.spaceBetweenTowersPct = spaceBetweenTowersPct;\n  var TowerGroup = _ember['default'].Object.extend({\n    id: null,\n    flexDirectionAllowed: null,\n    groupNum: null,\n    numRows: 1,\n    posY: 'board__tower-group--position-y0',\n    selector: '.t-g',\n    styles: null,\n    towers: null,\n\n    _initializeFlexDirectionDisallowed: _ember['default'].on('init', function () {\n      this.set('flexDirectionAllowed', false);\n    })\n  });\n\n  exports['default'] = TowerGroup;\n});","define('tower-defense/objects/tower', ['exports', 'ember', 'tower-defense/objects/mob'], function (exports, _ember, _towerDefenseObjectsMob) {\n  var towerDimensions = _towerDefenseObjectsMob.mobDimensions;\n\n  exports.towerDimensions = towerDimensions;\n  var Tower = _ember['default'].Object.extend({\n    id: null,\n    attackPower: null,\n    attackRange: null, // 1-100 (% of board; attackRange / 2 = attack radius)\n    posX: null,\n    posY: null,\n    selector: '.t',\n    styles: null,\n    targetedMobId: null,\n    targetId: null,\n    type: null\n  });\n\n  exports['default'] = Tower;\n});","define('tower-defense/objects/unit-code-line', ['exports', 'ember'], function (exports, _ember) {\n\n  var UnitCodeLine = _ember['default'].Object.extend({\n    id: null,\n    codeLine: undefined,\n    submitted: null,\n    valid: null\n  });\n\n  exports['default'] = UnitCodeLine;\n});","define('tower-defense/objects/wave', ['exports', 'ember'], function (exports, _ember) {\n\n  var Wave = _ember['default'].Object.extend({\n    board: null,\n    instructions: null,\n    minimumScore: null,\n    mobs: null,\n    towerStylesHidden: null,\n    towerGroups: null\n  });\n\n  exports['default'] = Wave;\n});","define('tower-defense/router', ['exports', 'ember', 'tower-defense/config/environment', 'tower-defense/mixins/google-pageview'], function (exports, _ember, _towerDefenseConfigEnvironment, _towerDefenseMixinsGooglePageview) {\n\n  var Router = _ember['default'].Router.extend(_towerDefenseMixinsGooglePageview['default'], {\n    location: _towerDefenseConfigEnvironment['default'].locationType\n  });\n\n  Router.map(function () {});\n\n  exports['default'] = Router;\n});","define('tower-defense/services/ajax', ['exports', 'ember-ajax/services/ajax'], function (exports, _emberAjaxServicesAjax) {\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function get() {\n      return _emberAjaxServicesAjax['default'];\n    }\n  });\n});","define(\"tower-defense/templates/application\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 2,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/templates/application.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        return morphs;\n      },\n      statements: [[\"content\", \"outlet\", [\"loc\", [null, [1, 0], [1, 10]]]]],\n      locals: [],\n      templates: []\n    };\n  })());\n});","define(\"tower-defense/templates/components/tool-tip\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    var child0 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 2,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 7,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/templates/components/tool-tip.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tool-tip__caret tool-tip__caret--below\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tool-tip__content tool-tip__content--below\");\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"nobr\");\n          dom.setAttribute(el2, \"class\", \"tool-tip__text\");\n          var el3 = dom.createTextNode(\".\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createComment(\"\");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(dom.childAt(fragment, [3, 1]), 1, 1);\n          return morphs;\n        },\n        statements: [[\"content\", \"attrs.selector\", [\"loc\", [null, [5, 34], [5, 52]]]]],\n        locals: [],\n        templates: []\n      };\n    })();\n    var child1 = (function () {\n      return {\n        meta: {\n          \"fragmentReason\": false,\n          \"revision\": \"Ember@2.2.0\",\n          \"loc\": {\n            \"source\": null,\n            \"start\": {\n              \"line\": 7,\n              \"column\": 0\n            },\n            \"end\": {\n              \"line\": 12,\n              \"column\": 0\n            }\n          },\n          \"moduleName\": \"tower-defense/templates/components/tool-tip.hbs\"\n        },\n        isEmpty: false,\n        arity: 0,\n        cachedFragment: null,\n        hasRendered: false,\n        buildFragment: function buildFragment(dom) {\n          var el0 = dom.createDocumentFragment();\n          var el1 = dom.createTextNode(\"  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tool-tip__content tool-tip__content--above\");\n          var el2 = dom.createTextNode(\"\\n    \");\n          dom.appendChild(el1, el2);\n          var el2 = dom.createElement(\"nobr\");\n          dom.setAttribute(el2, \"class\", \"tool-tip__text\");\n          var el3 = dom.createTextNode(\".\");\n          dom.appendChild(el2, el3);\n          var el3 = dom.createComment(\"\");\n          dom.appendChild(el2, el3);\n          dom.appendChild(el1, el2);\n          var el2 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el1, el2);\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n  \");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createElement(\"div\");\n          dom.setAttribute(el1, \"class\", \"tool-tip__caret tool-tip__caret--above\");\n          dom.appendChild(el0, el1);\n          var el1 = dom.createTextNode(\"\\n\");\n          dom.appendChild(el0, el1);\n          return el0;\n        },\n        buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n          var morphs = new Array(1);\n          morphs[0] = dom.createMorphAt(dom.childAt(fragment, [1, 1]), 1, 1);\n          return morphs;\n        },\n        statements: [[\"content\", \"attrs.selector\", [\"loc\", [null, [9, 34], [9, 52]]]]],\n        locals: [],\n        templates: []\n      };\n    })();\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 13,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/templates/components/tool-tip.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        dom.insertBoundary(fragment, null);\n        return morphs;\n      },\n      statements: [[\"block\", \"if\", [[\"get\", \"atTop\", [\"loc\", [null, [2, 6], [2, 11]]]]], [], 0, 1, [\"loc\", [null, [2, 0], [12, 7]]]]],\n      locals: [],\n      templates: [child0, child1]\n    };\n  })());\n});","define(\"tower-defense/templates/index\", [\"exports\"], function (exports) {\n  exports[\"default\"] = Ember.HTMLBars.template((function () {\n    return {\n      meta: {\n        \"fragmentReason\": {\n          \"name\": \"missing-wrapper\",\n          \"problems\": [\"wrong-type\"]\n        },\n        \"revision\": \"Ember@2.2.0\",\n        \"loc\": {\n          \"source\": null,\n          \"start\": {\n            \"line\": 1,\n            \"column\": 0\n          },\n          \"end\": {\n            \"line\": 2,\n            \"column\": 0\n          }\n        },\n        \"moduleName\": \"tower-defense/templates/index.hbs\"\n      },\n      isEmpty: false,\n      arity: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      buildFragment: function buildFragment(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n        var morphs = new Array(1);\n        morphs[0] = dom.createMorphAt(fragment, 0, 0, contextualElement);\n        dom.insertBoundary(fragment, 0);\n        return morphs;\n      },\n      statements: [[\"content\", \"td-game\", [\"loc\", [null, [1, 0], [1, 11]]]]],\n      locals: [],\n      templates: []\n    };\n  })());\n});","define('tower-defense/utils/create-flexbox-ref', ['exports', 'tower-defense/objects/flexbox-ref'], function (exports, _towerDefenseObjectsFlexboxRef) {\n  exports['default'] = createFlexboxRef;\n\n  function createFlexboxRef() {\n    return _towerDefenseObjectsFlexboxRef['default'].create();\n  }\n});","define('tower-defense/utils/create-game', ['exports', 'ember', 'tower-defense/utils/create-wave-1', 'tower-defense/utils/create-wave-2', 'tower-defense/utils/create-wave-3', 'tower-defense/utils/create-wave-4', 'tower-defense/utils/create-wave-5', 'tower-defense/utils/create-wave-6', 'tower-defense/utils/create-wave-7', 'tower-defense/utils/create-wave-8', 'tower-defense/utils/create-wave-9', 'tower-defense/utils/create-wave-10', 'tower-defense/utils/create-wave-11', 'tower-defense/utils/create-wave-12', 'tower-defense/objects/game'], function (exports, _ember, _towerDefenseUtilsCreateWave1, _towerDefenseUtilsCreateWave2, _towerDefenseUtilsCreateWave3, _towerDefenseUtilsCreateWave4, _towerDefenseUtilsCreateWave5, _towerDefenseUtilsCreateWave6, _towerDefenseUtilsCreateWave7, _towerDefenseUtilsCreateWave8, _towerDefenseUtilsCreateWave9, _towerDefenseUtilsCreateWave10, _towerDefenseUtilsCreateWave11, _towerDefenseUtilsCreateWave12, _towerDefenseObjectsGame) {\n  exports['default'] = createGame;\n\n  function addWavesToGame(game) {\n    var waves = _ember['default'].ArrayProxy.create({ content: _ember['default'].A([]) });\n\n    waves.addObject((0, _towerDefenseUtilsCreateWave1['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave2['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave3['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave4['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave5['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave6['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave7['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave8['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave9['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave10['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave11['default'])());\n    waves.addObject((0, _towerDefenseUtilsCreateWave12['default'])());\n\n    game.set('waves', waves);\n  }\n\n  function createGame() {\n    var game = _towerDefenseObjectsGame['default'].create();\n\n    addWavesToGame(game); // TODO THIS COMMIT: implement this\n\n    return game;\n  }\n});","define('tower-defense/utils/create-unit-code-line', ['exports', 'tower-defense/objects/unit-code-line'], function (exports, _towerDefenseObjectsUnitCodeLine) {\n  exports['default'] = createUnitCodeLine;\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createUnitCodeLine() {\n    var unitCodeLine = _towerDefenseObjectsUnitCodeLine['default'].create({\n      id: generateIdForRecord(),\n      submitted: false,\n      valid: false\n    });\n\n    return unitCodeLine;\n  }\n});","define('tower-defense/utils/create-wave-1', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave1;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-1.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 60, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 60, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 60, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 60, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 5;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 2000,\n        health: 200,\n        maxHealth: 200,\n        points: 20,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(1, 47);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave1() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Tu trabajo es detener a los enemigos entrantes antes de que pasen tus\\n             defensas. ¡A diferencia de otros juegos de tower defense, debes posicionar tus\\n             torres usando CSS!\\n\\nComenzaremos con las propiedades del contenedor. Un contenedor flexbox tiene un eje principal y un\\neje transversal.\\n\\n<img src=\"images/flexbox-row.png\" class=\"instructions__diagram\" alt=\"diagrama flexbox\">\\n\\nUsa la propiedad `justify-content` en el contenedor del grupo de torres para mover\\ntus torres a posiciones efectivas. `justify-content` posiciona los elementos de un contenedor\\na lo largo del **eje principal** y acepta los siguientes valores:\\n\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\nPrueba `justify-content: center;` por ejemplo, para mover las torres del contenedor al\\ncentro del eje principal.',\n        tldr: 'Usa la propiedad <nobr class=\"text__code\">justify-content ▾</nobr> para\\n             mover estas dos torres a su posición. Haz clic en el botón <i\\n             class=\"fa fa-question-circle\"></i> en la hoja de estilos para un\\n             recordatorio de cómo funciona la propiedad.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-10', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave10;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-10.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 10, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 10, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 70, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 70, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 30, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 30, y: 90 }), _towerDefenseObjectsPathCoords['default'].create({ x: 10, y: 90 }), _towerDefenseObjectsPathCoords['default'].create({ x: 10, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 25;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 700,\n        health: 300,\n        maxHealth: 300,\n        points: 4,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(1, 17);\n    var towerGroup2 = getNewTowerGroup(1, 77);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 2 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 2 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave10() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: false,\n      instructions: {\n        main: 'Las súper torres están en malas posiciones nuevamente, pero esta vez\\n             necesitarás aplicar estilos a las propias torres.\\n\\nLa propiedad `order` define el orden en el que aparece un elemento en el contenedor\\nflex y acepta valores enteros positivos y negativos. Todos los elementos flex\\ncomienzan con un orden predeterminado de 0, por lo que un elemento con un orden mayor a 0 será\\nreposicionado en relación con los elementos que todavía tienen su orden predeterminado.\\n\\nUsa `justify-content` y `order` para poner tus torres en posición.\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**order**\\n* `#`: posicionar un elemento en relación con los demás en el contenedor',\n        tldr: 'Mueve tus torres a su posición combinando la propiedad de contenedor\\n           <nobr class=\"text__code\">justify-content ▾</nobr> con la propiedad\\n           de elemento <nobr class=\"text__code\">order ▾</nobr>. Recuerda que todos\\n           los elementos tienen un orden predeterminado de 0.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-11', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave11;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-11.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 50, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 50, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 103, y: 25 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 2000,\n        health: 300,\n        maxHealth: 300,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(7, 32);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave11() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: false,\n      instructions: {\n        main: 'Para posicionar verticalmente torres individuales, usa `align-self`, la cual\\n             acepta los mismos valores que `align-items`.\\n\\nUsa `justify-content` y `align-self` para poner tus torres\\nen posición.\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-self**\\n* `flex-start`: alinear un elemento al inicio del eje transversal del contenedor\\n* `flex-end`: alinear un elemento al final del eje transversal\\n* `center`: alinear un elemento en el centro del eje transversal\\n\\n<u>Recordatorio</u>: `align-self`, al igual que `align-items`, también acepta los valores\\n<i>baseline</i> y <i>stretch</i>, pero estos valores no se pueden usar en Flexbox\\nDefense.',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr> y <nobr\\n             class=\"text__code\">align-self ▾</nobr> para poner tus torres en\\n             posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-12', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave12;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-12.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 5, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 5, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 42 }), _towerDefenseObjectsPathCoords['default'].create({ x: 60, y: 42 }), _towerDefenseObjectsPathCoords['default'].create({ x: 60, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 95, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 95, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 90 }), _towerDefenseObjectsPathCoords['default'].create({ x: 103, y: 90 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 20;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 1475,\n        health: 300,\n        maxHealth: 300,\n        points: 5,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(14, 15);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 2 }, { type: 1 }, { type: 1 }, { type: 2 }, { type: 2 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave12() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: false,\n      instructions: {\n        main: '¡Esta última es bastante difícil! ¡Usa las propiedades que has aprendido para\\n             obtener 80 puntos o más!\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-items** y **align-self**\\n* `flex-start`: alinear elemento(s) al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elemento(s) al final del eje transversal\\n* `center`: alinear elemento(s) en el centro del eje transversal\\n\\n**flex-direction**\\n* `row`: trazar el eje principal de izquierda a derecha\\n* `row-reverse`: trazar el eje principal de derecha a izquierda\\n* `column`: trazar el eje principal de arriba a abajo\\n* `column-reverse`: trazar el eje principal de abajo a arriba\\n\\n**order**\\n* `#`: posicionar un elemento en relación con los demás en el contenedor',\n        tldr: 'Usa las propiedades que has aprendido para poner tus torres en\\n             posición: <nobr class=\"text__code\">justify-content ▾</nobr>, <nobr\\n             class=\"text__code\">align-items ▾</nobr>, <nobr\\n             class=\"text__code\">flex-direction ▾</nobr>, <nobr\\n             class=\"text__code\">order ▾</nobr>, <nobr\\n             class=\"text__code\">align-self ▾</nobr>.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-2', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave2;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-2.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 85, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 60 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 5;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 2000,\n        health: 200,\n        maxHealth: 200,\n        points: 20,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(1, 20);\n    var towerGroup2 = getNewTowerGroup(1, 47);\n    var towerGroup3 = getNewTowerGroup(1, 75);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }]);\n    addTowersToTowerGroup(towerGroup3, [{ type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n    determineFlexDirectionEligibility(towerGroup3);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2, towerGroup3]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave2() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: '¡Ahora tienes más grupos de torres a tu disposición! Usa\\n            `justify-content` para poner las torres en posición.\\n            `justify-content` acepta los siguientes valores:\\n\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr>\\n             para poner tus torres en posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-3', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave3;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-3.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 12, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 12, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 103, y: 70 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 5;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 2000,\n        health: 200,\n        maxHealth: 200,\n        points: 20,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(1, 19);\n    var towerGroup2 = getNewTowerGroup(1, 50);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave3() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Una torre parpadea en rojo cuando está posicionada sobre el camino; debes\\n            reposicionarla antes de poder comenzar la oleada. Usa `justify-content`\\n            para colocar tus torres en mejores posiciones. `justify-content`\\n            acepta los siguientes valores:\\n\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr>\\n             para poner tus torres en posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-4', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave4;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-4.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 30 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 80 }), _towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 80 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 1500,\n        health: 220,\n        maxHealth: 220,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(3, 9);\n    var towerGroup2 = getNewTowerGroup(3, 59);\n\n    // addTowersToTowerGroup = function(towerGroup, numTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave4() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Ahora algunos de los grupos tienen espacio vertical, lo cual es la\\n             oportunidad perfecta para usar la propiedad `align-items`. `align-items`\\n             posiciona los elementos de un contenedor a lo largo de su **eje transversal** y acepta\\n             los siguientes valores:\\n\\n* `flex-start`: alinear elementos al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elementos al final del eje transversal\\n* `center`: alinear elementos en el centro del eje transversal\\n\\n<u>Nota</u>: `align-items` también acepta los valores <i>baseline</i> (alinear\\nlos elementos de modo que sus líneas base coincidan) y <i>stretch</i> (estirar los elementos de\\nmodo que abarquen todo el eje transversal), pero estos valores no se pueden usar en\\nFlexbox Defense.',\n        tldr: 'Usa <nobr class=\"text__code\">align-items ▾</nobr> para mover tus\\n             torres a posiciones efectivas.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-5', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave5;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-5.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 5, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 5, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 65, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 65, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 25 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 75 }), _towerDefenseObjectsPathCoords['default'].create({ x: 35, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 1500,\n        health: 220,\n        maxHealth: 220,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(3, 4);\n    var towerGroup2 = getNewTowerGroup(1, 46);\n    var towerGroup3 = getNewTowerGroup(3, 60);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }]);\n    addTowersToTowerGroup(towerGroup3, [{ type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n    determineFlexDirectionEligibility(towerGroup3);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2, towerGroup3]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave5() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Esta vez las cosas son un poco más complicadas. ¡Intenta combinar\\n            `justify-content` y `align-items` para obtener 80 o más puntos!\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-items**\\n* `flex-start`: alinear elementos al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elementos al final del eje transversal\\n* `center`: alinear elementos en el centro del eje transversal',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr> y <nobr\\n             class=\"text__code\">align-items ▾</nobr> para mover tus torres a\\n             su posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-6', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave6;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-6.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: -3, y: 55 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 55 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 50, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 50, y: 55 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 55 }), _towerDefenseObjectsPathCoords['default'].create({ x: 85, y: 40 }), _towerDefenseObjectsPathCoords['default'].create({ x: 103, y: 40 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 1925,\n        health: 300,\n        maxHealth: 300,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(7, 30);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave6() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: '¡Usa las propiedades que has aprendido para obtener 80 puntos o más!\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-items**\\n* `flex-start`: alinear elementos al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elementos al final del eje transversal\\n* `center`: alinear elementos en el centro del eje transversal',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr> y <nobr\\n             class=\"text__code\">align-items ▾</nobr> para mover tus torres a\\n             su posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-7', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave7;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-7.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 15, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 900,\n        health: 300,\n        maxHealth: 300,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(5, 15);\n    var towerGroup2 = getNewTowerGroup(5, 65);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave7() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Esta vez tienes más torres, pero menos espacio horizontal para trabajar.\\n\\nLa propiedad `flex-direction` es tu respuesta. `flex-direction` define la\\ndisposición direccional de los ejes principal y transversal en el contenedor flex.\\n\\nPor ejemplo, aunque el eje principal se traza horizontalmente y el eje transversal\\nse traza verticalmente por defecto, `flex-direction` puede *rotar* los ejes\\nde modo que el eje principal se trace verticalmente y el eje transversal se trace\\nhorizontalmente. Así es como se ve esto:\\n\\n<img src=\"images/flexbox-column.png\" class=\"instructions__diagram\" alt=\"diagrama flexbox\">\\n\\nEn consecuencia, `flex-direction` acepta los siguientes valores:\\n\\n* `row`: trazar el eje principal de izquierda a derecha\\n* `row-reverse`: trazar el eje principal de derecha a izquierda\\n* `column`: trazar el eje principal de arriba a abajo\\n* `column-reverse`: trazar el eje principal de abajo a arriba',\n        tldr: 'Usa <nobr class=\"text__code\">flex-direction ▾</nobr> para poner\\n             tus torres en posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-8', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave8;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-8.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 15, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 15, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 103 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 10;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 900,\n        health: 300,\n        maxHealth: 300,\n        points: 10,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(5, 15);\n    var towerGroup2 = getNewTowerGroup(5, 65);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }, { type: 1 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave8() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: 'Ahora `flex-direction` debe combinarse con una propiedad que has\\n             aprendido anteriormente. ¡Serás responsable de determinar cuál\\n             es! Recuerda: `flex-direction` puede cambiar la disposición direccional\\n             de los ejes.\\n\\n**flex-direction**\\n* `row`: trazar el eje principal de izquierda a derecha\\n* `row-reverse`: trazar el eje principal de derecha a izquierda\\n* `column`: trazar el eje principal de arriba a abajo\\n* `column-reverse`: trazar el eje principal de abajo a arriba\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-items**\\n* `flex-start`: alinear elementos al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elementos al final del eje transversal\\n* `center`: alinear elementos en el centro del eje transversal',\n        tldr: 'Usa <nobr class=\"text__code\">flex-direction ▾</nobr> y ya sea\\n             <nobr class=\"text__code\">justify-content ▾</nobr> o <nobr\\n             class=\"text__code\">align-items ▾</nobr> para poner tus torres\\n             en posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","define('tower-defense/utils/create-wave-9', ['exports', 'tower-defense/objects/board', 'tower-defense/utils/create-unit-code-line', 'ember', 'tower-defense/objects/mob', 'tower-defense/objects/path-coords', 'tower-defense/objects/tower-group', 'tower-defense/objects/tower', 'tower-defense/objects/wave'], function (exports, _towerDefenseObjectsBoard, _towerDefenseUtilsCreateUnitCodeLine, _ember, _towerDefenseObjectsMob, _towerDefenseObjectsPathCoords, _towerDefenseObjectsTowerGroup, _towerDefenseObjectsTower, _towerDefenseObjectsWave) {\n  exports['default'] = createWave9;\n\n  function addBoardToWave(wave) {\n    var board = _towerDefenseObjectsBoard['default'].create();\n    board.set('imageUrl', '/images/path-9.jpg');\n\n    var pathObjects = [_towerDefenseObjectsPathCoords['default'].create({ x: 90, y: -3 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 35 }), _towerDefenseObjectsPathCoords['default'].create({ x: 71, y: 35 }), _towerDefenseObjectsPathCoords['default'].create({ x: 71, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 90, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 50 }), _towerDefenseObjectsPathCoords['default'].create({ x: 40, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 10, y: 10 }), _towerDefenseObjectsPathCoords['default'].create({ x: 10, y: 90 }), _towerDefenseObjectsPathCoords['default'].create({ x: 30, y: 90 }), _towerDefenseObjectsPathCoords['default'].create({ x: 30, y: 70 }), _towerDefenseObjectsPathCoords['default'].create({ x: 103, y: 70 })];\n\n    pathObjects.forEach(function (pathObject) {\n      board.get('pathData').addObject(pathObject);\n    });\n\n    wave.set('board', board);\n  }\n\n  function addMobsToWave(wave) {\n    var mobs = [];\n\n    var mobQuantity = 20;\n    for (var i = 0; i < mobQuantity; i++) {\n      var newMob = _towerDefenseObjectsMob['default'].create({\n        id: generateIdForRecord(),\n        frequency: 800,\n        health: 300,\n        maxHealth: 300,\n        points: 5,\n        quantity: mobQuantity,\n        speed: 10, // seconds to cross one axis of the board\n        type: 'standard'\n      });\n\n      mobs.push(newMob);\n    }\n    wave.set('mobs', _ember['default'].A(mobs));\n  }\n\n  function addTowerGroupsToWave(wave) {\n    var groupNum = 1;\n\n    function getNewTowerGroup(numRows, posY) {\n      return _towerDefenseObjectsTowerGroup['default'].create({\n        id: generateIdForRecord(),\n        groupNum: groupNum,\n        numRows: numRows,\n        posY: posY,\n        selector: 'tower-group-' + groupNum++,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    // getNewTowerGroup = function(numRows, posY)\n    var towerGroup1 = getNewTowerGroup(1, 20);\n    var towerGroup2 = getNewTowerGroup(5, 65);\n\n    // addTowersToTowerGroup = function(towerGroup, specsForTowers)\n    addTowersToTowerGroup(towerGroup1, [{ type: 2 }, { type: 1 }, { type: 1 }]);\n    addTowersToTowerGroup(towerGroup2, [{ type: 1 }, { type: 1 }, { type: 2 }]);\n    determineFlexDirectionEligibility(towerGroup1);\n    determineFlexDirectionEligibility(towerGroup2);\n\n    wave.set('towerGroups', _ember['default'].A([towerGroup1, towerGroup2]));\n  }\n\n  function addTowersToTowerGroup(towerGroup, specsForTowers) {\n    function getNewTower(towerNum, type) {\n      return _towerDefenseObjectsTower['default'].create({\n        id: generateIdForRecord(),\n        attackPower: 20,\n        attackRange: 20,\n        selector: 'tower-' + towerGroup.get('groupNum') + '-' + towerNum,\n        type: type,\n        styles: _ember['default'].A([(0, _towerDefenseUtilsCreateUnitCodeLine['default'])()])\n      });\n    }\n\n    var newTowers = [];\n    for (var i = 1; i < specsForTowers.length + 1; i++) {\n      newTowers.addObject(getNewTower(i, specsForTowers.objectAt(i - 1).type));\n    }\n\n    towerGroup.set('towers', newTowers);\n  }\n\n  function determineFlexDirectionEligibility(towerGroup) {\n    var numTowers = towerGroup.get('towers.length');\n    var numRows = towerGroup.get('numRows');\n\n    if (numRows >= numTowers) {\n      towerGroup.set('flexDirectionAllowed', true);\n    }\n  }\n\n  function generateIdForRecord() {\n    function generate4DigitString() {\n      var baseInt = Math.floor((1 + Math.random()) * 0x10000);\n      return baseInt.toString(16).substring(1);\n    }\n\n    return generate4DigitString() + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + '-' + generate4DigitString() + generate4DigitString() + generate4DigitString();\n  }\n\n  function createWave9() {\n    var wave = _towerDefenseObjectsWave['default'].create({\n      towerStylesHidden: true,\n      instructions: {\n        main: '¡Esta vez cada grupo contiene una súper torre! Las súper torres tardan un\\n             tiempo en recargar, pero dañan a todos los enemigos en su rango de ataque. ¡Usa\\n             las propiedades que has aprendido para obtener 80 puntos o más!\\n\\n**justify-content**\\n* `flex-start`: agrupar elementos al inicio del eje principal del contenedor\\n* `flex-end`: agrupar elementos al final del eje principal\\n* `center`: agrupar elementos en el centro del eje principal\\n* `space-between`: distribuir equitativamente los elementos a lo largo del eje principal de modo que el primer elemento se alinee al inicio y el último al final\\n* `space-around`: distribuir equitativamente los elementos a lo largo del eje principal de modo que tengan el mismo espacio a su alrededor\\n\\n**align-items**\\n* `flex-start`: alinear elementos al inicio del eje transversal del contenedor\\n* `flex-end`: alinear elementos al final del eje transversal\\n* `center`: alinear elementos en el centro del eje transversal\\n\\n**flex-direction**\\n* `row`: trazar el eje principal de izquierda a derecha\\n* `row-reverse`: trazar el eje principal de derecha a izquierda\\n* `column`: trazar el eje principal de arriba a abajo\\n* `column-reverse`: trazar el eje principal de abajo a arriba',\n        tldr: 'Usa <nobr class=\"text__code\">justify-content ▾</nobr>, <nobr\\n             class=\"text__code\">align-items ▾</nobr>, y <nobr\\n             class=\"text__code\">flex-direction ▾</nobr> para poner tus torres en\\n             posición.'\n      },\n      minimumScore: 80\n    });\n\n    addBoardToWave(wave);\n    addMobsToWave(wave);\n    addTowerGroupsToWave(wave);\n\n    return wave;\n  }\n});","/* jshint ignore:start */\n\n/* jshint ignore:end */\n","/* jshint ignore:start */\n\ndefine('tower-defense/config/environment', ['ember'], function(Ember) {\n  var prefix = 'tower-defense';\n/* jshint ignore:start */\n\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = Ember['default'].$('meta[name=\"' + metaName + '\"]').attr('content');\n  var config = JSON.parse(unescape(rawConfig));\n\n  return { 'default': config };\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n/* jshint ignore:end */\n\n});\n\nif (!runningTests) {\n  require(\"tower-defense/app\")[\"default\"].create({\"name\":\"tower-defense\",\"version\":\"0.0.0+8466c0d2\"});\n}\n\n/* jshint ignore:end */\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClhEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;","file":"tower-defense.js"}