From a248349739f5d6fbfa562a21a8b62b7f179b32ad Mon Sep 17 00:00:00 2001 From: oc Date: Tue, 13 Mar 2018 01:50:00 +0800 Subject: [PATCH] support 48x32 --- index.html | 3 +- libs/control.js | 57 +++++++-------- libs/core.js | 14 ++-- libs/enemys.js | 3 +- libs/events.js | 16 ++--- libs/items.js | 4 +- libs/maps.js | 119 +++++++++++++++--------------- libs/ui.js | 139 +++++++++++++++++++++++++----------- main.js | 2 +- project/comment.js | 2 +- project/data.js | 2 +- project/enemys.js | 124 ++++++++++++++++---------------- project/floors/sample0.js | 14 ++-- project/icons.js | 13 ++++ project/images/animates.png | Bin 20692 -> 29813 bytes project/images/enemy48.png | Bin 0 -> 9801 bytes project/images/npc48.png | Bin 0 -> 9560 bytes project/maps.js | 12 +++- styles.css | 22 +++--- 19 files changed, 307 insertions(+), 239 deletions(-) create mode 100644 project/images/enemy48.png create mode 100644 project/images/npc48.png diff --git a/index.html b/index.html index 20a62a7d..e04a22e4 100644 --- a/index.html +++ b/index.html @@ -106,8 +106,9 @@
- + + diff --git a/libs/control.js b/libs/control.js index 5df50f52..314b6af9 100644 --- a/libs/control.js +++ b/libs/control.js @@ -54,8 +54,7 @@ control.prototype.setRequestAnimationFrame = function () { var draw = function(timestamp) { - core.animateFrame.twoTime = core.animateFrame.twoTime||timestamp; - core.animateFrame.fourTime = core.animateFrame.fourTime||timestamp; + core.animateFrame.globalTime = core.animateFrame.globalTime||timestamp; core.animateFrame.boxTime = core.animateFrame.boxTime||timestamp; core.animateFrame.moveTime = core.animateFrame.moveTime||timestamp; core.animateFrame.weather.time = core.animateFrame.weather.time||timestamp; @@ -63,29 +62,16 @@ control.prototype.setRequestAnimationFrame = function () { // Global Animate if (core.animateFrame.globalAnimate && core.isPlaying()) { - if (timestamp-core.animateFrame.twoTime>core.animateFrame.speed && core.isset(core.status.twoAnimateObjs)) { + if (timestamp-core.animateFrame.globalTime>core.animateFrame.speed && core.isset(core.status.globalAnimateObjs)) { - for (var a = 0; a < core.status.twoAnimateObjs.length; a++) { - var obj = core.status.twoAnimateObjs[a]; - obj.status = (obj.status+1)%2; - core.canvas.event.clearRect(obj.x, obj.y, 32, 32); - core.canvas.event.drawImage(obj.image, obj.status * 32, obj.loc * 32, 32, 32, obj.x, obj.y, 32, 32); + for (var a = 0; a < core.status.globalAnimateObjs.length; a++) { + var obj = core.status.globalAnimateObjs[a]; + obj.status = (obj.status+1)%(obj.event.animate||1); + core.drawBlock(obj, obj.status); } - core.animateFrame.twoTime = timestamp; + core.animateFrame.globalTime = timestamp; } - - if (timestamp-core.animateFrame.fourTime>core.animateFrame.speed/2 && core.isset(core.status.fourAnimateObjs)) { - for (var a = 0; a < core.status.fourAnimateObjs.length; a++) { - var obj=core.status.fourAnimateObjs[a]; - obj.status = (obj.status+1)%4; - core.canvas.event.clearRect(obj.x, obj.y, 32, 32); - core.canvas.event.drawImage(obj.image, obj.status * 32, obj.loc * 32, 32, 32, obj.x, obj.y, 32, 32); - } - // fourtime = timestamp % fourDelta; - core.animateFrame.fourTime = timestamp; - } - } // Box @@ -882,7 +868,7 @@ control.prototype.updateCheckBlock = function() { core.status.checkBlock.map = []; // 记录怪物地图 for (var n=0;n= core.values.animateSpeed * 2 / animateValue) { + if (animateTime >= core.values.animateSpeed) { animateCurrent++; animateTime = 0; - if (animateCurrent>=animateValue) animateCurrent=0; } snipes.forEach(function (snipe) { var x=snipe.x, y=snipe.y, direction = snipe.direction; - var nowX=32*x+scan[direction].x*2*step, nowY=32*y+scan[direction].y*2*step; + var dx = scan[direction].x*2*step, dy = scan[direction].y*2*step; + var nowX = 32*x+dx, nowY = 32*y+dy; // 清空上一次 - core.clearMap('event', nowX-2*scan[direction].x, nowY-2*scan[direction].y, 32, 32); core.clearMap('fg', nowX-2*scan[direction].x, nowY-2*scan[direction].y, 32, 32); + core.canvas.event.clearRect(nowX-2*scan[direction].x, nowY-2*scan[direction].y, 32, 32); + core.canvas.event2.clearRect(nowX-2*scan[direction].x, nowY-2*scan[direction].y-32, 32, 32) - core.canvas.event.drawImage(snipe.blockImage, animateCurrent*32, snipe.blockIcon*32, 32, 32, nowX, nowY, 32, 32); + core.drawBlock(snipe.block, animateCurrent, dx, dy); if (core.hasItem('book')) { // drawFG @@ -1256,7 +1247,7 @@ control.prototype.updateFg = function () { core.canvas.fg.textAlign = 'left'; for (var b = 0; b < mapBlocks.length; b++) { var x = mapBlocks[b].x, y = mapBlocks[b].y; - if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls == 'enemys' + if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls.indexOf('enemy')==0 && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable)) { // 非系统默认的战斗事件(被覆盖) diff --git a/libs/core.js b/libs/core.js index fc595cc4..e9ad0fe6 100644 --- a/libs/core.js +++ b/libs/core.js @@ -29,8 +29,7 @@ function core() { this.animateFrame = { 'background': null, 'globalAnimate': false, - 'twoTime': null, - 'fourTime': null, + 'globalTime': null, 'boxTime': null, 'moveTime': null, 'speed': null, @@ -141,8 +140,7 @@ function core() { 'openingDoor': null, // 动画 - 'twoAnimateObjs': [], - 'fourAnimateObjs': [], + 'globalAnimateObjs': [], 'boxAnimateObjs': [], }; this.status = {}; @@ -608,6 +606,10 @@ core.prototype.setFillStyle = function (map, style) { core.ui.setFillStyle(map, style); } +core.prototype.drawBlock = function (block, animate, dx, dy) { + core.maps.drawBlock(block, animate, dx, dy); +} + ////// 绘制某张地图 ////// core.prototype.drawMap = function (mapName, callback) { core.maps.drawMap(mapName, callback); @@ -689,8 +691,8 @@ core.prototype.removeBlockByIds = function (floorId, ids) { } ////// 添加一个全局动画 ////// -core.prototype.addGlobalAnimate = function (animateMore, x, y, loc, image) { - core.maps.addGlobalAnimate(animateMore, x, y, loc, image); +core.prototype.addGlobalAnimate = function (block) { + core.maps.addGlobalAnimate(block); } ////// 删除一个或所有全局动画 ////// diff --git a/libs/enemys.js b/libs/enemys.js index 7f6156ed..d6bc65b0 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -246,7 +246,8 @@ enemys.prototype.getCurrentEnemys = function (floorId) { var used = {}; var mapBlocks = core.status.maps[floorId].blocks; for (var b = 0; b < mapBlocks.length; b++) { - if (core.isset(mapBlocks[b].event) && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable) && mapBlocks[b].event.cls == 'enemys') { + if (core.isset(mapBlocks[b].event) && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable) + && mapBlocks[b].event.cls.indexOf('enemy')==0) { var monsterId = mapBlocks[b].event.id; if (core.isset(used[monsterId])) continue; diff --git a/libs/events.js b/libs/events.js index 58dae299..53340072 100644 --- a/libs/events.js +++ b/libs/events.js @@ -883,7 +883,7 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback // 检查重生 if (!core.isset(fromLoad)) { core.status.maps[floorId].blocks.forEach(function(block) { - if (core.isset(block.enable) && !block.enable && core.isset(block.event) && block.event.cls=='enemys' + if (core.isset(block.enable) && !block.enable && core.isset(block.event) && block.event.cls.indexOf('enemy')==0 && core.enemys.hasSpecial(core.material.enemys[block.event.id].special, 23)) { block.enable = true; } @@ -1098,10 +1098,7 @@ events.prototype.changeLight = function(x, y) { // 改变为dark block.id = 166; block.event = {'cls': 'terrains', 'id': 'darkLight', 'noPass': true}; - // 更新地图 - core.canvas.event.clearRect(x * 32, y * 32, 32, 32); - var blockIcon = core.material.icons[block.event.cls][block.event.id]; - core.canvas.event.drawImage(core.material.images[block.event.cls], 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); + core.drawBlock(block); this.afterChangeLight(x,y); } @@ -1151,18 +1148,14 @@ events.prototype.pushBox = function (data) { if (block!=null && !(core.isset(block.block.event) && block.block.event.id=='flower')) return; - var blockIcon; if (block==null) { core.status.thisMap.blocks.push(core.maps.initBlock(nx, ny, 169)); - blockIcon=core.material.icons.terrains.box; } else { block.block.id=170; block.block.event=core.maps.initBlock(null,null,170).event; - blockIcon=core.material.icons.terrains.boxed; } - core.canvas.event.clearRect(nx * 32, ny * 32, 32, 32); - core.canvas.event.drawImage(core.material.images.terrains, 0, blockIcon * 32, 32, 32, nx * 32, ny * 32, 32, 32); + core.drawBlock(block.block); if (data.event.id=='box') { core.removeBlock(data.x, data.y); @@ -1170,8 +1163,7 @@ events.prototype.pushBox = function (data) { else { data.id=168; data.event=core.maps.initBlock(null,null,168).event; - core.canvas.event.clearRect(data.x * 32, data.y * 32, 32, 32); - core.canvas.event.drawImage(core.material.images.terrains, 0, core.material.icons.terrains.flower * 32, 32, 32, data.x * 32, data.y * 32, 32, 32); + core.drawBlock(data); } core.updateStatusBar(); diff --git a/libs/items.js b/libs/items.js index cc16999a..8616d607 100644 --- a/libs/items.js +++ b/libs/items.js @@ -200,7 +200,7 @@ items.prototype.canUseItem = function (itemId) { var ids = []; for (var i in core.status.thisMap.blocks) { var block = core.status.thisMap.blocks[i]; - if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls == 'enemys' && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) { + if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls.indexOf('enemy')==0 && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) { var enemy = core.material.enemys[block.event.id]; if (core.isset(enemy.bomb) && !enemy.bomb) continue; if (core.flags.bombFourDirections || (block.x==core.nextX() && block.y==core.nextY())) @@ -217,7 +217,7 @@ items.prototype.canUseItem = function (itemId) { // 圣锤 for (var i in core.status.thisMap.blocks) { var block = core.status.thisMap.blocks[i]; - if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls == 'enemys' && block.x==core.nextX() && block.y==core.nextY()) { + if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls.indexOf('enemy')==0 && block.x==core.nextX() && block.y==core.nextY()) { var enemy = core.material.enemys[block.event.id]; if (core.isset(enemy.bomb) && !enemy.bomb) continue; core.status.event.data = [i]; diff --git a/libs/maps.js b/libs/maps.js index 5ae7fc93..879d9027 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -65,14 +65,14 @@ maps.prototype.initBlock = function (x, y, id) { ////// 添加一些信息到block上 ////// maps.prototype.addInfo = function (block) { if (core.isset(block.event)) { - if (block.event.cls == 'enemys' && block.event.trigger==undefined) { + if (block.event.cls.indexOf("enemy")==0 && block.event.trigger==undefined) { block.event.trigger = 'battle'; } if (block.event.cls == 'items' && block.event.trigger==undefined) { block.event.trigger = 'getItem'; } if (block.event.noPass == undefined) { - if (block.event.cls=='enemys' || block.event.cls=='terrains' || block.event.cls=='npcs') { + if (block.event.cls.indexOf("enemy")==0 || block.event.cls.indexOf("npc")==0 || block.event.cls=='terrains') { block.event.noPass = true; } } @@ -80,10 +80,13 @@ maps.prototype.addInfo = function (block) { if (block.event.cls=='enemys' || block.event.cls=='npcs') { block.event.animate = 2; } - if (block.event.cls == 'animates') { + if (block.event.cls == 'animates' || block.event.cls == 'enemy48' || block.event.cls == 'npc48') { block.event.animate = 4; } } + block.event.height = 32; + if (block.event.cls == 'enemy48' || block.event.cls == 'npc48') + block.event.height = 48; } } @@ -283,6 +286,19 @@ maps.prototype.canMoveDirectly = function (destX,destY) { return false; } +maps.prototype.drawBlock = function (block, animate, dx, dy) { + var cls = block.event.cls, height = block.event.height || 32; + var blockIcon = core.material.icons[cls][block.event.id]; + var blockImage = core.material.images[cls]; + animate=(animate||0)%(block.event.animate||1); + dx = dx || 0; + dy = dy || 0; + core.canvas.event.clearRect(block.x * 32 + dx, block.y * 32 + dy, 32, 32); + core.canvas.event2.clearRect(block.x * 32 + dx, block.y * 32 - 32 + dy, 32, 32) + core.canvas.event.drawImage(blockImage, animate * 32, blockIcon * height + height-32, 32, 32, block.x * 32 + dx, block.y * 32 + dy, 32, 32); + core.canvas.event2.drawImage(blockImage, animate * 32, blockIcon * height, 32, height-32, block.x * 32 + dx, block.y*32 + 32 - height + dy, 32, height-32); +} + ////// 绘制某张地图 ////// maps.prototype.drawMap = function (mapName, callback) { core.clearMap('all'); @@ -348,10 +364,8 @@ maps.prototype.drawMap = function (mapName, callback) { } else { if (block.event.id!='none') { - blockIcon = core.material.icons[block.event.cls][block.event.id]; - blockImage = core.material.images[block.event.cls]; - core.canvas.event.drawImage(core.material.images[block.event.cls], 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); - core.addGlobalAnimate(block.event.animate, block.x * 32, block.y * 32, blockIcon, blockImage); + core.drawBlock(block); + core.addGlobalAnimate(block); } } } @@ -471,7 +485,7 @@ maps.prototype.noPass = function (x, y) { maps.prototype.npcExists = function (x, y, floorId) { var block = this.getBlock(x,y,floorId); if (block==null) return false; - return block.block.event.cls == 'npcs'; + return block.block.event.cls.indexOf('npc')==0; } ////// 某个点是否存在(指定的)地形 ////// @@ -498,7 +512,7 @@ maps.prototype.nearStair = function() { maps.prototype.enemyExists = function (x, y, id,floorId) { var block = this.getBlock(x,y,floorId); if (block==null) return false; - return block.block.event.cls=='enemys' && (core.isset(id)?block.block.event.id==id:true); + return block.block.event.cls.indexOf('enemy')==0 && (core.isset(id)?block.block.event.id==id:true); } ////// 获得某个点的block ////// @@ -537,10 +551,11 @@ maps.prototype.moveBlock = function(x,y,steps,time,immediateHide,callback) { block=block.block; var blockIcon = core.material.icons[block.event.cls][block.event.id]; var blockImage = core.material.images[block.event.cls]; + var height = block.event.height || 32; var opacityVal = 1; core.setOpacity('animate', opacityVal); - core.canvas.animate.drawImage(blockImage, 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); + core.canvas.animate.drawImage(blockImage, 0, blockIcon * height, 32, height, block.x * 32, block.y * 32 +32 - height, 32, height); // 要运行的轨迹:将steps展开 var moveSteps=[]; @@ -575,7 +590,7 @@ maps.prototype.moveBlock = function(x,y,steps,time,immediateHide,callback) { var animate=window.setInterval(function() { animateTime += time / 16 / core.status.replay.speed; - if (animateTime >= core.values.animateSpeed * 2 / animateValue) { + if (animateTime >= core.values.animateSpeed) { animateCurrent++; animateTime = 0; if (animateCurrent>=animateValue) animateCurrent=0; @@ -586,8 +601,8 @@ maps.prototype.moveBlock = function(x,y,steps,time,immediateHide,callback) { if (immediateHide) opacityVal=0; else opacityVal -= 0.06; core.setOpacity('animate', opacityVal); - core.clearMap('animate', nowX, nowY, 32, 32); - core.canvas.animate.drawImage(blockImage, animateCurrent * 32, blockIcon * 32, 32, 32, nowX, nowY, 32, 32); + core.clearMap('animate', nowX, nowY-height+32, 32, height); + core.canvas.animate.drawImage(blockImage, animateCurrent * 32, blockIcon * height, 32, height, nowX, nowY-height+32, 32, height); if (opacityVal<=0) { clearInterval(animate); core.clearMap('animate', 0, 0, 416, 416); @@ -603,7 +618,7 @@ maps.prototype.moveBlock = function(x,y,steps,time,immediateHide,callback) { nowY+=scan[moveSteps[0]].y*2; core.clearMap('animate', nowX-32, nowY-32, 96, 96); // 绘制 - core.canvas.animate.drawImage(blockImage, animateCurrent * 32, blockIcon * 32, 32, 32, nowX, nowY, 32, 32); + core.canvas.animate.drawImage(blockImage, animateCurrent * 32, blockIcon * height, 32, height, nowX, nowY-height+32, 32, height); if (step==16) { // 该移动完毕,继续 step=0; @@ -628,7 +643,7 @@ maps.prototype.animateBlock = function (loc,type,time,callback) { if (block==null) return; block=block.block; list.push({ - 'x': t[0], 'y': t[1], + 'x': t[0], 'y': t[1], 'height': block.event.height||32, 'blockIcon': core.material.icons[block.event.cls][block.event.id], 'blockImage': core.material.images[block.event.cls] }) @@ -642,7 +657,7 @@ maps.prototype.animateBlock = function (loc,type,time,callback) { core.status.replay.animate=true; var draw = function () { list.forEach(function (t) { - core.canvas.animate.drawImage(t.blockImage, 0, t.blockIcon * 32, 32, 32, t.x * 32, t.y * 32, 32, 32); + core.canvas.animate.drawImage(t.blockImage, 0, t.blockIcon*t.height, 32, t.height, t.x*32, t.y*32+32-t.height, 32, t.height); }) } @@ -680,11 +695,8 @@ maps.prototype.showBlock = function(x, y, floodId) { block.enable = true; // 在本层,添加动画 if (floodId == core.status.floorId && core.isset(block.event)) { - blockIcon = core.material.icons[block.event.cls][block.event.id]; - blockImage = core.material.images[block.event.cls]; - core.canvas.event.drawImage(core.material.images[block.event.cls], 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); - core.addGlobalAnimate(block.event.animate, block.x * 32, block.y * 32, blockIcon, blockImage); - // core.setGlobalAnimate(core.values.animateSpeed); + core.drawBlock(block); + core.addGlobalAnimate(block); core.syncGlobalAnimate(); } core.updateStatusBar(); @@ -704,6 +716,7 @@ maps.prototype.removeBlock = function (x, y, floorId) { if (floorId==core.status.floorId) { core.removeGlobalAnimate(x, y); core.canvas.event.clearRect(x * 32, y * 32, 32, 32); + core.canvas.event2.clearRect(x * 32, y * 32 - 32, 32, 32); } // 删除Index @@ -724,7 +737,7 @@ maps.prototype.removeBlockById = function (index, floorId) { // 检查是否存在重生 var isReborn = false; - if (core.isset(block.event) && block.event.cls=='enemys' + if (core.isset(block.event) && block.event.cls.indexOf('enemy')==0 && core.enemys.hasSpecial(core.material.enemys[block.event.id].special, 23)) isReborn = true; @@ -744,46 +757,29 @@ maps.prototype.removeBlockByIds = function (floorId, ids) { } ////// 添加一个全局动画 ////// -maps.prototype.addGlobalAnimate = function (animateMore, x, y, loc, image) { +maps.prototype.addGlobalAnimate = function (b) { if (main.mode=='editor' && main.editor.disableGlobalAnimate) return; - if (animateMore == 2) { - core.status.twoAnimateObjs.push({ - 'x': x, - 'y': y, - 'status': 0, - 'loc': loc, - 'image': image - }); - } - else if (animateMore == 4) { - core.status.fourAnimateObjs.push({ - 'x': x, - 'y': y, - 'status': 0, - 'loc': loc, - 'image': image - }); - } + if (!core.isset(b.event) || !core.isset(b.event.animate) || b.event.animate==1) return; + + var block = core.clone(b); + block.status = 0; + + core.status.globalAnimateObjs.push(block); + } ////// 删除一个或所有全局动画 ////// maps.prototype.removeGlobalAnimate = function (x, y, all) { - if (all == true) { - core.status.twoAnimateObjs = []; - core.status.fourAnimateObjs = []; - } - if (main.mode=='editor' && main.editor.disableGlobalAnimate) return; - for (var t = 0; t < core.status.twoAnimateObjs.length; t++) { - if (core.status.twoAnimateObjs[t].x == x * 32 && core.status.twoAnimateObjs[t].y == y * 32) { - core.status.twoAnimateObjs.splice(t, 1); - return; - } + if (all) { + core.status.globalAnimateObjs = []; + return; } - for (var f = 0; f < core.status.fourAnimateObjs.length; f++) { - if (core.status.fourAnimateObjs[f].x == x * 32 && core.status.fourAnimateObjs[f].y == y * 32) { - core.status.fourAnimateObjs.splice(f, 1); + + for (var t = 0; t < core.status.globalAnimateObjs.length; t++) { + if (core.status.globalAnimateObjs[t].x == x && core.status.globalAnimateObjs[t].y == y) { + core.status.globalAnimateObjs.splice(t, 1); return; } } @@ -799,10 +795,7 @@ maps.prototype.setGlobalAnimate = function (speed) { ////// 同步所有的全局动画效果 ////// maps.prototype.syncGlobalAnimate = function () { - core.status.twoAnimateObjs.forEach(function (t) { - t.status=0; - }) - core.status.fourAnimateObjs.forEach(function (t) { + core.status.globalAnimateObjs.forEach(function (t) { t.status=0; }) } @@ -811,11 +804,11 @@ maps.prototype.syncGlobalAnimate = function () { maps.prototype.drawBoxAnimate = function () { for (var a = 0; a < core.status.boxAnimateObjs.length; a++) { var obj = core.status.boxAnimateObjs[a]; - obj.status = ((obj.status||0)+1)%2; - core.clearMap('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize); - core.fillRect('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize, core.animateFrame.background); - core.canvas.ui.drawImage(obj.image, obj.status * 32, obj.icon * 32, - 32, 32, obj.x, obj.y, 32, 32); + obj.status = ((obj.status||0)+1)%obj.animate; + core.clearMap('ui', obj.bgx, obj.bgy, obj.bgWidth, obj.bgHeight); + core.fillRect('ui', obj.bgx, obj.bgy, obj.bgWidth, obj.bgHeight, core.animateFrame.background); + core.canvas.ui.drawImage(obj.image, obj.status * 32, obj.pos, + 32, obj.height, obj.x, obj.y, 32, obj.height); } } diff --git a/libs/ui.js b/libs/ui.js index 3eb517d1..cceb37be 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -266,7 +266,7 @@ ui.prototype.drawTextBox = function(content) { clearInterval(core.status.event.interval); // 获得name, image, icon - var id=null, name=null, image=null, icon=null; + var id=null, name=null, image=null, icon=null, iconHeight=32, animate=null; if (content.indexOf("\t[")==0 || content.indexOf("\\t[")==0) { var index = content.indexOf("]"); if (index>=0) { @@ -279,11 +279,21 @@ ui.prototype.drawTextBox = function(content) { id=ss[0]; // monster if (id!='hero') { - var enemys = core.material.enemys[id]; - if (core.isset(enemys)) { + if (core.isset(core.material.enemys[id])) { name = core.material.enemys[id].name; - image = core.material.images.enemys; - icon = core.material.icons.enemys[id]; + + if (core.isset(core.material.icons.enemy48[id])) { + image = core.material.images.enemy48; + icon = core.material.icons.enemy48[id]; + iconHeight = 48; + animate=4; + } + else { + image = core.material.images.enemys; + icon = core.material.icons.enemys[id]; + iconHeight = 32; + animate=2; + } } else { name=id; @@ -296,8 +306,18 @@ ui.prototype.drawTextBox = function(content) { else { id='npc'; name=ss[0]; - image=core.material.images.npcs; - icon=core.material.icons.npcs[ss[1]]; + if (core.isset(core.material.icons.npc48[ss[1]])) { + image = core.material.images.npc48; + icon = core.material.icons.npc48[ss[1]]; + iconHeight = 48; + animate=4; + } + else { + image = core.material.images.npcs; + icon = core.material.icons.npcs[ss[1]]; + iconHeight = 32; + animate=2; + } } } } @@ -306,7 +326,7 @@ ui.prototype.drawTextBox = function(content) { var textAttribute = core.status.textAttribute || core.initStatus.textAttribute; - var position = textAttribute.position, px=null, py=null, ydelta=0; + var position = textAttribute.position, px=null, py=null, ydelta=iconHeight-32; if (content.indexOf("\b[")==0 || content.indexOf("\\b[")==0) { var index = content.indexOf("]"); if (index>=0) { @@ -355,7 +375,7 @@ ui.prototype.drawTextBox = function(content) { if (textAttribute.bold) font = "bold "+font; var contents = core.splitLines("ui", content, validWidth, font); - var height = 20 + 21*(contents.length+1) + (id=='hero'?core.material.icons.hero.height-10:core.isset(name)?32-10:0); + var height = 20 + 21*(contents.length+1) + (id=='hero'?core.material.icons.hero.height-10:core.isset(name)?iconHeight-10:0); var xoffset = 6, yoffset = 22; @@ -447,12 +467,16 @@ ui.prototype.drawTextBox = function(content) { else { core.fillText('ui', name, content_left, top + 30, null, 'bold 22px Verdana'); if (core.isset(icon)) { - core.strokeRect('ui', left + 15 - 1, top + 40 - 1, 34, 34, null, 2); + + core.strokeRect('ui', left + 15 - 1, top + 40 - 1, 34, iconHeight + 2, null, 2); core.status.boxAnimateObjs = []; core.status.boxAnimateObjs.push({ - 'bgx': left + 15, 'bgy': top + 40, 'bgsize': 32, - 'image': image, 'x': left + 15, 'y': top + 40, 'icon': icon + 'bgx': left + 15, 'bgy': top + 40, 'bgWidth': 32, 'bgHeight': iconHeight, + 'x': left+15, 'y': top+40, 'height': iconHeight, 'animate': animate, + 'image': image, + 'pos': icon*iconHeight }); + core.drawBoxAnimate(); } } @@ -510,7 +534,7 @@ ui.prototype.drawChoices = function(content, choices) { if (length%2==0) bottom+=16; var choice_top = bottom-height+56; - var id=null, name=null, image=null, icon=null; + var id=null, name=null, image=null, icon=null, iconHeight=32, animate=null; var contents = null; var content_left = left + 15; @@ -528,11 +552,21 @@ ui.prototype.drawChoices = function(content, choices) { id=ss[0]; // monster if (id!='hero') { - var enemys = core.material.enemys[id]; - if (core.isset(enemys)) { + if (core.isset(core.material.enemys[id])) { name = core.material.enemys[id].name; - image = core.material.images.enemys; - icon = core.material.icons.enemys[id]; + + if (core.isset(core.material.icons.enemy48[id])) { + image = core.material.images.enemy48; + icon = core.material.icons.enemy48[id]; + iconHeight = 48; + animate=4; + } + else { + image = core.material.images.enemys; + icon = core.material.icons.enemys[id]; + iconHeight = 32; + animate=2; + } } else { name=id; @@ -545,8 +579,18 @@ ui.prototype.drawChoices = function(content, choices) { else { id='npc'; name=ss[0]; - image=core.material.images.npcs; - icon=core.material.icons.npcs[ss[1]]; + if (core.isset(core.material.icons.npc48[ss[1]])) { + image = core.material.images.npc48; + icon = core.material.icons.npc48[ss[1]]; + iconHeight = 48; + animate=4; + } + else { + image = core.material.images.npcs; + icon = core.material.icons.npcs[ss[1]]; + iconHeight = 32; + animate=2; + } } } } @@ -595,11 +639,13 @@ ui.prototype.drawChoices = function(content, choices) { else { core.fillText('ui', name, title_offset, top + 27, '#FFD700', 'bold 19px Verdana'); if (core.isset(icon)) { - core.strokeRect('ui', left + 15 - 1, top + 30 - 1, 34, 34, '#DDDDDD', 2); + core.strokeRect('ui', left + 15 - 1, top + 30 - 1, 34, iconHeight + 2, '#DDDDDD', 2); core.status.boxAnimateObjs = []; core.status.boxAnimateObjs.push({ - 'bgx': left + 15, 'bgy': top + 30, 'bgsize': 32, - 'image': image, 'x': left + 15, 'y': top + 30, 'icon': icon + 'bgx': left + 15, 'bgy': top + 30, 'bgWidth': 32, 'bgHeight': iconHeight, + 'x': left+15, 'y': top+30, 'height': iconHeight, 'animate': animate, + 'image': image, + 'pos': icon*iconHeight }); core.drawBoxAnimate(); } @@ -809,19 +855,28 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { var margin = 35; var boxWidth = 40; + var monsterHeight = 32, animate=2; + + var image = core.material.images.enemys, icon = core.material.icons.enemys; + if (core.isset(core.material.icons.enemy48[monsterId])) { + image = core.material.images.enemy48; + icon = core.material.icons.enemy48; + monsterHeight = 48; + animate=4; + } // 方块 var heroHeight = core.material.icons.hero.height; core.strokeRect('ui', left + margin - 1, top + margin - 1, boxWidth+2, heroHeight+boxWidth-32+2, '#FFD700', 2); - core.strokeRect('ui', left + right - margin - boxWidth - 1 , top+margin-1, boxWidth+2, boxWidth+2); + core.strokeRect('ui', left + right - margin - boxWidth - 1 , top+margin-1, boxWidth+2, monsterHeight+boxWidth-32+2); // 名称 core.canvas.ui.textAlign='center'; core.fillText('ui', core.status.hero.name, left+margin+boxWidth/2, top+margin+heroHeight+40, '#FFD700', 'bold 22px Verdana'); - core.fillText('ui', "怪物", left+right-margin-boxWidth/2, top+margin+32+40); + core.fillText('ui', "怪物", left+right-margin-boxWidth/2, top+margin+monsterHeight+40); for (var i=0, j=0; i0) @@ -1166,11 +1221,18 @@ ui.prototype.drawBook = function (index) { var enemy = enemys[i]; core.strokeRect('ui', 22, 62 * i + 22, 42, 42, '#DDDDDD', 2); + var cls = 'enemys'; + if (core.isset(core.material.icons.enemy48[enemy.id])) + cls = 'enemy48'; + var height = cls=='enemy48'?48:32; + var animate = cls=='enemy48'?4:2; + // 怪物 core.status.boxAnimateObjs.push({ - 'bgx': 22, 'bgy': 62 * i + 22, 'bgsize': 42, - 'image': core.material.images.enemys, - 'x': 27, 'y': 62 * i + 27, 'icon': core.material.icons.enemys[enemy.id] + 'bgx': 22, 'bgy': 62 * i + 22, 'bgWidth': 42, 'bgHeight': 42, + 'x': 27, 'y': 62 * i + 27, 'height': 32, 'animate': animate, + 'image': core.material.images[cls], + 'pos': core.material.icons[cls][enemy.id] * height }); // 数据 @@ -1558,12 +1620,6 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, heroL if (core.isset(core.floors[floorId].png)) { var png = core.floors[floorId].png; - /* - if (core.isset(core.material.images.pngs[png])) { - core.canvas.ui.drawImage(core.material.images.pngs[png], x, y, size, size); - } - */ - var ratio = size/416; if (typeof png == 'string') { @@ -1596,7 +1652,8 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, heroL if (block.event.id!='none') { var blockIcon = core.material.icons[block.event.cls][block.event.id]; var blockImage = core.material.images[block.event.cls]; - core.canvas[canvas].drawImage(blockImage, 0, blockIcon * 32, 32, 32, x + block.x * persize, y + block.y * persize, persize, persize); + var height = block.event.height || 32; + core.canvas[canvas].drawImage(blockImage, 0, blockIcon * height, 32, height, x + block.x * persize, y + block.y * persize + (persize-persize*height/32), persize, persize * height/32); } } } diff --git a/main.js b/main.js index 292a2e74..2631395d 100644 --- a/main.js +++ b/main.js @@ -59,7 +59,7 @@ function main() { "data","enemys","icons","maps","items","functions" ]; this.images = [ - 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains' + 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains', 'enemy48', 'npc48' ]; this.statusBar = { diff --git a/project/comment.js b/project/comment.js index 9c0a6b06..e1869a3c 100644 --- a/project/comment.js +++ b/project/comment.js @@ -30,7 +30,7 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc = 'defValue':'退化时勇士下降的防御力点数\n$range(thiseval==~~thiseval||thiseval==null)$end', 'damage':'战前扣血的点数\n$range(thiseval==~~thiseval||thiseval==null)$end' }, - "enemys_template" : {'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0}, + "enemys_template" : {'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, "floors" : { 'floor' : { "floorId": "文件名和floorId需要保持完全一致 \n楼层唯一标识符仅能由字母、数字、下划线组成,且不能由数字开头 \n推荐用法:第20层就用MT20,第38层就用MT38,地下6层就用MT_6(用下划线代替负号),隐藏3层用MT3h(h表示隐藏),等等 \n楼层唯一标识符,需要和名字完全一致 \n这里不能更改floorId,请通过另存为来实现\n$range(false)$end", diff --git a/project/data.js b/project/data.js index bcfd57e2..b1402f32 100644 --- a/project/data.js +++ b/project/data.js @@ -131,7 +131,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = 'counterAttack': 0.1, 'purify': 3, 'hatred': 2, - 'animateSpeed': 500, + 'animateSpeed': 300, }, "flags" : { diff --git a/project/enemys.js b/project/enemys.js index 1ee04c40..8be699d0 100644 --- a/project/enemys.js +++ b/project/enemys.js @@ -1,63 +1,67 @@ enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = { - 'greenSlime': {'name': '绿头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 1, 'experience': 1, 'point': 0, 'special': [1,5,7,8]}, - 'redSlime': {'name': '红头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'blackSlime': {'name': '青头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'slimelord': {'name': '怪王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 10, 'experience': 0, 'point': 0, 'special': [1,9]}, - 'bat': {'name': '小蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 2, 'experience': 0, 'point': 0, 'special': 1}, - 'bigBat': {'name': '大蝙蝠', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redBat': {'name': '红蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 5, 'experience': 0, 'point': 0, 'special': 4}, - 'vampire': {'name': '冥灵魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'skeleton': {'name': '骷髅人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'skeletonSoilder': {'name': '骷髅士兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'skeletonCaptain': {'name': '骷髅队长', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'ghostSkeleton': {'name': '冥队长', 'hp': 100, 'atk': 120, 'def': 0, 'money': 8, 'experience': 0, 'point': 0, 'special': 7}, - 'zombie': {'name': '兽人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'zombieKnight': {'name': '兽人武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'rock': {'name': '石头人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 4, 'experience': 0, 'point': 0, 'special': 3}, - 'slimeMan': {'name': '影子战士', 'hp': 100, 'atk': 0, 'def': 0, 'money': 11, 'experience': 0, 'point': 0, 'special': [10,21], 'atkValue': 2, 'defValue': 3}, // 退化怪可以在后面写atkValue和defValue表示退化的数值 - 'bluePriest': {'name': '初级法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 3, 'experience': 0, 'point': 1, 'special': 2}, - 'redPriest': {'name': '高级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'brownWizard': {'name': '初级巫师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 16, 'experience': 0, 'point': 0, 'special': 15, 'value': 100, 'range': 2}, // 领域怪需要加value表示领域伤害的数值;range可选,代表领域伤害的范围;不加默认为1 - 'redWizard': {'name': '高级巫师', 'hp': 1000, 'atk': 1200, 'def': 0, 'money': 160, 'experience': 0, 'point': 0, 'special': 15, 'value': 200, 'zoneSquare': true}, // zoneSquare可选,代表是否九宫格伤害,true为是九宫格伤害,false或不设置为十字伤害 - 'yellowGuard': {'name': '初级卫兵', 'hp': 100, 'atk': 120, 'def': 0, 'money': 10, 'experience': 0, 'point': 0, 'special': 0}, - 'blueGuard': {'name': '中级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redGuard': {'name': '高级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'swordsman': {'name': '双手剑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 6, 'experience': 0, 'point': 0, 'special': [5,23]}, - 'soldier': {'name': '冥战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'yellowKnight': {'name': '金骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redKnight': {'name': '红骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'darkKnight': {'name': '黑骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'blackKing': {'name': '黑衣魔王', 'hp': 1000, 'atk': 500, 'def': 0, 'money': 1000, 'experience': 1000, 'point': 0, 'special': 0, 'bomb': false}, // 加入 'bomb': false 代表该怪物不可被炸弹或圣锤炸掉 - 'yellowKing': {'name': '黄衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'greenKing': {'name': '青衣武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'blueKnight': {'name': '蓝骑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 9, 'experience': 0, 'point': 0, 'special': 8}, - 'goldSlime': {'name': '黄头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'poisonSkeleton': {'name': '紫骷髅', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'poisonBat': {'name': '紫蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 14, 'experience': 0, 'point': 0, 'special': 13}, - 'steelRock': {'name': '铁面人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'skeletonPriest': {'name': '骷髅法师', 'hp': 100, 'atk': 100, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 18, 'value': 20}, - 'skeletonKing': {'name': '骷髅王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'skeletonWizard': {'name': '骷髅巫师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redSkeletonCaption': {'name': '骷髅武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'badHero': {'name': '迷失勇者', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'demon': {'name': '魔神武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'demonPriest': {'name': '魔神法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'goldHornSlime': {'name': '金角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redKing': {'name': '红衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'whiteKing': {'name': '白衣武士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 17, 'experience': 0, 'point': 0, 'special': 16}, - 'blackMagician': {'name': '黑暗大法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 12, 'experience': 0, 'point': 0, 'special': 11, 'value': 1/3, 'add': true, 'bomb': false}, // 吸血怪需要在后面添加value代表吸血比例;添加add: true可以将吸血的伤害加到自身 - 'silverSlime': {'name': '银头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 15, 'experience': 0, 'point': 0, 'special': 14}, - 'swordEmperor': {'name': '剑圣', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'whiteHornSlime': {'name': '尖角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'badPrincess': {'name': '痛苦魔女', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'badFairy': {'name': '黑暗仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'grayPriest': {'name': '中级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'redSwordsman': {'name': '剑王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 7, 'experience': 0, 'point': 0, 'special': 6, 'n': 8}, // 多连击需要在后面指定n代表是几连击 - 'whiteGhost': {'name': '水银战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'poisonZombie': {'name': '绿兽人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 13, 'experience': 0, 'point': 0, 'special': 12}, - 'magicDragon': {'name': '魔龙', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'octopus': {'name': '血影', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'darkFairy': {'name': '仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, - 'greenKnight': {'name': '强盾骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'greenSlime': {'name': '绿头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 1, 'experience': 1, 'point': 0, 'special': [1,5,7,8]}, + 'redSlime': {'name': '红头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'blackSlime': {'name': '青头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'slimelord': {'name': '怪王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 10, 'experience': 0, 'point': 0, 'special': [1,9]}, + 'bat': {'name': '小蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 2, 'experience': 0, 'point': 0, 'special': 1}, + 'bigBat': {'name': '大蝙蝠', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redBat': {'name': '红蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 5, 'experience': 0, 'point': 0, 'special': 4}, + 'vampire': {'name': '冥灵魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'skeleton': {'name': '骷髅人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'skeletonSoilder': {'name': '骷髅士兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'skeletonCaptain': {'name': '骷髅队长', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'ghostSkeleton': {'name': '冥队长', 'hp': 100, 'atk': 120, 'def': 0, 'money': 8, 'experience': 0, 'point': 0, 'special': 7}, + 'zombie': {'name': '兽人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'zombieKnight': {'name': '兽人武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'rock': {'name': '石头人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 4, 'experience': 0, 'point': 0, 'special': 3}, + 'slimeMan': {'name': '影子战士', 'hp': 100, 'atk': 0, 'def': 0, 'money': 11, 'experience': 0, 'point': 0, 'special': [10,21], 'atkValue': 2, 'defValue': 3}, // 退化怪可以在后面写atkValue和defValue表示退化的数值 + 'bluePriest': {'name': '初级法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 3, 'experience': 0, 'point': 1, 'special': 2}, + 'redPriest': {'name': '高级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'brownWizard': {'name': '初级巫师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 16, 'experience': 0, 'point': 0, 'special': 15, 'value': 100, 'range': 2}, // 领域怪需要加value表示领域伤害的数值;range可选,代表领域伤害的范围;不加默认为1 + 'redWizard': {'name': '高级巫师', 'hp': 1000, 'atk': 1200, 'def': 0, 'money': 160, 'experience': 0, 'point': 0, 'special': 15, 'value': 200, 'zoneSquare': true}, // zoneSquare可选,代表是否九宫格伤害,true为是九宫格伤害,false或不设置为十字伤害 + 'yellowGuard': {'name': '初级卫兵', 'hp': 100, 'atk': 120, 'def': 0, 'money': 10, 'experience': 0, 'point': 0, 'special': 0}, + 'blueGuard': {'name': '中级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redGuard': {'name': '高级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'swordsman': {'name': '双手剑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 6, 'experience': 0, 'point': 0, 'special': [5,23]}, + 'soldier': {'name': '冥战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'yellowKnight': {'name': '金骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redKnight': {'name': '红骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'darkKnight': {'name': '黑骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'blackKing': {'name': '黑衣魔王', 'hp': 1000, 'atk': 500, 'def': 0, 'money': 1000, 'experience': 1000, 'point': 0, 'special': 0, 'bomb': false}, // 加入 'bomb': false 代表该怪物不可被炸弹或圣锤炸掉 + 'yellowKing': {'name': '黄衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'greenKing': {'name': '青衣武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'blueKnight': {'name': '蓝骑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 9, 'experience': 0, 'point': 0, 'special': 8}, + 'goldSlime': {'name': '黄头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'poisonSkeleton': {'name': '紫骷髅', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'poisonBat': {'name': '紫蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 14, 'experience': 0, 'point': 0, 'special': 13}, + 'steelRock': {'name': '铁面人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'skeletonPriest': {'name': '骷髅法师', 'hp': 100, 'atk': 100, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 18, 'value': 20}, + 'skeletonKing': {'name': '骷髅王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'skeletonWizard': {'name': '骷髅巫师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redSkeletonCaption': {'name': '骷髅武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'badHero': {'name': '迷失勇者', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'demon': {'name': '魔神武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'demonPriest': {'name': '魔神法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'goldHornSlime': {'name': '金角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redKing': {'name': '红衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'whiteKing': {'name': '白衣武士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 17, 'experience': 0, 'point': 0, 'special': 16}, + 'blackMagician': {'name': '黑暗大法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 12, 'experience': 0, 'point': 0, 'special': 11, 'value': 1/3, 'add': true, 'bomb': false}, // 吸血怪需要在后面添加value代表吸血比例;添加add: true可以将吸血的伤害加到自身 + 'silverSlime': {'name': '银头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 15, 'experience': 0, 'point': 0, 'special': 14}, + 'swordEmperor': {'name': '剑圣', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'whiteHornSlime': {'name': '尖角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'badPrincess': {'name': '痛苦魔女', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'badFairy': {'name': '黑暗仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'grayPriest': {'name': '中级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'redSwordsman': {'name': '剑王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 7, 'experience': 0, 'point': 0, 'special': 6, 'n': 8}, // 多连击需要在后面指定n代表是几连击 + 'whiteGhost': {'name': '水银战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'poisonZombie': {'name': '绿兽人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 13, 'experience': 0, 'point': 0, 'special': 12}, + 'magicDragon': {'name': '魔龙', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'octopus': {'name': '血影', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'darkFairy': {'name': '仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'greenKnight': {'name': '强盾骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'angel': {'name': '天使', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'elemental': {'name': '元素生物', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, + 'steelGuard': {'name': '铁守卫', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 18, 'value': 20}, + 'evilBat': {'name': '邪恶蝙蝠', 'hp': 1000, 'atk': 1, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': [2,3]}, } \ No newline at end of file diff --git a/project/floors/sample0.js b/project/floors/sample0.js index e78b84ac..22feae9b 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -19,13 +19,13 @@ main.floors.sample0 = [0, 246, 0, 246, 0, 20, 0, 3, 58, 59, 60, 61, 41], [219, 0, 0, 0, 219, 20, 0, 3, 57, 26, 62, 63, 40], [20, 20, 125, 20, 20, 20, 0, 3, 53, 54, 55, 56, 39], - [216, 247, 256, 235, 248, 6, 0, 3, 49, 50, 51, 52, 38], + [216, 247, 263, 235, 248, 6, 0, 3, 49, 50, 51, 52, 38], [6, 6, 125, 6, 6, 6, 0, 1, 45, 46, 47, 48, 37], - [224, 254, 212, 232, 204, 5, 0, 1, 31, 32, 34, 33, 36], - [201, 205, 217, 215, 207, 5, 0, 1, 27, 28, 29, 30, 35], + [224, 254, 212, 262, 204, 5, 0, 1, 31, 32, 34, 33, 36], + [201, 261, 217, 215, 207, 5, 263, 1, 27, 28, 29, 30, 35], [5, 5, 125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 25], [0, 0, 237, 0, 0, 0, 45, 1, 1, 1, 121, 1, 1], - [4, 4, 126, 4, 4, 4, 0, 0, 0, 0, 0, 85, 124], + [4, 4, 133, 4, 4, 4, 0, 0, 0, 0, 0, 85, 124], [87, 11, 12, 13, 14, 4, 4, 2, 2, 2, 122, 2, 2], [88, 89, 90, 91, 92, 93, 94, 2, 81, 82, 83, 84, 86], ], @@ -49,9 +49,9 @@ main.floors.sample0 = {"type": "hide", "time": 500} ], "2,10": [ // 守着楼梯、传送门、路障的老人 - "\t[老人,womanMagician]这些是路障、楼梯、传送门。", - "\t[老人,womanMagician]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。", - "\t[老人,womanMagician]楼梯和传送门需要在changeFloor中定义目标楼层和位置,可参见样板里已有的的写法。", + "\t[少女,npc0]这些是路障、楼梯、传送门。", + "\t[少女,npc0]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。", + "\t[少女,npc0]楼梯和传送门需要在changeFloor中定义目标楼层和位置,可参见样板里已有的的写法。", {"type": "hide", "time": 500} ], "2,8": [ // 守着第一批怪物的老人 diff --git a/project/icons.js b/project/icons.js index fbd4a186..21c181d2 100644 --- a/project/icons.js +++ b/project/icons.js @@ -101,6 +101,13 @@ icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = 'blueShop': 10, 'princess': 11 }, + 'npc48': { + 'npc0': 0, + 'npc1': 1, + 'npc2': 2, + 'npc3': 3, + 'npc4': 4, + }, 'enemys': { 'greenSlime': 0, 'redSlime': 1, @@ -163,6 +170,12 @@ icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = 'darkFairy': 58, 'greenKnight': 59, }, + 'enemy48': { + 'angel': 0, + 'elemental': 1, + 'steelGuard': 2, + 'evilBat': 3, + }, 'items': { 'yellowKey': 0, 'blueKey': 1, diff --git a/project/images/animates.png b/project/images/animates.png index c1c1cb1a243a24997132d5bee49bce8e6d15ae15..29707cdbc6711a42a938026f4fb2c5fd59d1f06d 100644 GIT binary patch literal 29813 zcmd43bzD^6*ET%lsI(&8DxyeBN;;Gx(v5UUh@|uo(jX-vHKc@eqcj2|;n4l1JEXgw zbB6D)?)!b;=X1ZG=a1(Pl{s_v*=w(Lt!uA!ZH~c;uVn~sQQd+-AOtUDC6$4Hy&({6 z$PHZJr$^07z~2xI2W6S(kfPr-tH1|ra|w9~2&6Ou@7xdv_d>>kEHd`sC3 z<@mVe?-@l}oMw?}QY6B3TarIoXtOz3G-a6L`4DF$N#Ev%Vi5Q<-H(loQhOj*Gd}&> zV~GkiiK5y{Sg$)ApZ+nd;>x{Dwam3NX|;7^6*U?2UZ}<@pvCXZkVUwL{_h_Wj*sW{ zi59EF(m5R-V&(4EK%Uh@R;aOSA~xRLw7oU9kMP>|bEgoGeYX0H)J(4xQdMC1@FK9K zyI$Y>fk5@8JV(>*+F{gRygVbejrW*5$;b9^PKo?OiKX^FNM_Nu+@)^3 zu{;d-xrEIc)#2g3AF5mDXyVXi>tEE|hEt!p)qbPpoQEtKf9O@vEvWO_+VwKc>q*lX-r6XoQh!wr8% zC&={443wX~DbBTc7OO<@QgQT`4xjgn$?qTDm*YY7T4!xtZ`vwdrI*C(5T^FPkMeRl ziL3IL`v)&~Y|rub>2DRM(zJxNZ&|XB!ddEAL7T|e#7L*^3bQx;=4fh`qPRu$#~*c- za&_iNAYA{auSFIvY#ztbe)J#Na zgLf~Sab5F!sy)Vc%;G2)eBMUxvXsuE1gk}wmp#Q{)*beT5ly1(N+m}K>aA##LWi}3 zONaSK8ubwEm1wDm2M+q*aeF?jPQG0FWT|;UP{Qju&`11^=j?R44Tpm1N8!f$)nj(Z zEv9=H{dKCT>62wwZS3BBTva6F5eGk*Ew_x%(k?U`AJiamdfQ{8Hf>A>pHYnIQFq}a zXuI^7zbs(;<<>E*yZ7a`72XnFTH6$xKPr987ImTD7SSZ9OfPo?$F zzc;Vcbs=w#+G{WL|H2W!*NI%>+v~s39|C>wj|te@n#pHwOG%ZEbn^!k827kkj9M*W zLEk{gW+}&Bn`(4d+7o6kX-HS8jNNr8OrFWbQ*>`ID;pL(aJ#DAVSh2K{q2aU5u+kV zo6$;f?~PD(bS=jlzol=BdKZ|-KP#WVV=b<~3f1*yESu=G+7i=;kV?Aw@w&)kL5?Qj zwUF;q;R_hiQS#vx^y?qw2d6sr?V{*?tOocMfbc{qZ5f!XyP~E~$We$Qp9rr7Rf<)s zf|FOll@GMGMiZ?>Va7K07#@b&8@(-CW_l`DuS6k>RTiJa1{FEd7plqQ373 zcfbVD6F=&&sL3JWEcKUF4z?H7?B2Gis!0>wxgR*o>e=u)#1YnbWuJK0gN=&6*y3w- z^dEf2>%Hp|{?j=31PF<$bDJ*fvZAGzsmZgraya&(U9fNc)uc=OeXA6eVgMEjwQD%N z&*PuCJ^6Ch&uh^jx2(?nLA7u=~KY_q_L4JcJ?OXF&k6;D-AmgMPka;_@(S! z{KdEn4rh#t;L`A3uYze_C3pG>=w`<$TeB1Zk)kkb+k2T)&B()XP4=e27AsK|Bbyh) z&#IOZQJ*z+IQ1cHhwmPF5PHJh|6D!x!q$s+>(#4318uw~wOkMHruRQ}EzIYWhicu_X2T~B^OkR~;FOUo~DtG_n3+jEubsXp7$ z8hO*hqPzAwuA3M73z+y(f2r%aU!7p4G4xXxG+R+YYL+j%aC#5k-6x6+v$o6v62U6t zQ1oj===lxZqy|^+vik5aH|RYbl)K*k9C=Dp4!x|0NmHk%(N4DRfzbz8+;E(2+t-ad zhVCfwu)I~Pi0Q3ki!Rjj*X=Xf3$CwKV^{TB1-l!W1moa9R~d+zo@W$QaVo?L_Mb0Wv^Ss(wWSf%L((>x5g zte0y#!+TR_5x-39_l;i3clV7l9%%(o0E67DzKpFamJt3lYcx>*jG?Jy?srHD=c4)-tkUpyyItB!N6CzSfbbA(Lp(bDl@mTj}6_%itc zKlk|Iv~()r@X6}hp|LERgBxwg*H200rF9qr z-olaH?YXw%=3jU_D1OJg9~)%DLsOfQK%2OS&+r5(yOq9~zAJ_) zxpfKt773j@$4$czu++6S6_?+!`NB6;@^&qG-eaI+0kD+o>sQ(0KvTwtnZa7c;Gkx` z3n}YH3|%`;6N$|Xl*Bvi*Qn9*N9}zS@|odm#{KG>9_;Jcng7Y_z$wR`^){4 z!(aopMJv&}b9I2ptmGz-fa^B6;z{PxHEgV&?^oV#e+M-#czQG#~F=3;=U zo|WC3PAtFcD>>$B#cAqTKjAnNunAgPeI1+e>9gvlg!Ze$zM+oVWxrfC_=*?e}u**@s_+v!q8)#k~934Woe zCE&~-L2ObEtnV&yEpCNDv#j1>@)b%`zqyknNF{QMBBsl2)xUlH+s(7`hNzw1ZEL`x z#h^o^HkqnOM`2?~O_w9@8Z$wtWq5vgdjqAFCg{ZqdgVKZD=CK@ldgN+Ycq3 z86jPjt>Gl7MnV;du_n=M#j>U%3_BZM=-F^iPxO5BSfXj0`9G~a>Yf;Vda22_V8W?h zh+be3V;kzT?jf#)-iy)Y&`8r|M(;|DM|rl184X&z&Y8A^2Cu-ShQ$~k3}&G;za*i6 zEKC$2$kZPG?m`z9p6Ysxq^-k9R157JBFd#Sa_~vBnuzJy^doQ(FKSEnT&pdJ*9*(b zE71)wBdaKljNz(?%d02!UxKCTDri6R!g?xoNO0qOdACP2+l6ZTXoW}zZ5$8|shAH2 z@_a6OuUA|YU8*8u`ZT&G^#U_~IRLPM<5a-0_JOQd`6?O)b1hFSBrvkLhILEo=@O;W zQ$Az+;a&|qq|n!WAPcKMSMMV%WBA1%-`_M8*J}NPk#d1*GoQFUpBz@I_3?C|iuF1q zb|Ob9giIqNNYFtt*A7}`TNW50sl)hJOsJGEOR>uZvmU=WF* zmBDYI!gZ$&VeaS&9o@m5N&60!)QL?oetId0yMT-`PO%lb2z?`i_NHJK^Dr@;WWN^j z7Yi3FI*Af#Hm4Ht7(%2+X_U<#f3&g@H(*cYF12Zs6lpX-=ZUr^fQH=M3K}NpvAz!xAI{ zA!o~$%Q*4GeMk7^r_b^Ah8+BvkMi+<77I4@0KQ3TWGxrot&VjKftw^zfQ*PSk%}uya$sr_kJMa2K!p72ZfNXpQ3fjhcd^VPBDAikNQvU<>~nD*Ca^aA_TSjJwPYSq4$k>J^=vO zPleiw5qk_e&xO^2i(psJw6SXShkkE%t7%HFn}2*WswAcymYnA$3xD zK!dh`?VDP7A5o);&pF4VTBjbt+ew&gvv(rkHpC7)H(JEW1j@pZ(oxU)SpjK6P4FjbuYu>#GEwcr(=P`Qgs2%k2D}}WAVWECu-TooE zcxqQhp09Ozfw#Fp9*sM$($$l4 zihZB3s#-0bx6hbC>?!dEd%OnkZ`QW%Pvt{LGg+TNJ%~&aCOq(|Dj&s-_v*`0GacU> zTW_R-129e6Rb(R5$>(HV&Ub}m$a(@t^q~C)4B_-6i85gVdFXPmaIb?u{z?1wCeO@~ zlnAb*0uC~M?hw}sKjgqwU~c2rtP~#$uZ4ygE>K%$~S-arH4R8##vOH zd0;s++v{yoTGDn^r|D%-$c+^D>1oG2_65dEQM=I1v z+6mtsOEap({}bzh*3trhK#F6eo&OVZCcCC0aIUh(wm;uqEIQZ^N6sG(VvhBbqcYVy z(xxGit2sZ{%XNKQ;tr({j&8p~{;O>RYIshT#(zSams{v~@h@2!$l3ftWJT1AVRXn^ zGs;9d5GMYo`$Io3CX;zB3UbMoy2>Nn0QhpU=Q@3~g?P~C`StUsRR{M-ex%*MB;Z5` zkBirJY%rO3f2hSn&-_nly1L9dK@+UM*&qUD<*A*4$H0A=_O|T>_vrf`=PBmRA0S95 zR0fm++H9A`G-8+I-GNnHG(S3Oxd08p41qF5GCF zY(=q(1`6H3VaLU5mx89A$gYVec00nBP8IKPZ!i14lJ2j;p7oASIW^u4l@PJ{yG&#* zasV?F?=Z4*_p1;(t7~$c?#L$)G5;!kPJg%OdFGsJ@1R2u*Q?@7-7|2V;$i8$Y_TBh zz@5HQsHGS}VQO#tZM>{kxem#s|0mCOEI*|XO*Wa9(aVB@Rx5>4dtW`PUWi_2!8C*$ zn_^k*sG>ZBQgWJsO7~*d@+^+l@imGUy<%&5-DNbRAxq7u`_RZ%nu0v>?vYV7=WJ{r zq(6&r+D!6UfUK0qD zTFit(56Bo=W~d6Sxj9#W$gbuUDHO+K@B>A4d0psN`B&gHj|G7O zeWq3k+27ghsWLXqCvZ{SOY#=ZIm`AF!A++{x~sj#hN}}h7CFh+$5qy8IVpvc5hsY3 z5qZIgkClYJwG`E{s5b%q4%%Q}V`h&cx}+C#!Ms`wg>Ub-OBQ%$(Rv1+KH{|vPwY6Q z_?X8VrLreYq0$xYDq`tmfOcbx%vZ$-%l3^xErps^#!=TZ=-Mgt9l{KBbyKbs`xtM1j z;wLfVG^*u%syYQVYI?&z72#t!HQjbqv~mA5;yIjcec>Q?NJ)?23HEckCrA+@6g1eR z;=t}H)VgD#R1}wSw|J<+Wa@^}t3uPlIskauAy1z0b9?eHP2=`_OLU{hmY=-wq>6yj zj~rs_EzS2d;(+Uhv86V*?MDEroxlQH*~Ry$(@1tPpTdNw5sUb~X?o800?xlL+GtEz z^Duz-Pfd3WB{E$M){%I0C)E!B0$JXPr%X}r#p#D<2X#+0*U80=DAZo-EYU>+wqq~R zDG$hB?AMVbWU6;*gW;+m4Ugn6JNYdBy2>{T*1D(V>{VzS5i0pC)*;*4f^OZI`1d8u zQk(ssR^6+CEc;r>nrS`eB!BEyr;IAwYhw{*W))Q4`^^ z*VByRSm=q3I!H-G@~?kcR5AJ9j@Vst=B+AAq&-i-+U5H1;rgo)gPR(*GCNA@%3k+0 zI>c-n$=vb!yP3`YBER>TLE$3cW5ZYSa!cX88rO3q+e*9j!Ysp_1mt}LDl%kxNr~N& zPsuhZ?{!pl`O_?8QJ~`okmX;=btI>jTC5=aW-uo`u%1HA0$rB<>r%z)4_9B?+xUh{ z=zDD1E6M1LJN?^4`dvbx&qi@pjtLY)Y%qIItOuUx-I640n#!Kz% zfL!s5UoN^_etP`d`M5T?g2O)4Utm9ner{pNv0MH}5$Lh7ytlvp%_IT?at88#{Cuw0 zu$NNCB3%wWq6|9Y{(gnE2b-Ld8tP6f6EZb=GNJ8 z>wu53?dB5>ksewb@s6cVwj@YHnc8u}9%E1ZmW0H(ZtC>nxJs}L;*@%+N7z9WQoXqJ z?N)=H^n_VWPnz0Pf%#SYS21*UAnY;|RmJ%KiQUZXG~#c!aVp>0jPuAwy)`I5FtM&w za|R=veoT~mQ}?m$$J^z~Ae>$jY6M;gSm+Uu8WFVyEY}lZPIJERQc$;2zo1STZ$mFv zZNT?m^b+3EK&|;I93P_N6_GYteoj*-y+zN}30ggxh^%$Jho5H}4)Q=}&vs{!9{gR} z$!jSr8~B-zdE@ShbGohrYvy&JUI+pfGgcNvfnHaC+IdK9G5D2MkBZLY{kIykt8?a^ zhPSBV*a~hU&%h-x3smK$hJ{hTsM8zcoUZG`Vrf?x)!I}7O=@fDhx@9{4ELEaor%1>O(F$KECah8Snd$i%{Mh&INBu(7q!G&@@-&lP`cB9U>g3 zKR85vu4Y!rQ}mKYtL=&UXMw8PMQ@&iH8<+eYK`&JI?2C?5|RyBGcSV@%HF7(&!gZ+P29MC-C*fa9&-XmXY zZU8hj2q{KCAgO&W6>Q&bm~4fzUNF)pg1tyWVw$nMrXi8wd3yOjBmm!fF56$3@|nbh znC@?^urL{6JCS*X?T{~^qIUXU6g9Sm5@296O{Mk{VCx2fV8wFAjQpTPlVbRz5ey%_ zukt>0fB=!^V_u^c0gWwfVs>v!Db(w-{M^{Kt-rA~WR z;rPk5xFzZ7NDN98J```zo%|@Pdn?ajwz%-|9D{jZC7_`hxAEk0Mfz2R1ur+C#|&dX zk1$8>y!w}hHk#BJgdU=4FyfujRMByZ(uR_n^`G_IiU(~;>n%_oyw==^@0^TLrEtY9c&PyE(P|G65*4 z8gP=m9&b#d(aalcAq50MRgrIF2EWl74}5~95uuw2KzN-TAQK#F2V~w}?XQ6UDnmz= z4I-FW1~9F#`tJ&jTHIbEzT;LDnd!|1syr5T4T&W=soZo_sepcR4XNBWKjSdnSxU=@ zBc)(V(4Tkh2|t4p+F_{$mNQr$OPn$C8b(aLy=sBi#w?CTpj*~|ifH^(5XCY@AxDB6 ze4mXEV5ayh4D+`H=ka^43+B;1&IGyjG7uVg>j~rQiWVq_RJ-AnMvNKnN-J?H)y4hv z@b>nXV!{K`7Zh^F+FrH(93h%w($pO-V7cXM5+Q2M7`Y6V)zla+F_b9}f|It!*6!LsnSZ${O^e zw`L#2(NbZKlFP7_Cen&)zi((6>>s`|N5^9%N0$erSH1$o)~EElX>thJrpg8!4a3-ieZchvY zAp$yO(AYouKV-8F0@pDyOIBM5sjmn=3)UH~qz)UMdnYfYarupd92<>mkzuZLJgqg= z9>C?_vUT%RBy7EA2e;SPQLz#uuMziavYqNDwTrhfEjFNE#sey;n34G}P%dV3f^IFe z((RKF)H7E8X^k3!BT>|@`L+wAPu(<30#1x7k-#4}Qh)=s1mKD01em1}L7#*;KtFz5 zR_I)dY(0wO@P1q(L!v1`+EU5KK9aAIr~uOLlDOVs zfM+e`lMt*ORtkXaB6(aEP_eEn^kd%WPN;-d`;KGQcq=_0I@d6k0Rb{Gu%1z0iGk}@ z7DlQ_CPtpv{+r8f)0lmFPN{~?!+>2iImKB!qQldF!_|OyJ{&%8S z(PPhX#uL(^w4uX~0QQ~drsptffSl`p>X+5{qxL$VgK|uU)f3Rh#uWqV(WfVN$5yo1 z^T*A5b8p!e0AKBs#s_W%y!r*Hywm1at>yl0>R&cW zpBFg~YhY}oxzCj=OomA?#f?Rk1iqdp|I6Wp`JvKpszK-uFY_W&%hIXRnCOdt5>9xB zwg8dvGG3Y#{(}v{n!W~gZ#@VhHR~-a5}{vyL#M30(hd%>0wt|_dvlatVM>lKitO0b zI6@-2aGuM!{z^&JB6t5;4m{|mned?>O?OIYb`;qQ*K`6h`%2^H2QHGwiL}Ayqpb?i z*-i1aFVxP%`aWwG#ay{vZarUi7d@E{D$M0a?=@tv;kX;X!vdG16&!TvgcW{`;0$N% zL=klhT8J-6$QrWQ%i<@hW6z30i;qtXdpjoX;Tk`7c-KWuAmb!Tv^XyOWihu^q%{yV z3Ny=dOBW4_Itoe}?Zo1)?!l<4sD5AGq%Gd#ciejyt9XI<^I$wK+l`}!o7^3KdiLUk z`U}ms;?9`|C<^Od*k0TvrJbvxN*g#&jB(>!kJ3*SgbM5A>op-ngM9AVy@an)a*s+L za2NY0`Exe(K&(y{N(7Wc!;(wQjVI3}+u9vpuFS~Ms*}Y!B+$?I25=QN`fAe_L|vRD zS9F~W{!aa2Kis7K6xYbNKxWU#bn4ZFPK_2zEu~nYVDZq9+Z#ioIL3sqwx#DWlV=Me z=h3fi(g!e~%Je;?yx9NZx{XhZC=KjBWmTk|XZ-LB#c7F&6PpxAMmR~Heb~BWxv3`blk?!Bz;+bopxAC^ zSe3`HE)bgbk8H#0m;3mXdy3NacQ!7{pR68iGZ^c3mUO(-S^IVS;TR8@({}kT zp2sI`uS!E&e#bdH?o0AEGm4+#{$fd>CUIywsq-9a(b9=&<gP{psFPxuzA+V|20C;aSJi894AZ7I^U#DvHJ-7ph*J0 zBCK1F?J4;Vyf*WYho0t_pA)L2wRxv0RJaXkKjGdutmp9w?>$bF#5QMVA|W}esc=nM zHP#dRdi=>G-TA*X?-Yh%>0m(9ix;U5W)8LwZkyEp%AiO^_S6)*{Glv0L9l|y6o$u>}3z4OkhiiKdoxvy^K_=A>s zCyQ50%?^2AD$GY0CWrCV<%U8x5Ju&P>NbhClHEhzj0+N4QKK=g2E)RR9%c?SEEha& zsodc&1TQ2A?-f69|2~UY05CQ`Sz_w(U>(L0T#z}+Tz_h3o97mF;Y2u@B)nV(;`LT@ ziRS&l4yMYRqOcskF|kcUjq`pzYBSw&6Z+s6B46eizAkD|A8VfA6w=Ji?~zmI-Rt*3 z>a#x&F$HL(wla_#Y=h{mB8LdE8Ur=)GKss_ zNbm`@X1++S81L{!;(C8;x#{>9Z0;!Z55~{u4YQ z2Y#)h{89UB3eVOAg!#HX4@r^|=?^`=(yOyJLiob8cAGgiXG29UB*snZBWo>WbdUh| zQXEN#F(3}VY!;{&ki8?bw_ZAa-+vQ(LTvB2k=IDjJ(Mvg;ua&>?@y1Rrr zrxq4tU|2=26ko0GT7Me-Mxeej7`NM>yuc!~x99Bgj)41DdIz2TdNJfMEYGP#dg(VR zc=E$|_Ht1&Z!gs9>(A^kR|%wAJR+tZ*dyAFI12n~yKGEJ4A}1r_67|yZ{t&+8Xq*j zn5M81Few^bT$T)%5S-V7m87>24jRPF}R8b40Y5hnj5PHUXc zv1m#W9dmNr-GxDqd|Cw1$weuX^kH?4Ako}c&!U^PZ|b|PX3Zq5EZX>8`3#!xrz(lt zWYd}&Us&K}+=zxLJ&T0miliDEU)*INa}@kKW)-#(c-(sr@pFO4D!YE^<0L@BA_haP zQuv+3&%_??YT0Dc<)jToEEpD_z-c<6RD_I4vs7b)vW>%60;H|4ca`tIMQPttUoZCN zHR!SXsd2R3ro9`I9QekOxr0tfZV2z7Pxo_az^k5!@g8y%5O4}2D`vCSFHBHEi7WD! zY~rzh76SUTuT64TH-VVmGT`AO%x%?h9nO|eBBTbMa%v!j52Q~3N-h%7L*{D0!>mvK zk}WQxerfX2v`B>5W#vFQ>T65tML{7dRrIWTx$`nOD=>W79O22lK6Q0jjG%K{iRall z@8&_7G@7S+7X3t`5U_$`Gtu+yj&hMX%@kr}<>=|~C7PM+>ndU@3^S7V4?1aG-dYb?Hp3yS27ex29&#leKwltA++4Kjf1rSzV$FmH30C@)CMH22s1t!Wtc4P2Q z<$S7f7wRBvZx*AqD8Y5SI@<~0rGKw|5JJzn&*-k|cULv&&)-5Ry%t-^5Y9-~l{y1~_a0KYjj?tHtiqSa zdy9&$oIMeu7tcgD#jFC)YEf0zrMuGv+fFUTI79O@B!1){xeL_WeF}SN-oxl_u|w2{ ze2zaY9|GmF!- zw@jah4gJom^YEf>_42`Ry2vDiSEN86Ay$5#56dDp3glWxum<>B6+#=uve@<}C=Nr< zFW3<`w$EFMJlKio{TAPI_3k0O!{LG-e=ey_<4;{}M$ku}#y1V0*x;W@?Gp({itKgU zE@8|;=|s6GJSP5}(??L9E$L(LVN_V#USbjNAIo7uE1l2=Fd8tNCnrnlcMsiQ&+;NJPs~h2bB_X4q{y4Oui?Mj@ z-Vu6c95JQi`>XKW*=Fz4RagD-`GJ>W=Px=&YOV(R1FK#x?4fiPz{i}Es9oxayDiNK zND_vh4m(iY5B%llO+*w~x_|KLz$0j43B0Rk`?pxGfOrE_7bN`nvtdc$NdCDN&eH6& zFSo^-W+Gg!O*$VD^K#pMxtQj-E!5Qg)Zo{lXg`mrp^)MqSH;migQVqlT!gb13YIFC7qnTEbMA~kfzdW|We-IpoEMws zDUm`?YHRn7?Ab4)^xp;;b;G#D3TTjLQ`2>wCt(6K_<<1@se2P#)`3e0qnES(h9$0( z<4f+}U6-uL!jq}3j4H$^4}(j5I6o~le?J1B?$c&O%yQ!jN~3v#fah5q_7H0dkK*U_ z8AFbtRGn#oY_in&@w>?#3+_F(9VN8(ck(2N31;Yxw~06+&A(Dd+`YQ*Ue#<>Tsq6T z*$kx?L>jJ%b(h#haxb*(p)G-usd#NHh~Qa=2yan~9`|-6iZmYGUTww5v%YbZIQ_}+ z*^KmD`|e$-Io@_ASBH~Zs%9ykFJ+I@Tw|q7HtxZnF}viQpI{!R$?gNkin^?V3!Cr~ zr3`~}0>oA3>oOS(mrc`@yQvyy?@TddE^YRf@gQq#lANBgDR_{ixow2i$pv)jN@dsM z4uZdNX(-s2IO38eS`^uQ5d}{=Kj9ZA!!C~M-WQRfjJASQvQCF$M6sN5IGKEMS|FM) zN)bDc7r&5@v{aUV#q?s|?@we zy-Z`oyNVsX;E4A(D*g8DmBrdp_rDdUg3Lfni%(=vNYYVE0*>~9E{U~O!ZJUdvQLP% zpuiz6-XxhYEH(Zk8$*z#+)7}GRIF+*6LT@SB^5c{0#kP*o`7hvK|iM`Yo0dPMqO0&T~44Tk@VqNApt?idzV^rN#SBR52eXff15zZpx^Pp}?}dLCq+-{o29h zcPMb)3QE!}`Mg()_fxH^EOStUGFe^#*<_VM#MR&8pf?G?sd zCsrs`_4_C6!xvI3_Nw}LavQR$7pZ=Uyj`}*G$%$a@{9LSu%5P0O;^}g0%K2i9EMcm;9*?l_W-cg`t5Cl>^b#ar`Lv{8Z7@ z{G**gv!F?pgZ&-V`UsgM4~%2+d^?-Ph6trsil!C8)>f=Xo?%A5k2B>>baZOBj7jgP zQra+0jCXp{XC^S19todsx8}&uxh{NEJGne+Y;?ex%|VT_(z~ssXYBDEUkMARqO)ao zr-PmY>ZgXdw>z_ag>y^zTk$yKr$6aOeCV9Oq490R);zhwf);p1D2N`t)C-{^(Xm0d zNsN-kYe51oC0(idc&US{{yyF4BzS*WqI&rAjzYyg@2;W*4c}28&s#7Z1hDBCh^UI+ zA`jek^AJV~?E{tTAN;}nSrXdnN7FL?klL1vq1+-?#d9*U|G2 zK92&4S~MD83UkCxx0mR@_wM_ai0GH4`*rU9V`YBOXm}yY`XvZw5(1)yhl+vS<^}so zu8y3r8dEg--G`#jD-5P9TL_^|@HPK1x9rP?Ca-lc8=nW>iSi3~e0e!fa_DB^P2;%X!l`bvg&ZoelaJLWeXc8}@R|`_^ETHnZO@JqI;EZ$1LQ>@`y) zR-dxm=)*sVESDheSy!w94vFYlQ+M*x!XI87eFll4M3yWp!%}|Lz(S!+DVl4vq#gU< zz-3{Y9ezR*G@@aGFL=3`{Oi$?d-$x4#Lu*D70*(!U47u&4-hI}ZOFmP*!9iu8#<)^ z2^9yfs_4|rKSzpjz+JJ#^KS7}@o|~sVW(d<`OwA7ziD5|} zY0Npnryr*|sqR5cLq;u#sdz{?L4FGNzVLH?hnSRb*;j8<*fhndbMv9pZU&hMQPho@?e&?5YD z!rHDa7pzIz1ScfV6r}e}NZhVCHqHCZ5{BY8-g!cpLZh=~E@tr1K5eVr&JdccY>}B} zA1PSBL?ZC$*BBx;txma5G)a;w9HC4rO|Mj&d;-1)djU_jqOl)VJ7;nnD@=dJup)wd z6rTxO#-Q$(!~u*IcqM}T-PM=A=PlpExBmDfXAQh0i?o9M>34ngTTJOgQ~G*|kP{v) z;|wZ>(z5YB!D!AN?Ufs}QB|C@&bA9EG?NY}EI?%Z`eaeWnDu6p?w7Oc}_cc~XrGqLk+39ZMjW^C#D@BCg@EK|pN!*C+I~P}aU7G@)Dm7DG+qh>B*kYhk-t+zC zCE(TXa(&8E*q>*M4e+M|^wt0R@T-KG@G*mrXw;jW-@D;MXdeJZ|9F47T}@F41|BJ) zJl+^g3mMQ%NHJw;xu-KU}0Dj-vZ#L~L>;3{R&B7kS=3f|aZw zi&P$lC+4R8zdMiQ`v%#F=S3TbsLczoB?}@nwMnIO%iREr6bYiG+Y7S}m0%AjlKkkW zM0AvB#yHr&_|kQg?s9hMLb5@!J;s{N`LchS{noUiMBNJyE}o9n-^@B>_Ewvctsr)~ zg&8fvJG+K8rSj4>4=+2VeIAO^td(o;jITUA`SNWBe#{a;fTZ!ZckDqor>dW5Ef2 zxT$Fc@z{_6bE7{3J3O;sk-u84`TS6T0KbLVlAuruFr{)==YL~~Tz{tpW0{UGnb++M zmp4zV*JV`C9{_$N9%GZh6T7KY$DTNGaPRSDG~lM7jkq*_#77oA@}A98lDqI1fO{pK z<$3}CO8SK$8wuksS)0+1V*))KguA#J2&}{yc-)Ll2C$Iz%)c)~MGqiMz-X7GY`{XS z5DP`Q7$_NSGT`R5c!oV~@REUCKmB(&SlI&ozxH73Clj!WZNl0?bo09Edb9e{A+y=N z`@u~+16F$<#LF!0mP-e4)DHIIjx1JtF^F@MF`a9;JV3TCTcYb)0hJ)X`}aI0E3a{t z@MyvCQ!V5rh`w!TivrK;f!si+g<;`2*`@b$XqKNweosHJdQDbvQN0*aSo){L!i8aE zs*NTf)|zJ>2@=0&6Fx^TGp^HimWU-og6&sBYdPq$ugZJq68o5D2rD5<)@pnbD@8_T4w% zlTAA+ijVSxRNA2c60Lyz_@Bf4e+(`VG7W33`}>pmTr-0labuV6}Nd z5?IKH%s(!BtYJw0X9hD9JrNQB+&sh~u~Z2rbyHlHnB$c-7<=KM%G^NOUtlTb1DzB5 zVgEvun7(2=te2}(siSueA13A@e4lTB($9mTn&uDThL#b zh+ZC#z)o8BS-#)hrN2Q;@OZBVa@G_sVYtoE7@icTqm= zlr2ASK~9k|DJNZK2pMVnFCQyQHAU%H`uBsZsrQo1N^>ik8-jfkh&x7 zMkgL=as&6uv_c#J;+h-Re1afyd<)DVXGaKdK%EsaklO$8ak>iwK24M@W8&aHkAyw~k z_k;P|35@-uhH8b32FDrgkB%V#?h>n)E zb;9|ZMs7BesYdw8;Oh~0mR#H0MBvI&1JP82&OJ+=-eVAJJNH60((m7Sr%zPTktEK6 ziSBBIg97M(74Pk?y$)>G;5!oDf4s<#F~>=Exny48{CaT_)D-dXbJyvejx#rfWltm@ zE>%mPnwY<#YM@JKp!9lve!*z-1?+NiV~Jed96gSQ$y)0j z^vqmLUmi2&!EaipfHzBCHDQefithUei=Q{OKE(C2ok+QwS2CVH4>b_=j@#^kLwxDr zZ)eh~t~Cj4{QFmr%-su)D^}qf&0@H##Dc1XbRTK;Dvv)ZsUt^&OXgWU(Jhp(pG89; zTy!gzVo9OqDlM~EF;;4NF>+)h%KiF#1dB)XzS!WlfjIE{sE;;x-e%KZX3bko!Yx-} zIuCYFmf6tV&t=f#D>eoZhxas0fzqDqf&|g63ldF%P^9LmTZfzIPaCw_YUZ*`uS&z9 zA7$z-?a|3OI&7tOS%A5>o$@M}-e6m%t`P0N%XNA&5tnRxMIjej12Za4Pw@+PnnPh0 z+du_juU?5j*r*UFuCQR;;I?ncz4U@pUPv>)a3sS%Hx##|4wZ@kyVBZ~nkIM+5UvxM#mGMsM!2h}MBNhkUcX2>+tBITU z)tuQO)*-F%qQxWnge!$#d-CU>Pk4)8lYVsBmxj%_a78-TEj;Na& zSo_y+6ce1wQ$N6}Ot6l*E%93?aX#yU;90Ow2E(&m+xV+g`1VNS73ofM51KJ{midRBII4D?mcTJL1b&Vte7XdAfsvN zAB2sx;vSS;>ysIPPQT8>^W%7zHj^U;J{a_6xh$86`SwFk17C#oTNxKx z7qv-q!R5MNW+s;}Toz22Ms^1^GmchJaLeus>WZFWWrfGHwf$fN@wYAIfMW9OqZ1u#-$P$8RD`=NtRAlZB|c{G?W^1NzzE{I>n}t?)#*FGDjQ3=^)4$TexTJ3K+uTf z%jS-aaVY}c5D`_Ok2)1utTrAc)MmlkpoT2|KM0J9o-b^>c%$9>e@{rG(oUnN;;il; zWu;Vyr%DLNPeXW(3tYawTKqmTG~xCo=QN*fQRebsH=Z9tFhueHtv8;TJnr~goZK&) z;ujD1bPMe}nTsWl=*>wO7WTiAr-x#P%_l6&6k&afRH>595on`R|J4=f51LJ&#iKc0x3gOCC?3FY$jU zVmRNYbYJY!zuf&#?Xk3jj`jb%_83=Pmz`Z46?ki|q&6ZI-4r)5ZbMvqUF2a!)AKKZ zyy8wRdeg`XRH^gEg(Ve$b3~8BDp(`;j5$~&yb)W; zfMMBT93S)^Rpr(*%3deyse<+94}?7pjj5+?7?mBDICwdiR(F&4ck5Ck-YY>5;)YYT zIoCXNPGE)U4V{0M-j!W~PD;_|kd-q>n5cmJSEz*xgP4zyiKuaQL}#WSWy|&H;P|(= zg&dr-qPxxlkV_Q~lR?&lBb>wQ^D&|1AR6l|m0kLXk`Y)^7dl7r@V|vp+z&RtJl_2_ zZcySuyI%74EGoj|elZML6IPEF8JnAKGx1FZ+wie;d0v%`>&T`}VE+F%@ar5bIJMhV^HR7!_$Xdx8Z*}P4;aKuc+ zTJ}J#$d8#MXG=wXj`Er(X3~BHrQ1y(rGz!_4&WOhv&LPt$ZZ|KENt=>|EpYvFreG-k6nX9cLL@^#?{n-ScuYgO!Q-toMx=Y^+d+y*a zCF~RYnYn%Eg`TmC4lx(Yo~r%^c!H&WN$VYuMkZdbyy)hBuZ2vCk=e$RE*5=6@K|gY z)uj*odT;)70upa`ka{K`nj; z!Nf$B8tpdjSm+Q$K~gV2BIFNT!)#q=5@Q?vP*~CWlJdae`uvH6Kq?Q~D^*Fo#`Dn% zEs;~GlXJ;(_s3ZJHScN#Zh8hp+EM(FuB41XEB}geQGTBs<7Y;}SukNuy*1G^#0Wvv zHOB`BlxMQ~d#mMdSiz00H(e5IUQbL-Pe%D`VD|oQLxQoj8Xx*ZEth~4#SkDlZ2clu zhOZA}(C8l^ZxWBYAJ}CM_paC}%XXp-nd$oByk}?~ZGt>Glu3NkA+}k)kvogxElk5)cs;5wU@Sgrb5} zsZtU`QHqGD2uMu?r3grqrjXD(M0z!$cMOm~NJzPhPx-y?d++DozkYx1oH?_zXU=~2 zJ7;EgXElDAN#@dW?*5NmQ16Zh(KUyH`-9~9_FT;6^KQVRSB9NV?(Pix$StS*OF}fO zC9jJ4-HvB;4}WhKFzYRXQ?o4Vb67fh1N(dNTVLQ|2!aDW9_Nc!58xh1B$rzq{XbX6 zBIh?G(2rgoz`e`0qI?UmgaCLi`$TWW0z*V@^apW!)0z^6*aiEowp*`sHrtc6Gh#;+ zZ)$G!D?4vQ>OMkUogKbenBR7k_TGAMhdZa(wD4q6tlj6UK1R%rS>T2K>-I$SEggjR zZQ^upmvB|~|JpfanqWY1nSsi3PeO~5Le8nt3+4Z7=k)s2j^#vc2nP>XQsc?*L}ZIJ zi}r{^8KZ=&;_HE%=|9X*wb?ey!-K?+Q!r5HzHhkGJ znsPw>q(Ikyl_2FFkU$YdO)?fO@?NDwHCwQvhn_PJm<8YvDkLe+rqFT=RcuJ&2ixYI z11g>4*xkg7$bfNe=?4FV1^;fy2{8f%h9E3X1SLUg1z>dPv$D~V0IuJ_R6)^I`_<;( zAivWK1cEn3`crpVL|W8lo*FAqM54z*YKNGGqGg9h`g1h1=U9oXHTSQ8P zQ<%f5Fo5EA|9?bN49F`-6NuO6psKaqBxxAiJ`y2;87pw&B+GS?RSEhxaeHqiiQd9B z?9ZHLU(rS`vs=AQCbeSkGd`ok!@Pv=jKqg?U2OF^JX%!3@QqG!YmlU0-1hsH!sMfmur?O2H zwDsU)p+_!TXBU*h-r0pzVc@=jdN8rZV3|=$kB|)!a4>LsA2+Bz;w5=+qBuxHku@#= z>TUyyN<-P7;(;6S*VQCNZ7TjO{`+bkY`$avp(Ip-5^aV+s=uvwzaMOTO1xHH3^;Dw zqd`P%1eQSMXzO4VKS9R4K#{yzW5P?PZ*rN*s%?Sb6-g-B07@o|ZE*)p@B~flR9mB{ z2)kI(mN&>ry0%q*Pg5iqxqgIusug=ZNXPqr)WV3OV%Gy7U=HzS;VY%Hj!Of3XSq#k zBr}ZHXB^V$eM*{-ALYrm=bkAY5T3o2JmM7T`A3(FHr;jz41<7JK9>bRU2u!MSO|$lF4JPcQnh#?1d`+R43>~e}?ObeQZrhZoX$5{$E8JPqovyy03W`Ggx@o#XMTqT)o{(}?*Az4anFw- z%il<&kUUg=3i^FNsd;Oj0k<-K%7J&g3Lfx>N)Pq^46cxfGw{LVTFSg#{W4GTT`F5= z>S8{rtkF&uU;f|It`qV0?17&PVy8(KG{a=Yfx(t_|Kp5b0K$XgVxtyw%XMGj>=!Gr zpkVV?d{;lmP$=svt|3FQQ6~RKS_1EQmHodPcy?m7dFJ|mYmaDygwW-Wr`(Ctca#69 zu2H|y@#!C7>wgy9{1jbV6>kM-Nw?Hf>UXGFyUQgckK=GiHHxU*F8GfE^Ou5t!q0(_ zYWiyvPpAinQz%_jx;2rZvSQo6Lu03R zs#h5f+cucHrta>x3Joo!u7H3*fzx8T*8QcuW0vpR*48u99(GVzc!yle@sk=S<-1j>6kK5i3lY9u8Y-B+2%QI$?x(s2L zpU6nr7{TJC7qT%0gYf#-`0(MYO@j<#5Xc}v!tV3|Q6k~&G)f0eEEVG*T!nf4fM|jU z(a5b}4DQjM@?X#}LEBkf_D!0=`%{6boa+5UlAFneI0xQCLdulAIoRbLBT(;!w3zEW zG$;}@(5Fyx^vcm2e&$D=Vz(7k9T&TRj2v?bRz4bBEyxh!PPUNyabf1-4TCK|4!@FeCabiN}cOmca~Am8y09qm+H>bJR<#e$={x5Byz`(D7;qolF?Vm%C!W-6fum= zK8Ndbv&I=Sy!?mzYp()Vwnl4=xrLgfm;(9&HXGAqN1p}I_T$Q#>tD@RF7GRNRj}hO z7#w{3ZDB~xh%s1pX@_}Ag5Wi>sm78T36D8~MJGdXRN+t*nrv~X8 zS;@~NJCbiC)41>XuB9a*iHz9h;b&evGd*gly!Okh4a0sFpOKsr5>MLL{Ya}G!Uwxh zOjPmu!7i*f>-yWWA+cE}V{p~a`@Swpr*%TJ{yUZdEfNk)efEL*=I8iah$e@g30mh` z{dHEW+cJ|!l<@q+$s^yZx;VVJg$K?YG_b$mYe~WKW;7q!Qzj8zz;ohj;Rj!Pj{~AM z1#{sb06^m)z;*24^KH_W=%fN}a7L4yLYIr0qw2=5Ro16v(eWr4L4ySZbENwm3w=1Q zWTLnpDoAw;k97M2VIw;W$~G}!tf~04Vpbw{J8Cn$=sU9~Qa!BpfhZbg$EzxuY!p`2 z2A+}K9MIqlBtrMpXV9PQ?^iwo)qX1TZS^7OrKk+>RuY3F!@iz6r!4jO>Ywh(o=@>|H}A zJ{E5#?}7k`qAXdMB+MKd_5`$h+*HhasGXdVAZn_>OnEy z>CMgajQa#=^k6-s^!zFV1r1($yl+HoIPxHV;8KUw`r%tJ7xwS$O9NRQMyu`ytgsM; zgM4T99y^;{n%x1I02!n=Y8b0QHM;=_J;xocfB75r?am(jfX9vnEeX$UE1;>Gf}K(m z1*-tizv{~ix5Z19z2AGaW$xW^joxEkl7{kGkH`K5IoCsLjNI{{TMOeUP$2BaiaM)9 zLF;+Tp}#Rc>{>H(-5ZnwKLS)fyuuYBj9{0Ep2@QjWej0BLhfY(C~wOBxpFTvI!FX4 z5)RhC8#cNY(J%Q?!{y53Q3=P9qF0(gRhcK%C&$?|Uj}ih>Y(paVr}d>R4qWs1aDBq z7oKhb`S)__bYQDVjPF=!9^dzf~zW1c3_;Rxr;c} zccV^ROhNy+FdDdn62UbTSgpPi)n33#><~NlX2;XK!4mZ|qW%?ItP0i`wq`Mg)+hwG z>!SmMl&+_OXj7=DBgPqopj81)s;a|q{wP%AYz&&j6Bb@F>N|96Muq=mcH#GD%y<_P z4~62M&-KVSW(XH8=Xvk~4pOZx=Q`dlWTaoC^XNj5Uw1oy##lGoiS#JTNN!=O;ranH zIF0y$)y?K8BlH)Qf8*8zczxUd`-y`q=fZ#7_A+0^hoAA$H@OB79}#qQe}*ZPGmT^6 z5A6>?0(bx#UpFT>V#5C<@84lIo<`{+tMM@2a;yQz7W0of-OYd}Yzz=xW`)?`9e8-K ziT$d$-eC5e8bO4^wi;u-OVbWL;;m5SemslHk&~|e=5XD`uWMf}_DijsSfK+(FZgn9 zI`z$FZdH6>)#>ev=1k_Dx#;!ZIU48!>*v9?*Y@n!eaZ`08J$)F_}~V;pL=eb-5+#X z{JmDK&vFCCY7X0>CaL;Ki4eZ# zSpKv?QUnn4Q|!9tB4pq`_k{uIs)6u>#$ZF9q9#S4-;F>81K^}_&ggS)s1-#soe3d& z1wHZ+!5U>L_np1lO#hREIU8+nUb#sK9xVdjGy#;-F~xlI;8yz;oC;CjL}l z7zrjhodJ-0*el`UMZ9Cvby(S0AdBmGBLLVOzYk<{ z(Gq*=#frA+1|`%Ea_mB`xGY(M{Y?2iFODJ#Q$T}P9_bSDs9bzQW<@K$|6b>BR{gTd z!tUe_xd&u2Q*aDs7WL^*=wF=r13m7+aj68SAcjibW_mb0ve^_;|%LM@=t-_eC4=K$tKg zg5niATze1|SwoQy+9g$I85*bF!M34VRazl}haCtL=yEbftB;1n?{CBb=b!fG{SD8x zh zfE5g}WdG=P{}lW86~fsw^Wosl+gfuE_u0FDwaY0ST?M-AgLbiTCmw=0d2E2A12D2j zJ^^5PI`~7=Q`_!cmOTOp@^My?j7 zh4)&4#}y`Q2-}~{)2vzT=IK)Kkq)=DG$^Al8=|w>@4@D#{G`aVdQvdE0!m+tF%E8E zEw$+S((pv)uRoR2ek;WiiF!h;Kwtr6H_MNWECPJ01|zY{{JNgpQEIX;(~oea<0?cq<4z@oRRbv z(^&jd81p1~aHx8Y9FvXGMGysG8VF(qa)Wr~l-thA1;pkX zFRic35WqeOpsl(?YgWq&b#&mwnrw5-j67AOddUcR2KEf)-=usEwbKOCW;D&~KBa}h z7z1>HLlG<@p4#1a(>-u(vF&WlA~`-b$h)|r-jGMw<|%bAZv-V`Q7xil&G?ushJxQ* z$jpAKz0tZ@Q;0#CX&2Ls*Q3eq<@75FHKl^wb0H z5p+c?bD4VHhLLF+RPvZ6L2%rrljb*52-*muB_Y{r4_%u=KJd{eE@e~5!8%mpDr$|$ zU=mSD;I!1Z{g^-||F>_55&@IN9rl}tm`bv1U^n?UjHrC31^rk)b_j&@44XTDLBo-nFG~^tTeq) zIN$YJc@c$Y1{0t=PS##-41RnD>)K4{!EciW9`?MxY(p;0i`V3ZCeEYkRcOSf?c&o+w&GA_;9_vbCoyCJOVEB7?kLuJ5Ls!sE;sp>0u4nM$f$= z0oHuirK^~!)}_Ph0(rm)O5sG!vq+objgm#KHllH_8fd-Qud&htx$Yi9T&@>wwMa(P+J#U z2x}#M$^<6vnh=IH*|)5_g)_)_jS9dqvJ-38XKR{P0Ot?gGQL=VhA~aCo&jBfut1uT z5Nlx(Q^C04a1ss4`O~0er?%is$Xq6CJ<+rfK?uv14(f_cwWgJ_$mH66LeCAA%FvkK zt#bY>-yr&IEV355QEPk+N^6Zxvu6B4@e8b7(5KYQDsmtAeS2=Ih}{!rO8PU5g0{#M zYX-$j|3}QH=c}A6TdzyGw_(OAV!ZXCc;>j)HP(y|7XOl)uxEdWd9Qr*Ka%I-U&hV;+idV`l9kC|C zgl6=Xf|*?Gt3XwG(fSJAw1AUOX(_&J*)T^kJF=0CL4pQid5D;bA;l{!igeMm4g6A^ z*4M+I__9vWV<<=xIRb_CqD@1{`=A=>JGIiYjRbllQj@VrOpAMUMbd^?=F$s&iHEZw zspHd;uZw_0FPlI8{x6e?d7$I7lX5p~d=mRRt$mmdj1TiuHS00PN8 zSbs&rIl23GYk`Fid>_wnph^n4@Upbuh=i#-J(n`mNDTPdavrl< zM?qOr+AC1MSnFp~nX?9_>6qTt+!zg|5jCmZ=OcAQe)XG+hEFa^G9 zuE{Q>Zy?1Ji#UE;_(3vR7(T{fnrcnzMd|$9X(-gJnJpt~F?M2^EfSZt_WAzlls!@y zqDq)ZC~Infs9UpPB&}IPHesFdGM21-sOrg@906o$6{m50Y1|nyk!QMQ6*`@k8Cr1%9ZJXcNse zkm-@Ku1hA7atSb298{ArD$TUDhEk1?-Zam*$cF9ee8N?$(u1C>K+!s&Xccb101s0D z#Uw8l!)TxS8r+dPi#<x}!K4-#Kd0&kX6dur~4D+WIqv&mY zv6!XX*@<{0Yw-Y-bUIrR`0R;XHY7`O zX594qloQPeq~kq%uTW;&x1%;OT!AvbKB?+Gi{6Tr0VJd0+d;ra&wa`o^?1@e`xcXbaNON*Dypv#u``xU_^AZ- zTNfyL$Tsv&IwF=}U;*74C@fd4b6o|(t^`yBt9=N|B$x0=Yct4NgpqHY6=kfv?;y+S zP{w3j0H2#P%iM>}PuK!NH;Pc}j&Lmns&%udzJ-jPZB*kpPhJjrK zBv-Ns`aI=aU|$@e?mG|ISE*~ZwrqL_wlT4|!y1I@%*MkPm&NfcJjwc@b@w50qt$_g zQ|-vDqh}dv-O!yX62E2sA0%bo?-lgXMPvYrlubm^w6ck;ewcb-YkXT)KPPe!{VY|z z$mpk4)zG1r`wHY-$`slMzz7+2UWtWEWwZPe-LfTpV)A3DT1}YjLw&+zLDF5yo?nce zsf8al4fRKydSoK%97Iknc?*m41RPDC2VIHzy1EormS?rI_@W`+chPQ6Jcr~fGvx$% zBbZyRrqvxHDpRm3pvR+JvWL$^Va`E)k#TA1{k!!;JbBGO>W`k!{>sh2o@(I~W2b-7 zGU_I+C%{|&gTv|%f2}34==Do64&|TlO6dh7;Xwyd5>x`CSMuji@#J5|Gq@*IW{cL& zJ@i`2W(Jk{eX?!Nih&-YttEXGw`NgqDs0K6M;~UyUrr|-6 z|Fmp~PFF`u>9%SFJ?tVAZI!dg<}(XF59@mRVAx7dir+YYQAYrcf?Xc=)LSyvLh`*k zKAi5g$G`g)vP&RYcgL)7(~$A{o#G>8>qOp}@A-*BSJUIS6REa^>tb=I2Hy|f>AHWF zYSSTpVwwJ-)=EQpbV@95fM5mUcl>C$6WU_UUOJt<6)xTS=&s9JYLtW2*X$)Z)%W&h zufAQ<9->X2e(&e$Psw|89H*u>y) z9jk#@(XVqx=hK}YZ`wZF({+t_&?QxH{Z(kxyc)029Pz8)ku~$Uf#l>`#2w zZI=cCNw61CH}bo)+y(0%NZtWo(}7#)&7{m|ioUP|iwIg6jD&l-T9}V2CN$KaW>o7u z%xOSydBB$BO$bXWN2ZT(4_*=~(QT)HR*#gAFkg9B^!(cNTM-E5wcXFSXwrpXK7xM{ zF61$X<~}bqt(Z3mc->M%XmRW%EnyEo+t)lCeZzRE2PP|~%M@QU5qEQSByTA1e&VY# zd&A=d>D5b1HrXDRn@g(3t3kP%oJuGexydJv4G;E29`GFPZC2z~F^Y<^doofq2z8}z%c9D;>s#T zmeYITM^g2J2=PNlQZ~aT(?e_{Cd%r5s4f~$Dm`-oLp zfk&4YhP?|;iUd%*T@kQSzf(F6X@}kLDb@LCDGaXV5ZMfS%Sg(~9Qm$KwBK6C$E|Xl z7S?a!Egtv4HR_WajK_TRh^nf@o#v>Oea4-QBni;-zNr5293vUivh0GPK&}1!mQtW_ zHZix;DfPO37dg)T81#B4gwZXhKGgIqg>DuU$OOvt2;9+e>CU*ga5vUr1LslX(47Om z4)=tRbBE_E)uT!7An`vI8|{h%ByOzgN#k1Vw3WYAbFI1X+!xP;JPsI69Fm$b(>>K> z`zkd;RCT~?qeS6#(92o-65r8YQy8^B1f#libI+WEtIei3A8xzB=*ZPSro|8^_XMlf|Z90k=+CR~Fw=kh5#8)%wq;p_r?d=D!c34iz%O%Bv z*v?C@;+gk->J)lENC&;W+zxyxz7Q5@I=a50IMT&B)Oe)wEk;v*=9rDt7kCN(?Zo#G zKDw|d*NA+py7sNP7^kBHbkcAo`<0QPlhF^x zn1UcD+jk)teVTrjK}L;p4)A|9)n`FPwr`XUdFnb##K_h(T;0%Fb z4r-I7>YKeP8>~ENq;-%THi{M#j?r&%h-uTgAFoEyiXgqC9)EtW{9sy>vLW8oy&`_+}~7;1f7c z?S0B~L5Z!e3O1A_A;kCM=f_KoI}K{RZrS%sY+X8KaPd2`NzPq-qYxYHlP5%*Nt9vdo?CQFaC+bSMMfrc+o z->R+%_MfxOdvJWI_=phV@lDIe5$F7s^7pED>kj3d`!xK}Q>qfAtKdj=vj!m^qWxcU zln`}BgQ;Rcx@?z{zI29F!e6<(h6&8KBYNY{tycY5GIafFTO+T^i)}pKg7zDha}h&T zm2u~<+(#(oy(zb8Pa=`l5K_Xr76_GZ^QR*Ycymikh{!3ng#DFU_iub)K-X>u$qt?szQ7Y#&DZ|0&0^=g$A z#4qe=)f@Iwo6|VQ`}W+nfsk0>$qk!(?v;`KwkF3tR;ym?*!z&Wbb$>5mAX`S^6q~P z&CRYmxo?c6X%U^LX;!!;QXzK#5HCcFI%s8#MLHtSWcpupB7RK{_-+RXX%H5 zo$EVWq3@A)c`&V!L}rxXFS~egi_Ev4`D%8>`h3`~s4%!G+}Fw3=BrYU&xuA%enT56+_ocdDvm4fy4)UVlua!qNN@iNN+Ydl`5Y;(vw-N22C=T z-MOuBcbO$6!=rD8fBmuh1?2K-)pefcaD?Q7zVext-l^N^;kTB;1g95XD;*WH+{A+e z2HVAL4SKsN&m7t-DHt-vLodd@=75Cs(UAn9Jv*|Rij5qZVOfISL72AeO$ixATU+r9 zmv{<$Ue~qG>s;4b=h~Yf^=D75nhbg99?c|AY8R(otelL-W-@_1M zn~G44XM}cUwD;jGZ3R}mCPbr*ehm+L;D8bi8v`w)K`#Qh9w-%HHC;v*Z2<9UYy@R#E zv#tg9M35gV6q6opBkZ}$`0?UnA}GOy6^mL-8t4!t%0Zur>lbW-8D4&+h!w60wxfpM zoM+<6@q~4|Upd}OJHk8!t$-PcIKF@)2CSrS#_6tx)Ka-Vux(Q`xdRo9TJS5>5ki6O zgZFzsMqODD1LACID79GcF{Fc|xn8QcvnXMrC1U$!9Lj?9d%ju}&6Qs~V3cL@V#MeW zHfJ`9W~75(XA^8skKo4lN46dlJ^|J3P+PDG-(hPPx6R!SjSxj4wgI&1cdC4Q->dn9GN{P6K!2Gwsg3dZ@XjEX_83=>*1HoKGb6~I%B8wn(i{`3Fh*+(&6e+ z*zD0KLu>Zs4nboIZQ`@|R<*C|Vi_ZH^ND|Wto-Gtc!MouK6SZytYb`%;JVa}^{19> zA;Y}5M%>k6CB>bX5f2sKo4hEOi#)QgouN&J(ITR{Y?+}=y$pjzvVx8VT_%d)%$-9$ zv-$AN6pM#4xvRzI(v84{%$hgT4H;b~g_>8Rxb)qafuV@_pH3`{-Lp`~Vk=Mv^O0UY^pyZ^d4q;6RnwZmJL-tqW+S}T|0kVT| zI*i-xDtf0YR`Ny(o7Ez$=_1wZeePiT5N-af)K96sv)WVb)nZM&3C5i=%C`U%nN(MK z_um@;C^;DCn_pSbc`@;*1xzbb089qi#nuegJIH*Uph&Z5 z%{xF>cG$H^VqLDHN!5F4y_hZ!0Y4+Ik!4*b(JNUNXA!hsl}d+tgAYkJz~)cF?gM9i zY@%T$KheV1ejWohUu7jdje`RL?2kIaeA8)yNA&D;RnO{boSnthiMB=Z##)KNTw1CL zaH&wsLRxB-Tn>PJ?oh9c&g2xy!Il;!d9(FNQg19T)nIY+ez4m0*~OmcK*RlV zb|3y&D;&7^Jq>ZausjluaV!AC%&`sm^;vE=^%p%J6dzDiu`!*7CvZk4YrbKpJIjV!;sr1~vZZrXY91&g>g z`f$fm1VzLmNbas?8i*i?2X9Y$+Ud=CfikCh;>@=BRZmmG5Xx z%}@wFpE-j!P`DNKoiixb zhsWcPFJKTXq)0&6OCiO#+&lLbT5-8=+7l}iqYpqo@&&a(^d8zOIW;3!-LYhILM5$q z=Uu_dQf4b26dnsKRRDHz={P4)qEB6P<3Lr0@_221A5;v2`4X2dex|aNftM!VJ@#*F z*8_?maV}>N&UlX|=8|cS_cP8QS~8POSUeeeoTy?ow_BiS%3XYj!j$D(QEg9OeN&aO z6Dn*B$VaKjHZ4XyD1k){Mq_m@z=K>LVS;zc+8F?}3&aqrGRX;2M)%U(y9!Z1^7x0T zxIbAb^^1GY^(WTyPiUHp=yUo*KX3O}30mS4-nHSS(f7yHw!bLNgB}BIpm9OOYsr+f zUAx}uG;`iT#>Z5)EP*ioi-RVl#Ok6ZscvdeAk~$366~(O@R-0~Wduh?#Xyz>@Kzar zNek0(yQHpuw$lXt<0CX)iwD(d4|mXQRiAtRBpxwUxu^w{La*zvxArVh<(|8qt9XFZgO?v_dHFIQyaxsR0rBfMd>&`^ zz?q({R5k}4l=u2_eJMim7flc;f~9aKvcnpAa~%{r>@A%iD$k3zYY64_P~<28Hr=pg zG_QlH|MIhwx*4W|lMJEHd(-*wWKm=uCCu+J7x=RdsPP3V~ zzn!F%)F^lEXHD+QMqq>iDDXHW1dV<7wBnit-`TYgh=>Sc9cqwU%hm=N`&>RSZK-}QN< zB~K=9tj~tqplvG7Q0b);D_x&eiBbHh2SVg7dpI>_HN17NbZn;`A# z{M{TIA*xMQXphXjZCuG~03V!HO&w^>)?0@(9j*N;{ajE4;eEbO?C*JdA=@IQKPN-* zz#@cvoE^hK)&^mo6yito_I zT+?#ETAM3fysRmH^c@?VDrlkCX^pSvN#5xkH7(1PK!yp7eTNWdL$`&zGd7YXu<5}F zHp2h-h;EQ$wGrH{Esp(FqIueH^tfCsUKmOHV%v9Zz|~(RohP98jvAt3{fO3Om3#1^ zLr{Yi$f?D~v!t^uIf9M!Peu0Okhplv6349dqF^*=d9K;i`I%u$c?kateP4*pmw!qD zkg!0Sxq|p!452RVPdsA$DuIAZgn#T}(qipTzay$1el`RVM6&ior4*f;jg7$6@JT{R zXQ#Mk7Bo)IqK5^-NZXyB?H zbn>_Orft7zIpwm{foFj}UqoF%4T=pk#^A?`ibS0%`NId&U;20bnFG>?3Qf224+)vZ zFur%(12)oc^j+&F#dglQ>x9v5@u*AfG7T?+-3Z1Pksj9Hd{@D?`cl4Yz5gxZyAH16 zihLehWuBL9Yk6mzic<@)ZDt-M^VfD=fneLTw_uz9r)o%v>3N-aD1dKQH?c2(?^Hg> znr1hW)yWxje&m|*}CnG^^Q4bgoaY|Eb@u7ah^r4as>zd^myJPOACp_AH8u~7IAt0UE2rg-0GPIw z@!qrM?1Ko*uJ`bwZ2QFQcm3(fLBoqbEsFAmP{^H@isee39)^wQc{vVsZMAv0N*f!S zWbdynK*ZbEmXNrvIVxt3UA@G_u^dm)LmV`&S)O+{Rv+1O9xN|hdu(178_s#TOQ~~( z4w*KXV+V>G#T?WaiRN|0*2@|%#O)qep0iwetUG&FnYB02Jap|TcXPb1TfUJrCU$Uy zLHc6Y==V$w9xOSny@n6-YvDW@ifSlqzF0KW_be33>WSQtk-IC1vHeg>VeVyFd&^p{ z#^!V}<;%|+NXyAH?MaajX-3p0RhK}3+;TX19crE4!C&K5Jge=g3@zC@;-Nyob9jRb zxOvDXe>?c&Pq1l0|EXuB4&zba#c!T3@z$%$0pSEGCZAJLdFj1HM7}|6!r2)22n}8> zJFU@6LK8_}R0b+uxLt*}VOTCBZ#wY76EpiYB62G;+%7Rd>rc6co{Mvw;IE{*^(ZH58lfkhZ zO3fXHu5a7(PfsV#YU-vALEG1aORa~rK(GFfYi&uW{Z>J)L)Whc7h(!O?@x;PMV}tA zQ==dtrYpFw#N~jJZRSC~ebH?xs34i;nQ`s)fD=^M06AVC^e(cV=GZ~v@-g~AWI08f zA3XOT|JIh1g-armHzQw+Vv66~c1Tqapu*r7&`pdJ%MtJpQiEci?fmeq$rBHd$LxNt z4!E*?n;Ugrq|tW0mz3Boj?)o{RE;x2cdFr<23paeT!_74LH`9+#Ni5~FBU+8$6y5@ zg~K{XZ+Ewy)fN_~?qW12MuZ~JGZ94H?7d2}ANLp4J1jmz;!Z5HEDHqlJF)QUQh}uR zA47qhrGTNSNGQ+qih9Ex<8KzGERpESN%{TxAiAXV#{{u}*N`4!EWm4iNE$ZlwH%Fy zIPTuU>J*OY3X&j(1>hY+S$peR?{YtQDMi#v*a7cR{RW}K6spzLV5~uw`akjaHNv3X zv;Fa6*^3qw9l6^FrF}LvK>teEq4x+>a+CU70xAsAe<%nVmPM&kG6&@uQ~= z6`qafQ+1+ke$bb(4#pJyC2cekG<2+6wD=y;hD!k0VQF7DdzlD{LrOF+8x5ky>4K4d ze)u+%@1M5jpr(tUIXKGFwDC2B6QQ`>HFx@HEB>lZbKT~_Pur#R;k{aq9dM0EI>D>c zMVvS$F;X#Q4^~pWHutWq$q)PJ2Vs70`|B&X1MUGdI3_qZFF^bHNW{v0o|CP!G47;IjI-UYjt7!}A0kMBLau-dRPM<;B&Uz4*=!eHKT zYd!Vy_-i0ems^Q#Jjx1wBojWDUg+TSZ&l>XFKbUr_WRQ7=050D6ITJ#A_A*!Qv*Kq zb{dYpWm4{d-tA?-CR%vM?SfW5d@Y`1OHzFPB==U=c(ERG<-gA>30dgtSizronsxHo zCK-O&VX)p<`f0tF?_EJ7lA_qzn@U0(O&32CkbSe)7mF8gNp(8Ty);jAF~|4iH^0{) zTan_aTlSo*`l!fm;s{_qshdD#NSOIC(m69Jj-w+hO>zV7UVQU$arx4-1QtE`1&d1V z`aZmxg&wT(cba-H>D-W2kj}qpqV2_?{8)V*8tr3Nrdq|Yt$%ReE1BpB3=L7ny1_0%kcF&2pRw>cv*zJRZ zdM*oAb&+D){#ncKm*RTN3MwL$vi_jNzmla3bqD+@&5|pVepmOnpmFp7SJL4+Xr3F= z_jJ=JK24*7fnG+Au$lSK1YY3-==*~bwhg5faS=fE31Fi1j{e%G*SyKLaVCf zc)Q;qKn`$3hW2X}9b z^b}1?^o}Fw9v}+Y8vRCP+E5jDI~egjYuQIlMr9wF0oj#Iry>dnuLG@m0ZiErS3r?k z0Fv*xpPwnq?B4!AO}zqHu^A;ylYSKDGu0XS1=8N_tQh}o ztR#U0F(XrnzdfL_*S0)ftAEcn%|~_k6GN=d7e=huyd?h={iFB}(hoeS_iJ1bgm+5; zLkbdAg#1HH%D8}7-Y7t=Aw`SEibuD)UxXUx^ha%Bt*$&;QRg4}tEXQVqN@A1VEfSQ zRbLjNi0Dfxt@oNMnafeO{v*bKD)>B&o{iVrRQ=$}5(AOVRK~&+Nkqy@r{Z)KeldKMv zoEa-@e>JWdO|y1;3s7pj^rW)NSn9_M=p8yAEpQqhZU05EVgk&%su9nz(9?Q}Ris2u zZu5Hj2Q$fyn%f8bi&87H1yM4&fmxwZM=fdp1C(Bol5>^GEB6=SfZgCR@Ux4d02Kerf!T=LET& zLpEszWH)zquWL4?2ABHJ8iUyi?+ZNVp1W!81Kr`k1LIl}f9GR;nK47!M#$0!^j^px z`6hs|Fj>PlEdJpi_plo&RoL1x>9>;kXIYM^v1k7l)AYETe*r45A`*t|!$OTpyR0k19BAKutav?LISN0>Nhu&R}|QMcH^Zalwyjq35UxQK*m^+`$8C zTT;(tW@hFtLf?urLNr9Ded+p#F()MPpi*ZD7iDFGfNLf?l^99DphTfV0p=%_3%4Bo z{L%Hv#K6gxvEE@u)YTt+e!oHb=gCdpp}xeXp6Ri!PD#ca}ba+1kC3T-cyMHzI+dz1ZCXc3iX`hYTpSL2v>HkH5REoJ`%r} zJQSq|&#c?KxGXyA$yu&U#Y5(QQn>A`y7GSUFsIy%Fn&Av)1WjPR|b^hfwT>ocTR5P zckJ)?Eh1-0Yuuaa+HG}gjvs*wkKWndFrbAcZ}5|J^-F9pd=T}`7C&{YZ_w$xh^OtO zh~06jcX%9~1akj{9BfbLC%B)`Pa`o`T0Q$%6smA{w`6@4jB$4>?7{ROAC|4N*c%FE z$fZn~L*w6<=nG5$xXho5Gc>oN{(&H+^IddE?VTHzYd(=4h?70r<2z_xbmI}c@mBH! zS~MI_UbgVajuE^RQEa9!F*`XF&IJc#<7AHdD@+bqgh~W-B*)|}C-H?4RJb{*UN(`tl3dB?-Tq{#KU{xBteJ4= z$HQi*8Y2T}{CDm(Ebj?O_;WYY0~uV2Z=x(gDk)vHxaJ=o9Do~C!%j*wrV=ge(_@J-5r6luyf3>H zKw%D1Y7CfciF1R=w;q;LI2$yj4btj!!^@1?}mUxn7S?Z zaxySkz9ucJ93bqoFu`+6Hl7?#6j)XE!z3> z;k8`)^Ir|H*>rU+&Mw-_>X!n;N4NtPtZD)RJ0cBvPel@TROox3)^)WG{SNgjwxe)D z5OuYBN`?(t`>zK1f20}2&;L(d_s)yv>O4Iq_-4+Oy{GQ~aikx;cVs;kSim8k%0P_wmTTvn9pv>T_hWi`cPs=%XwJVRwKAk++nF_;RN|&oPhd6uT%0)7mK|$nJ~Xw_V#q% zT&2_Ua9n-)dmPWfh877UVo|UYM!Ixi?I+# zpij_O-oX*jlUmW+Ir>*Zp_i&s4w$g&BjLgO@7|_21q{tc5r(S~W0FWF*W^;>N&5aK zCZM~7i(eAB;+|X93yhW1P|+0eX$K9N`$(>(?`Nj90u)2uIZzWprC?uFoo(b5|F2y%p=6EQ-% zgF(F_HJaJRLY4gw#k;ZIJ%SdWpOp7M&e}Zu%mURaC?$0f3j9ilOPOd|nHEKWhauUv zZt4^m97Sv*0m_?pBWap9$c-u{&5zFi{I~>vnCfN9@tcm-$|fboWhHt+_#s*vwuCCv z!CbYg4N@E{g$u)_Sp0L5v{erH7zeuLRynHfuN13M;t1Iz=EZCL2}&MF<~PT^nPU*+I@^NCb1s$`5kyvKBO_1|nvdpk zHW`ggPbFY5H?<~7aR)e2*kQr$J|s@LE%(3=bi|l9j|1JldZ9{3cdU*TKUgJ0gvqt$ zP-{>Ri)+tpjb$v+SeSkhkzvdjn)%^T<4b*yNDnl3wdG+gyQF6!CK6zwk--$F+_4Xd z>^04}v_)OwkMF-rPB>&w|M5g6gga5Dlk&HDqNmMc_KqSt7%?^BCN2JmzmJ7Q%|w7> zikPGJ12{&a40&RtxOFECzh=1b zm}$6g_$wYsAb;KidN>x35UvBUd?}Qf0W|bVkJIfDSkzb+`b#lwz#;v+pFX{>SaW#1 zGEwsxB`|_IgF=@@mVN49DFkt&1y8)$C3<_t+pj{)?ogP`%GZCn0fzi1Q_Cj@4YegPvl22e=7NRVc!B-(ws zsWwq1_s|a{??1qXjC%%}e#LXMaMI5P7zw3(J-b=1gXxJGPHcinm`kxbWBy5p&`{{A zK&eH0LWN1M%H={oGupq26s@GNN7Ux+WV~<0VL2n{o|`fDfhf-FnQk^B>3pTMzQ=W> zJgx+3@>e^UrhS8|(V|;33@iak?L%+xHESTY3+dioz0>)PCM^Z;0DpazW%oJe(`O+) zHst032f2qW%4NHLth!Gs#^NRz79&)(YcNPJ_g2@d4SujB^Sd@L|5oDr z#h(C&(uhy+a$X6KS1ylvdHXyF*xM34u>Zs;i@>E4s=FDxMTMLM-Rkn2+~UPB`muoCMHhAhqR$a>#4u@zoUn#-2P2$F@ej9 zh)_kY7S^{%#e_KK@*rzw=T?*xNr6T-PT*N=usd0zC8t2$8?0_TN@5hg*Hs?}%|#xA zXlRWVT7NPC**HUke}eS#j?!(kTyAvc^vB0T#Zmw5e_bIBQriO(_J1T(<`)M z>ndE8AF9$E_V*o9^y5b3A+wSUz|oEJ4l+NOA{wfky`cIHBX_nmfxR- zQ<+3SEeqZmXMcV=_1etC_G$&IIVieB7j&z(ctG;vo3Vh9Pot}iO&{gA?ABQ7<}ap> z!k^OmXv$c^u}v@$E4iUx#8B7UU)9L-+p$hJDg)Gw<9KX8)y&wVdyp>l*@#!a*7UVD zO|{kv4w$nXi_FM0!eW*M5iO-B`*dLIj*BVc@S?cjFhsmid=6u={2krgEnlWDb7sVt z$l=H^ty;-}V6Wxwy>{Tte8pikpxR+mFsFGKNdoGWf5iI2WEKO5MAWELuvXS6jGOX~ zfNZ}UEfI|q72a*4&gu`~u4rj1R4<-vz7>NgG)R1nekEq3&JGu<_ts{@Bf#eFFq$oO zXm&q^p0NT9oMlw6<=%RA(vX+Ds{hn(WXnq3QA4urmp{5Rp49mZkY(CtJ9lR$Uk8-PKinMdOFaHwPS_?nUA7CJ*?|7L4&hin33d(g8-3HML&u zjAeb^#G{M6^j_2&8siF@Stq}GbGW8oQE@)qY(~DFTlZRA3ngh$%*14&ac+C-GAs3Q zYSunps;rL%z4t)i+Q%E6@zdT{Ax_&ms}-)#rsr z#u)tQlj_wUu(x{DWOshc{OBnPuHbKj+r^9^$Oh9V%^;O{R7C4Qlqf>`K`aAS#TT9G&lq*lR z2L{R%(9#d{sk48{TnA|e^&>!7&cH3^w^bHXq|wk^c}plFD^)=&@Qac;Gb85BELI9o zF@Sp_%8 zR~NE@+7Fl@tYyUUw)cKdq)58-az&}lX;L&uxvOKUvx6%RPqOt*d$7`QbL-s^vRH@^ zcF|^H642mA`V$&ugg)|>9Ryr*m`(5f8N_hdF{6S~)A(8S&-Kq`cAr8w@nCHcgr+?) z-dw94F<2{~D_NL90^fsx*V(N|tt~}NLLRiA;b_?4kD$9RmEN6iqGGKlVq0xeKRh%Wv~WJtYHVjU@`D1y=Z zPc?U+T@j*S0=1UWBqe~fXh#G6xF={85OFMiup!jo7IK>~#%As8cdwQ|SCXuOs^Z1{ zRGjD;8Nf#6dYtMY@XwC$ek`6f4-hbtVDbFgr8P)Y#w0}Hw5dN^@Ys$r=2WK#r+Dm% zGC*_DhC3%yUwJdJAow!&R>0UyAfddUAY~Ph$hQD07f$e<2^zHK&Qu>XE|ib$n=l z0J>*Us8g1EqU8;gn<$amdk+pwT2W^-p@ng4btJXn}#;suBnR21LcCE*SUWlW55DU4ucv zt8AFiB^+=&Dkj*88*R<-9WfBivIkHe34kR3M)z-1S|-jkuy_ci<5DojgaINU?lB;! zuFj8KSc%>H_)$z|C{Q*U-e&uP7{ilKO-y>QB_HGO3MxOI71Omp_mt(nF1D@Hmo&}yy zj`n|S84L+{E;d3Ex5u5^Q78$Qx|4?lIz`0(cX~>?>8VR8bR`R~)c&@Wb=U1EKJOBK zFkd;juvkyKn14}uNn2ucX2Ag6%CdCicXq2wDeN`oAjc1>6;Gs-OLeyAA;58)J5=dv z2KGjmiTF%z^XEn^QGw{h!glh#;~bhs)%!P{>Yqs8DYzH-4-GR8WB5-dON}>~aE90H zQdx9~WUE#Cf7cos6;F+?zq$0_kAL9zn`+BL6_f-~M3r`y_~`iTp!O*f+RsR|R(Um+x7PmFLuudJX`VKY4Bl*u`NOh|skWx^L-6$| z+2xxrJ5YKgn~(lTD#?kEBbN0}NzXE8J2T|_d8i)=4cXHE(?o{@ePu!lB>*%=@0yKo zn9!nix8R&riKGs@!>4Nm4*o-Ja>^x^nWgkTKSA+CP)dm2Rz+V{%zJZ)sCN(lvmdpBM7HI5GJ zwXIh~1*jEI;#fQl58Zc*i4|*z74Bq64vLxX@x>qGTS$SbS#oMW(4svQy>dm&Cm>s%E8c_3|pd+@eq` z=k-2w+(tMZO{~WW>Vug5>i@T5t5D(zJGzzoEJba#g>R;jQ$*9WJ6Y5BubbhU1V=8oXx zJOO^-JA#1MaxGNzP+D^YXv6B^`~{0ANshhC*L;N zY?F13pd6MTg0wRWOf_H%l%}vscdtEm+ZEeB3NJb z=_3gdR;3&<^)ZMfE(ZD|#$n4E^#xhZa2XoY?*2^7rAu4}XqG6b%OT03#h5pvog78p z@OD-gn<1iK9VrWX^8IX{4pT=W0Z>bzto(OusWT5L>crvz{j>BEwC6JC0mC9hZE{CJ zwp$OnR8elUDtQB)^4~u9J6Ac1*1xBCfF!b6F-v# ztGD}QdXNUhh)?xg=*T2=0lS}3fvGx7!)p(Wu_@{ye`d5L7VBBP)GoW>k#bBcR@K-` ztj#AA1j6t-_V+$?bWJND4c;GBkCi(fC+3r0y+cNSmK5^#d{v;#+M?#We+-gRzCU}) zX@&O)`D0a<aX7HzzMSh`Z-*k-Oil?Dhi&jsOn0c$!wKG z=@nd+^ch1&pz)byZi^X9v_82%YqmW|SK(+g|l<2rJO!732|B0F( zwWuCDBDS7lhEtGgGMief|*^$-0 zDsgHV&JlZ?4bWQOl7zDc_!6;74aDJD^f5GHTx%5vEa7%##7jvB=C|Y1P<#=DG>G;& z>~EEAGf;TccB%=s zaq_F7HQ|HnMnkpwSNlPpg>O&;oPYh%_s|Z(@4=(<@9@JvyqD+bcsG%zeP!#4nyW-b zOZwtdZI#(F;&8`%PvhXnaysazB(MzRb+CA&ta_5@wcqqy`q1UVeoA#n z=eqc2h)(D>#(6p@abQ?`(qAie&O?Qf2*rF@rBe?>$VC;DSFZpn1}?}VhUb5QdA_ux z#1l5J6^R<(AJ6`b&W8n#VzBeC@`I#)2NDi1xYHl}%!lw?3Tc) zpyZ0G2DHCAgo4kR4FxGBhZ+6`znPbs#mGSqmkrRrUnXv=qGbaa`AHiI5k&i*XAs$Y zVOhLapXx!#=|U6{Y=?%Ewvf~!rIe+vu3{0W zc7KK4h^FJnFLw01(dAW`s%a|4Hn9>ARdGqg&}e6sWS@Z?&do9MUI+G|fp}h?#RtXq zcB#~TbZLBGbx}j~X-Uo7ZXxv_R0apxZLww}qZx{k%&G|jZ-4{2-Ko;*tq1^6Sp=U; z8dOJ5_12iUQ3Zway9x>x_$#VL8lma;gBic*KyJneO2$ZNf(pvrga4_aXY@&okSs!n z9$G4<-n>4PUHCS$ojV5f;khQ8iJ;xbTr|ZH?no#G@aF`IN0SAOc;8LJ@2YtI>-3A) z;TOXXwG9l-YkIey5k-E4K-zr-&a$M{MJ#2v>=T+Q{nEfDyxP2T5X6fhG(~{OZ@ca# zOI4yYBA+(RZ)&X;_ag6Z{tv^Sx?GyuQ3Re8DjEZ3HyKY zxx`Ih?^!yc6lsQ4!oCW;h}ha^yT^kejRw|zc?CSwd_W=6j^`KbZFV5{6O_*bS43gL zBK@O^|4&sCqL3Tt=4livy2uEWp_Gm$Mw2F#5)fM>%JE9%>(llnzfwSwvOW9$ZpEr< z?QvcU4xCX95ki0kO;-J!ixzwoBz+LI1vl}nX5-p_ zI#1HdV~Ad&g4q%mTp?A1Qd7>Qy29i*yv33Fj7wBrZ@SbTosC_jDj{={nXDlkQN%{R zlgLtqCBB>9&{UG6Lwv2*Ob!q_Wh|rB;-5%Q2%RBTqc1_>$FE)c{O(F=rAh~s-&M2H zl~_Mq$zjlGV*S}Y4)f|?l4E^&w@cqR44}B8VETBsi;{vfKsV9C3F%j385KIY`{*f~ zNM+5hG_j)(`z!;4o6>gGDVwMR!w>tuuu^)B1U#^~qNG+PyUJ{?#@0|B1JbJ$o4lYS z$yEiCh9OV>ZgpLmBX?d~$E61eY)a=ss5NjCS6C)25p2}NEe`)?N)DwN!OT6pk6v6n zd*}u))S4GyQGGZXAhK4SxpQiFvJSrh9saiQ~FyyluP*^xpbPWg<#r%JGV zZ~;o1jmo6cD??47W=?)06SKMr!9=Z9aXdot=c=LmJc#{Ff zQWi0asZP=}7FW47y8O_hjPC$}p%AjDAy!Q&^JqSX%Bx8I*{DDN0U<^_b*fTDjlr2} zaR0ncsdA_qqv1|LVrv(rsM*OEV(HfwT$aiqL%IEheDD%;n+@lPRfy)z@Onlk0oh^~ zAw3&B4JqXhVmq9E9Iua|5<0}$+s%cXrmQ%AoLIVJ z?QR*0%xIMzlz8hCOH9YX`Lq8y##Ik-NoI#y?iKDq{)c9%Yo%opn`5?+2&yKkvW7ZM zq+FF=EZ!}1*NYDYnFd_QEDBra7KV^;swOM6(EJm&S}xQ^w)^Xx13u$y#4AtL2H#?H znmWOTruB-6ZwNd67Q~)?l5W1X3>k9FuKGHl+TV6xnAh!`xy!0X%Vxws$YlMa8k<0s zxc_8kXErI-ER9>tyP!i~%O7&M;dt<7U+UbLci*shbYy>(_a_3&D@^86ecyX9c`TmL z9_i#|AcOG2(ZLa^Q;I>U?rqHH{zTCOs|7b%Sh!Kti{a^NkB3W;dfD@S%AvQi|68gU zkvHQI0nPDRpT0eh71mF^PKCeslz6BT8fFz`Ii>wXAtbCM>UXryeWvGzW*OwVpj22O zS?{m6Y^dsIj=1rJsR?$4;J>t4PZ-EO+{GvvkcWkA8a`7|4z%Y-*fF=p=ZT+io+J+d zjGV^^OfF>Ztfn;W-Z2)sTK*K0jK$Kv&MK7h`v)*(`t-0FN1jj6varq^sUM$Y5yzoy z!hBUUTI+{ty;;?cG~7(ez$dC6)eKBULd8p z5>VLRVViqM8C@IQNsx7wKBO2-r*tlt8c8K>1f!Efd_?ZaeyR`YA<|qu`pj2~8%L4) zJTc6o*&QjSSQf2qQgZc-ZTwh8%T_H&`W7!%>m_>V#em^gK?#0knC43cD_Y?e<)AQ9 zGN)gU(BY%jK)TKzXawf+KdC&GzA<(NU?}iD)LPZ^t#Z@D^qM-|DqA+$ol*{~6zD@= zB=oi864_8u30dSv=^DR?g2jRt!$ayP##@w%au2_;SfvvG6Q0@QB`Mx;_u-kQklb3dlWBXsp#0=+2&4M){P-$$~PG>y3wS6 z%7iii^a^v!n+yP99hxO?of!PcZci0@7=~omQMww#==KE#sqJL6rJ(NlYCqSI*dv<%W&tjo%ePwmC&A+z7u{Mjlbm2LD82#H0!{NGd2N~jH4B9%= z2k26q;(0z}ZEuuqE~x2;1Kr6k;#fjF_&s zMf%>mFHZ6-Xh_3WV9g4_jm8=R(vPQ}ygv%cJuKxD?c>plX;eYdWIE#zjg8vHA6AZv zD&Bt)5Wv&@6RG{RW1ucKlX9@r_+I@O5_p-M=%U59Qjk=Bp%6q@!AD-6*}1O$OP5kw zzfAC0H1|-B&1=J1a~1M=-wb$Lw`icSEMX=e3M5qHs342xG349~j1%=q+aw?rGORBK zGPHm2tCmVKHQp5JJwv}I@>^IrXyUk^`cTo&FX{ap8aI=au6}oXH7+ue$+YiNs=(zS zsOjs(h87i*pp*dg6J`A0T%?5by~{<5q;~|$05C{=RWg7ckQ9`A=<#H!#xONvn{O$x z%yF_#OuI)=5PtlV^B6ohhHT^#sql_iA$V!DQMej~lzZhcfuwe`=9qD?jNJuj;vPE? zArj%Yf&-gljm;)EVY_$0W9Y znI!Nq?ED`l`G9i&Wm5bJ92tpu*kh-LUl>&lGqOp*^2#<@m}_2^i9B`HB9V=I+}9yalKf zK7D@_Rn^;`A2|9ykt)eTzuQ9H8djh($k!j8$xQ-(`k$o4DA=eg#`30Z`|sdpXzyJ9 z*7}Wqxf76~1pj6zQW;0xJ*8J#tB}7LN;JAwr;{MY7SHpU^_6-r-9-}6ZH4GM+c(CL zgRFJ@dOKvL*aHNO#pysW$ij z$}KYlo2B_%MvA(kIKHXwpCYX6)ECkcSt*TuL=jRn{Y~>l?jQlD$2(0)?KCCIT zN=gn8$%v;~jJnHI>HlV`tj;r+mUO%*QZEHud^V`{6$7t`4eWd0lL4~lBmVsLwg7zs zrYqTwFk|S5m{6Zg%U)-fCj=NNK_TN;6{@+vu5X?$7l~{Tr_eH9pr_z-o z|8ITe=rLsO-EgOQH{3~ESnxcB@g;T{T$2`iWOrsSjA4EG$=r4uvWN^xnB{nrKNTM4>o+xJw%Ea^pa z|JnV87Ax&g8g}i%(40pCihz2`u68j(H$@eGAIhP;CjNf5Q%CM5o9{F|s;v=9p$qt*ZX7kMs!M3zc9;M#A zlbo$CR`lPiJO6dD%Wt(sVDdim=0JQgSK56u^J4Ue+9bEvu8jtt*&&pKWT~SVmMP^t zBzZDlJ*P=mcRF+7-{5hdcn;a4CM1u%y172_D~4Cztoh-b5HuZzFr(^r-p*d`<*O}v zx_PdIif;+idP&6T5u&IB7t>}0pM9ed&h9>_q=DW$+e;nT@(>o<3V2&zcmisIpRZl$ ziC>ei4^1}B&CJ}}shr#*Sp2{d2PO6)4sK%bb~W&L??YVx0kjE_oz0h zt3blmlP}ub7HK$DHW^s+59NrDF9vaM48diOk~mxnixm8T(nMCh?ob^4;$$$53e5E)n1GdmwFmj0G0p?QcDkgDEmIr3 z_(;8*QBGDpX4MT_TXjweOGY$Ax?Wcav-i!FK}6a|!l)m}az+^}2G;CDWfF2uRihFC z$Cm#^p(=8`XA?Ma$|3FFvCxn;nu5RoP34XiH{JIY&E50z@u!uNKp7L09?5`JR)!Y+9S4T%7^kG-X5oX@^7MJ@;*K51`V_l1) zEyP)O9<}%w&A_u?t}4&2CqTTeQyVqBtS;}x(6hji3Js^xF4;Vprk30|Oo3aULKbJF zOj2)_f-bJ`NsL>eGB@U@*}5;4TKZp*MbaC_74F(k4%vH^pI2b{qL*T6VOu^Et1c4N z@v^%NIklg^*WHtvR7B@~lK$&x)8tw;GF|ifFjZQ|J}IHnC+-damSk~s&7vozcxNo| z!*`ws?N6>ZXNz;~Yu1OhQM(AntECRf&Gmd>r!AEi32l?5mS$LSqMNXAsM_`FzCS?p4alw*2#dc?#mKr zQt)@Qev5EFQiW0tNhHa($F|yASYG3%_mG(12+FSb2T2dr7bw5@x<^SA9zA{Qv4e9$ zH+LKm0_DwjVlw6O<&^Z^o35+A`SH9sC4{0jS^0cUo4Cpel@ zIpUC`#NP8{{^EMFx_pX`+aQKr4)Pbt#XNb{_SxbTIv(%T=-mS@%fewzTDKc(yB93Q zHT6m&RkY`hs8@shw??-+mpH?vpSX?h%#qL6oM7r?cdkj z)OX#cL&TVmxc-1mPCermg`RU^vTzLbY-17L+LkI^!2Dz&?7C}Q1~g1M<01njeGL&F zKU+N2FTcV}clg3o3?!O{O*Q*Mx+W`||0iDxp!FI+ktMJ3D}cYa@vqvLlX?fPWLc7o zUx9q}$n#ko#3)^sB;!{=%H`y83a4aQl8j%@1m+`){C5JRNs}f`nlx$Bq)C$|O`5c6 z*Wsdtf{p*yhaXBIrc~p9_t(E}2=K0upez@xjsMDy;V;e!kctFF6EB4eR#?jLy1xYo z@NNQGiVZ<2Trf7iCcqC8kRY27REi6xj1LJgB?+<#L8Z80lkqVDevm+xWFe>&7Ys39 z-Wl%;KmBR_?2mrbd_MQ%AJ?z%eE;^mUjm=+M3yCK2r9(|H{;xSmNNKPUVO1W^0lwk zhwizjp51?cy>aio^=%J5RG)eK?Uo!b|LRxu`Ct5^-umS)>u>LT_u5>(P_kqZf=Y40 z>Rx5^d(NDxZ@K&K`r1Q>>b*DIP=D$(pQ%524OjIr!QSgpOS6aLh?G3gTNvBBPXcGY_@ zHDJn^l)~^JsOLbXLBXhw4Xc%*|BVdZ8WukjDsxT@tpKO-Fqzdo@Oxhp=<9Zf*~nlc zzj`hli-}P9TGMqvhnjqqjq$CL=4@~NZJRAN#>3eIpMeKSkpOmRXl-~s+fC1cBmvK9 z#{=at$**On#z}cPct0kS)}`rr^UszbHbTK`p?9P_fYzP<-1*+_0W?dYJ9W8B!we#4 zoVo@Z#$tH&jN4wWo33ZE{;qdFB0%eIF`1~@ONB!{^G*8FE**PG!i%)J&;&3TtU~}t z?>rNe98MZwe1%o9Vjk>cV;(i*FbSv`KmRvrNO-?t_O~;HanQa}0wRz6dObRL_qMWO8#yl+Wz?i3JEvan6uuemp@&Lk%^o$RUXBrPO zo>6vfe8S+JSqXIsbpxM;LRxD?i)U+RIUYC2c{lH;9Q3d@u|ECkKL6B1B3Sr zkDsgc06i$k{Gom-Q_Qm}drZtD6i2#yyq?F)9Mf7?-=_&`x{n$U%6VXt36oFbav0BS z7+y@+c>Qkj61Xm4(gij?<>5i7sfNTnvKRzriZ$jDZnIYq!7BmHUO3YzWdZWE#=F;=;B z>rx1N3z+oSGHFhE+cXA~YsX|)*P6y=BM@bL6VdT%$|gT}R%MHMty>Hk^Ki`71hC~C zrZq9K2hf`tkOUNIaD|go(y@<|u#nmU%XkD6-+OK*$eu zT?LPM6alEDOOs6-KzjkSbfNy;AuJ}aErW*7f~yNy;%3y{J7a($a&83U%7`KgRn#&S zcx;(N_dH@#zK-klhriv2turlFqIOgJl4`#j1sHTF5!2|RN zraE=*f!YT#?T46jWXqR0OTf9VI=PV}Ty$1%rrlK?Cfe=bu`v(EQcldnF;^EaV1dI# z0IG)Wst&>&fLd;vjBO$YblX(@#I~9+$w?5SQyPaAS3}6a8$P}2Dwu?A&eafLY|OL8 zPQwmkhcK{$N1Y9@c_*smY1khy?g(lEP&1uSeDm-5k_#@Co4-{Ur7(n~$@T zzrcjnFczC9H)AXCz5<~9*}eO34phEVFs^Djq_{TxaS-5aLjd` zhQ&leYuVoUL2#Oe+}%UjaT^~o@ohV9aR0;R0c>XsVLpW8IfaE~8JhE;B)S?E^DyH% z#y7=Wj`6A8L9ICI6cBNqu$M8zA{0FLsEKdeg0^`8{2OsdrgN~vHHl2cE>mt~3m4$p zYVw$8$|p=Ud&?23j!Q!%AZrTPd*}@!w8SMnoM}ANF?!STmq@r-vE6mV4E3%Yb$$^O#c^nK)Vq>!OW2YC;vG=D z;voqFS44()CaPY=D00l}#awJyDwzW-5AtQoG4IMzudBIEF@=0r622oyJp-SYFl_^y zPCl8o*5~(Cy|-UDRYBm+ePdovq40Gj9Metb`)vm#V9a#9F4iiK`F3!OcO~1pyrFmU z3d@NpPR`SNVPxm|mD8mKj(I(|YkU2fdhOfws+8$a1+_D#w}Ux}Z>)DEscIc8+3FfT kt`k5^pPWbM3UhM(e_I&O^oH1C{Qv*}07*qoM6N<$f*V|Q#{d8T diff --git a/project/images/enemy48.png b/project/images/enemy48.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f7d0cdcea267a3a8b76a901204650c94640eee GIT binary patch literal 9801 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 I?>I#Lf9AkY761SM literal 0 HcmV?d00001 diff --git a/project/images/npc48.png b/project/images/npc48.png new file mode 100644 index 0000000000000000000000000000000000000000..43c3a3762b5147b66c7a6947cf51aa66b094ab69 GIT binary patch literal 9560 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