diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index 035826d1384..9f276aeb63f 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -1,30 +1,47 @@
/obj/item/inflatable
+ name = "inflatable"
+ w_class = 2
+ icon = 'icons/obj/inflatable.dmi'
+ var/deploy_path = null
+
+/obj/item/inflatable/attack_self(mob/user)
+ if(!deploy_path)
+ return
+ playsound(loc, 'sound/items/zip.ogg', 75, 1)
+ user << "You inflate \the [src]."
+ var/obj/structure/inflatable/R = new deploy_path(user.loc)
+ src.transfer_fingerprints_to(R)
+ R.add_fingerprint(user)
+ qdel(src)
+
+
+/obj/item/inflatable/wall
name = "inflatable wall"
desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
- icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_wall"
- w_class = 3
+ deploy_path = /obj/structure/inflatable/wall
- attack_self(mob/user)
- playsound(loc, 'sound/items/zip.ogg', 75, 1)
- user << "You inflate [src]."
- var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc)
- src.transfer_fingerprints_to(R)
- R.add_fingerprint(user)
- qdel(src)
+/obj/item/inflatable/door/
+ name = "inflatable door"
+ desc = "A folded membrane which rapidly expands into a simple door on activation."
+ icon_state = "folded_door"
+ deploy_path = /obj/structure/inflatable/door
/obj/structure/inflatable
- name = "inflatable wall"
+ name = "inflatable"
desc = "An inflated membrane. Do not puncture."
density = 1
anchored = 1
opacity = 0
-
icon = 'icons/obj/inflatable.dmi'
icon_state = "wall"
+ var/undeploy_path = null
var/health = 50.0
+/obj/structure/inflatable/wall
+ name = "inflatable wall"
+ undeploy_path = /obj/item/inflatable/wall
/obj/structure/inflatable/New(location)
..()
@@ -61,11 +78,11 @@
return
/obj/structure/inflatable/attack_hand(mob/user as mob)
- add_fingerprint(user)
- return
+ add_fingerprint(user)
+ return
/obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(!istype(W)) return
+ if(!istype(W) || istype(W, /obj/item/weapon/inflatable_dispenser)) return
if (can_puncture(W))
visible_message("[user] pierces [src] with [W]!")
@@ -93,10 +110,11 @@
src.transfer_fingerprints_to(R)
qdel(src)
else
- //user << "You slowly deflate the inflatable wall."
- visible_message("[src] slowly deflates.")
+ if(!undeploy_path)
+ return
+ visible_message("\The [src] slowly deflates.")
spawn(50)
- var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
+ var/obj/item/inflatable/R = new undeploy_path(src.loc)
src.transfer_fingerprints_to(R)
qdel(src)
@@ -121,28 +139,14 @@
user.visible_message("[user] [attack_verb] at [src]!")
return 1
-/obj/item/inflatable/door/
- name = "inflatable door"
- desc = "A folded membrane which rapidly expands into a simple door on activation."
- icon = 'icons/obj/inflatable.dmi'
- icon_state = "folded_door"
-
- attack_self(mob/user)
- playsound(loc, 'sound/items/zip.ogg', 75, 1)
- user << "You inflate [src]."
- var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc)
- src.transfer_fingerprints_to(R)
- R.add_fingerprint(user)
- qdel(src)
-
/obj/structure/inflatable/door //Based on mineral door code
name = "inflatable door"
density = 1
anchored = 1
opacity = 0
- icon = 'icons/obj/inflatable.dmi'
icon_state = "door_closed"
+ undeploy_path = /obj/item/inflatable/door
var/state = 0 //closed, 1 == open
var/isSwitchingStates = 0
@@ -168,7 +172,6 @@
if(isSwitchingStates) return
if(ismob(user))
var/mob/M = user
- if(world.time - user.last_bumped <= 60) return //NOTE do we really need that?
if(M.client)
if(iscarbon(M))
var/mob/living/carbon/C = M
@@ -251,6 +254,7 @@
desc = "Contains inflatable walls and doors."
icon_state = "inf_box"
item_state = "syringe_kit"
+ w_class = 3
max_storage_space = 28
can_hold = list(/obj/item/inflatable)
@@ -259,7 +263,7 @@
new /obj/item/inflatable/door(src)
new /obj/item/inflatable/door(src)
new /obj/item/inflatable/door(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
+ new /obj/item/inflatable/wall(src)
+ new /obj/item/inflatable/wall(src)
+ new /obj/item/inflatable/wall(src)
+ new /obj/item/inflatable/wall(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
index 2d591f4c36b..0e5c787f1d3 100644
--- a/code/modules/mob/living/silicon/robot/robot_items.dm
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -310,4 +310,98 @@
name = "mobility module"
desc = "By retracting limbs and tucking in its head, a combat android can roll at high speeds."
icon = 'icons/obj/decals.dmi'
- icon_state = "shock"
\ No newline at end of file
+ icon_state = "shock"
+
+/obj/item/weapon/inflatable_dispenser
+ name = "inflatables dispenser"
+ desc = "Small device which allows rapid deployment and removal of inflatables."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "inf_deployer"
+ w_class = 3
+
+ // By default stores up to 10 walls and 5 doors. May be changed.
+ var/stored_walls = 10
+ var/stored_doors = 5
+ var/max_walls = 10
+ var/max_doors = 5
+ var/mode = 0 // 0 - Walls 1 - Doors
+
+/obj/item/weapon/inflatable_dispenser/examine(var/mob/user)
+ if(!..(user))
+ return
+ user << "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored."
+ user << "It is set to deploy [mode ? "doors" : "walls"]"
+
+/obj/item/weapon/inflatable_dispenser/attack_self()
+ mode = !mode
+ usr << "You set \the [src] to deploy [mode ? "doors" : "walls"]."
+
+/obj/item/weapon/inflatable_dispenser/afterattack(var/atom/A, var/mob/user)
+ ..(A, user)
+ if(!user)
+ return
+ if(!user.Adjacent(A))
+ user << "You can't reach!"
+ return
+ if(istype(A, /turf))
+ try_deploy_inflatable(A, user)
+ if(istype(A, /obj/item/inflatable) || istype(A, /obj/structure/inflatable))
+ pick_up(A, user)
+
+/obj/item/weapon/inflatable_dispenser/proc/try_deploy_inflatable(var/turf/T, var/mob/living/user)
+ if(mode) // Door deployment
+ if(!stored_doors)
+ user << "\The [src] is out of doors!"
+ return
+
+ if(T && istype(T))
+ new /obj/structure/inflatable/door(T)
+ stored_doors--
+
+ else // Wall deployment
+ if(!stored_walls)
+ user << "\The [src] is out of walls!"
+ return
+
+ if(T && istype(T))
+ new /obj/structure/inflatable/wall(T)
+ stored_walls--
+
+ playsound(T, 'sound/items/zip.ogg', 75, 1)
+ user << "You deploy the inflatable [mode ? "door" : "wall"]!"
+
+/obj/item/weapon/inflatable_dispenser/proc/pick_up(var/obj/A, var/mob/living/user)
+ if(istype(A, /obj/structure/inflatable))
+ if(istype(A, /obj/structure/inflatable/wall))
+ if(stored_walls >= max_walls)
+ user << "\The [src] is full."
+ return
+ stored_walls++
+ qdel(A)
+ else
+ if(stored_doors >= max_doors)
+ user << "\The [src] is full."
+ return
+ stored_doors++
+ qdel(A)
+ playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
+ visible_message("\The [user] deflates \the [A] with \the [src]!")
+ return
+ if(istype(A, /obj/item/inflatable))
+ if(istype(A, /obj/item/inflatable/wall))
+ if(stored_walls >= max_walls)
+ user << "\The [src] is full."
+ return
+ stored_walls++
+ qdel(A)
+ else
+ if(stored_doors >= max_doors)
+ usr << "\The [src] is full!"
+ return
+ stored_doors++
+ qdel(A)
+ visible_message("\The [user] picks up \the [A] with \the [src]!")
+ return
+
+ user << "You fail to pick up \the [A] with \the [src]"
+ return
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 33699cf6df8..cea3ca4ca14 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -254,6 +254,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
+ src.modules += new /obj/item/weapon/inflatable_dispenser(src) // Allows usage of inflatables. Since they are basically robotic alternative to EMTs, they should probably have them.
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
@@ -321,6 +322,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
src.modules += new /obj/item/device/pipe_painter(src)
+ src.modules += new /obj/item/weapon/inflatable_dispenser(src)
var/datum/matter_synth/metal = new /datum/matter_synth/metal()
var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()
@@ -362,6 +364,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/taperoll/engineering(src)
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/device/pipe_painter(src)
+ src.modules += new /obj/item/weapon/inflatable_dispenser(src)
src.emag = new /obj/item/borg/stun(src)
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
diff --git a/html/changelogs/Atlantis-PR-9274.yml b/html/changelogs/Atlantis-PR-9274.yml
new file mode 100644
index 00000000000..9aba32e619c
--- /dev/null
+++ b/html/changelogs/Atlantis-PR-9274.yml
@@ -0,0 +1,9 @@
+author: Atlantis
+
+delete-after: True
+
+changes:
+ - rscadd: "Added Inflatables Dispenser(ID), an item that allows rapid deployment, transport and removal of inflatables."
+ - rscadd: "Engineering, Construction and Crisis modules are now outfitted with ID."
+ - rscadd: "Three boxes in engineering have been replaced by three IDs."
+ - tweak: "w_classes of inflatables readjusted. Boxes and IDs can be carried in backpack now. Individual inflatables are small enough to fit in pocket."
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index e754acbc1d1..553916928bc 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index ff8893e80bd..30598909580 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -5696,6 +5696,7 @@
"cfB" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cfC" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access = list(10)},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cfD" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/construction)
+"cfE" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -22},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/steel_reinforced,/obj/item/weapon/inflatable_dispenser{pixel_x = 2; pixel_y = 2},/obj/item/weapon/inflatable_dispenser,/obj/item/weapon/inflatable_dispenser{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"cfF" = (/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/engineering/engine_eva)
"cfG" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/construction)
"cfH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/atmos_control)
@@ -5902,7 +5903,6 @@
"cjL" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/construction)
"cjM" = (/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel,/area/maintenance/atmos_control)
"cjN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/atmos_control)
-"cjO" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -22},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3; pixel_y = 0},/obj/structure/table/steel_reinforced,/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"cjP" = (/obj/machinery/suit_cycler/engineering,/obj/machinery/camera/network/engineering{c_tag = "Engineering EVA"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"cjQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/red,/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"cjR" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
@@ -7479,7 +7479,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejbPebOSbLWcfDcfGcejcfJcfHcfFcfKcfMcfLcfNcfNcgAcfOcfOcfPcfQcbFbYVbYUbYXcfRcaicfTcfWcfVcfZcfXcgabSUceLceLcaqcgbcaqbTFcbIcgccgdcgdcgdcgecbIcfYcggcgfcfYcghcgkcgicglcaEcgncdscgpcaIcgrcgqcgtbZycgxcgwbZycgybYfcgzcgCcgBcgDbYfccjccicgGcgFcgHcclcclcclccmcdLcgJcgIcgIcgKcgScgLcgOcgMciicgQcgTcgTcgTcgWcgYcgXchacgZchachbchccdScgNbPycgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafchdbKEbKEbKGbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaaaaacimcgUcgUcgUchfchgcejchichhchkchjchmchlchochnchqchpchschrchuchtchxchvchzchybSUbSUbSUbSUbSUbSUbSUbSUchCchAcaqchDcaqbTFcbIcbIctpctqctrcbIcbIchEchHchFcfYcaEcaEcaEcaEcaEcaIchIchJcaIchwchKchwbZychMchLbZybYfbYfbVibVicgBchNbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchPchOchOchQchSchRchUchTchXchVchYchYchYchYcidcicchYciechYcigcihcdSchZbPWchGcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcikcijcgEcilcincilcgEciocipciocgEaaaaaacjlcgUcgUchfchfcircejbQecischWciuciwcivciycixciIciHciHciJciHcbFbYVciKbYXciLcjrciMciOciNciOciPciQciqciqciAciAciAciAbTFciGciRciSciSciVciTciXciWciZciYcjbcjacjdcjccjccjeciUcaIcaIcaIcjhcjgcjibZybZybZybZybQtbpvbVicjkcjjcjmbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjocjncjqcjpbSabPwcjvbVKcbMcjycjAcjycjycjBcjDcjCcjFcjEcjFcjGcjHcdScmpbQucjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcjIcijcgEcilcjJcilcgEciocjKciocgEaaaaaacjlcgUchfchfchfcjLcmmcjNcjMchWcjOcjQcjPcjScjRcmocjTcjVcjUcjWcbFbYVcjXchzcjYckacjZckbckbckbckcckeckdckfcmRckhckgciAbTFciGckiciSckjcklckkcubckmckockncngckpckrckqcjccksciUbQDcnwcnuckvcfickwcnEcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckyckxckAckzckEcdOckBcdOckGckCckFckDckDckFckIckHckDckJckDckLckNcdSckPckOckQcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcjIcijcgEcilcjJcilcgEciocjKciocgEaaaaaacjlcgUchfchfchfcjLcmmcjNcjMchWcfEcjQcjPcjScjRcmocjTcjVcjUcjWcbFbYVcjXchzcjYckacjZckbckbckbckcckeckdckfcmRckhckgciAbTFciGckiciSckjcklckkcubckmckockncngckpckrckqcjccksciUbQDcnwcnuckvcfickwcnEcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckyckxckAckzckEcdOckBcdOckGckCckFckDckDckFckIckHckDckJckDckLckNcdSckPckOckQcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEckRckTckScgEckUckWckVcgEckYclackZcgEaaaaafcjlbQHcgUchfchfchfcejckMckKchWchWclcchWchWchWchWcldciHcleclfcbFclhclgcljcliclmclkclnclnclnclpclrclrcluciAcllclvclwbQSciGclyciSclzclBclAclDclCclFclEclHclGclJclIcjcclKciUcnVcnXclNclPclOclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIcfjbYfaaaaaaaaaaaaaaaaaaaaacdLclYclVcfnclZcdOcmbcmdcmccdScmecmfcmfcmfcmgcmicmhcmlcmkcmfcmfcmncdScmzcobcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgEclXcmDcmjcgEcmtcmDcEgcgEcmtcmDcEgcgEaaaaafcmQcgUcgUchfchfcmscejcmvcmucmxbRqcmAcmycmBcmBcmEcmCcmBcmFcIycbFcmIcmHcmKcmJcjrcmLcmLcmMclrcmNcmPcmOcmOciAcibcmScoybRRciGcmUciScmVcmXcmWciGcmYcnacmZciUcnbcndcnccjccneciUclLclMclNcnlcnfcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnhcnjcnicdScdScnHcntcnNcdScdScdScdScoucntcnNcdScdScnvcnocnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbOaafaafaafaaaaafcnxaafcnxaafcKAaafcpfaafcKAaafcpfaafaafaaacejcnqcnpchfchfcnrcnDcowcovcnycnmcnscnzcnzcnAcnzcnGcnBcoxcnGcnJcnFcnCcnIcnMcnOcnOcnOcnOcnLcnKcnRcnRcnRcgscgscgscgsbSgciGcnQcnScmVcnUcnTciGcmYcnacnWciUcnYcnZcnccoccoaciUclLclMclNcoecodcofclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcogcojcohcwlcokconcolcomcoocoqcopcdOaapaafaafaafaafaaaaaaaaabSYaaaaaaaaaaafcoscqscosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa