Subversion Repository Public Repository

Nextrek

Diff Revisions 1085 vs 1086 for /s2s/data/DA213629K6807A40ABS819CEB68756DF5543.json

Diff revisions: vs.
  @@ -6,10 +6,10 @@
6 6 "name": "Component_ImageMap",
7 7 "type": "game_script",
8 8 "order": 9,
9 - "content": "# ===================================================================\n#\n# Script: Component_ImageMap\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_ImageMap extends gs.Component_Visual\n ###*\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n ###\n onDataBundleRestore: (data, context) ->\n @setupEventHandlers()\n @object.addObject(@ground)\n \n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/#{@object.images[0]}\")\n ground = new gs.Bitmap(bitmap.width, bitmap.height)\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height))\n @ground.bitmap = ground\n \n @setupHotspots(@hotspots)\n for h in @hotspots\n @object.addObject(h)\n \n ###*\n * A component which turns a game object into an interactive image-map.\n *\n * @module gs\n * @class Component_ImageMap\n * @extends gs.Component_Visual\n * @memberof gs\n ###\n constructor: ->\n super\n \n ###*\n * The ground/base image.\n * @property ground\n * @type gs.Object_Picture\n * @default null\n ###\n @ground = null\n \n ###*\n * An array of different hotspots.\n * @property hotspots\n * @type gs.Object_Picture[]\n * @default null\n ###\n @hotspots = null\n \n ###*\n * The variable context used if a hotspot needs to deal with local variables.\n * @property variableContext\n * @type Object\n * @default null\n ###\n @variableContext = null\n \n ###*\n * Indicates if the image-map is active. An in-active image-map doesn't respond\n * to any input-event. Hover effects are still working.\n * @property active\n * @type boolean\n * @default yes\n ###\n @active = yes\n \n ###*\n * Adds event-handler for mouse/touch events to update the component only if \n * a user-action happened.\n *\n * @method setupEventHandlers\n ### \n setupEventHandlers: ->\n gs.GlobalEventManager.offByOwner(\"mouseUp\", @object)\n gs.GlobalEventManager.on \"mouseUp\", ((e) => \n contains = Rect.contains(@object.dstRect.x, @object.dstRect.y, \n @object.dstRect.width, @object.dstRect.height,\n Input.Mouse.x - @object.origin.x, Input.Mouse.y - @object.origin.y)\n \n if contains and @active\n for hotspot in @hotspots\n if @checkHotspotAction(hotspot) \n e.breakChain = yes\n if hotspot.data.bindToSwitch\n hotspot.selected = !hotspot.selected\n @executeHotspotAction(hotspot)\n \n ), null, @object\n \n \n ###*\n * Initializes the image-map. Creates the background and hotspots.\n *\n * @method setup\n ###\n setup: ->\n @setupEventHandlers()\n @object.rIndex = 11000 # Receive Input Events first\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/#{@object.images[0]}\")\n bitmap.makeMutable()\n ground = new gs.Bitmap(bitmap.width, bitmap.height)\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height))\n \n @ground = new gs.Object_Picture()\n @ground.bitmap = ground\n @ground.image = null\n @ground.zIndex = @object.zIndex\n @ground.imageHandling = gs.ImageHandling.CUSTOM_SIZE\n @object.addObject(@ground)\n \n @setupHotspots()\n \n @ground.srcRect.set(0, 0, ground.width, ground.height)\n @ground.dstRect.width = ground.width\n @ground.dstRect.height = ground.height\n @ground.update()\n \n @object.dstRect.width = @ground.dstRect.width\n @object.dstRect.height = @ground.dstRect.height\n \n ###*\n * Sets up the hotspots on the image-map. Each hotspot is a gs.Object_ImageMapHotspot\n * object.\n *\n * @method setupHotspots\n ###\n setupHotspots: (hotspots) ->\n @hotspots = @object.hotspots.select (v, i) => \n @ground.bitmap.clearRect(v.x, v.y, v.size.width, v.size.height)\n picture = new gs.Object_ImageMapHotspot()\n picture.fixedSize = true\n picture.srcRect = new Rect(v.x, v.y, v.size.width, v.size.height)\n picture.dstRect = new Rect(v.x, v.y, v.size.width, v.size.height)\n picture.imageHandling = gs.ImageHandling.CUSTOM_SIZE\n picture.zIndex = @object.zIndex + 1\n picture.selected = hotspots?[i]?.selected ? no\n picture.enabled = hotspots?[i]?.enabled ? yes\n picture.actions = v.data.actions\n picture.data = v.data\n picture.commonEventId = v.commonEventId\n picture.anchor.set(0.5, 0.5)\n @object.addObject(picture)\n \n return picture\n \n ###*\n * Initializes the image-map. Frees ground image.\n *\n * @method dispose\n ###\n dispose: ->\n super\n gs.GlobalEventManager.offByOwner(\"mouseUp\", @object)\n @ground.bitmap.dispose()\n \n ###*\n * Executes a hotspot's associated action. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method executeHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @protected\n ###\n executeHotspotAction: (hotspot) ->\n GameManager.variableStore.setupTempVariables(@variableContext)\n if hotspot.data.bindToSwitch\n domain = GameManager.variableStore.domain\n GameManager.variableStore.setBooleanValueTo(hotspot.data.switch, hotspot.selected)\n if hotspot.data.bindValueTo\n domain = GameManager.variableStore.domain\n GameManager.variableStore.setNumberValueTo(hotspot.data.bindValueVariable, hotspot.data.bindValue)\n \n switch hotspot.data.action\n when 1 # Jump To\n @object.events?.emit(\"jumpTo\", @object, { label: hotspot.data.label })\n when 2 # Call Common Event\n @object.events?.emit(\"callCommonEvent\", @object, { commonEventId: hotspot.data.commonEventId, finish: hotspot.data.finish })\n when 3 # UI Action\n @object.events?.emit(\"action\", @object, { actions: hotspot.data.actions })\n \n if hotspot.data.finish\n @object.events?.emit(\"finish\", @object)\n \n \n ###*\n * Checks if a hotspot's associated action needs to be executed. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method updateHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @return {boolean} If <b>true</b> the hotspot's action needs to be executed. Otherwise <b>false</b>.\n * @protected\n ###\n checkHotspotAction: (hotspot) ->\n result = no\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y)\n \n if hovered and hotspot.enabled and Input.Mouse.buttons[Input.Mouse.LEFT] == 2\n result = yes\n \n return result\n \n ###*\n * Updates a hotspot's image. Depending on the state the image of a hotspot can\n * change for example if the mouse hovers over a hotspot.\n *\n * @method updateHotspotImage\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @param {boolean} hovered - Indicates if the hotspot is hovered by mouse/touch cursor.\n * @protected\n ###\n updateHotspotImage: (hotspot, hovered) ->\n baseImage = if hotspot.enabled then @object.images[2] || @object.images[0] else @object.images[0] \n if hovered and hotspot.enabled\n if hotspot.selected\n hotspot.image = @object.images[4] || @object.images[1] || baseImage\n else\n hotspot.image = @object.images[1] || baseImage\n else\n if hotspot.selected\n hotspot.image = @object.images[3] || baseImage\n else\n hotspot.image = baseImage\n \n ###*\n * Updates a hotspot.\n *\n * @method updateHotspot\n * @param {gs.Object_Picture} hotspot - The hotspot to update.\n * @protected\n ### \n updateHotspot: (hotspot) ->\n hotspot.visible = @object.visible\n hotspot.opacity = @object.opacity\n hotspot.tone.setFromObject(@object.tone)\n hotspot.color.setFromObject(@object.color)\n if hotspot.data.bindEnabledState\n GameManager.variableStore.setupTempVariables(@variableContext)\n hotspot.enabled = GameManager.variableStore.booleanValueOf(hotspot.data.enabledSwitch)\n if hotspot.data.bindToSwitch\n GameManager.variableStore.setupTempVariables(@variableContext)\n hotspot.selected = GameManager.variableStore.booleanValueOf(hotspot.data.switch)\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y)\n \n @updateHotspotImage(hotspot, hovered) \n hotspot.update() \n \n ###*\n * Updates the ground-image.\n *\n * @method updateGround\n * @protected\n ### \n updateGround: ->\n @ground.visible = @object.visible\n @ground.opacity = @object.opacity\n @ground.anchor.x = 0.5\n @ground.anchor.y = 0.5\n @ground.tone.setFromObject(@object.tone)\n @ground.color.setFromObject(@object.color)\n @ground.update()\n \n ###*\n * Updates the image-map's ground and all hotspots.\n *\n * @method update\n ###\n update: ->\n super()\n \n @updateGround()\n \n for hotspot in @hotspots\n @updateHotspot(hotspot)\n \n return null\n \ngs.Component_ImageMap = Component_ImageMap",
9 + "content": "# ===================================================================\n#\n# Script: Component_ImageMap\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_ImageMap extends gs.Component_Visual\n ###*\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n ###\n onDataBundleRestore: (data, context) ->\n @setupEventHandlers()\n @object.addObject(@ground)\n \n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/#{@object.images[0]}\")\n ground = new gs.Bitmap(bitmap.width, bitmap.height)\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height))\n @ground.bitmap = ground\n \n @setupHotspots(@hotspots)\n\n ###*\n * A component which turns a game object into an interactive image-map.\n *\n * @module gs\n * @class Component_ImageMap\n * @extends gs.Component_Visual\n * @memberof gs\n ###\n constructor: ->\n super\n \n ###*\n * The ground/base image.\n * @property ground\n * @type gs.Object_Picture\n * @default null\n ###\n @ground = null\n \n ###*\n * An array of different hotspots.\n * @property hotspots\n * @type gs.Object_Picture[]\n * @default null\n ###\n @hotspots = null\n \n ###*\n * The variable context used if a hotspot needs to deal with local variables.\n * @property variableContext\n * @type Object\n * @default null\n ###\n @variableContext = null\n \n ###*\n * Indicates if the image-map is active. An in-active image-map doesn't respond\n * to any input-event. Hover effects are still working.\n * @property active\n * @type boolean\n * @default yes\n ###\n @active = yes\n \n ###*\n * Adds event-handler for mouse/touch events to update the component only if \n * a user-action happened.\n *\n * @method setupEventHandlers\n ### \n setupEventHandlers: ->\n gs.GlobalEventManager.offByOwner(\"mouseUp\", @object)\n gs.GlobalEventManager.on \"mouseUp\", ((e) => \n contains = Rect.contains(@object.dstRect.x, @object.dstRect.y, \n @object.dstRect.width, @object.dstRect.height,\n Input.Mouse.x - @object.origin.x, Input.Mouse.y - @object.origin.y)\n \n if contains and @active\n for hotspot in @hotspots\n if @checkHotspotAction(hotspot) \n e.breakChain = yes\n if hotspot.data.bindToSwitch\n hotspot.selected = !hotspot.selected\n @executeHotspotAction(hotspot)\n \n ), null, @object\n \n \n ###*\n * Initializes the image-map. Creates the background and hotspots.\n *\n * @method setup\n ###\n setup: ->\n @setupEventHandlers()\n @object.rIndex = 11000 # Receive Input Events first\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/#{@object.images[0]}\")\n bitmap.makeMutable()\n ground = new gs.Bitmap(bitmap.width, bitmap.height)\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height))\n \n @ground = new gs.Object_Picture()\n @ground.bitmap = ground\n @ground.image = null\n @ground.zIndex = @object.zIndex\n @ground.imageHandling = gs.ImageHandling.CUSTOM_SIZE\n @object.addObject(@ground)\n \n @setupHotspots()\n \n @ground.srcRect.set(0, 0, ground.width, ground.height)\n @ground.dstRect.width = ground.width\n @ground.dstRect.height = ground.height\n @ground.update()\n \n @object.dstRect.width = @ground.dstRect.width\n @object.dstRect.height = @ground.dstRect.height\n \n ###*\n * Sets up the hotspots on the image-map. Each hotspot is a gs.Object_ImageMapHotspot\n * object.\n *\n * @method setupHotspots\n ###\n setupHotspots: (hotspots) ->\n @hotspots = @object.hotspots.select (v, i) => \n @ground.bitmap.clearRect(v.x, v.y, v.size.width, v.size.height)\n picture = new gs.Object_ImageMapHotspot()\n picture.fixedSize = true\n picture.srcRect = new Rect(v.x, v.y, v.size.width, v.size.height)\n picture.dstRect = new Rect(v.x, v.y, v.size.width, v.size.height)\n picture.imageHandling = gs.ImageHandling.CUSTOM_SIZE\n picture.zIndex = @object.zIndex + 1\n picture.selected = hotspots?[i]?.selected ? no\n picture.hovered = no\n picture.enabled = hotspots?[i]?.enabled ? yes\n picture.actions = v.data.actions\n picture.data = v.data\n picture.commonEventId = v.commonEventId\n picture.anchor.set(0.5, 0.5)\n @object.addObject(picture)\n \n return picture\n \n ###*\n * Initializes the image-map. Frees ground image.\n *\n * @method dispose\n ###\n dispose: ->\n super\n gs.GlobalEventManager.offByOwner(\"mouseUp\", @object)\n @ground.bitmap.dispose()\n \n ###*\n * Executes a hotspot's associated action. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method executeHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @protected\n ###\n executeHotspotAction: (hotspot) ->\n GameManager.variableStore.setupTempVariables(@variableContext)\n if hotspot.data.bindToSwitch\n domain = GameManager.variableStore.domain\n GameManager.variableStore.setBooleanValueTo(hotspot.data.switch, hotspot.selected)\n if hotspot.data.bindValueTo\n domain = GameManager.variableStore.domain\n GameManager.variableStore.setNumberValueTo(hotspot.data.bindValueVariable, hotspot.data.bindValue)\n \n AudioManager.playSound(hotspot.data.onClickSound)\n switch hotspot.data.action\n when 1 # Jump To\n @object.events?.emit(\"jumpTo\", @object, { label: hotspot.data.label })\n when 2 # Call Common Event\n @object.events?.emit(\"callCommonEvent\", @object, { commonEventId: hotspot.data.commonEventId, finish: hotspot.data.finish })\n when 3 # UI Action\n @object.events?.emit(\"action\", @object, { actions: hotspot.data.actions })\n \n if hotspot.data.finish\n @object.events?.emit(\"finish\", @object)\n \n \n ###*\n * Checks if a hotspot's associated action needs to be executed. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method updateHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @return {boolean} If <b>true</b> the hotspot's action needs to be executed. Otherwise <b>false</b>.\n * @protected\n ###\n checkHotspotAction: (hotspot) ->\n result = no\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y)\n \n if hovered and hotspot.enabled and Input.Mouse.buttons[Input.Mouse.LEFT] == 2\n result = yes\n \n return result\n \n ###*\n * Updates a hotspot's image. Depending on the state the image of a hotspot can\n * change for example if the mouse hovers over a hotspot.\n *\n * @method updateHotspotImage\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @param {boolean} hovered - Indicates if the hotspot is hovered by mouse/touch cursor.\n * @protected\n ###\n updateHotspotImage: (hotspot, hovered) ->\n baseImage = if hotspot.enabled then @object.images[2] || @object.images[0] else @object.images[0] \n if hovered and hotspot.enabled\n if hotspot.selected\n hotspot.image = @object.images[4] || @object.images[1] || baseImage\n else\n hotspot.image = @object.images[1] || baseImage\n else\n if hotspot.selected\n hotspot.image = @object.images[3] || baseImage\n else\n hotspot.image = baseImage\n \n \n ###*\n * Updates a hotspot.\n *\n * @method updateHotspot\n * @param {gs.Object_Picture} hotspot - The hotspot to update.\n * @protected\n ### \n updateHotspot: (hotspot) ->\n hotspot.visible = @object.visible\n hotspot.opacity = @object.opacity\n hotspot.tone.setFromObject(@object.tone)\n hotspot.color.setFromObject(@object.color)\n if hotspot.data.bindEnabledState\n GameManager.variableStore.setupTempVariables(@variableContext)\n hotspot.enabled = GameManager.variableStore.booleanValueOf(hotspot.data.enabledSwitch)\n if hotspot.data.bindToSwitch\n GameManager.variableStore.setupTempVariables(@variableContext)\n hotspot.selected = GameManager.variableStore.booleanValueOf(hotspot.data.switch)\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y)\n if hovered != hotspot.hovered\n hotspot.hovered = hovered\n AudioManager.playSound(hotspot.data.onHoverSound) if hovered\n @updateHotspotImage(hotspot, hovered) \n hotspot.update() \n \n ###*\n * Updates the ground-image.\n *\n * @method updateGround\n * @protected\n ### \n updateGround: ->\n @ground.visible = @object.visible\n @ground.opacity = @object.opacity\n @ground.anchor.x = 0.5\n @ground.anchor.y = 0.5\n @ground.tone.setFromObject(@object.tone)\n @ground.color.setFromObject(@object.color)\n @ground.update()\n \n ###*\n * Updates the image-map's ground and all hotspots.\n *\n * @method update\n ###\n update: ->\n super()\n \n @updateGround()\n \n for hotspot in @hotspots\n @updateHotspot(hotspot)\n \n return null\n \ngs.Component_ImageMap = Component_ImageMap",
10 10 "parentId": "D3325122KACDEA4515SB731E37A42B9D779F",
11 11 "folder": false,
12 - "compiledContent": "var Component_ImageMap,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_ImageMap = (function(superClass) {\n extend(Component_ImageMap, superClass);\n\n\n /**\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n */\n\n Component_ImageMap.prototype.onDataBundleRestore = function(data, context) {\n var bitmap, ground, h, j, len, ref, results;\n this.setupEventHandlers();\n this.object.addObject(this.ground);\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/\" + this.object.images[0]);\n ground = new gs.Bitmap(bitmap.width, bitmap.height);\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height));\n this.ground.bitmap = ground;\n this.setupHotspots(this.hotspots);\n ref = this.hotspots;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n h = ref[j];\n results.push(this.object.addObject(h));\n }\n return results;\n };\n\n\n /**\n * A component which turns a game object into an interactive image-map.\n *\n * @module gs\n * @class Component_ImageMap\n * @extends gs.Component_Visual\n * @memberof gs\n */\n\n function Component_ImageMap() {\n Component_ImageMap.__super__.constructor.apply(this, arguments);\n\n /**\n * The ground/base image.\n * @property ground\n * @type gs.Object_Picture\n * @default null\n */\n this.ground = null;\n\n /**\n * An array of different hotspots.\n * @property hotspots\n * @type gs.Object_Picture[]\n * @default null\n */\n this.hotspots = null;\n\n /**\n * The variable context used if a hotspot needs to deal with local variables.\n * @property variableContext\n * @type Object\n * @default null\n */\n this.variableContext = null;\n\n /**\n * Indicates if the image-map is active. An in-active image-map doesn't respond\n * to any input-event. Hover effects are still working.\n * @property active\n * @type boolean\n * @default yes\n */\n this.active = true;\n }\n\n\n /**\n * Adds event-handler for mouse/touch events to update the component only if \n * a user-action happened.\n *\n * @method setupEventHandlers\n */\n\n Component_ImageMap.prototype.setupEventHandlers = function() {\n gs.GlobalEventManager.offByOwner(\"mouseUp\", this.object);\n return gs.GlobalEventManager.on(\"mouseUp\", ((function(_this) {\n return function(e) {\n var contains, hotspot, j, len, ref, results;\n contains = Rect.contains(_this.object.dstRect.x, _this.object.dstRect.y, _this.object.dstRect.width, _this.object.dstRect.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y);\n if (contains && _this.active) {\n ref = _this.hotspots;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n hotspot = ref[j];\n if (_this.checkHotspotAction(hotspot)) {\n e.breakChain = true;\n if (hotspot.data.bindToSwitch) {\n hotspot.selected = !hotspot.selected;\n }\n results.push(_this.executeHotspotAction(hotspot));\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n };\n })(this)), null, this.object);\n };\n\n\n /**\n * Initializes the image-map. Creates the background and hotspots.\n *\n * @method setup\n */\n\n Component_ImageMap.prototype.setup = function() {\n var bitmap, ground;\n this.setupEventHandlers();\n this.object.rIndex = 11000;\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/\" + this.object.images[0]);\n bitmap.makeMutable();\n ground = new gs.Bitmap(bitmap.width, bitmap.height);\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height));\n this.ground = new gs.Object_Picture();\n this.ground.bitmap = ground;\n this.ground.image = null;\n this.ground.zIndex = this.object.zIndex;\n this.ground.imageHandling = gs.ImageHandling.CUSTOM_SIZE;\n this.object.addObject(this.ground);\n this.setupHotspots();\n this.ground.srcRect.set(0, 0, ground.width, ground.height);\n this.ground.dstRect.width = ground.width;\n this.ground.dstRect.height = ground.height;\n this.ground.update();\n this.object.dstRect.width = this.ground.dstRect.width;\n return this.object.dstRect.height = this.ground.dstRect.height;\n };\n\n\n /**\n * Sets up the hotspots on the image-map. Each hotspot is a gs.Object_ImageMapHotspot\n * object.\n *\n * @method setupHotspots\n */\n\n Component_ImageMap.prototype.setupHotspots = function(hotspots) {\n return this.hotspots = this.object.hotspots.select((function(_this) {\n return function(v, i) {\n var picture, ref, ref1, ref2, ref3;\n _this.ground.bitmap.clearRect(v.x, v.y, v.size.width, v.size.height);\n picture = new gs.Object_ImageMapHotspot();\n picture.fixedSize = true;\n picture.srcRect = new Rect(v.x, v.y, v.size.width, v.size.height);\n picture.dstRect = new Rect(v.x, v.y, v.size.width, v.size.height);\n picture.imageHandling = gs.ImageHandling.CUSTOM_SIZE;\n picture.zIndex = _this.object.zIndex + 1;\n picture.selected = (ref = hotspots != null ? (ref1 = hotspots[i]) != null ? ref1.selected : void 0 : void 0) != null ? ref : false;\n picture.enabled = (ref2 = hotspots != null ? (ref3 = hotspots[i]) != null ? ref3.enabled : void 0 : void 0) != null ? ref2 : true;\n picture.actions = v.data.actions;\n picture.data = v.data;\n picture.commonEventId = v.commonEventId;\n picture.anchor.set(0.5, 0.5);\n _this.object.addObject(picture);\n return picture;\n };\n })(this));\n };\n\n\n /**\n * Initializes the image-map. Frees ground image.\n *\n * @method dispose\n */\n\n Component_ImageMap.prototype.dispose = function() {\n Component_ImageMap.__super__.dispose.apply(this, arguments);\n gs.GlobalEventManager.offByOwner(\"mouseUp\", this.object);\n return this.ground.bitmap.dispose();\n };\n\n\n /**\n * Executes a hotspot's associated action. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method executeHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @protected\n */\n\n Component_ImageMap.prototype.executeHotspotAction = function(hotspot) {\n var domain, ref, ref1, ref2, ref3;\n GameManager.variableStore.setupTempVariables(this.variableContext);\n if (hotspot.data.bindToSwitch) {\n domain = GameManager.variableStore.domain;\n GameManager.variableStore.setBooleanValueTo(hotspot.data[\"switch\"], hotspot.selected);\n }\n if (hotspot.data.bindValueTo) {\n domain = GameManager.variableStore.domain;\n GameManager.variableStore.setNumberValueTo(hotspot.data.bindValueVariable, hotspot.data.bindValue);\n }\n switch (hotspot.data.action) {\n case 1:\n if ((ref = this.object.events) != null) {\n ref.emit(\"jumpTo\", this.object, {\n label: hotspot.data.label\n });\n }\n break;\n case 2:\n if ((ref1 = this.object.events) != null) {\n ref1.emit(\"callCommonEvent\", this.object, {\n commonEventId: hotspot.data.commonEventId,\n finish: hotspot.data.finish\n });\n }\n break;\n case 3:\n if ((ref2 = this.object.events) != null) {\n ref2.emit(\"action\", this.object, {\n actions: hotspot.data.actions\n });\n }\n }\n if (hotspot.data.finish) {\n return (ref3 = this.object.events) != null ? ref3.emit(\"finish\", this.object) : void 0;\n }\n };\n\n\n /**\n * Checks if a hotspot's associated action needs to be executed. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method updateHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @return {boolean} If <b>true</b> the hotspot's action needs to be executed. Otherwise <b>false</b>.\n * @protected\n */\n\n Component_ImageMap.prototype.checkHotspotAction = function(hotspot) {\n var hovered, result;\n result = false;\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y);\n if (hovered && hotspot.enabled && Input.Mouse.buttons[Input.Mouse.LEFT] === 2) {\n result = true;\n }\n return result;\n };\n\n\n /**\n * Updates a hotspot's image. Depending on the state the image of a hotspot can\n * change for example if the mouse hovers over a hotspot.\n *\n * @method updateHotspotImage\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @param {boolean} hovered - Indicates if the hotspot is hovered by mouse/touch cursor.\n * @protected\n */\n\n Component_ImageMap.prototype.updateHotspotImage = function(hotspot, hovered) {\n var baseImage;\n baseImage = hotspot.enabled ? this.object.images[2] || this.object.images[0] : this.object.images[0];\n if (hovered && hotspot.enabled) {\n if (hotspot.selected) {\n return hotspot.image = this.object.images[4] || this.object.images[1] || baseImage;\n } else {\n return hotspot.image = this.object.images[1] || baseImage;\n }\n } else {\n if (hotspot.selected) {\n return hotspot.image = this.object.images[3] || baseImage;\n } else {\n return hotspot.image = baseImage;\n }\n }\n };\n\n\n /**\n * Updates a hotspot.\n *\n * @method updateHotspot\n * @param {gs.Object_Picture} hotspot - The hotspot to update.\n * @protected\n */\n\n Component_ImageMap.prototype.updateHotspot = function(hotspot) {\n var hovered;\n hotspot.visible = this.object.visible;\n hotspot.opacity = this.object.opacity;\n hotspot.tone.setFromObject(this.object.tone);\n hotspot.color.setFromObject(this.object.color);\n if (hotspot.data.bindEnabledState) {\n GameManager.variableStore.setupTempVariables(this.variableContext);\n hotspot.enabled = GameManager.variableStore.booleanValueOf(hotspot.data.enabledSwitch);\n }\n if (hotspot.data.bindToSwitch) {\n GameManager.variableStore.setupTempVariables(this.variableContext);\n hotspot.selected = GameManager.variableStore.booleanValueOf(hotspot.data[\"switch\"]);\n }\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y);\n this.updateHotspotImage(hotspot, hovered);\n return hotspot.update();\n };\n\n\n /**\n * Updates the ground-image.\n *\n * @method updateGround\n * @protected\n */\n\n Component_ImageMap.prototype.updateGround = function() {\n this.ground.visible = this.object.visible;\n this.ground.opacity = this.object.opacity;\n this.ground.anchor.x = 0.5;\n this.ground.anchor.y = 0.5;\n this.ground.tone.setFromObject(this.object.tone);\n this.ground.color.setFromObject(this.object.color);\n return this.ground.update();\n };\n\n\n /**\n * Updates the image-map's ground and all hotspots.\n *\n * @method update\n */\n\n Component_ImageMap.prototype.update = function() {\n var hotspot, j, len, ref;\n Component_ImageMap.__super__.update.call(this);\n this.updateGround();\n ref = this.hotspots;\n for (j = 0, len = ref.length; j < len; j++) {\n hotspot = ref[j];\n this.updateHotspot(hotspot);\n }\n return null;\n };\n\n return Component_ImageMap;\n\n})(gs.Component_Visual);\n\ngs.Component_ImageMap = Component_ImageMap;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsa0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7OytCQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7QUFDakIsUUFBQTtJQUFBLElBQUMsQ0FBQSxrQkFBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxTQUFSLENBQWtCLElBQUMsQ0FBQSxNQUFuQjtJQUVBLE1BQUEsR0FBUyxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUE5RDtJQUNULE1BQUEsR0FBYSxJQUFBLEVBQUUsQ0FBQyxNQUFILENBQVUsTUFBTSxDQUFDLEtBQWpCLEVBQXdCLE1BQU0sQ0FBQyxNQUEvQjtJQUNiLE1BQU0sQ0FBQyxHQUFQLENBQVcsQ0FBWCxFQUFjLENBQWQsRUFBaUIsTUFBakIsRUFBNkIsSUFBQSxJQUFBLENBQUssQ0FBTCxFQUFRLENBQVIsRUFBVyxNQUFNLENBQUMsS0FBbEIsRUFBeUIsTUFBTSxDQUFDLE1BQWhDLENBQTdCO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCO0lBRWpCLElBQUMsQ0FBQSxhQUFELENBQWUsSUFBQyxDQUFBLFFBQWhCO0FBQ0E7QUFBQTtTQUFBLHFDQUFBOzttQkFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQVIsQ0FBa0IsQ0FBbEI7QUFESjs7RUFWaUI7OztBQWFyQjs7Ozs7Ozs7O0VBUWEsNEJBQUE7SUFDVCxxREFBQSxTQUFBOztBQUVBOzs7Ozs7SUFNQSxJQUFDLENBQUEsTUFBRCxHQUFVOztBQUVWOzs7Ozs7SUFNQSxJQUFDLENBQUEsUUFBRCxHQUFZOztBQUVaOzs7Ozs7SUFNQSxJQUFDLENBQUEsZUFBRCxHQUFtQjs7QUFFbkI7Ozs7Ozs7SUFPQSxJQUFDLENBQUEsTUFBRCxHQUFVO0VBbENEOzs7QUFvQ2I7Ozs7Ozs7K0JBTUEsa0JBQUEsR0FBb0IsU0FBQTtJQUNoQixFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBdEIsQ0FBaUMsU0FBakMsRUFBNEMsSUFBQyxDQUFBLE1BQTdDO1dBQ0EsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQXRCLENBQXlCLFNBQXpCLEVBQW9DLENBQUMsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFDLENBQUQ7QUFDakMsWUFBQTtRQUFBLFFBQUEsR0FBVyxJQUFJLENBQUMsUUFBTCxDQUFjLEtBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQTlCLEVBQWlDLEtBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQWpELEVBQ0UsS0FBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FEbEIsRUFDeUIsS0FBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFEekMsRUFFRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQVosR0FBZ0IsS0FBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FGakMsRUFFb0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLEtBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBRm5FO1FBSVgsSUFBRyxRQUFBLElBQWEsS0FBQyxDQUFBLE1BQWpCO0FBQ0k7QUFBQTtlQUFBLHFDQUFBOztZQUNJLElBQUcsS0FBQyxDQUFBLGtCQUFELENBQW9CLE9BQXBCLENBQUg7Y0FDSSxDQUFDLENBQUMsVUFBRixHQUFlO2NBQ2YsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQWhCO2dCQUNJLE9BQU8sQ0FBQyxRQUFSLEdBQW1CLENBQUMsT0FBTyxDQUFDLFNBRGhDOzsyQkFFQSxLQUFDLENBQUEsb0JBQUQsQ0FBc0IsT0FBdEIsR0FKSjthQUFBLE1BQUE7bUNBQUE7O0FBREo7eUJBREo7O01BTGlDO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFELENBQXBDLEVBYUcsSUFiSCxFQWFTLElBQUMsQ0FBQSxNQWJWO0VBRmdCOzs7QUFrQnBCOzs7Ozs7K0JBS0EsS0FBQSxHQUFPLFNBQUE7QUFDSCxRQUFBO0lBQUEsSUFBQyxDQUFBLGtCQUFELENBQUE7SUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUI7SUFDakIsTUFBQSxHQUFTLGVBQWUsQ0FBQyxTQUFoQixDQUEwQixvQkFBQSxHQUFxQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQTlEO0lBQ1QsTUFBTSxDQUFDLFdBQVAsQ0FBQTtJQUNBLE1BQUEsR0FBYSxJQUFBLEVBQUUsQ0FBQyxNQUFILENBQVUsTUFBTSxDQUFDLEtBQWpCLEVBQXdCLE1BQU0sQ0FBQyxNQUEvQjtJQUNiLE1BQU0sQ0FBQyxHQUFQLENBQVcsQ0FBWCxFQUFjLENBQWQsRUFBaUIsTUFBakIsRUFBNkIsSUFBQSxJQUFBLENBQUssQ0FBTCxFQUFRLENBQVIsRUFBVyxNQUFNLENBQUMsS0FBbEIsRUFBeUIsTUFBTSxDQUFDLE1BQWhDLENBQTdCO0lBRUEsSUFBQyxDQUFBLE1BQUQsR0FBYyxJQUFBLEVBQUUsQ0FBQyxjQUFILENBQUE7SUFDZCxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUI7SUFDakIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFSLEdBQWdCO0lBQ2hCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDO0lBQ3pCLElBQUMsQ0FBQSxNQUFNLENBQUMsYUFBUixHQUF3QixFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3pDLElBQUMsQ0FBQSxNQUFNLENBQUMsU0FBUixDQUFrQixJQUFDLENBQUEsTUFBbkI7SUFFQSxJQUFDLENBQUEsYUFBRCxDQUFBO0lBRUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBaEIsQ0FBb0IsQ0FBcEIsRUFBdUIsQ0FBdkIsRUFBMEIsTUFBTSxDQUFDLEtBQWpDLEVBQXdDLE1BQU0sQ0FBQyxNQUEvQztJQUNBLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWhCLEdBQXdCLE1BQU0sQ0FBQztJQUMvQixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFoQixHQUF5QixNQUFNLENBQUM7SUFDaEMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUE7SUFFQSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztXQUN4QyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFoQixHQUF5QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztFQXZCdEM7OztBQXlCUDs7Ozs7OzsrQkFNQSxhQUFBLEdBQWUsU0FBQyxRQUFEO1dBQ1gsSUFBQyxDQUFBLFFBQUQsR0FBWSxJQUFDLENBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFqQixDQUF3QixDQUFBLFNBQUEsS0FBQTthQUFBLFNBQUMsQ0FBRCxFQUFJLENBQUo7QUFDaEMsWUFBQTtRQUFBLEtBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQWYsQ0FBeUIsQ0FBQyxDQUFDLENBQTNCLEVBQThCLENBQUMsQ0FBQyxDQUFoQyxFQUFtQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQTFDLEVBQWlELENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBeEQ7UUFDQSxPQUFBLEdBQWMsSUFBQSxFQUFFLENBQUMsc0JBQUgsQ0FBQTtRQUNkLE9BQU8sQ0FBQyxTQUFSLEdBQW9CO1FBQ3BCLE9BQU8sQ0FBQyxPQUFSLEdBQXNCLElBQUEsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFQLEVBQVUsQ0FBQyxDQUFDLENBQVosRUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQXRCLEVBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBcEM7UUFDdEIsT0FBTyxDQUFDLE9BQVIsR0FBc0IsSUFBQSxJQUFBLENBQUssQ0FBQyxDQUFDLENBQVAsRUFBVSxDQUFDLENBQUMsQ0FBWixFQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBdEIsRUFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFwQztRQUN0QixPQUFPLENBQUMsYUFBUixHQUF3QixFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxNQUFSLEdBQWlCLEtBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFpQjtRQUNsQyxPQUFPLENBQUMsUUFBUiw2R0FBNEM7UUFDNUMsT0FBTyxDQUFDLE9BQVIsOEdBQTBDO1FBQzFDLE9BQU8sQ0FBQyxPQUFSLEdBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQVIsR0FBZSxDQUFDLENBQUM7UUFDakIsT0FBTyxDQUFDLGFBQVIsR0FBd0IsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBZixDQUFtQixHQUFuQixFQUF3QixHQUF4QjtRQUNBLEtBQUMsQ0FBQSxNQUFNLENBQUMsU0FBUixDQUFrQixPQUFsQjtBQUVBLGVBQU87TUFoQnlCO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUF4QjtFQUREOzs7QUFtQmY7Ozs7OzsrQkFLQSxPQUFBLEdBQVMsU0FBQTtJQUNMLGlEQUFBLFNBQUE7SUFDQSxFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBdEIsQ0FBaUMsU0FBakMsRUFBNEMsSUFBQyxDQUFBLE1BQTdDO1dBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBZixDQUFBO0VBSEs7OztBQUtUOzs7Ozs7Ozs7K0JBUUEsb0JBQUEsR0FBc0IsU0FBQyxPQUFEO0FBQ2xCLFFBQUE7SUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUExQixDQUE2QyxJQUFDLENBQUEsZUFBOUM7SUFDQSxJQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBaEI7TUFDSSxNQUFBLEdBQVMsV0FBVyxDQUFDLGFBQWEsQ0FBQztNQUNuQyxXQUFXLENBQUMsYUFBYSxDQUFDLGlCQUExQixDQUE0QyxPQUFPLENBQUMsSUFBSSxFQUFDLE1BQUQsRUFBeEQsRUFBaUUsT0FBTyxDQUFDLFFBQXpFLEVBRko7O0lBR0EsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQWhCO01BQ0ksTUFBQSxHQUFTLFdBQVcsQ0FBQyxhQUFhLENBQUM7TUFDbkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxnQkFBMUIsQ0FBMkMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBeEQsRUFBMkUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUF4RixFQUZKOztBQUlBLFlBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFwQjtBQUFBLFdBQ1MsQ0FEVDs7YUFFc0IsQ0FBRSxJQUFoQixDQUFxQixRQUFyQixFQUErQixJQUFDLENBQUEsTUFBaEMsRUFBd0M7WUFBRSxLQUFBLEVBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUF0QjtXQUF4Qzs7QUFEQztBQURULFdBR1MsQ0FIVDs7Y0FJc0IsQ0FBRSxJQUFoQixDQUFxQixpQkFBckIsRUFBd0MsSUFBQyxDQUFBLE1BQXpDLEVBQWlEO1lBQUUsYUFBQSxFQUFlLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBOUI7WUFBNkMsTUFBQSxFQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBbEU7V0FBakQ7O0FBREM7QUFIVCxXQUtTLENBTFQ7O2NBTXNCLENBQUUsSUFBaEIsQ0FBcUIsUUFBckIsRUFBK0IsSUFBQyxDQUFBLE1BQWhDLEVBQXdDO1lBQUUsT0FBQSxFQUFTLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBeEI7V0FBeEM7O0FBTlI7SUFRQSxJQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBaEI7dURBQ2tCLENBQUUsSUFBaEIsQ0FBcUIsUUFBckIsRUFBK0IsSUFBQyxDQUFBLE1BQWhDLFdBREo7O0VBakJrQjs7O0FBcUJ0Qjs7Ozs7Ozs7OzsrQkFTQSxrQkFBQSxHQUFvQixTQUFDLE9BQUQ7QUFDaEIsUUFBQTtJQUFBLE1BQUEsR0FBUztJQUNULE9BQUEsR0FBVSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQWhCLENBQXlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBWixHQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQXhELEVBQTJELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBWixHQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQTFGO0lBRVYsSUFBRyxPQUFBLElBQVksT0FBTyxDQUFDLE9BQXBCLElBQWdDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBUSxDQUFBLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBWixDQUFwQixLQUF5QyxDQUE1RTtNQUNJLE1BQUEsR0FBUyxLQURiOztBQUdBLFdBQU87RUFQUzs7O0FBU3BCOzs7Ozs7Ozs7OytCQVNBLGtCQUFBLEdBQW9CLFNBQUMsT0FBRCxFQUFVLE9BQVY7QUFDaEIsUUFBQTtJQUFBLFNBQUEsR0FBZSxPQUFPLENBQUMsT0FBWCxHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQWYsSUFBcUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUE1RCxHQUFvRSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBO0lBQy9GLElBQUcsT0FBQSxJQUFZLE9BQU8sQ0FBQyxPQUF2QjtNQUNJLElBQUcsT0FBTyxDQUFDLFFBQVg7ZUFDSSxPQUFPLENBQUMsS0FBUixHQUFnQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQWYsSUFBcUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUFwQyxJQUEwQyxVQUQ5RDtPQUFBLE1BQUE7ZUFHSSxPQUFPLENBQUMsS0FBUixHQUFnQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQWYsSUFBcUIsVUFIekM7T0FESjtLQUFBLE1BQUE7TUFNSSxJQUFHLE9BQU8sQ0FBQyxRQUFYO2VBQ0ksT0FBTyxDQUFDLEtBQVIsR0FBZ0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUFmLElBQXFCLFVBRHpDO09BQUEsTUFBQTtlQUdJLE9BQU8sQ0FBQyxLQUFSLEdBQWdCLFVBSHBCO09BTko7O0VBRmdCOzs7QUFhcEI7Ozs7Ozs7OytCQU9BLGFBQUEsR0FBZSxTQUFDLE9BQUQ7QUFDWCxRQUFBO0lBQUEsT0FBTyxDQUFDLE9BQVIsR0FBa0IsSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUMxQixPQUFPLENBQUMsT0FBUixHQUFrQixJQUFDLENBQUEsTUFBTSxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYixDQUEyQixJQUFDLENBQUEsTUFBTSxDQUFDLElBQW5DO0lBQ0EsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFkLENBQTRCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBcEM7SUFDQSxJQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWhCO01BQ0ksV0FBVyxDQUFDLGFBQWEsQ0FBQyxrQkFBMUIsQ0FBNkMsSUFBQyxDQUFBLGVBQTlDO01BQ0EsT0FBTyxDQUFDLE9BQVIsR0FBa0IsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUExQixDQUF5QyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQXRELEVBRnRCOztJQUdBLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFoQjtNQUNJLFdBQVcsQ0FBQyxhQUFhLENBQUMsa0JBQTFCLENBQTZDLElBQUMsQ0FBQSxlQUE5QztNQUNBLE9BQU8sQ0FBQyxRQUFSLEdBQW1CLFdBQVcsQ0FBQyxhQUFhLENBQUMsY0FBMUIsQ0FBeUMsT0FBTyxDQUFDLElBQUksRUFBQyxNQUFELEVBQXJELEVBRnZCOztJQUdBLE9BQUEsR0FBVSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQWhCLENBQXlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBWixHQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQXhELEVBQTJELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBWixHQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQTFGO0lBRVYsSUFBQyxDQUFBLGtCQUFELENBQW9CLE9BQXBCLEVBQTZCLE9BQTdCO1dBQ0EsT0FBTyxDQUFDLE1BQVIsQ0FBQTtFQWRXOzs7QUFnQmY7Ozs7Ozs7K0JBTUEsWUFBQSxHQUFjLFNBQUE7SUFDVixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBa0IsSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUMxQixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsR0FBa0IsSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUMxQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFmLEdBQW1CO0lBQ25CLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQWYsR0FBbUI7SUFDbkIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYixDQUEyQixJQUFDLENBQUEsTUFBTSxDQUFDLElBQW5DO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBZCxDQUE0QixJQUFDLENBQUEsTUFBTSxDQUFDLEtBQXBDO1dBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUE7RUFQVTs7O0FBU2Q7Ozs7OzsrQkFLQSxNQUFBLEdBQVEsU0FBQTtBQUNKLFFBQUE7SUFBQSw2Q0FBQTtJQUVBLElBQUMsQ0FBQSxZQUFELENBQUE7QUFFQTtBQUFBLFNBQUEscUNBQUE7O01BQ0ksSUFBQyxDQUFBLGFBQUQsQ0FBZSxPQUFmO0FBREo7QUFHQSxXQUFPO0VBUkg7Ozs7R0EzUXFCLEVBQUUsQ0FBQzs7QUFxUnBDLEVBQUUsQ0FBQyxrQkFBSCxHQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuI1xuIyAgIFNjcmlwdDogQ29tcG9uZW50X0ltYWdlTWFwXG4jXG4jICAgJCRDT1BZUklHSFQkJFxuI1xuIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5jbGFzcyBDb21wb25lbnRfSW1hZ2VNYXAgZXh0ZW5kcyBncy5Db21wb25lbnRfVmlzdWFsXG4gICAgIyMjKlxuICAgICogQ2FsbGVkIGlmIHRoaXMgb2JqZWN0IGluc3RhbmNlIGlzIHJlc3RvcmVkIGZyb20gYSBkYXRhLWJ1bmRsZS4gSXQgY2FuIGJlIHVzZWRcbiAgICAqIHJlLWFzc2lnbiBldmVudC1oYW5kbGVyLCBhbm9ueW1vdXMgZnVuY3Rpb25zLCBldGMuXG4gICAgKiBcbiAgICAqIEBtZXRob2Qgb25EYXRhQnVuZGxlUmVzdG9yZS5cbiAgICAqIEBwYXJhbSBPYmplY3QgZGF0YSAtIFRoZSBkYXRhLWJ1bmRsZVxuICAgICogQHBhcmFtIGdzLk9iamVjdENvZGVjQ29udGV4dCBjb250ZXh0IC0gVGhlIGNvZGVjLWNvbnRleHQuXG4gICAgIyMjXG4gICAgb25EYXRhQnVuZGxlUmVzdG9yZTogKGRhdGEsIGNvbnRleHQpIC0+XG4gICAgICAgIEBzZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgICAgICBAb2JqZWN0LmFkZE9iamVjdChAZ3JvdW5kKVxuICAgICAgICBcbiAgICAgICAgYml0bWFwID0gUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIkdyYXBoaWNzL1BpY3R1cmVzLyN7QG9iamVjdC5pbWFnZXNbMF19XCIpXG4gICAgICAgIGdyb3VuZCA9IG5ldyBncy5CaXRtYXAoYml0bWFwLndpZHRoLCBiaXRtYXAuaGVpZ2h0KVxuICAgICAgICBncm91bmQuYmx0KDAsIDAsIGJpdG1hcCwgbmV3IFJlY3QoMCwgMCwgYml0bWFwLndpZHRoLCBiaXRtYXAuaGVpZ2h0KSlcbiAgICAgICAgQGdyb3VuZC5iaXRtYXAgPSBncm91bmRcbiAgICAgICAgXG4gICAgICAgIEBzZXR1cEhvdHNwb3RzKEBob3RzcG90cylcbiAgICAgICAgZm9yIGggaW4gQGhvdHNwb3RzXG4gICAgICAgICAgICBAb2JqZWN0LmFkZE9iamVjdChoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBBIGNvbXBvbmVudCB3aGljaCB0dXJucyBhIGdhbWUgb2JqZWN0IGludG8gYW4gaW50ZXJhY3RpdmUgaW1hZ2UtbWFwLlxuICAgICpcbiAgICAqIEBtb2R1bGUgZ3NcbiAgICAqIEBjbGFzcyBDb21wb25lbnRfSW1hZ2VNYXBcbiAgICAqIEBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICAqIEBtZW1iZXJvZiBnc1xuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBncm91bmQvYmFzZSBpbWFnZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZ3JvdW5kXG4gICAgICAgICogQHR5cGUgZ3MuT2JqZWN0X1BpY3R1cmVcbiAgICAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICAgICMjI1xuICAgICAgICBAZ3JvdW5kID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEFuIGFycmF5IG9mIGRpZmZlcmVudCBob3RzcG90cy5cbiAgICAgICAgKiBAcHJvcGVydHkgaG90c3BvdHNcbiAgICAgICAgKiBAdHlwZSBncy5PYmplY3RfUGljdHVyZVtdXG4gICAgICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAgICAjIyNcbiAgICAgICAgQGhvdHNwb3RzID0gbnVsbFxuICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIHZhcmlhYmxlIGNvbnRleHQgdXNlZCBpZiBhIGhvdHNwb3QgbmVlZHMgdG8gZGVhbCB3aXRoIGxvY2FsIHZhcmlhYmxlcy5cbiAgICAgICAgKiBAcHJvcGVydHkgdmFyaWFibGVDb250ZXh0XG4gICAgICAgICogQHR5cGUgT2JqZWN0XG4gICAgICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAgICAjIyNcbiAgICAgICAgQHZhcmlhYmxlQ29udGV4dCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGltYWdlLW1hcCBpcyBhY3RpdmUuIEFuIGluLWFjdGl2ZSBpbWFnZS1tYXAgZG9lc24ndCByZXNwb25kXG4gICAgICAgICogdG8gYW55IGlucHV0LWV2ZW50LiBIb3ZlciBlZmZlY3RzIGFyZSBzdGlsbCB3b3JraW5nLlxuICAgICAgICAqIEBwcm9wZXJ0eSBhY3RpdmVcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICogQGRlZmF1bHQgeWVzXG4gICAgICAgICMjI1xuICAgICAgICBAYWN0aXZlID0geWVzXG4gICAgICAgXG4gICAgIyMjKlxuICAgICogQWRkcyBldmVudC1oYW5kbGVyIGZvciBtb3VzZS90b3VjaCBldmVudHMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQgb25seSBpZiBcbiAgICAqIGEgdXNlci1hY3Rpb24gaGFwcGVuZWQuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cEV2ZW50SGFuZGxlcnNcbiAgICAjIyMgXG4gICAgc2V0dXBFdmVudEhhbmRsZXJzOiAtPlxuICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIub2ZmQnlPd25lcihcIm1vdXNlVXBcIiwgQG9iamVjdClcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9uIFwibW91c2VVcFwiLCAoKGUpID0+IFxuICAgICAgICAgICAgY29udGFpbnMgPSBSZWN0LmNvbnRhaW5zKEBvYmplY3QuZHN0UmVjdC54LCBAb2JqZWN0LmRzdFJlY3QueSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoLCBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0Lk1vdXNlLnggLSBAb2JqZWN0Lm9yaWdpbi54LCBJbnB1dC5Nb3VzZS55IC0gQG9iamVjdC5vcmlnaW4ueSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgY29udGFpbnMgYW5kIEBhY3RpdmVcbiAgICAgICAgICAgICAgICBmb3IgaG90c3BvdCBpbiBAaG90c3BvdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgQGNoZWNrSG90c3BvdEFjdGlvbihob3RzcG90KSBcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuYnJlYWtDaGFpbiA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgaG90c3BvdC5kYXRhLmJpbmRUb1N3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdHNwb3Quc2VsZWN0ZWQgPSAhaG90c3BvdC5zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgQGV4ZWN1dGVIb3RzcG90QWN0aW9uKGhvdHNwb3QpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICksIG51bGwsIEBvYmplY3RcbiAgICAgICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogSW5pdGlhbGl6ZXMgdGhlIGltYWdlLW1hcC4gQ3JlYXRlcyB0aGUgYmFja2dyb3VuZCBhbmQgaG90c3BvdHMuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFxuICAgICMjI1xuICAgIHNldHVwOiAtPlxuICAgICAgICBAc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgQG9iamVjdC5ySW5kZXggPSAxMTAwMCAjIFJlY2VpdmUgSW5wdXQgRXZlbnRzIGZpcnN0XG4gICAgICAgIGJpdG1hcCA9IFJlc291cmNlTWFuYWdlci5nZXRCaXRtYXAoXCJHcmFwaGljcy9QaWN0dXJlcy8je0BvYmplY3QuaW1hZ2VzWzBdfVwiKVxuICAgICAgICBiaXRtYXAubWFrZU11dGFibGUoKVxuICAgICAgICBncm91bmQgPSBuZXcgZ3MuQml0bWFwKGJpdG1hcC53aWR0aCwgYml0bWFwLmhlaWdodClcbiAgICAgICAgZ3JvdW5kLmJsdCgwLCAwLCBiaXRtYXAsIG5ldyBSZWN0KDAsIDAsIGJpdG1hcC53aWR0aCwgYml0bWFwLmhlaWdodCkpXG4gICAgICAgIFxuICAgICAgICBAZ3JvdW5kID0gbmV3IGdzLk9iamVjdF9QaWN0dXJlKClcbiAgICAgICAgQGdyb3VuZC5iaXRtYXAgPSBncm91bmRcbiAgICAgICAgQGdyb3VuZC5pbWFnZSA9IG51bGxcbiAgICAgICAgQGdyb3VuZC56SW5kZXggPSBAb2JqZWN0LnpJbmRleFxuICAgICAgICBAZ3JvdW5kLmltYWdlSGFuZGxpbmcgPSBncy5JbWFnZUhhbmRsaW5nLkNVU1RPTV9TSVpFXG4gICAgICAgIEBvYmplY3QuYWRkT2JqZWN0KEBncm91bmQpXG4gICAgICAgIFxuICAgICAgICBAc2V0dXBIb3RzcG90cygpXG4gICAgICAgIFxuICAgICAgICBAZ3JvdW5kLnNyY1JlY3Quc2V0KDAsIDAsIGdyb3VuZC53aWR0aCwgZ3JvdW5kLmhlaWdodClcbiAgICAgICAgQGdyb3VuZC5kc3RSZWN0LndpZHRoID0gZ3JvdW5kLndpZHRoXG4gICAgICAgIEBncm91bmQuZHN0UmVjdC5oZWlnaHQgPSBncm91bmQuaGVpZ2h0XG4gICAgICAgIEBncm91bmQudXBkYXRlKClcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCA9IEBncm91bmQuZHN0UmVjdC53aWR0aFxuICAgICAgICBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0ID0gQGdyb3VuZC5kc3RSZWN0LmhlaWdodFxuICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgdGhlIGhvdHNwb3RzIG9uIHRoZSBpbWFnZS1tYXAuIEVhY2ggaG90c3BvdCBpcyBhIGdzLk9iamVjdF9JbWFnZU1hcEhvdHNwb3RcbiAgICAqIG9iamVjdC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwSG90c3BvdHNcbiAgICAjIyNcbiAgICBzZXR1cEhvdHNwb3RzOiAoaG90c3BvdHMpIC0+XG4gICAgICAgIEBob3RzcG90cyA9IEBvYmplY3QuaG90c3BvdHMuc2VsZWN0ICh2LCBpKSA9PiBcbiAgICAgICAgICAgIEBncm91bmQuYml0bWFwLmNsZWFyUmVjdCh2LngsIHYueSwgdi5zaXplLndpZHRoLCB2LnNpemUuaGVpZ2h0KVxuICAgICAgICAgICAgcGljdHVyZSA9IG5ldyBncy5PYmplY3RfSW1hZ2VNYXBIb3RzcG90KClcbiAgICAgICAgICAgIHBpY3R1cmUuZml4ZWRTaXplID0gdHJ1ZVxuICAgICAgICAgICAgcGljdHVyZS5zcmNSZWN0ID0gbmV3IFJlY3Qodi54LCB2LnksIHYuc2l6ZS53aWR0aCwgdi5zaXplLmhlaWdodClcbiAgICAgICAgICAgIHBpY3R1cmUuZHN0UmVjdCA9IG5ldyBSZWN0KHYueCwgdi55LCB2LnNpemUud2lkdGgsIHYuc2l6ZS5oZWlnaHQpXG4gICAgICAgICAgICBwaWN0dXJlLmltYWdlSGFuZGxpbmcgPSBncy5JbWFnZUhhbmRsaW5nLkNVU1RPTV9TSVpFXG4gICAgICAgICAgICBwaWN0dXJlLnpJbmRleCA9IEBvYmplY3QuekluZGV4ICsgMVxuICAgICAgICAgICAgcGljdHVyZS5zZWxlY3RlZCA9IGhvdHNwb3RzP1tpXT8uc2VsZWN0ZWQgPyBub1xuICAgICAgICAgICAgcGljdHVyZS5lbmFibGVkID0gaG90c3BvdHM/W2ldPy5lbmFibGVkID8geWVzXG4gICAgICAgICAgICBwaWN0dXJlLmFjdGlvbnMgPSB2LmRhdGEuYWN0aW9uc1xuICAgICAgICAgICAgcGljdHVyZS5kYXRhID0gdi5kYXRhXG4gICAgICAgICAgICBwaWN0dXJlLmNvbW1vbkV2ZW50SWQgPSB2LmNvbW1vbkV2ZW50SWRcbiAgICAgICAgICAgIHBpY3R1cmUuYW5jaG9yLnNldCgwLjUsIDAuNSlcbiAgICAgICAgICAgIEBvYmplY3QuYWRkT2JqZWN0KHBpY3R1cmUpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBwaWN0dXJlXG4gICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBJbml0aWFsaXplcyB0aGUgaW1hZ2UtbWFwLiBGcmVlcyBncm91bmQgaW1hZ2UuXG4gICAgKlxuICAgICogQG1ldGhvZCBkaXNwb3NlXG4gICAgIyMjXG4gICAgZGlzcG9zZTogLT5cbiAgICAgICAgc3VwZXJcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9mZkJ5T3duZXIoXCJtb3VzZVVwXCIsIEBvYmplY3QpXG4gICAgICAgIEBncm91bmQuYml0bWFwLmRpc3Bvc2UoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBFeGVjdXRlcyBhIGhvdHNwb3QncyBhc3NvY2lhdGVkIGFjdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIGEgaG90c3BvdFxuICAgICogY2FuIHRyaWdnZXIgYSBjb21tb24tZXZlbnQgb3IgdHVybiBvbiBhIHN3aXRjaCBmb3IgZXhhbXBsZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGV4ZWN1dGVIb3RzcG90QWN0aW9uXG4gICAgKiBAcGFyYW0ge2dzLk9iamVjdF9QaWN0dXJlfSBob3RzcG90IC0gVGhlIGhvdHNwb3Qgd2hlcmUgdGhlIGltYWdlIHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICogQHByb3RlY3RlZFxuICAgICMjI1xuICAgIGV4ZWN1dGVIb3RzcG90QWN0aW9uOiAoaG90c3BvdCkgLT5cbiAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXR1cFRlbXBWYXJpYWJsZXMoQHZhcmlhYmxlQ29udGV4dClcbiAgICAgICAgaWYgaG90c3BvdC5kYXRhLmJpbmRUb1N3aXRjaFxuICAgICAgICAgICAgZG9tYWluID0gR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5kb21haW5cbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnZhcmlhYmxlU3RvcmUuc2V0Qm9vbGVhblZhbHVlVG8oaG90c3BvdC5kYXRhLnN3aXRjaCwgaG90c3BvdC5zZWxlY3RlZClcbiAgICAgICAgaWYgaG90c3BvdC5kYXRhLmJpbmRWYWx1ZVRvXG4gICAgICAgICAgICBkb21haW4gPSBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLmRvbWFpblxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXROdW1iZXJWYWx1ZVRvKGhvdHNwb3QuZGF0YS5iaW5kVmFsdWVWYXJpYWJsZSwgaG90c3BvdC5kYXRhLmJpbmRWYWx1ZSlcbiAgICAgICAgICAgIFxuICAgICAgICBzd2l0Y2ggaG90c3BvdC5kYXRhLmFjdGlvblxuICAgICAgICAgICAgd2hlbiAxICMgSnVtcCBUb1xuICAgICAgICAgICAgICAgIEBvYmplY3QuZXZlbnRzPy5lbWl0KFwianVtcFRvXCIsIEBvYmplY3QsIHsgbGFiZWw6IGhvdHNwb3QuZGF0YS5sYWJlbCB9KVxuICAgICAgICAgICAgd2hlbiAyICMgQ2FsbCBDb21tb24gRXZlbnRcbiAgICAgICAgICAgICAgICBAb2JqZWN0LmV2ZW50cz8uZW1pdChcImNhbGxDb21tb25FdmVudFwiLCBAb2JqZWN0LCB7IGNvbW1vbkV2ZW50SWQ6IGhvdHNwb3QuZGF0YS5jb21tb25FdmVudElkLCBmaW5pc2g6IGhvdHNwb3QuZGF0YS5maW5pc2ggfSlcbiAgICAgICAgICAgIHdoZW4gMyAjIFVJIEFjdGlvblxuICAgICAgICAgICAgICAgIEBvYmplY3QuZXZlbnRzPy5lbWl0KFwiYWN0aW9uXCIsIEBvYmplY3QsIHsgYWN0aW9uczogaG90c3BvdC5kYXRhLmFjdGlvbnMgfSlcbiAgICAgICAgXG4gICAgICAgIGlmIGhvdHNwb3QuZGF0YS5maW5pc2hcbiAgICAgICAgICAgIEBvYmplY3QuZXZlbnRzPy5lbWl0KFwiZmluaXNoXCIsIEBvYmplY3QpXG4gICAgICAgICAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBDaGVja3MgaWYgYSBob3RzcG90J3MgYXNzb2NpYXRlZCBhY3Rpb24gbmVlZHMgdG8gYmUgZXhlY3V0ZWQuIERlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbiBhIGhvdHNwb3RcbiAgICAqIGNhbiB0cmlnZ2VyIGEgY29tbW9uLWV2ZW50IG9yIHR1cm4gb24gYSBzd2l0Y2ggZm9yIGV4YW1wbGUuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVIb3RzcG90QWN0aW9uXG4gICAgKiBAcGFyYW0ge2dzLk9iamVjdF9QaWN0dXJlfSBob3RzcG90IC0gVGhlIGhvdHNwb3Qgd2hlcmUgdGhlIGltYWdlIHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgPGI+dHJ1ZTwvYj4gdGhlIGhvdHNwb3QncyBhY3Rpb24gbmVlZHMgdG8gYmUgZXhlY3V0ZWQuIE90aGVyd2lzZSA8Yj5mYWxzZTwvYj4uXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjXG4gICAgY2hlY2tIb3RzcG90QWN0aW9uOiAoaG90c3BvdCkgLT5cbiAgICAgICAgcmVzdWx0ID0gbm9cbiAgICAgICAgaG92ZXJlZCA9IGhvdHNwb3QuZHN0UmVjdC5jb250YWlucyhJbnB1dC5Nb3VzZS54IC0gaG90c3BvdC5vcmlnaW4ueCwgSW5wdXQuTW91c2UueSAtIGhvdHNwb3Qub3JpZ2luLnkpXG4gICAgICAgIFxuICAgICAgICBpZiBob3ZlcmVkIGFuZCBob3RzcG90LmVuYWJsZWQgYW5kIElucHV0Lk1vdXNlLmJ1dHRvbnNbSW5wdXQuTW91c2UuTEVGVF0gPT0gMlxuICAgICAgICAgICAgcmVzdWx0ID0geWVzXG4gICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyBhIGhvdHNwb3QncyBpbWFnZS4gRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSB0aGUgaW1hZ2Ugb2YgYSBob3RzcG90IGNhblxuICAgICogY2hhbmdlIGZvciBleGFtcGxlIGlmIHRoZSBtb3VzZSBob3ZlcnMgb3ZlciBhIGhvdHNwb3QuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVIb3RzcG90SW1hZ2VcbiAgICAqIEBwYXJhbSB7Z3MuT2JqZWN0X1BpY3R1cmV9IGhvdHNwb3QgLSBUaGUgaG90c3BvdCB3aGVyZSB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVwZGF0ZWQuXG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyZWQgLSBJbmRpY2F0ZXMgaWYgdGhlIGhvdHNwb3QgaXMgaG92ZXJlZCBieSBtb3VzZS90b3VjaCBjdXJzb3IuXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjXG4gICAgdXBkYXRlSG90c3BvdEltYWdlOiAoaG90c3BvdCwgaG92ZXJlZCkgLT5cbiAgICAgICAgYmFzZUltYWdlID0gaWYgaG90c3BvdC5lbmFibGVkIHRoZW4gQG9iamVjdC5pbWFnZXNbMl0gfHwgQG9iamVjdC5pbWFnZXNbMF0gZWxzZSBAb2JqZWN0LmltYWdlc1swXSBcbiAgICAgICAgaWYgaG92ZXJlZCBhbmQgaG90c3BvdC5lbmFibGVkXG4gICAgICAgICAgICBpZiBob3RzcG90LnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgaG90c3BvdC5pbWFnZSA9IEBvYmplY3QuaW1hZ2VzWzRdIHx8IEBvYmplY3QuaW1hZ2VzWzFdIHx8IGJhc2VJbWFnZVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhvdHNwb3QuaW1hZ2UgPSBAb2JqZWN0LmltYWdlc1sxXSB8fCBiYXNlSW1hZ2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgaG90c3BvdC5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIGhvdHNwb3QuaW1hZ2UgPSBAb2JqZWN0LmltYWdlc1szXSB8fCBiYXNlSW1hZ2VcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBob3RzcG90LmltYWdlID0gYmFzZUltYWdlXG4gICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyBhIGhvdHNwb3QuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVIb3RzcG90XG4gICAgKiBAcGFyYW0ge2dzLk9iamVjdF9QaWN0dXJlfSBob3RzcG90IC0gVGhlIGhvdHNwb3QgdG8gdXBkYXRlLlxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICAgICAgIFxuICAgIHVwZGF0ZUhvdHNwb3Q6IChob3RzcG90KSAtPlxuICAgICAgICBob3RzcG90LnZpc2libGUgPSBAb2JqZWN0LnZpc2libGVcbiAgICAgICAgaG90c3BvdC5vcGFjaXR5ID0gQG9iamVjdC5vcGFjaXR5XG4gICAgICAgIGhvdHNwb3QudG9uZS5zZXRGcm9tT2JqZWN0KEBvYmplY3QudG9uZSlcbiAgICAgICAgaG90c3BvdC5jb2xvci5zZXRGcm9tT2JqZWN0KEBvYmplY3QuY29sb3IpXG4gICAgICAgIGlmIGhvdHNwb3QuZGF0YS5iaW5kRW5hYmxlZFN0YXRlXG4gICAgICAgICAgICBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLnNldHVwVGVtcFZhcmlhYmxlcyhAdmFyaWFibGVDb250ZXh0KVxuICAgICAgICAgICAgaG90c3BvdC5lbmFibGVkID0gR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5ib29sZWFuVmFsdWVPZihob3RzcG90LmRhdGEuZW5hYmxlZFN3aXRjaClcbiAgICAgICAgaWYgaG90c3BvdC5kYXRhLmJpbmRUb1N3aXRjaFxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXR1cFRlbXBWYXJpYWJsZXMoQHZhcmlhYmxlQ29udGV4dClcbiAgICAgICAgICAgIGhvdHNwb3Quc2VsZWN0ZWQgPSBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLmJvb2xlYW5WYWx1ZU9mKGhvdHNwb3QuZGF0YS5zd2l0Y2gpXG4gICAgICAgIGhvdmVyZWQgPSBob3RzcG90LmRzdFJlY3QuY29udGFpbnMoSW5wdXQuTW91c2UueCAtIGhvdHNwb3Qub3JpZ2luLngsIElucHV0Lk1vdXNlLnkgLSBob3RzcG90Lm9yaWdpbi55KVxuICAgICAgICBcbiAgICAgICAgQHVwZGF0ZUhvdHNwb3RJbWFnZShob3RzcG90LCBob3ZlcmVkKSAgICAgICBcbiAgICAgICAgaG90c3BvdC51cGRhdGUoKSAgICAgICAgXG4gICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIGdyb3VuZC1pbWFnZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZUdyb3VuZFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgIFxuICAgIHVwZGF0ZUdyb3VuZDogLT5cbiAgICAgICAgQGdyb3VuZC52aXNpYmxlID0gQG9iamVjdC52aXNpYmxlXG4gICAgICAgIEBncm91bmQub3BhY2l0eSA9IEBvYmplY3Qub3BhY2l0eVxuICAgICAgICBAZ3JvdW5kLmFuY2hvci54ID0gMC41XG4gICAgICAgIEBncm91bmQuYW5jaG9yLnkgPSAwLjVcbiAgICAgICAgQGdyb3VuZC50b25lLnNldEZyb21PYmplY3QoQG9iamVjdC50b25lKVxuICAgICAgICBAZ3JvdW5kLmNvbG9yLnNldEZyb21PYmplY3QoQG9iamVjdC5jb2xvcilcbiAgICAgICAgQGdyb3VuZC51cGRhdGUoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBpbWFnZS1tYXAncyBncm91bmQgYW5kIGFsbCBob3RzcG90cy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVxuICAgICMjI1xuICAgIHVwZGF0ZTogLT5cbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBcbiAgICAgICAgQHVwZGF0ZUdyb3VuZCgpXG4gICAgICAgIFxuICAgICAgICBmb3IgaG90c3BvdCBpbiBAaG90c3BvdHNcbiAgICAgICAgICAgIEB1cGRhdGVIb3RzcG90KGhvdHNwb3QpXG4gICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBcbmdzLkNvbXBvbmVudF9JbWFnZU1hcCA9IENvbXBvbmVudF9JbWFnZU1hcCJdfQ==\n//# sourceURL=Component_ImageMap_110.js"
12 + "compiledContent": "var Component_ImageMap,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_ImageMap = (function(superClass) {\n extend(Component_ImageMap, superClass);\n\n\n /**\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n */\n\n Component_ImageMap.prototype.onDataBundleRestore = function(data, context) {\n var bitmap, ground;\n this.setupEventHandlers();\n this.object.addObject(this.ground);\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/\" + this.object.images[0]);\n ground = new gs.Bitmap(bitmap.width, bitmap.height);\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height));\n this.ground.bitmap = ground;\n return this.setupHotspots(this.hotspots);\n };\n\n\n /**\n * A component which turns a game object into an interactive image-map.\n *\n * @module gs\n * @class Component_ImageMap\n * @extends gs.Component_Visual\n * @memberof gs\n */\n\n function Component_ImageMap() {\n Component_ImageMap.__super__.constructor.apply(this, arguments);\n\n /**\n * The ground/base image.\n * @property ground\n * @type gs.Object_Picture\n * @default null\n */\n this.ground = null;\n\n /**\n * An array of different hotspots.\n * @property hotspots\n * @type gs.Object_Picture[]\n * @default null\n */\n this.hotspots = null;\n\n /**\n * The variable context used if a hotspot needs to deal with local variables.\n * @property variableContext\n * @type Object\n * @default null\n */\n this.variableContext = null;\n\n /**\n * Indicates if the image-map is active. An in-active image-map doesn't respond\n * to any input-event. Hover effects are still working.\n * @property active\n * @type boolean\n * @default yes\n */\n this.active = true;\n }\n\n\n /**\n * Adds event-handler for mouse/touch events to update the component only if \n * a user-action happened.\n *\n * @method setupEventHandlers\n */\n\n Component_ImageMap.prototype.setupEventHandlers = function() {\n gs.GlobalEventManager.offByOwner(\"mouseUp\", this.object);\n return gs.GlobalEventManager.on(\"mouseUp\", ((function(_this) {\n return function(e) {\n var contains, hotspot, j, len, ref, results;\n contains = Rect.contains(_this.object.dstRect.x, _this.object.dstRect.y, _this.object.dstRect.width, _this.object.dstRect.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y);\n if (contains && _this.active) {\n ref = _this.hotspots;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n hotspot = ref[j];\n if (_this.checkHotspotAction(hotspot)) {\n e.breakChain = true;\n if (hotspot.data.bindToSwitch) {\n hotspot.selected = !hotspot.selected;\n }\n results.push(_this.executeHotspotAction(hotspot));\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n };\n })(this)), null, this.object);\n };\n\n\n /**\n * Initializes the image-map. Creates the background and hotspots.\n *\n * @method setup\n */\n\n Component_ImageMap.prototype.setup = function() {\n var bitmap, ground;\n this.setupEventHandlers();\n this.object.rIndex = 11000;\n bitmap = ResourceManager.getBitmap(\"Graphics/Pictures/\" + this.object.images[0]);\n bitmap.makeMutable();\n ground = new gs.Bitmap(bitmap.width, bitmap.height);\n ground.blt(0, 0, bitmap, new Rect(0, 0, bitmap.width, bitmap.height));\n this.ground = new gs.Object_Picture();\n this.ground.bitmap = ground;\n this.ground.image = null;\n this.ground.zIndex = this.object.zIndex;\n this.ground.imageHandling = gs.ImageHandling.CUSTOM_SIZE;\n this.object.addObject(this.ground);\n this.setupHotspots();\n this.ground.srcRect.set(0, 0, ground.width, ground.height);\n this.ground.dstRect.width = ground.width;\n this.ground.dstRect.height = ground.height;\n this.ground.update();\n this.object.dstRect.width = this.ground.dstRect.width;\n return this.object.dstRect.height = this.ground.dstRect.height;\n };\n\n\n /**\n * Sets up the hotspots on the image-map. Each hotspot is a gs.Object_ImageMapHotspot\n * object.\n *\n * @method setupHotspots\n */\n\n Component_ImageMap.prototype.setupHotspots = function(hotspots) {\n return this.hotspots = this.object.hotspots.select((function(_this) {\n return function(v, i) {\n var picture, ref, ref1, ref2, ref3;\n _this.ground.bitmap.clearRect(v.x, v.y, v.size.width, v.size.height);\n picture = new gs.Object_ImageMapHotspot();\n picture.fixedSize = true;\n picture.srcRect = new Rect(v.x, v.y, v.size.width, v.size.height);\n picture.dstRect = new Rect(v.x, v.y, v.size.width, v.size.height);\n picture.imageHandling = gs.ImageHandling.CUSTOM_SIZE;\n picture.zIndex = _this.object.zIndex + 1;\n picture.selected = (ref = hotspots != null ? (ref1 = hotspots[i]) != null ? ref1.selected : void 0 : void 0) != null ? ref : false;\n picture.hovered = false;\n picture.enabled = (ref2 = hotspots != null ? (ref3 = hotspots[i]) != null ? ref3.enabled : void 0 : void 0) != null ? ref2 : true;\n picture.actions = v.data.actions;\n picture.data = v.data;\n picture.commonEventId = v.commonEventId;\n picture.anchor.set(0.5, 0.5);\n _this.object.addObject(picture);\n return picture;\n };\n })(this));\n };\n\n\n /**\n * Initializes the image-map. Frees ground image.\n *\n * @method dispose\n */\n\n Component_ImageMap.prototype.dispose = function() {\n Component_ImageMap.__super__.dispose.apply(this, arguments);\n gs.GlobalEventManager.offByOwner(\"mouseUp\", this.object);\n return this.ground.bitmap.dispose();\n };\n\n\n /**\n * Executes a hotspot's associated action. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method executeHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @protected\n */\n\n Component_ImageMap.prototype.executeHotspotAction = function(hotspot) {\n var domain, ref, ref1, ref2, ref3;\n GameManager.variableStore.setupTempVariables(this.variableContext);\n if (hotspot.data.bindToSwitch) {\n domain = GameManager.variableStore.domain;\n GameManager.variableStore.setBooleanValueTo(hotspot.data[\"switch\"], hotspot.selected);\n }\n if (hotspot.data.bindValueTo) {\n domain = GameManager.variableStore.domain;\n GameManager.variableStore.setNumberValueTo(hotspot.data.bindValueVariable, hotspot.data.bindValue);\n }\n AudioManager.playSound(hotspot.data.onClickSound);\n switch (hotspot.data.action) {\n case 1:\n if ((ref = this.object.events) != null) {\n ref.emit(\"jumpTo\", this.object, {\n label: hotspot.data.label\n });\n }\n break;\n case 2:\n if ((ref1 = this.object.events) != null) {\n ref1.emit(\"callCommonEvent\", this.object, {\n commonEventId: hotspot.data.commonEventId,\n finish: hotspot.data.finish\n });\n }\n break;\n case 3:\n if ((ref2 = this.object.events) != null) {\n ref2.emit(\"action\", this.object, {\n actions: hotspot.data.actions\n });\n }\n }\n if (hotspot.data.finish) {\n return (ref3 = this.object.events) != null ? ref3.emit(\"finish\", this.object) : void 0;\n }\n };\n\n\n /**\n * Checks if a hotspot's associated action needs to be executed. Depending on the configuration a hotspot\n * can trigger a common-event or turn on a switch for example.\n *\n * @method updateHotspotAction\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @return {boolean} If <b>true</b> the hotspot's action needs to be executed. Otherwise <b>false</b>.\n * @protected\n */\n\n Component_ImageMap.prototype.checkHotspotAction = function(hotspot) {\n var hovered, result;\n result = false;\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y);\n if (hovered && hotspot.enabled && Input.Mouse.buttons[Input.Mouse.LEFT] === 2) {\n result = true;\n }\n return result;\n };\n\n\n /**\n * Updates a hotspot's image. Depending on the state the image of a hotspot can\n * change for example if the mouse hovers over a hotspot.\n *\n * @method updateHotspotImage\n * @param {gs.Object_Picture} hotspot - The hotspot where the image should be updated.\n * @param {boolean} hovered - Indicates if the hotspot is hovered by mouse/touch cursor.\n * @protected\n */\n\n Component_ImageMap.prototype.updateHotspotImage = function(hotspot, hovered) {\n var baseImage;\n baseImage = hotspot.enabled ? this.object.images[2] || this.object.images[0] : this.object.images[0];\n if (hovered && hotspot.enabled) {\n if (hotspot.selected) {\n return hotspot.image = this.object.images[4] || this.object.images[1] || baseImage;\n } else {\n return hotspot.image = this.object.images[1] || baseImage;\n }\n } else {\n if (hotspot.selected) {\n return hotspot.image = this.object.images[3] || baseImage;\n } else {\n return hotspot.image = baseImage;\n }\n }\n };\n\n\n /**\n * Updates a hotspot.\n *\n * @method updateHotspot\n * @param {gs.Object_Picture} hotspot - The hotspot to update.\n * @protected\n */\n\n Component_ImageMap.prototype.updateHotspot = function(hotspot) {\n var hovered;\n hotspot.visible = this.object.visible;\n hotspot.opacity = this.object.opacity;\n hotspot.tone.setFromObject(this.object.tone);\n hotspot.color.setFromObject(this.object.color);\n if (hotspot.data.bindEnabledState) {\n GameManager.variableStore.setupTempVariables(this.variableContext);\n hotspot.enabled = GameManager.variableStore.booleanValueOf(hotspot.data.enabledSwitch);\n }\n if (hotspot.data.bindToSwitch) {\n GameManager.variableStore.setupTempVariables(this.variableContext);\n hotspot.selected = GameManager.variableStore.booleanValueOf(hotspot.data[\"switch\"]);\n }\n hovered = hotspot.dstRect.contains(Input.Mouse.x - hotspot.origin.x, Input.Mouse.y - hotspot.origin.y);\n if (hovered !== hotspot.hovered) {\n hotspot.hovered = hovered;\n if (hovered) {\n AudioManager.playSound(hotspot.data.onHoverSound);\n }\n }\n this.updateHotspotImage(hotspot, hovered);\n return hotspot.update();\n };\n\n\n /**\n * Updates the ground-image.\n *\n * @method updateGround\n * @protected\n */\n\n Component_ImageMap.prototype.updateGround = function() {\n this.ground.visible = this.object.visible;\n this.ground.opacity = this.object.opacity;\n this.ground.anchor.x = 0.5;\n this.ground.anchor.y = 0.5;\n this.ground.tone.setFromObject(this.object.tone);\n this.ground.color.setFromObject(this.object.color);\n return this.ground.update();\n };\n\n\n /**\n * Updates the image-map's ground and all hotspots.\n *\n * @method update\n */\n\n Component_ImageMap.prototype.update = function() {\n var hotspot, j, len, ref;\n Component_ImageMap.__super__.update.call(this);\n this.updateGround();\n ref = this.hotspots;\n for (j = 0, len = ref.length; j < len; j++) {\n hotspot = ref[j];\n this.updateHotspot(hotspot);\n }\n return null;\n };\n\n return Component_ImageMap;\n\n})(gs.Component_Visual);\n\ngs.Component_ImageMap = Component_ImageMap;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsa0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7OytCQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7QUFDakIsUUFBQTtJQUFBLElBQUMsQ0FBQSxrQkFBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxTQUFSLENBQWtCLElBQUMsQ0FBQSxNQUFuQjtJQUVBLE1BQUEsR0FBUyxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUE5RDtJQUNULE1BQUEsR0FBYSxJQUFBLEVBQUUsQ0FBQyxNQUFILENBQVUsTUFBTSxDQUFDLEtBQWpCLEVBQXdCLE1BQU0sQ0FBQyxNQUEvQjtJQUNiLE1BQU0sQ0FBQyxHQUFQLENBQVcsQ0FBWCxFQUFjLENBQWQsRUFBaUIsTUFBakIsRUFBNkIsSUFBQSxJQUFBLENBQUssQ0FBTCxFQUFRLENBQVIsRUFBVyxNQUFNLENBQUMsS0FBbEIsRUFBeUIsTUFBTSxDQUFDLE1BQWhDLENBQTdCO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCO1dBRWpCLElBQUMsQ0FBQSxhQUFELENBQWUsSUFBQyxDQUFBLFFBQWhCO0VBVGlCOzs7QUFXckI7Ozs7Ozs7OztFQVFhLDRCQUFBO0lBQ1QscURBQUEsU0FBQTs7QUFFQTs7Ozs7O0lBTUEsSUFBQyxDQUFBLE1BQUQsR0FBVTs7QUFFVjs7Ozs7O0lBTUEsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7O0lBTUEsSUFBQyxDQUFBLGVBQUQsR0FBbUI7O0FBRW5COzs7Ozs7O0lBT0EsSUFBQyxDQUFBLE1BQUQsR0FBVTtFQWxDRDs7O0FBb0NiOzs7Ozs7OytCQU1BLGtCQUFBLEdBQW9CLFNBQUE7SUFDaEIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFVBQXRCLENBQWlDLFNBQWpDLEVBQTRDLElBQUMsQ0FBQSxNQUE3QztXQUNBLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0QixDQUF5QixTQUF6QixFQUFvQyxDQUFDLENBQUEsU0FBQSxLQUFBO2FBQUEsU0FBQyxDQUFEO0FBQ2pDLFlBQUE7UUFBQSxRQUFBLEdBQVcsSUFBSSxDQUFDLFFBQUwsQ0FBYyxLQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUE5QixFQUFpQyxLQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFqRCxFQUNFLEtBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBRGxCLEVBQ3lCLEtBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BRHpDLEVBRUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLEtBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBRmpDLEVBRW9DLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBWixHQUFnQixLQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUZuRTtRQUlYLElBQUcsUUFBQSxJQUFhLEtBQUMsQ0FBQSxNQUFqQjtBQUNJO0FBQUE7ZUFBQSxxQ0FBQTs7WUFDSSxJQUFHLEtBQUMsQ0FBQSxrQkFBRCxDQUFvQixPQUFwQixDQUFIO2NBQ0ksQ0FBQyxDQUFDLFVBQUYsR0FBZTtjQUNmLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFoQjtnQkFDSSxPQUFPLENBQUMsUUFBUixHQUFtQixDQUFDLE9BQU8sQ0FBQyxTQURoQzs7MkJBRUEsS0FBQyxDQUFBLG9CQUFELENBQXNCLE9BQXRCLEdBSko7YUFBQSxNQUFBO21DQUFBOztBQURKO3lCQURKOztNQUxpQztJQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBRCxDQUFwQyxFQWFHLElBYkgsRUFhUyxJQUFDLENBQUEsTUFiVjtFQUZnQjs7O0FBa0JwQjs7Ozs7OytCQUtBLEtBQUEsR0FBTyxTQUFBO0FBQ0gsUUFBQTtJQUFBLElBQUMsQ0FBQSxrQkFBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCO0lBQ2pCLE1BQUEsR0FBUyxlQUFlLENBQUMsU0FBaEIsQ0FBMEIsb0JBQUEsR0FBcUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUE5RDtJQUNULE1BQU0sQ0FBQyxXQUFQLENBQUE7SUFDQSxNQUFBLEdBQWEsSUFBQSxFQUFFLENBQUMsTUFBSCxDQUFVLE1BQU0sQ0FBQyxLQUFqQixFQUF3QixNQUFNLENBQUMsTUFBL0I7SUFDYixNQUFNLENBQUMsR0FBUCxDQUFXLENBQVgsRUFBYyxDQUFkLEVBQWlCLE1BQWpCLEVBQTZCLElBQUEsSUFBQSxDQUFLLENBQUwsRUFBUSxDQUFSLEVBQVcsTUFBTSxDQUFDLEtBQWxCLEVBQXlCLE1BQU0sQ0FBQyxNQUFoQyxDQUE3QjtJQUVBLElBQUMsQ0FBQSxNQUFELEdBQWMsSUFBQSxFQUFFLENBQUMsY0FBSCxDQUFBO0lBQ2QsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCO0lBQ2pCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBUixHQUFnQjtJQUNoQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUN6QixJQUFDLENBQUEsTUFBTSxDQUFDLGFBQVIsR0FBd0IsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQVIsQ0FBa0IsSUFBQyxDQUFBLE1BQW5CO0lBRUEsSUFBQyxDQUFBLGFBQUQsQ0FBQTtJQUVBLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQWhCLENBQW9CLENBQXBCLEVBQXVCLENBQXZCLEVBQTBCLE1BQU0sQ0FBQyxLQUFqQyxFQUF3QyxNQUFNLENBQUMsTUFBL0M7SUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixNQUFNLENBQUM7SUFDL0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBeUIsTUFBTSxDQUFDO0lBQ2hDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixDQUFBO0lBRUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBaEIsR0FBd0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUM7V0FDeEMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBeUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUM7RUF2QnRDOzs7QUF5QlA7Ozs7Ozs7K0JBTUEsYUFBQSxHQUFlLFNBQUMsUUFBRDtXQUNYLElBQUMsQ0FBQSxRQUFELEdBQVksSUFBQyxDQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBakIsQ0FBd0IsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFDLENBQUQsRUFBSSxDQUFKO0FBQ2hDLFlBQUE7UUFBQSxLQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFmLENBQXlCLENBQUMsQ0FBQyxDQUEzQixFQUE4QixDQUFDLENBQUMsQ0FBaEMsRUFBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUExQyxFQUFpRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQXhEO1FBQ0EsT0FBQSxHQUFjLElBQUEsRUFBRSxDQUFDLHNCQUFILENBQUE7UUFDZCxPQUFPLENBQUMsU0FBUixHQUFvQjtRQUNwQixPQUFPLENBQUMsT0FBUixHQUFzQixJQUFBLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBUCxFQUFVLENBQUMsQ0FBQyxDQUFaLEVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUF0QixFQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQXBDO1FBQ3RCLE9BQU8sQ0FBQyxPQUFSLEdBQXNCLElBQUEsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFQLEVBQVUsQ0FBQyxDQUFDLENBQVosRUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQXRCLEVBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBcEM7UUFDdEIsT0FBTyxDQUFDLGFBQVIsR0FBd0IsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxPQUFPLENBQUMsTUFBUixHQUFpQixLQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsR0FBaUI7UUFDbEMsT0FBTyxDQUFDLFFBQVIsNkdBQTRDO1FBQzVDLE9BQU8sQ0FBQyxPQUFSLEdBQWtCO1FBQ2xCLE9BQU8sQ0FBQyxPQUFSLDhHQUEwQztRQUMxQyxPQUFPLENBQUMsT0FBUixHQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxJQUFSLEdBQWUsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxhQUFSLEdBQXdCLENBQUMsQ0FBQztRQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQWYsQ0FBbUIsR0FBbkIsRUFBd0IsR0FBeEI7UUFDQSxLQUFDLENBQUEsTUFBTSxDQUFDLFNBQVIsQ0FBa0IsT0FBbEI7QUFFQSxlQUFPO01BakJ5QjtJQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBeEI7RUFERDs7O0FBb0JmOzs7Ozs7K0JBS0EsT0FBQSxHQUFTLFNBQUE7SUFDTCxpREFBQSxTQUFBO0lBQ0EsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFVBQXRCLENBQWlDLFNBQWpDLEVBQTRDLElBQUMsQ0FBQSxNQUE3QztXQUNBLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWYsQ0FBQTtFQUhLOzs7QUFLVDs7Ozs7Ozs7OytCQVFBLG9CQUFBLEdBQXNCLFNBQUMsT0FBRDtBQUNsQixRQUFBO0lBQUEsV0FBVyxDQUFDLGFBQWEsQ0FBQyxrQkFBMUIsQ0FBNkMsSUFBQyxDQUFBLGVBQTlDO0lBQ0EsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQWhCO01BQ0ksTUFBQSxHQUFTLFdBQVcsQ0FBQyxhQUFhLENBQUM7TUFDbkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxpQkFBMUIsQ0FBNEMsT0FBTyxDQUFDLElBQUksRUFBQyxNQUFELEVBQXhELEVBQWlFLE9BQU8sQ0FBQyxRQUF6RSxFQUZKOztJQUdBLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFoQjtNQUNJLE1BQUEsR0FBUyxXQUFXLENBQUMsYUFBYSxDQUFDO01BQ25DLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQTFCLENBQTJDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQXhELEVBQTJFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBeEYsRUFGSjs7SUFJQSxZQUFZLENBQUMsU0FBYixDQUF1QixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQXBDO0FBQ0EsWUFBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQXBCO0FBQUEsV0FDUyxDQURUOzthQUVzQixDQUFFLElBQWhCLENBQXFCLFFBQXJCLEVBQStCLElBQUMsQ0FBQSxNQUFoQyxFQUF3QztZQUFFLEtBQUEsRUFBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQXRCO1dBQXhDOztBQURDO0FBRFQsV0FHUyxDQUhUOztjQUlzQixDQUFFLElBQWhCLENBQXFCLGlCQUFyQixFQUF3QyxJQUFDLENBQUEsTUFBekMsRUFBaUQ7WUFBRSxhQUFBLEVBQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUE5QjtZQUE2QyxNQUFBLEVBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFsRTtXQUFqRDs7QUFEQztBQUhULFdBS1MsQ0FMVDs7Y0FNc0IsQ0FBRSxJQUFoQixDQUFxQixRQUFyQixFQUErQixJQUFDLENBQUEsTUFBaEMsRUFBd0M7WUFBRSxPQUFBLEVBQVMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUF4QjtXQUF4Qzs7QUFOUjtJQVFBLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFoQjt1REFDa0IsQ0FBRSxJQUFoQixDQUFxQixRQUFyQixFQUErQixJQUFDLENBQUEsTUFBaEMsV0FESjs7RUFsQmtCOzs7QUFzQnRCOzs7Ozs7Ozs7OytCQVNBLGtCQUFBLEdBQW9CLFNBQUMsT0FBRDtBQUNoQixRQUFBO0lBQUEsTUFBQSxHQUFTO0lBQ1QsT0FBQSxHQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBaEIsQ0FBeUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBeEQsRUFBMkQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBMUY7SUFFVixJQUFHLE9BQUEsSUFBWSxPQUFPLENBQUMsT0FBcEIsSUFBZ0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFRLENBQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFaLENBQXBCLEtBQXlDLENBQTVFO01BQ0ksTUFBQSxHQUFTLEtBRGI7O0FBR0EsV0FBTztFQVBTOzs7QUFTcEI7Ozs7Ozs7Ozs7K0JBU0Esa0JBQUEsR0FBb0IsU0FBQyxPQUFELEVBQVUsT0FBVjtBQUNoQixRQUFBO0lBQUEsU0FBQSxHQUFlLE9BQU8sQ0FBQyxPQUFYLEdBQXdCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FBZixJQUFxQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQTVELEdBQW9FLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTyxDQUFBLENBQUE7SUFDL0YsSUFBRyxPQUFBLElBQVksT0FBTyxDQUFDLE9BQXZCO01BQ0ksSUFBRyxPQUFPLENBQUMsUUFBWDtlQUNJLE9BQU8sQ0FBQyxLQUFSLEdBQWdCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FBZixJQUFxQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQXBDLElBQTBDLFVBRDlEO09BQUEsTUFBQTtlQUdJLE9BQU8sQ0FBQyxLQUFSLEdBQWdCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FBZixJQUFxQixVQUh6QztPQURKO0tBQUEsTUFBQTtNQU1JLElBQUcsT0FBTyxDQUFDLFFBQVg7ZUFDSSxPQUFPLENBQUMsS0FBUixHQUFnQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBQWYsSUFBcUIsVUFEekM7T0FBQSxNQUFBO2VBR0ksT0FBTyxDQUFDLEtBQVIsR0FBZ0IsVUFIcEI7T0FOSjs7RUFGZ0I7OztBQWNwQjs7Ozs7Ozs7K0JBT0EsYUFBQSxHQUFlLFNBQUMsT0FBRDtBQUNYLFFBQUE7SUFBQSxPQUFPLENBQUMsT0FBUixHQUFrQixJQUFDLENBQUEsTUFBTSxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxPQUFSLEdBQWtCLElBQUMsQ0FBQSxNQUFNLENBQUM7SUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFiLENBQTJCLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBbkM7SUFDQSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWQsQ0FBNEIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFwQztJQUNBLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBaEI7TUFDSSxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUExQixDQUE2QyxJQUFDLENBQUEsZUFBOUM7TUFDQSxPQUFPLENBQUMsT0FBUixHQUFrQixXQUFXLENBQUMsYUFBYSxDQUFDLGNBQTFCLENBQXlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBdEQsRUFGdEI7O0lBR0EsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQWhCO01BQ0ksV0FBVyxDQUFDLGFBQWEsQ0FBQyxrQkFBMUIsQ0FBNkMsSUFBQyxDQUFBLGVBQTlDO01BQ0EsT0FBTyxDQUFDLFFBQVIsR0FBbUIsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUExQixDQUF5QyxPQUFPLENBQUMsSUFBSSxFQUFDLE1BQUQsRUFBckQsRUFGdkI7O0lBR0EsT0FBQSxHQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBaEIsQ0FBeUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBeEQsRUFBMkQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFaLEdBQWdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBMUY7SUFDVixJQUFHLE9BQUEsS0FBVyxPQUFPLENBQUMsT0FBdEI7TUFDSSxPQUFPLENBQUMsT0FBUixHQUFrQjtNQUNsQixJQUFxRCxPQUFyRDtRQUFBLFlBQVksQ0FBQyxTQUFiLENBQXVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBcEMsRUFBQTtPQUZKOztJQUdBLElBQUMsQ0FBQSxrQkFBRCxDQUFvQixPQUFwQixFQUE2QixPQUE3QjtXQUNBLE9BQU8sQ0FBQyxNQUFSLENBQUE7RUFoQlc7OztBQWtCZjs7Ozs7OzsrQkFNQSxZQUFBLEdBQWMsU0FBQTtJQUNWLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixHQUFrQixJQUFDLENBQUEsTUFBTSxDQUFDO0lBQzFCLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixHQUFrQixJQUFDLENBQUEsTUFBTSxDQUFDO0lBQzFCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQWYsR0FBbUI7SUFDbkIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBZixHQUFtQjtJQUNuQixJQUFDLENBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFiLENBQTJCLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBbkM7SUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFkLENBQTRCLElBQUMsQ0FBQSxNQUFNLENBQUMsS0FBcEM7V0FDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsQ0FBQTtFQVBVOzs7QUFTZDs7Ozs7OytCQUtBLE1BQUEsR0FBUSxTQUFBO0FBQ0osUUFBQTtJQUFBLDZDQUFBO0lBRUEsSUFBQyxDQUFBLFlBQUQsQ0FBQTtBQUVBO0FBQUEsU0FBQSxxQ0FBQTs7TUFDSSxJQUFDLENBQUEsYUFBRCxDQUFlLE9BQWY7QUFESjtBQUdBLFdBQU87RUFSSDs7OztHQTlRcUIsRUFBRSxDQUFDOztBQXdScEMsRUFBRSxDQUFDLGtCQUFILEdBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4jXG4jICAgU2NyaXB0OiBDb21wb25lbnRfSW1hZ2VNYXBcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIENvbXBvbmVudF9JbWFnZU1hcCBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICAjIyMqXG4gICAgKiBDYWxsZWQgaWYgdGhpcyBvYmplY3QgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSBhIGRhdGEtYnVuZGxlLiBJdCBjYW4gYmUgdXNlZFxuICAgICogcmUtYXNzaWduIGV2ZW50LWhhbmRsZXIsIGFub255bW91cyBmdW5jdGlvbnMsIGV0Yy5cbiAgICAqIFxuICAgICogQG1ldGhvZCBvbkRhdGFCdW5kbGVSZXN0b3JlLlxuICAgICogQHBhcmFtIE9iamVjdCBkYXRhIC0gVGhlIGRhdGEtYnVuZGxlXG4gICAgKiBAcGFyYW0gZ3MuT2JqZWN0Q29kZWNDb250ZXh0IGNvbnRleHQgLSBUaGUgY29kZWMtY29udGV4dC5cbiAgICAjIyNcbiAgICBvbkRhdGFCdW5kbGVSZXN0b3JlOiAoZGF0YSwgY29udGV4dCkgLT5cbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIEBvYmplY3QuYWRkT2JqZWN0KEBncm91bmQpXG4gICAgICAgIFxuICAgICAgICBiaXRtYXAgPSBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tAb2JqZWN0LmltYWdlc1swXX1cIilcbiAgICAgICAgZ3JvdW5kID0gbmV3IGdzLkJpdG1hcChiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQpXG4gICAgICAgIGdyb3VuZC5ibHQoMCwgMCwgYml0bWFwLCBuZXcgUmVjdCgwLCAwLCBiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQpKVxuICAgICAgICBAZ3JvdW5kLmJpdG1hcCA9IGdyb3VuZFxuICAgICAgICBcbiAgICAgICAgQHNldHVwSG90c3BvdHMoQGhvdHNwb3RzKVxuXG4gICAgIyMjKlxuICAgICogQSBjb21wb25lbnQgd2hpY2ggdHVybnMgYSBnYW1lIG9iamVjdCBpbnRvIGFuIGludGVyYWN0aXZlIGltYWdlLW1hcC5cbiAgICAqXG4gICAgKiBAbW9kdWxlIGdzXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0ltYWdlTWFwXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfVmlzdWFsXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAjIyNcbiAgICBjb25zdHJ1Y3RvcjogLT5cbiAgICAgICAgc3VwZXJcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZ3JvdW5kL2Jhc2UgaW1hZ2UuXG4gICAgICAgICogQHByb3BlcnR5IGdyb3VuZFxuICAgICAgICAqIEB0eXBlIGdzLk9iamVjdF9QaWN0dXJlXG4gICAgICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAgICAjIyNcbiAgICAgICAgQGdyb3VuZCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBbiBhcnJheSBvZiBkaWZmZXJlbnQgaG90c3BvdHMuXG4gICAgICAgICogQHByb3BlcnR5IGhvdHNwb3RzXG4gICAgICAgICogQHR5cGUgZ3MuT2JqZWN0X1BpY3R1cmVbXVxuICAgICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgICAgIyMjXG4gICAgICAgIEBob3RzcG90cyA9IG51bGxcbiAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSB2YXJpYWJsZSBjb250ZXh0IHVzZWQgaWYgYSBob3RzcG90IG5lZWRzIHRvIGRlYWwgd2l0aCBsb2NhbCB2YXJpYWJsZXMuXG4gICAgICAgICogQHByb3BlcnR5IHZhcmlhYmxlQ29udGV4dFxuICAgICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgICAgIyMjXG4gICAgICAgIEB2YXJpYWJsZUNvbnRleHQgPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBpbWFnZS1tYXAgaXMgYWN0aXZlLiBBbiBpbi1hY3RpdmUgaW1hZ2UtbWFwIGRvZXNuJ3QgcmVzcG9uZFxuICAgICAgICAqIHRvIGFueSBpbnB1dC1ldmVudC4gSG92ZXIgZWZmZWN0cyBhcmUgc3RpbGwgd29ya2luZy5cbiAgICAgICAgKiBAcHJvcGVydHkgYWN0aXZlXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBkZWZhdWx0IHllc1xuICAgICAgICAjIyNcbiAgICAgICAgQGFjdGl2ZSA9IHllc1xuICAgICAgIFxuICAgICMjIypcbiAgICAqIEFkZHMgZXZlbnQtaGFuZGxlciBmb3IgbW91c2UvdG91Y2ggZXZlbnRzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50IG9ubHkgaWYgXG4gICAgKiBhIHVzZXItYWN0aW9uIGhhcHBlbmVkLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBFdmVudEhhbmRsZXJzXG4gICAgIyMjIFxuICAgIHNldHVwRXZlbnRIYW5kbGVyczogLT5cbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9mZkJ5T3duZXIoXCJtb3VzZVVwXCIsIEBvYmplY3QpXG4gICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vbiBcIm1vdXNlVXBcIiwgKChlKSA9PiBcbiAgICAgICAgICAgIGNvbnRhaW5zID0gUmVjdC5jb250YWlucyhAb2JqZWN0LmRzdFJlY3QueCwgQG9iamVjdC5kc3RSZWN0LnksIFxuICAgICAgICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCwgQG9iamVjdC5kc3RSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dC5Nb3VzZS54IC0gQG9iamVjdC5vcmlnaW4ueCwgSW5wdXQuTW91c2UueSAtIEBvYmplY3Qub3JpZ2luLnkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGNvbnRhaW5zIGFuZCBAYWN0aXZlXG4gICAgICAgICAgICAgICAgZm9yIGhvdHNwb3QgaW4gQGhvdHNwb3RzXG4gICAgICAgICAgICAgICAgICAgIGlmIEBjaGVja0hvdHNwb3RBY3Rpb24oaG90c3BvdCkgXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmJyZWFrQ2hhaW4gPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhvdHNwb3QuZGF0YS5iaW5kVG9Td2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3RzcG90LnNlbGVjdGVkID0gIWhvdHNwb3Quc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIEBleGVjdXRlSG90c3BvdEFjdGlvbihob3RzcG90KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICApLCBudWxsLCBAb2JqZWN0XG4gICAgICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIEluaXRpYWxpemVzIHRoZSBpbWFnZS1tYXAuIENyZWF0ZXMgdGhlIGJhY2tncm91bmQgYW5kIGhvdHNwb3RzLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBcbiAgICAjIyNcbiAgICBzZXR1cDogLT5cbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIEBvYmplY3QuckluZGV4ID0gMTEwMDAgIyBSZWNlaXZlIElucHV0IEV2ZW50cyBmaXJzdFxuICAgICAgICBiaXRtYXAgPSBSZXNvdXJjZU1hbmFnZXIuZ2V0Qml0bWFwKFwiR3JhcGhpY3MvUGljdHVyZXMvI3tAb2JqZWN0LmltYWdlc1swXX1cIilcbiAgICAgICAgYml0bWFwLm1ha2VNdXRhYmxlKClcbiAgICAgICAgZ3JvdW5kID0gbmV3IGdzLkJpdG1hcChiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQpXG4gICAgICAgIGdyb3VuZC5ibHQoMCwgMCwgYml0bWFwLCBuZXcgUmVjdCgwLCAwLCBiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQpKVxuICAgICAgICBcbiAgICAgICAgQGdyb3VuZCA9IG5ldyBncy5PYmplY3RfUGljdHVyZSgpXG4gICAgICAgIEBncm91bmQuYml0bWFwID0gZ3JvdW5kXG4gICAgICAgIEBncm91bmQuaW1hZ2UgPSBudWxsXG4gICAgICAgIEBncm91bmQuekluZGV4ID0gQG9iamVjdC56SW5kZXhcbiAgICAgICAgQGdyb3VuZC5pbWFnZUhhbmRsaW5nID0gZ3MuSW1hZ2VIYW5kbGluZy5DVVNUT01fU0laRVxuICAgICAgICBAb2JqZWN0LmFkZE9iamVjdChAZ3JvdW5kKVxuICAgICAgICBcbiAgICAgICAgQHNldHVwSG90c3BvdHMoKVxuICAgICAgICBcbiAgICAgICAgQGdyb3VuZC5zcmNSZWN0LnNldCgwLCAwLCBncm91bmQud2lkdGgsIGdyb3VuZC5oZWlnaHQpXG4gICAgICAgIEBncm91bmQuZHN0UmVjdC53aWR0aCA9IGdyb3VuZC53aWR0aFxuICAgICAgICBAZ3JvdW5kLmRzdFJlY3QuaGVpZ2h0ID0gZ3JvdW5kLmhlaWdodFxuICAgICAgICBAZ3JvdW5kLnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LmRzdFJlY3Qud2lkdGggPSBAZ3JvdW5kLmRzdFJlY3Qud2lkdGhcbiAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBncm91bmQuZHN0UmVjdC5oZWlnaHRcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHRoZSBob3RzcG90cyBvbiB0aGUgaW1hZ2UtbWFwLiBFYWNoIGhvdHNwb3QgaXMgYSBncy5PYmplY3RfSW1hZ2VNYXBIb3RzcG90XG4gICAgKiBvYmplY3QuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cEhvdHNwb3RzXG4gICAgIyMjXG4gICAgc2V0dXBIb3RzcG90czogKGhvdHNwb3RzKSAtPlxuICAgICAgICBAaG90c3BvdHMgPSBAb2JqZWN0LmhvdHNwb3RzLnNlbGVjdCAodiwgaSkgPT4gXG4gICAgICAgICAgICBAZ3JvdW5kLmJpdG1hcC5jbGVhclJlY3Qodi54LCB2LnksIHYuc2l6ZS53aWR0aCwgdi5zaXplLmhlaWdodClcbiAgICAgICAgICAgIHBpY3R1cmUgPSBuZXcgZ3MuT2JqZWN0X0ltYWdlTWFwSG90c3BvdCgpXG4gICAgICAgICAgICBwaWN0dXJlLmZpeGVkU2l6ZSA9IHRydWVcbiAgICAgICAgICAgIHBpY3R1cmUuc3JjUmVjdCA9IG5ldyBSZWN0KHYueCwgdi55LCB2LnNpemUud2lkdGgsIHYuc2l6ZS5oZWlnaHQpXG4gICAgICAgICAgICBwaWN0dXJlLmRzdFJlY3QgPSBuZXcgUmVjdCh2LngsIHYueSwgdi5zaXplLndpZHRoLCB2LnNpemUuaGVpZ2h0KVxuICAgICAgICAgICAgcGljdHVyZS5pbWFnZUhhbmRsaW5nID0gZ3MuSW1hZ2VIYW5kbGluZy5DVVNUT01fU0laRVxuICAgICAgICAgICAgcGljdHVyZS56SW5kZXggPSBAb2JqZWN0LnpJbmRleCArIDFcbiAgICAgICAgICAgIHBpY3R1cmUuc2VsZWN0ZWQgPSBob3RzcG90cz9baV0/LnNlbGVjdGVkID8gbm9cbiAgICAgICAgICAgIHBpY3R1cmUuaG92ZXJlZCA9IG5vXG4gICAgICAgICAgICBwaWN0dXJlLmVuYWJsZWQgPSBob3RzcG90cz9baV0/LmVuYWJsZWQgPyB5ZXNcbiAgICAgICAgICAgIHBpY3R1cmUuYWN0aW9ucyA9IHYuZGF0YS5hY3Rpb25zXG4gICAgICAgICAgICBwaWN0dXJlLmRhdGEgPSB2LmRhdGFcbiAgICAgICAgICAgIHBpY3R1cmUuY29tbW9uRXZlbnRJZCA9IHYuY29tbW9uRXZlbnRJZFxuICAgICAgICAgICAgcGljdHVyZS5hbmNob3Iuc2V0KDAuNSwgMC41KVxuICAgICAgICAgICAgQG9iamVjdC5hZGRPYmplY3QocGljdHVyZSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBpY3R1cmVcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIEluaXRpYWxpemVzIHRoZSBpbWFnZS1tYXAuIEZyZWVzIGdyb3VuZCBpbWFnZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGRpc3Bvc2VcbiAgICAjIyNcbiAgICBkaXNwb3NlOiAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIub2ZmQnlPd25lcihcIm1vdXNlVXBcIiwgQG9iamVjdClcbiAgICAgICAgQGdyb3VuZC5iaXRtYXAuZGlzcG9zZSgpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIEV4ZWN1dGVzIGEgaG90c3BvdCdzIGFzc29jaWF0ZWQgYWN0aW9uLiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYSBob3RzcG90XG4gICAgKiBjYW4gdHJpZ2dlciBhIGNvbW1vbi1ldmVudCBvciB0dXJuIG9uIGEgc3dpdGNoIGZvciBleGFtcGxlLlxuICAgICpcbiAgICAqIEBtZXRob2QgZXhlY3V0ZUhvdHNwb3RBY3Rpb25cbiAgICAqIEBwYXJhbSB7Z3MuT2JqZWN0X1BpY3R1cmV9IGhvdHNwb3QgLSBUaGUgaG90c3BvdCB3aGVyZSB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVwZGF0ZWQuXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjXG4gICAgZXhlY3V0ZUhvdHNwb3RBY3Rpb246IChob3RzcG90KSAtPlxuICAgICAgICBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLnNldHVwVGVtcFZhcmlhYmxlcyhAdmFyaWFibGVDb250ZXh0KVxuICAgICAgICBpZiBob3RzcG90LmRhdGEuYmluZFRvU3dpdGNoXG4gICAgICAgICAgICBkb21haW4gPSBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLmRvbWFpblxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXRCb29sZWFuVmFsdWVUbyhob3RzcG90LmRhdGEuc3dpdGNoLCBob3RzcG90LnNlbGVjdGVkKVxuICAgICAgICBpZiBob3RzcG90LmRhdGEuYmluZFZhbHVlVG9cbiAgICAgICAgICAgIGRvbWFpbiA9IEdhbWVNYW5hZ2VyLnZhcmlhYmxlU3RvcmUuZG9tYWluXG4gICAgICAgICAgICBHYW1lTWFuYWdlci52YXJpYWJsZVN0b3JlLnNldE51bWJlclZhbHVlVG8oaG90c3BvdC5kYXRhLmJpbmRWYWx1ZVZhcmlhYmxlLCBob3RzcG90LmRhdGEuYmluZFZhbHVlKVxuICAgICAgICAgICAgXG4gICAgICAgIEF1ZGlvTWFuYWdlci5wbGF5U291bmQoaG90c3BvdC5kYXRhLm9uQ2xpY2tTb3VuZClcbiAgICAgICAgc3dpdGNoIGhvdHNwb3QuZGF0YS5hY3Rpb25cbiAgICAgICAgICAgIHdoZW4gMSAjIEp1bXAgVG9cbiAgICAgICAgICAgICAgICBAb2JqZWN0LmV2ZW50cz8uZW1pdChcImp1bXBUb1wiLCBAb2JqZWN0LCB7IGxhYmVsOiBob3RzcG90LmRhdGEubGFiZWwgfSlcbiAgICAgICAgICAgIHdoZW4gMiAjIENhbGwgQ29tbW9uIEV2ZW50XG4gICAgICAgICAgICAgICAgQG9iamVjdC5ldmVudHM/LmVtaXQoXCJjYWxsQ29tbW9uRXZlbnRcIiwgQG9iamVjdCwgeyBjb21tb25FdmVudElkOiBob3RzcG90LmRhdGEuY29tbW9uRXZlbnRJZCwgZmluaXNoOiBob3RzcG90LmRhdGEuZmluaXNoIH0pXG4gICAgICAgICAgICB3aGVuIDMgIyBVSSBBY3Rpb25cbiAgICAgICAgICAgICAgICBAb2JqZWN0LmV2ZW50cz8uZW1pdChcImFjdGlvblwiLCBAb2JqZWN0LCB7IGFjdGlvbnM6IGhvdHNwb3QuZGF0YS5hY3Rpb25zIH0pXG4gICAgICAgIFxuICAgICAgICBpZiBob3RzcG90LmRhdGEuZmluaXNoXG4gICAgICAgICAgICBAb2JqZWN0LmV2ZW50cz8uZW1pdChcImZpbmlzaFwiLCBAb2JqZWN0KVxuICAgICAgICAgICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogQ2hlY2tzIGlmIGEgaG90c3BvdCdzIGFzc29jaWF0ZWQgYWN0aW9uIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYSBob3RzcG90XG4gICAgKiBjYW4gdHJpZ2dlciBhIGNvbW1vbi1ldmVudCBvciB0dXJuIG9uIGEgc3dpdGNoIGZvciBleGFtcGxlLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlSG90c3BvdEFjdGlvblxuICAgICogQHBhcmFtIHtncy5PYmplY3RfUGljdHVyZX0gaG90c3BvdCAtIFRoZSBob3RzcG90IHdoZXJlIHRoZSBpbWFnZSBzaG91bGQgYmUgdXBkYXRlZC5cbiAgICAqIEByZXR1cm4ge2Jvb2xlYW59IElmIDxiPnRydWU8L2I+IHRoZSBob3RzcG90J3MgYWN0aW9uIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLiBPdGhlcndpc2UgPGI+ZmFsc2U8L2I+LlxuICAgICogQHByb3RlY3RlZFxuICAgICMjI1xuICAgIGNoZWNrSG90c3BvdEFjdGlvbjogKGhvdHNwb3QpIC0+XG4gICAgICAgIHJlc3VsdCA9IG5vXG4gICAgICAgIGhvdmVyZWQgPSBob3RzcG90LmRzdFJlY3QuY29udGFpbnMoSW5wdXQuTW91c2UueCAtIGhvdHNwb3Qub3JpZ2luLngsIElucHV0Lk1vdXNlLnkgLSBob3RzcG90Lm9yaWdpbi55KVxuICAgICAgICBcbiAgICAgICAgaWYgaG92ZXJlZCBhbmQgaG90c3BvdC5lbmFibGVkIGFuZCBJbnB1dC5Nb3VzZS5idXR0b25zW0lucHV0Lk1vdXNlLkxFRlRdID09IDJcbiAgICAgICAgICAgIHJlc3VsdCA9IHllc1xuICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgYSBob3RzcG90J3MgaW1hZ2UuIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgdGhlIGltYWdlIG9mIGEgaG90c3BvdCBjYW5cbiAgICAqIGNoYW5nZSBmb3IgZXhhbXBsZSBpZiB0aGUgbW91c2UgaG92ZXJzIG92ZXIgYSBob3RzcG90LlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlSG90c3BvdEltYWdlXG4gICAgKiBAcGFyYW0ge2dzLk9iamVjdF9QaWN0dXJlfSBob3RzcG90IC0gVGhlIGhvdHNwb3Qgd2hlcmUgdGhlIGltYWdlIHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICogQHBhcmFtIHtib29sZWFufSBob3ZlcmVkIC0gSW5kaWNhdGVzIGlmIHRoZSBob3RzcG90IGlzIGhvdmVyZWQgYnkgbW91c2UvdG91Y2ggY3Vyc29yLlxuICAgICogQHByb3RlY3RlZFxuICAgICMjI1xuICAgIHVwZGF0ZUhvdHNwb3RJbWFnZTogKGhvdHNwb3QsIGhvdmVyZWQpIC0+XG4gICAgICAgIGJhc2VJbWFnZSA9IGlmIGhvdHNwb3QuZW5hYmxlZCB0aGVuIEBvYmplY3QuaW1hZ2VzWzJdIHx8IEBvYmplY3QuaW1hZ2VzWzBdIGVsc2UgQG9iamVjdC5pbWFnZXNbMF0gXG4gICAgICAgIGlmIGhvdmVyZWQgYW5kIGhvdHNwb3QuZW5hYmxlZFxuICAgICAgICAgICAgaWYgaG90c3BvdC5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIGhvdHNwb3QuaW1hZ2UgPSBAb2JqZWN0LmltYWdlc1s0XSB8fCBAb2JqZWN0LmltYWdlc1sxXSB8fCBiYXNlSW1hZ2VcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBob3RzcG90LmltYWdlID0gQG9iamVjdC5pbWFnZXNbMV0gfHwgYmFzZUltYWdlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGhvdHNwb3Quc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICBob3RzcG90LmltYWdlID0gQG9iamVjdC5pbWFnZXNbM10gfHwgYmFzZUltYWdlXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaG90c3BvdC5pbWFnZSA9IGJhc2VJbWFnZVxuICAgICAgICAgICAgICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgYSBob3RzcG90LlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlSG90c3BvdFxuICAgICogQHBhcmFtIHtncy5PYmplY3RfUGljdHVyZX0gaG90c3BvdCAtIFRoZSBob3RzcG90IHRvIHVwZGF0ZS5cbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICAgICAgICBcbiAgICB1cGRhdGVIb3RzcG90OiAoaG90c3BvdCkgLT5cbiAgICAgICAgaG90c3BvdC52aXNpYmxlID0gQG9iamVjdC52aXNpYmxlXG4gICAgICAgIGhvdHNwb3Qub3BhY2l0eSA9IEBvYmplY3Qub3BhY2l0eVxuICAgICAgICBob3RzcG90LnRvbmUuc2V0RnJvbU9iamVjdChAb2JqZWN0LnRvbmUpXG4gICAgICAgIGhvdHNwb3QuY29sb3Iuc2V0RnJvbU9iamVjdChAb2JqZWN0LmNvbG9yKVxuICAgICAgICBpZiBob3RzcG90LmRhdGEuYmluZEVuYWJsZWRTdGF0ZVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXR1cFRlbXBWYXJpYWJsZXMoQHZhcmlhYmxlQ29udGV4dClcbiAgICAgICAgICAgIGhvdHNwb3QuZW5hYmxlZCA9IEdhbWVNYW5hZ2VyLnZhcmlhYmxlU3RvcmUuYm9vbGVhblZhbHVlT2YoaG90c3BvdC5kYXRhLmVuYWJsZWRTd2l0Y2gpXG4gICAgICAgIGlmIGhvdHNwb3QuZGF0YS5iaW5kVG9Td2l0Y2hcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnZhcmlhYmxlU3RvcmUuc2V0dXBUZW1wVmFyaWFibGVzKEB2YXJpYWJsZUNvbnRleHQpXG4gICAgICAgICAgICBob3RzcG90LnNlbGVjdGVkID0gR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5ib29sZWFuVmFsdWVPZihob3RzcG90LmRhdGEuc3dpdGNoKVxuICAgICAgICBob3ZlcmVkID0gaG90c3BvdC5kc3RSZWN0LmNvbnRhaW5zKElucHV0Lk1vdXNlLnggLSBob3RzcG90Lm9yaWdpbi54LCBJbnB1dC5Nb3VzZS55IC0gaG90c3BvdC5vcmlnaW4ueSlcbiAgICAgICAgaWYgaG92ZXJlZCAhPSBob3RzcG90LmhvdmVyZWRcbiAgICAgICAgICAgIGhvdHNwb3QuaG92ZXJlZCA9IGhvdmVyZWRcbiAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5wbGF5U291bmQoaG90c3BvdC5kYXRhLm9uSG92ZXJTb3VuZCkgaWYgaG92ZXJlZFxuICAgICAgICBAdXBkYXRlSG90c3BvdEltYWdlKGhvdHNwb3QsIGhvdmVyZWQpICAgICAgIFxuICAgICAgICBob3RzcG90LnVwZGF0ZSgpICAgICAgICBcbiAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgZ3JvdW5kLWltYWdlLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlR3JvdW5kXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgXG4gICAgdXBkYXRlR3JvdW5kOiAtPlxuICAgICAgICBAZ3JvdW5kLnZpc2libGUgPSBAb2JqZWN0LnZpc2libGVcbiAgICAgICAgQGdyb3VuZC5vcGFjaXR5ID0gQG9iamVjdC5vcGFjaXR5XG4gICAgICAgIEBncm91bmQuYW5jaG9yLnggPSAwLjVcbiAgICAgICAgQGdyb3VuZC5hbmNob3IueSA9IDAuNVxuICAgICAgICBAZ3JvdW5kLnRvbmUuc2V0RnJvbU9iamVjdChAb2JqZWN0LnRvbmUpXG4gICAgICAgIEBncm91bmQuY29sb3Iuc2V0RnJvbU9iamVjdChAb2JqZWN0LmNvbG9yKVxuICAgICAgICBAZ3JvdW5kLnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIGltYWdlLW1hcCdzIGdyb3VuZCBhbmQgYWxsIGhvdHNwb3RzLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlXG4gICAgIyMjXG4gICAgdXBkYXRlOiAtPlxuICAgICAgICBzdXBlcigpXG4gICAgICAgIFxuICAgICAgICBAdXBkYXRlR3JvdW5kKClcbiAgICAgICAgXG4gICAgICAgIGZvciBob3RzcG90IGluIEBob3RzcG90c1xuICAgICAgICAgICAgQHVwZGF0ZUhvdHNwb3QoaG90c3BvdClcbiAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIFxuZ3MuQ29tcG9uZW50X0ltYWdlTWFwID0gQ29tcG9uZW50X0ltYWdlTWFwIl19\n//# sourceURL=Component_ImageMap_110.js"
13 13 },
14 14 "summary": [
15 15 "name",