diff --git a/Brewfile.netlify b/Brewfile.netlify new file mode 100644 index 0000000..6d51a5e --- /dev/null +++ b/Brewfile.netlify @@ -0,0 +1 @@ +brew "llvm" diff --git a/ic10emu/build.rs b/ic10emu/build.rs index cdfded7..480398a 100644 --- a/ic10emu/build.rs +++ b/ic10emu/build.rs @@ -1,6 +1,6 @@ use convert_case::{Case, Casing}; use std::{ - collections::{HashMap, HashSet}, + collections::BTreeSet, env, fmt::Display, fs::{self, File}, @@ -9,20 +9,6 @@ use std::{ str::FromStr, }; -// trait PrimitiveRepr {} -// impl PrimitiveRepr for u8 {} -// impl PrimitiveRepr for u16 {} -// impl PrimitiveRepr for u32 {} -// impl PrimitiveRepr for u64 {} -// impl PrimitiveRepr for u128 {} -// impl PrimitiveRepr for usize {} -// impl PrimitiveRepr for i8 {} -// impl PrimitiveRepr for i16 {} -// impl PrimitiveRepr for i32 {} -// impl PrimitiveRepr for i64 {} -// impl PrimitiveRepr for i128 {} -// impl PrimitiveRepr for isize {} - struct EnumVariant

where P: Display + FromStr, @@ -32,14 +18,14 @@ where pub deprecated: bool, } -fn write_repr_enum( +fn write_repr_enum<'a, T: std::io::Write, I, P>( writer: &mut BufWriter, name: &str, - variants: &I, + variants: I, use_phf: bool, ) where - P: Display + FromStr, - for<'a> &'a I: IntoIterator)>, + P: Display + FromStr + 'a, + I: IntoIterator)>, { let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; write!( @@ -50,7 +36,7 @@ fn write_repr_enum( ) .unwrap(); for (name, variant) in variants { - let variant_name = name.to_case(Case::Pascal); + let variant_name = name.replace('.', "").to_case(Case::Pascal); let mut serialize = vec![name.clone()]; serialize.extend(variant.aliases.iter().cloned()); let serialize_str = serialize @@ -84,7 +70,7 @@ fn write_logictypes() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut logictypes: HashMap> = HashMap::new(); + let mut logictypes: Vec<(String, EnumVariant)> = Vec::new(); let l_infile = Path::new("data/logictypes.txt"); let l_contents = fs::read_to_string(l_infile).unwrap(); @@ -106,28 +92,28 @@ fn write_logictypes() { variant.aliases.push(name.to_string()); variant.deprecated = deprecated; } else { - logictypes.insert( + logictypes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: Some(val), deprecated, }, - ); + )); } } else { - logictypes.insert( + logictypes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: val, deprecated, }, - ); + )); } } - let mut slotlogictypes: HashMap> = HashMap::new(); + let mut slotlogictypes: Vec<(String, EnumVariant)> = Vec::new(); let sl_infile = Path::new("data/slotlogictypes.txt"); let sl_contents = fs::read_to_string(sl_infile).unwrap(); @@ -149,24 +135,24 @@ fn write_logictypes() { variant.aliases.push(name.to_string()); variant.deprecated = deprecated; } else { - slotlogictypes.insert( + slotlogictypes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: Some(val), deprecated, }, - ); + )); } } else { - slotlogictypes.insert( + slotlogictypes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: val, deprecated, }, - ); + )); } } @@ -186,31 +172,31 @@ fn write_enums() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut enums_lookup_map_builder = ::phf_codegen::Map::new(); - let mut check_set = std::collections::HashSet::new(); + let mut enums_map: Vec<(String, EnumVariant)> = Vec::new(); let e_infile = Path::new("data/enums.txt"); let e_contents = fs::read_to_string(e_infile).unwrap(); for line in e_contents.lines().filter(|l| !l.trim().is_empty()) { - let (name, val_str) = line.split_once(' ').unwrap(); + let mut it = line.splitn(3, ' '); + let name = it.next().unwrap(); + let val_str = it.next().unwrap(); + let val: Option = val_str.parse().ok(); + let docs = it.next(); + let deprecated = docs + .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") + .unwrap_or(false); - let val: Option = val_str.parse().ok(); - - if !check_set.contains(name) { - check_set.insert(name); - } - - if let Some(v) = val { - enums_lookup_map_builder.entry(name, &format!("{}u8", v)); - } + enums_map.push(( + name.to_string(), + EnumVariant { + aliases: Vec::new(), + value: val, + deprecated, + }, + )); } - writeln!( - &mut writer, - "pub(crate) const ENUM_LOOKUP: phf::Map<&'static str, u8> = {};", - enums_lookup_map_builder.build() - ) - .unwrap(); + write_repr_enum(&mut writer, "LogicEnums", &enums_map, true); println!("cargo:rerun-if-changed=data/enums.txt"); } @@ -222,7 +208,7 @@ fn write_modes() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut batchmodes: HashMap> = HashMap::new(); + let mut batchmodes: Vec<(String, EnumVariant)> = Vec::new(); let b_infile = Path::new("data/batchmodes.txt"); let b_contents = fs::read_to_string(b_infile).unwrap(); @@ -239,28 +225,28 @@ fn write_modes() { { variant.aliases.push(name.to_string()); } else { - batchmodes.insert( + batchmodes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: Some(val), deprecated: false, }, - ); + )); } } else { - batchmodes.insert( + batchmodes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: val, deprecated: false, }, - ); + )); } } - let mut reagentmodes: HashMap> = HashMap::new(); + let mut reagentmodes: Vec<(String, EnumVariant)> = Vec::new(); let r_infile = Path::new("data/reagentmodes.txt"); let r_contents = fs::read_to_string(r_infile).unwrap(); @@ -277,24 +263,24 @@ fn write_modes() { { variant.aliases.push(name.to_string()); } else { - reagentmodes.insert( + reagentmodes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: Some(val), deprecated: false, }, - ); + )); } } else { - reagentmodes.insert( + reagentmodes.push(( name.to_string(), EnumVariant { aliases: Vec::new(), value: val, deprecated: false, }, - ); + )); } } @@ -342,7 +328,7 @@ fn write_instructions_enum() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut instructions = HashSet::new(); + let mut instructions = BTreeSet::new(); let infile = Path::new("data/instructions.txt"); let contents = fs::read_to_string(infile).unwrap(); diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index b84052f..6b7a015 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,4 +1,4 @@ -use crate::interpreter; +use crate::interpreter::{self, ICError}; use crate::tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}; use itertools::Itertools; use std::error::Error; @@ -349,6 +349,7 @@ pub enum Operand { Number(Number), LogicType(LogicType), SlotLogicType(SlotLogicType), + LogicOrSlotLogicType(LogicType, SlotLogicType), BatchMode(BatchMode), ReagentMode(ReagentMode), Identifier(Identifier), @@ -369,11 +370,16 @@ impl Operand { Operand::Number(num) => Ok(num.value()), Operand::LogicType(lt) => lt .get_str("value") - .map(|val| val.parse::().unwrap() as f64) + .map(|val| val.parse::().unwrap() as f64) .ok_or(interpreter::ICError::TypeValueNotKnown), Operand::SlotLogicType(slt) => slt .get_str("value") - .map(|val| val.parse::().unwrap() as f64) + .map(|val| val.parse::().unwrap() as f64) + .ok_or(interpreter::ICError::TypeValueNotKnown), + // default to using LogicType when converting to value + Operand::LogicOrSlotLogicType(lt, _) => lt + .get_str("value") + .map(|val| val.parse::().unwrap() as f64) .ok_or(interpreter::ICError::TypeValueNotKnown), Operand::BatchMode(bm) => bm .get_str("value") @@ -487,6 +493,32 @@ impl Operand { } } + pub fn as_logic_type( + &self, + ic: &interpreter::IC, + inst: InstructionOp, + index: u32, + ) -> Result { + match &self { + Operand::LogicType(lt) => Ok(*lt), + Operand::LogicOrSlotLogicType(lt, _slt) => Ok(*lt), + _ => LogicType::try_from(self.as_value(ic, inst, index)?), + } + } + + pub fn as_slot_logic_type( + &self, + ic: &interpreter::IC, + inst: InstructionOp, + index: u32, + ) -> Result { + match &self { + Operand::SlotLogicType(slt) => Ok(*slt), + Operand::LogicOrSlotLogicType(_lt, slt) => Ok(*slt), + _ => SlotLogicType::try_from(self.as_value(ic, inst, index)?), + } + } + pub fn translate_alias(&self, ic: &interpreter::IC) -> Self { match &self { Operand::Identifier(id) => { @@ -760,12 +792,22 @@ impl FromStr for Operand { } } else if let Some(val) = CONSTANTS_LOOKUP.get(s) { Ok(Operand::Number(Number::Constant(*val))) - } else if let Some(val) = ENUM_LOOKUP.get(s) { - Ok(Operand::Number(Number::Enum(*val as f64))) + } else if let Ok(val) = LogicEnums::from_str(s) { + Ok(Operand::Number(Number::Enum( + val.get_str("value").unwrap().parse().unwrap(), + ))) } else if let Ok(lt) = LogicType::from_str(s) { - Ok(Operand::LogicType(lt)) + if let Ok(slt) = SlotLogicType::from_str(s) { + Ok(Operand::LogicOrSlotLogicType(lt, slt)) + } else { + Ok(Operand::LogicType(lt)) + } } else if let Ok(slt) = SlotLogicType::from_str(s) { - Ok(Operand::SlotLogicType(slt)) + if let Ok(lt) = LogicType::from_str(s) { + Ok(Operand::LogicOrSlotLogicType(lt, slt)) + } else { + Ok(Operand::SlotLogicType(slt)) + } } else if let Ok(bm) = BatchMode::from_str(s) { Ok(Operand::BatchMode(bm)) } else if let Ok(rm) = ReagentMode::from_str(s) { @@ -853,6 +895,7 @@ impl Display for Operand { }, Operand::LogicType(logic) => Display::fmt(logic, f), Operand::SlotLogicType(slot_logic) => Display::fmt(slot_logic, f), + Operand::LogicOrSlotLogicType(logic, _) => Display::fmt(logic, f), Operand::BatchMode(batch_mode) => Display::fmt(batch_mode, f), Operand::ReagentMode(reagent_mode) => Display::fmt(reagent_mode, f), Operand::Identifier(ident) => Display::fmt(&ident, f), @@ -1027,6 +1070,7 @@ mod tests { define a_hash HASH(\"This is a String\")\n\ alias a_var r0\n\ alias a_device d0\n\ + s d0 On 1\n\ s d0 12 0 \n\ move r2 LogicType.Temperature\n\ move r3 pinf\n\ @@ -1105,6 +1149,20 @@ mod tests { },),), comment: None, }, + Line { + code: Some(Code::Instruction(Instruction { + instruction: InstructionOp::S, + operands: vec![ + Operand::DeviceSpec(DeviceSpec { + device: Device::Numbered(0), + connection: None + }), + Operand::LogicOrSlotLogicType(LogicType::On, SlotLogicType::On), + Operand::Number(Number::Float(1.0)) + ] + })), + comment: None, + }, Line { code: Some(Code::Instruction(Instruction { instruction: InstructionOp::S, @@ -1127,9 +1185,7 @@ mod tests { indirection: 0, target: 2, }), - Operand::Identifier(Identifier { - name: "LogicType.Temperature".to_owned() - }), + Operand::Number(Number::Enum(6.0)), ], },),), comment: None, @@ -1295,10 +1351,10 @@ mod tests { test_roundtrip("42"); test_roundtrip("1.2345"); test_roundtrip("-1.2345"); - test_roundtrip(&LogicType::Pressure.to_string()); - test_roundtrip(&SlotLogicType::Occupied.to_string()); - test_roundtrip(&BatchMode::Average.to_string()); - test_roundtrip(&ReagentMode::Recipe.to_string()); + test_roundtrip(LogicType::Pressure.as_ref()); + test_roundtrip(SlotLogicType::Occupied.as_ref()); + test_roundtrip(BatchMode::Average.as_ref()); + test_roundtrip(ReagentMode::Recipe.as_ref()); test_roundtrip("pi"); test_roundtrip("pinf"); test_roundtrip("ninf"); diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 30dd797..568e67a 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -32,81 +32,83 @@ impl Error for LineError {} #[derive(Debug, Error, Clone, Serialize, Deserialize)] pub enum ICError { - #[error("Error Compiling Code: {0}")] + #[error("error compiling code: {0}")] ParseError(#[from] ParseError), - #[error("Duplicate label {0}")] + #[error("duplicate label {0}")] DuplicateLabel(String), - #[error("Instruction Pointer out of range: '{0}'")] + #[error("instruction pointer out of range: '{0}'")] InstructionPointerOutOfRange(u32), - #[error("Register Pointer out of range: '{0}'")] + #[error("register pointer out of range: '{0}'")] RegisterIndexOutOfRange(f64), - #[error("Device Pointer out of range: '{0}'")] + #[error("device pointer out of range: '{0}'")] DeviceIndexOutOfRange(f64), - #[error("Stack index out of range: '{0}'")] + #[error("stack index out of range: '{0}'")] StackIndexOutOfRange(f64), #[error("slot index out of range: '{0}'")] SlotIndexOutOfRange(f64), - #[error("Unknown device ID '{0}'")] + #[error("pin index {0} out of range 0-6")] + PinIndexOutOfRange(usize), + #[error("connection index {0} out of range {1}")] + ConnectionIndexOutOfRange(usize, usize), + #[error("unknown device ID '{0}'")] UnknownDeviceID(f64), - #[error("Too few operands!: provide: '{provided}', desired: '{desired}'")] + #[error("too few operands!: provide: '{provided}', desired: '{desired}'")] TooFewOperands { provided: u32, desired: u32 }, - #[error("Too many operands!: provide: '{provided}', desired: '{desired}'")] + #[error("too many operands!: provide: '{provided}', desired: '{desired}'")] TooManyOperands { provided: u32, desired: u32 }, - #[error("Incorrect Operand Type for instruction `{inst}` operand {index}, not a {desired} ")] + #[error("incorrect operand type for instruction `{inst}` operand {index}, not a {desired} ")] IncorrectOperandType { inst: grammar::InstructionOp, index: u32, desired: String, }, - #[error("Unknown identifier '{0}")] + #[error("unknown identifier {0}")] UnknownIdentifier(String), - #[error("Device Not Set")] + #[error("device Not Set")] DeviceNotSet, - #[error("Shift Underflow i64(signed long)")] + #[error("shift Underflow i64(signed long)")] ShiftUnderflowI64, - #[error("Shift Overflow i64(signed long)")] + #[error("shift Overflow i64(signed long)")] ShiftOverflowI64, - #[error("Shift Underflow i32(signed int)")] + #[error("shift underflow i32(signed int)")] ShiftUnderflowI32, - #[error("Shift Overflow i32(signed int)")] + #[error("shift overflow i32(signed int)")] ShiftOverflowI32, - #[error("Stack Underflow")] + #[error("stack underflow")] StackUnderflow, - #[error("Stack Overflow")] + #[error("stack overflow")] StackOverflow, - #[error("Duplicate Define '{0}'")] + #[error("duplicate define '{0}'")] DuplicateDefine(String), - #[error("Read Only field '{0}'")] + #[error("read only field '{0}'")] ReadOnlyField(String), - #[error("Write Only field '{0}'")] + #[error("write only field '{0}'")] WriteOnlyField(String), - #[error("Device Has No Field '{0}'")] + #[error("device has no field '{0}'")] DeviceHasNoField(String), - #[error("Device has not IC")] + #[error("device has not ic")] DeviceHasNoIC, - #[error("Unknown Device '{0}'")] - UnknownDeviceId(f64), - #[error("Unknown Logic Type '{0}'")] + #[error("unknown device '{0}'")] + unknownDeviceId(f64), + #[error("unknown logic type '{0}'")] UnknownLogicType(f64), - #[error("Unknown Slot Logic Type '{0}'")] + #[error("unknown slot logic type '{0}'")] UnknownSlotLogicType(f64), - #[error("Unknown Batch Mode '{0}'")] + #[error("unknown batch mode '{0}'")] UnknownBatchMode(f64), - #[error("Unknown Reagent Mode '{0}'")] + #[error("unknown reagent mode '{0}'")] UnknownReagentMode(f64), - #[error("Type Value Not Known")] + #[error("type value not known")] TypeValueNotKnown, - #[error("Empty Device List")] + #[error("empty device list")] EmptyDeviceList, - #[error("Connection index out of range: '{0}'")] - ConnectionIndexOutOFRange(u32), - #[error("Connection specifier missing")] + #[error("connection specifier missing")] MissingConnectionSpecifier, - #[error("No data network on connection '{0}'")] - NotDataConnection(u32), - #[error("Network not connected on connection '{0}'")] - NetworkNotConnected(u32), - #[error("Bad Network Id '{0}'")] + #[error("no data network on connection '{0}'")] + NotDataConnection(usize), + #[error("network not connected on connection '{0}'")] + NetworkNotConnected(usize), + #[error("bad network Id '{0}'")] BadNetworkId(u32), } @@ -2030,9 +2032,9 @@ impl IC { let RegisterSpec { indirection, target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? else { + let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? + else { return Err(DeviceNotSet); }; let device = vm.get_device_same_network(this.device, device_id); @@ -2057,9 +2059,9 @@ impl IC { let RegisterSpec { indirection, target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? else { + let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? + else { return Err(DeviceNotSet); }; let device = vm.get_device_same_network(this.device, device_id); @@ -2080,9 +2082,9 @@ impl IC { oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), }, Put => match &operands[..] { - [dev_id, addr, val] => { - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 1)? else { + let (Some(device_id), _connection) = dev_id.as_device(this, inst, 1)? + else { return Err(DeviceNotSet); }; let device = vm.get_device_same_network(this.device, device_id); @@ -2093,6 +2095,7 @@ impl IC { let val = val.as_value(this, inst, 3)?; let mut ic = vm.ics.get(ic_id).unwrap().borrow_mut(); ic.poke(addr, val)?; + vm.set_modified(device_id); Ok(()) } None => Err(DeviceHasNoIC), @@ -2116,6 +2119,7 @@ impl IC { let val = val.as_value(this, inst, 3)?; let mut ic = vm.ics.get(ic_id).unwrap().borrow_mut(); ic.poke(addr, val)?; + vm.set_modified(device_id as u16); Ok(()) } None => Err(DeviceHasNoIC), @@ -2131,7 +2135,7 @@ impl IC { let (Some(device_id), connection) = dev.as_device(this, inst, 1)? else { return Err(DeviceNotSet); }; - let lt = LogicType::try_from(lt.as_value(this, inst, 2)?)?; + let lt = lt.as_logic_type(this, inst, 2)?; if CHANNEL_LOGIC_TYPES.contains(<) { let channel = lt.as_channel().unwrap(); let Some(connection) = connection else { @@ -2150,6 +2154,7 @@ impl IC { Some(device) => { let val = val.as_value(this, inst, 1)?; device.borrow_mut().set_field(lt, val)?; + vm.set_modified(device_id); Ok(()) } None => Err(UnknownDeviceID(device_id as f64)), @@ -2166,9 +2171,10 @@ impl IC { let device = vm.get_device_same_network(this.device, device_id as u16); match device { Some(device) => { - let lt = LogicType::try_from(lt.as_value(this, inst, 2)?)?; + let lt = lt.as_logic_type(this, inst, 2)?; let val = val.as_value(this, inst, 3)?; device.borrow_mut().set_field(lt, val)?; + vm.set_modified(device_id as u16); Ok(()) } None => Err(UnknownDeviceID(device_id)), @@ -2177,7 +2183,7 @@ impl IC { oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), }, Ss => match &operands[..] { - [dev, index, lt, val] => { + [dev, index, slt, val] => { let (Some(device_id), _connection) = dev.as_device(this, inst, 1)? else { return Err(DeviceNotSet); }; @@ -2185,9 +2191,10 @@ impl IC { match device { Some(device) => { let index = index.as_value(this, inst, 2)?; - let lt = SlotLogicType::try_from(lt.as_value(this, inst, 3)?)?; + let slt = slt.as_slot_logic_type(this, inst, 3)?; let val = val.as_value(this, inst, 4)?; - device.borrow_mut().set_slot_field(index, lt, val)?; + device.borrow_mut().set_slot_field(index, slt, val)?; + vm.set_modified(device_id); Ok(()) } None => Err(UnknownDeviceID(device_id as f64)), @@ -2198,7 +2205,7 @@ impl IC { Sb => match &operands[..] { [prefab, lt, val] => { let prefab = prefab.as_value(this, inst, 1)?; - let lt = LogicType::try_from(lt.as_value(this, inst, 2)?)?; + let lt = lt.as_logic_type(this, inst, 2)?; let val = val.as_value(this, inst, 3)?; vm.set_batch_device_field(this.device, prefab, lt, val)?; Ok(()) @@ -2206,12 +2213,12 @@ impl IC { oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), }, Sbs => match &operands[..] { - [prefab, index, lt, val] => { + [prefab, index, slt, val] => { let prefab = prefab.as_value(this, inst, 1)?; let index = index.as_value(this, inst, 2)?; - let lt = SlotLogicType::try_from(lt.as_value(this, inst, 3)?)?; + let slt = slt.as_slot_logic_type(this, inst, 3)?; let val = val.as_value(this, inst, 4)?; - vm.set_batch_device_slot_field(this.device, prefab, index, lt, val)?; + vm.set_batch_device_slot_field(this.device, prefab, index, slt, val)?; Ok(()) } oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), @@ -2220,7 +2227,7 @@ impl IC { [prefab, name, lt, val] => { let prefab = prefab.as_value(this, inst, 1)?; let name = name.as_value(this, inst, 2)?; - let lt = LogicType::try_from(lt.as_value(this, inst, 3)?)?; + let lt = lt.as_logic_type(this, inst, 3)?; let val = val.as_value(this, inst, 4)?; vm.set_batch_name_device_field(this.device, prefab, name, lt, val)?; Ok(()) @@ -2237,7 +2244,7 @@ impl IC { let (Some(device_id), connection) = dev.as_device(this, inst, 2)? else { return Err(DeviceNotSet); }; - let lt = LogicType::try_from(lt.as_value(this, inst, 3)?)?; + let lt = lt.as_logic_type(this, inst, 3)?; if CHANNEL_LOGIC_TYPES.contains(<) { let channel = lt.as_channel().unwrap(); let Some(connection) = connection else { @@ -2276,7 +2283,7 @@ impl IC { let device = vm.get_device_same_network(this.device, device_id as u16); match device { Some(device) => { - let lt = LogicType::try_from(lt.as_value(this, inst, 3)?)?; + let lt = lt.as_logic_type(this, inst, 3)?; let val = device.borrow().get_field(lt)?; this.set_register(indirection, target, val)?; Ok(()) @@ -2287,7 +2294,7 @@ impl IC { oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), }, Ls => match &operands[..] { - [reg, dev, index, lt] => { + [reg, dev, index, slt] => { let RegisterSpec { indirection, target, @@ -2299,8 +2306,8 @@ impl IC { match device { Some(device) => { let index = index.as_value(this, inst, 3)?; - let lt = SlotLogicType::try_from(lt.as_value(this, inst, 4)?)?; - let val = device.borrow().get_slot_field(index, lt)?; + let slt = slt.as_slot_logic_type(this, inst, 4)?; + let val = device.borrow().get_slot_field(index, slt)?; this.set_register(indirection, target, val)?; Ok(()) } @@ -2339,7 +2346,7 @@ impl IC { target, } = reg.as_register(this, inst, 1)?; let prefab = prefab.as_value(this, inst, 2)?; - let lt = LogicType::try_from(lt.as_value(this, inst, 3)?)?; + let lt = lt.as_logic_type(this, inst, 3)?; let bm = BatchMode::try_from(bm.as_value(this, inst, 4)?)?; let val = vm.get_batch_device_field(this.device, prefab, lt, bm)?; this.set_register(indirection, target, val)?; @@ -2355,7 +2362,7 @@ impl IC { } = reg.as_register(this, inst, 1)?; let prefab = prefab.as_value(this, inst, 2)?; let name = name.as_value(this, inst, 3)?; - let lt = LogicType::try_from(lt.as_value(this, inst, 4)?)?; + let lt = lt.as_logic_type(this, inst, 4)?; let bm = BatchMode::try_from(bm.as_value(this, inst, 5)?)?; let val = vm.get_batch_name_device_field(this.device, prefab, name, lt, bm)?; @@ -2373,7 +2380,7 @@ impl IC { let prefab = prefab.as_value(this, inst, 2)?; let name = name.as_value(this, inst, 3)?; let index = index.as_value(this, inst, 4)?; - let slt = SlotLogicType::try_from(slt.as_value(this, inst, 5)?)?; + let slt = slt.as_slot_logic_type(this, inst, 5)?; let bm = BatchMode::try_from(bm.as_value(this, inst, 6)?)?; let val = vm.get_batch_name_device_slot_field( this.device, @@ -2396,7 +2403,7 @@ impl IC { } = reg.as_register(this, inst, 1)?; let prefab = prefab.as_value(this, inst, 2)?; let index = index.as_value(this, inst, 3)?; - let slt = SlotLogicType::try_from(slt.as_value(this, inst, 4)?)?; + let slt = slt.as_slot_logic_type(this, inst, 4)?; let bm = BatchMode::try_from(bm.as_value(this, inst, 5)?)?; let val = vm.get_batch_device_slot_field(this.device, prefab, index, slt, bm)?; @@ -2410,8 +2417,8 @@ impl IC { let result = process_op(self); if result.is_ok() || advance_ip_on_err { self.ic += 1; + self.ip = next_ip; } - self.ip = next_ip; result } } diff --git a/ic10emu/src/lib.rs b/ic10emu/src/lib.rs index a41db7a..c208fed 100644 --- a/ic10emu/src/lib.rs +++ b/ic10emu/src/lib.rs @@ -18,18 +18,20 @@ use thiserror::Error; #[derive(Error, Debug, Serialize, Deserialize)] pub enum VMError { - #[error("Device with id '{0}' does not exist")] + #[error("device with id '{0}' does not exist")] UnknownId(u16), - #[error("IC with id '{0}' does not exist")] + #[error("ic with id '{0}' does not exist")] UnknownIcId(u16), - #[error("Device with id '{0}' does not have a IC Slot")] + #[error("device with id '{0}' does not have a ic slot")] NoIC(u16), - #[error("IC encountered an error: {0}")] + #[error("ic encountered an error: {0}")] ICError(#[from] ICError), - #[error("IC encountered an error: {0}")] + #[error("ic encountered an error: {0}")] LineError(#[from] LineError), - #[error("Invalid network ID {0}")] + #[error("invalid network id {0}")] InvalidNetwork(u16), + #[error("device {0} not visible to device {1} (not on the same networks)")] + DeviceNotVisible(u16, u16), } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] @@ -48,6 +50,9 @@ pub struct LogicField { #[derive(Debug, Default, Serialize, Deserialize)] pub struct Slot { pub typ: SlotType, + // FIXME: this actualy needs to be an "Occupant" field + // where the Occupant is an items with a + // quantity, PrefabName/Hash, fields, etc pub fields: HashMap, } @@ -169,7 +174,7 @@ pub struct Device { pub slots: Vec, pub reagents: HashMap>, pub ic: Option, - pub connections: [Connection; 8], + pub connections: Vec, } #[derive(Debug, Serialize, Deserialize)] @@ -200,6 +205,9 @@ pub struct VM { id_gen: IdSequenceGenerator, network_id_gen: IdSequenceGenerator, random: Rc>, + + /// list of device id's touched on the last operation + operation_modified: RefCell>, } impl Default for Network { @@ -261,55 +269,123 @@ impl Device { slots: Vec::new(), reagents: HashMap::new(), ic: None, - connections: [Connection::default(); 8], + connections: vec![Connection::CableNetwork(None)], }; - device.connections[0] = Connection::CableNetwork(None); + device.fields.insert( + LogicType::ReferenceId, + LogicField { + field_type: FieldType::Read, + value: id as f64, + }, + ); device } pub fn with_ic(id: u16, ic: u16) -> Self { let mut device = Device::new(id); device.ic = Some(ic); - device.fields.insert( - LogicType::Setting, - LogicField { - field_type: FieldType::ReadWrite, - value: 0.0, - }, - ); + device.connections = vec![Connection::CableNetwork(None), Connection::Other]; device.prefab_name = Some("StructureCircuitHousing".to_owned()); - device.fields.insert( - LogicType::Error, - LogicField { - field_type: FieldType::ReadWrite, - value: 0.0, - }, - ); device.prefab_hash = Some(-128473777); - device.fields.insert( - LogicType::PrefabHash, - LogicField { - field_type: FieldType::Read, - value: -128473777.0, - }, - ); + device.fields.extend(vec![ + ( + LogicType::Power, + LogicField { + field_type: FieldType::Read, + value: 1.0, + }, + ), + ( + LogicType::Error, + LogicField { + field_type: FieldType::ReadWrite, + value: 0.0, + }, + ), + ( + LogicType::Setting, + LogicField { + field_type: FieldType::ReadWrite, + value: 0.0, + }, + ), + ( + LogicType::On, + LogicField { + field_type: FieldType::ReadWrite, + value: 0.0, + }, + ), + ( + LogicType::RequiredPower, + LogicField { + field_type: FieldType::Read, + value: 0.0, + }, + ), + ( + LogicType::PrefabHash, + LogicField { + field_type: FieldType::Read, + value: -128473777.0, + }, + ), + ( + LogicType::LineNumber, + LogicField { + field_type: FieldType::ReadWrite, + value: 0.0, + }, + ), + ( + LogicType::ReferenceId, + LogicField { + field_type: FieldType::Read, + value: id as f64, + }, + ), + ]); + device.slots.push(Slot { + typ: SlotType::ProgramableChip, + fields: HashMap::from([ + ( + SlotLogicType::PrefabHash, + LogicField { + field_type: FieldType::Read, + value: -744098481.0, + }, + ), + ( + SlotLogicType::LineNumber, + LogicField { + field_type: FieldType::Read, + value: 0.0, + }, + ), + ]), + }); + device } pub fn get_network_id(&self, connection: usize) -> Result { - if connection >= 8 { - Err(ICError::ConnectionIndexOutOFRange(connection as u32)) + if connection >= self.connections.len() { + Err(ICError::ConnectionIndexOutOfRange( + connection, + self.connections.len(), + )) } else if let Connection::CableNetwork(network_id) = self.connections[connection] { if let Some(network_id) = network_id { Ok(network_id) } else { - Err(ICError::NetworkNotConnected(connection as u32)) + Err(ICError::NetworkNotConnected(connection)) } } else { - Err(ICError::NotDataConnection(connection as u32)) + Err(ICError::NotDataConnection(connection)) } } + // FIXME: this needs some logic to link some special fields like "LineNumber" to the chip pub fn get_field(&self, typ: grammar::LogicType) -> Result { if let Some(field) = self.fields.get(&typ) { if field.field_type == FieldType::Read || field.field_type == FieldType::ReadWrite { @@ -322,6 +398,7 @@ impl Device { } } + // FIXME: this needs some logic to link some special fields like "LineNumber" to the chip pub fn set_field(&mut self, typ: grammar::LogicType, val: f64) -> Result<(), ICError> { if let Some(field) = self.fields.get_mut(&typ) { if field.field_type == FieldType::Write || field.field_type == FieldType::ReadWrite { @@ -335,6 +412,7 @@ impl Device { } } + // FIXME: this needs to work with slot Occupants, see `Slot` decl pub fn get_slot_field(&self, index: f64, typ: grammar::SlotLogicType) -> Result { if let Some(field) = self .slots @@ -353,6 +431,7 @@ impl Device { } } + // FIXME: this needs to work with slot Occupants, see `Slot` decl pub fn set_slot_field( &mut self, index: f64, @@ -385,6 +464,11 @@ impl Device { } 0.0 } + + pub fn set_name(&mut self, name: &str) { + self.name_hash = Some((const_crc32::crc32(name.as_bytes()) as i32).into()); + self.name = Some(name.to_owned()); + } } impl Default for VM { @@ -410,6 +494,7 @@ impl VM { id_gen, network_id_gen, random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), + operation_modified: RefCell::new(Vec::new()), }; let _ = vm.add_ic(None); vm @@ -447,15 +532,27 @@ impl VM { }); } let id = device.id; + + let first_data_network = device + .connections + .iter() + .enumerate() + .find_map(|(index, conn)| match conn { + Connection::CableNetwork(_) => Some(index), + Connection::Other => None, + }); self.devices.insert(id, Rc::new(RefCell::new(device))); - let _ = self.add_device_to_network( - id, - if let Some(network) = network { - network - } else { - self.default_network - }, - ); + if let Some(first_data_network) = first_data_network { + let _ = self.add_device_to_network( + id, + if let Some(network) = network { + network + } else { + self.default_network + }, + first_data_network, + ); + } Ok(id) } @@ -481,16 +578,27 @@ impl VM { } let id = device.id; let ic_id = ic.id; + let first_data_network = device + .connections + .iter() + .enumerate() + .find_map(|(index, conn)| match conn { + Connection::CableNetwork(_) => Some(index), + Connection::Other => None, + }); self.devices.insert(id, Rc::new(RefCell::new(device))); self.ics.insert(ic_id, Rc::new(RefCell::new(ic))); - let _ = self.add_device_to_network( - id, - if let Some(network) = network { - network - } else { - self.default_network - }, - ); + if let Some(first_data_network) = first_data_network { + let _ = self.add_device_to_network( + id, + if let Some(network) = network { + network + } else { + self.default_network + }, + first_data_network, + ); + } Ok(id) } @@ -555,9 +663,16 @@ impl VM { Ok(true) } + /// returns a list of device ids modified in the last operations + pub fn last_operation_modified(&self) -> Vec { + self.operation_modified.borrow().clone() + } + pub fn step_ic(&self, id: u16, advance_ip_on_err: bool) -> Result { + self.operation_modified.borrow_mut().clear(); let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?.clone(); let ic_id = *device.borrow().ic.as_ref().ok_or(VMError::NoIC(id))?; + self.set_modified(id); let ic = self .ics .get(&ic_id) @@ -570,6 +685,7 @@ impl VM { /// returns true if executed 128 lines, false if returned early. pub fn run_ic(&self, id: u16, ignore_errors: bool) -> Result { + self.operation_modified.borrow_mut().clear(); let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?.clone(); let ic_id = *device.borrow().ic.as_ref().ok_or(VMError::NoIC(id))?; let ic = self @@ -578,6 +694,7 @@ impl VM { .ok_or(VMError::UnknownIcId(ic_id))? .clone(); ic.borrow_mut().ic = 0; + self.set_modified(id); for _i in 0..128 { if let Err(err) = ic.borrow_mut().step(self, ignore_errors) { if !ignore_errors { @@ -594,6 +711,10 @@ impl VM { Ok(true) } + pub fn set_modified(&self, id: u16) { + self.operation_modified.borrow_mut().push(id); + } + pub fn reset_ic(&self, id: u16) -> Result { let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?.clone(); let ic_id = *device.borrow().ic.as_ref().ok_or(VMError::NoIC(id))?; @@ -665,11 +786,71 @@ impl VM { false } - fn add_device_to_network(&self, id: u16, network_id: u16) -> Result { - if !self.devices.contains_key(&id) { + /// return a vecter with the device ids the source id can see via it's connected netowrks + pub fn visible_devices(&self, source: u16) -> Vec { + self.networks + .values() + .filter_map(|net| { + if net.borrow().contains(&[source]) { + Some( + net.borrow() + .devices + .iter() + .filter(|id| id != &&source) + .copied() + .collect_vec(), + ) + } else { + None + } + }) + .concat() + } + + pub fn set_pin(&self, id: u16, pin: usize, val: Option) -> Result { + let Some(device) = self.devices.get(&id) else { return Err(VMError::UnknownId(id)); }; + if let Some(other_device) = val { + if !self.devices.contains_key(&other_device) { + return Err(VMError::UnknownId(other_device)); + } + if !self.devices_on_same_network(&[id, other_device]) { + return Err(VMError::DeviceNotVisible(other_device, id)); + } + } + if !(0..6).contains(&pin) { + Err(ICError::PinIndexOutOfRange(pin).into()) + } else { + let Some(ic_id) = device.borrow().ic else { + return Err(VMError::NoIC(id)); + }; + self.ics.get(&ic_id).unwrap().borrow_mut().pins[pin] = val; + Ok(true) + } + } + + pub fn add_device_to_network( + &self, + id: u16, + network_id: u16, + connection: usize, + ) -> Result { if let Some(network) = self.networks.get(&network_id) { + let Some(device) = self.devices.get(&id) else { + return Err(VMError::UnknownId(id)); + }; + if connection >= device.borrow().connections.len() { + let conn_len = device.borrow().connections.len(); + return Err(ICError::ConnectionIndexOutOfRange(connection, conn_len).into()); + } + let Connection::CableNetwork(ref mut conn) = + device.borrow_mut().connections[connection] + else { + return Err(ICError::NotDataConnection(connection).into()); + }; + *conn = Some(network_id); + network.borrow_mut().add(id); Ok(true) } else { @@ -677,6 +858,27 @@ impl VM { } } + pub fn remove_device_from_network(&self, id: u16, network_id: u16) -> Result { + if let Some(network) = self.networks.get(&network_id) { + let Some(device) = self.devices.get(&id) else { + return Err(VMError::UnknownId(id)); + }; + let mut device_ref = device.borrow_mut(); + + for conn in device_ref.connections.iter_mut() { + if let Connection::CableNetwork(conn) = conn { + if conn.is_some_and(|id| id == network_id) { + *conn = None; + } + } + } + network.borrow_mut().remove(id); + Ok(true) + } else { + Err(VMError::InvalidNetwork(network_id)) + } + } + pub fn set_batch_device_field( &self, source: u16, @@ -685,7 +887,10 @@ impl VM { val: f64, ) -> Result<(), ICError> { self.batch_device(source, prefab, None) - .map(|device| device.borrow_mut().set_field(typ, val)) + .map(|device| { + self.set_modified(device.borrow().id); + device.borrow_mut().set_field(typ, val) + }) .try_collect() } @@ -698,7 +903,10 @@ impl VM { val: f64, ) -> Result<(), ICError> { self.batch_device(source, prefab, None) - .map(|device| device.borrow_mut().set_slot_field(index, typ, val)) + .map(|device| { + self.set_modified(device.borrow().id); + device.borrow_mut().set_slot_field(index, typ, val) + }) .try_collect() } @@ -711,7 +919,10 @@ impl VM { val: f64, ) -> Result<(), ICError> { self.batch_device(source, prefab, Some(name)) - .map(|device| device.borrow_mut().set_field(typ, val)) + .map(|device| { + self.set_modified(device.borrow().id); + device.borrow_mut().set_field(typ, val) + }) .try_collect() } diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index ac86864..490135a 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -2,15 +2,19 @@ mod utils; mod types; -use types::{Stack, Registers}; +use ic10emu::{ + grammar::{LogicType, SlotLogicType}, + Connection, +}; +use serde::{Deserialize, Serialize}; +use types::{Registers, Stack}; -use std::{cell::RefCell, rc::Rc}; +use std::{cell::RefCell, rc::Rc, str::FromStr}; use itertools::Itertools; // use itertools::Itertools; use wasm_bindgen::prelude::*; - #[wasm_bindgen] extern "C" { fn alert(s: &str); @@ -22,6 +26,16 @@ pub struct DeviceRef { vm: Rc>, } +use thiserror::Error; + +#[derive(Error, Debug, Serialize, Deserialize)] +pub enum BindingError { + #[error("{0} is not a valid variant")] + InvalidEnumVariant(String), + #[error("Index {0} is out of range {1}")] + OutOfBounds(usize, usize), +} + #[wasm_bindgen] impl DeviceRef { fn from_device(device: Rc>, vm: Rc>) -> Self { @@ -75,125 +89,81 @@ impl DeviceRef { #[wasm_bindgen(getter, js_name = "ip")] pub fn ic_ip(&self) -> Option { - self.device - .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().ip) - }) - .flatten() + self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm + .borrow() + .ics + .get(ic) + .map(|ic| ic.as_ref().borrow().ip) + }) } #[wasm_bindgen(getter, js_name = "instructionCount")] pub fn ic_instruction_count(&self) -> Option { - self.device - .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().ic) - }) - .flatten() + self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm + .borrow() + .ics + .get(ic) + .map(|ic| ic.as_ref().borrow().ic) + }) } #[wasm_bindgen(getter, js_name = "stack")] pub fn ic_stack(&self) -> Option { - self.device - .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| Stack(ic.as_ref().borrow().stack)) - }) - .flatten() + self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm + .borrow() + .ics + .get(ic) + .map(|ic| Stack(ic.as_ref().borrow().stack)) + }) } #[wasm_bindgen(getter, js_name = "registers")] pub fn ic_registers(&self) -> Option { - self.device - .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| Registers(ic.as_ref().borrow().registers)) - }) - .flatten() + self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm + .borrow() + .ics + .get(ic) + .map(|ic| Registers(ic.as_ref().borrow().registers)) + }) } #[wasm_bindgen(getter, js_name = "aliases", skip_typescript)] pub fn ic_aliases(&self) -> JsValue { - serde_wasm_bindgen::to_value( - &self - .device + serde_wasm_bindgen::to_value(&self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().aliases.clone()) - }) - .flatten(), - ) + .ics + .get(ic) + .map(|ic| ic.as_ref().borrow().aliases.clone()) + })) .unwrap() } #[wasm_bindgen(getter, js_name = "defines", skip_typescript)] pub fn ic_defines(&self) -> JsValue { - serde_wasm_bindgen::to_value( - &self - .device + serde_wasm_bindgen::to_value(&self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().defines.clone()) - }) - .flatten(), - ) + .ics + .get(ic) + .map(|ic| ic.as_ref().borrow().defines.clone()) + })) .unwrap() } #[wasm_bindgen(getter, js_name = "pins", skip_typescript)] pub fn ic_pins(&self) -> JsValue { - serde_wasm_bindgen::to_value( - &self - .device + serde_wasm_bindgen::to_value(&self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().pins) - }) - .flatten(), - ) + .ics + .get(ic) + .map(|ic| ic.as_ref().borrow().pins) + })) .unwrap() } @@ -203,34 +173,25 @@ impl DeviceRef { .borrow() .ic .as_ref() - .map(|ic| { + .and_then(|ic| { self.vm .borrow() .ics .get(ic) .map(|ic| ic.borrow().state.clone()) }) - .flatten() .map(|state| state.to_string()) } - #[wasm_bindgen(getter, js_name = "program")] + #[wasm_bindgen(getter, js_name = "program", skip_typescript)] pub fn ic_program(&self) -> JsValue { - serde_wasm_bindgen::to_value( - &self - .device + serde_wasm_bindgen::to_value(&self.device.borrow().ic.as_ref().and_then(|ic| { + self.vm .borrow() - .ic - .as_ref() - .map(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.borrow().program.clone()) - }) - .flatten(), - ) + .ics + .get(ic) + .map(|ic| ic.borrow().program.clone()) + })) .unwrap() } @@ -284,7 +245,7 @@ impl DeviceRef { } #[wasm_bindgen(js_name = "setStack")] - pub fn ic_set_stack(&mut self, address: f64, val: f64) -> Result { + pub fn ic_set_stack(&self, address: f64, val: f64) -> Result { let ic_id = *self .device .borrow() @@ -299,6 +260,77 @@ impl DeviceRef { let result = ic.borrow_mut().poke(address, val)?; Ok(result) } + + #[wasm_bindgen(js_name = "setName")] + pub fn set_name(&self, name: &str) { + self.device.borrow_mut().set_name(name) + } + + #[wasm_bindgen(js_name = "setField")] + pub fn set_field(&self, field: &str, value: f64) -> Result { + let logic_typ = LogicType::from_str(field)?; + let mut device_ref = self.device.borrow_mut(); + let logic_field = device_ref + .fields + .get_mut(&logic_typ) + .ok_or_else(|| BindingError::InvalidEnumVariant(field.to_owned()))?; + let last = logic_field.value; + logic_field.value = value; + Ok(last) + } + + #[wasm_bindgen(js_name = "setSlotField")] + pub fn set_slot_field(&self, slot: usize, field: &str, value: f64) -> Result { + let logic_typ = SlotLogicType::from_str(field)?; + let mut device_ref = self.device.borrow_mut(); + let slots_len = device_ref.slots.len(); + let slot = device_ref + .slots + .get_mut(slot) + .ok_or(BindingError::OutOfBounds(slot, slots_len))?; + let logic_field = slot + .fields + .get_mut(&logic_typ) + .ok_or_else(|| BindingError::InvalidEnumVariant(field.to_owned()))?; + let last = logic_field.value; + logic_field.value = value; + Ok(last) + } + + #[wasm_bindgen(js_name = "setConnection")] + pub fn set_connection(&self, conn: usize, net: Option) -> Result<(), JsError> { + let mut device_ref = self.device.borrow_mut(); + let conn_len = device_ref.connections.len(); + let conn_ref = device_ref + .connections + .get_mut(conn) + .ok_or(BindingError::OutOfBounds(conn, conn_len))?; + match conn_ref { + &mut Connection::CableNetwork(ref mut net_ref) => *net_ref = net, + _ => { + *conn_ref = Connection::CableNetwork(net); + } + } + Ok(()) + } + + #[wasm_bindgen(js_name = "addDeviceToNetwork")] + pub fn add_device_to_network(&self, network_id: u16, connection: usize) -> Result { + let id = self.device.borrow().id; + Ok(self.vm.borrow().add_device_to_network(id, network_id, connection)?) + } + + #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] + pub fn remove_device_from_network(&self, network_id: u16) -> Result { + let id = self.device.borrow().id; + Ok(self.vm.borrow().remove_device_from_network(id, network_id)?) + } + + #[wasm_bindgen(js_name = "setPin")] + pub fn set_pin(&self, pin: usize, val: Option) -> Result { + let id = self.device.borrow().id; + Ok(self.vm.borrow().set_pin(id, pin, val)?) + } } #[wasm_bindgen] @@ -306,6 +338,7 @@ impl DeviceRef { pub struct VM { vm: Rc>, } + #[wasm_bindgen] impl VM { #[wasm_bindgen(constructor)] @@ -372,6 +405,39 @@ impl VM { pub fn ics(&self) -> Vec { self.vm.borrow().ics.keys().copied().collect_vec() } + + #[wasm_bindgen(getter, js_name = "lastOperationModified")] + pub fn last_operation_modified(&self) -> Vec { + self.vm.borrow().last_operation_modified() + } + + #[wasm_bindgen(js_name = "visibleDevices")] + pub fn visible_devices(&self, source: u16) -> Vec { + self.vm.borrow().visible_devices(source) + } + + #[wasm_bindgen(js_name = "addDeviceToNetwork")] + pub fn add_device_to_network(&self, id: u16, network_id: u16, connection: usize) -> Result { + Ok(self.vm.borrow().add_device_to_network(id, network_id, connection)?) + } + + #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] + pub fn remove_device_from_network(&self, id: u16, network_id: u16) -> Result { + Ok(self.vm.borrow().remove_device_from_network(id, network_id)?) + } + + #[wasm_bindgen(js_name = "setPin")] + pub fn set_pin(&self, id: u16, pin: usize, val: Option) -> Result { + Ok(self.vm.borrow().set_pin(id, pin, val)?) + } + + +} + +impl Default for VM { + fn default() -> Self { + Self::new() + } } #[wasm_bindgen] diff --git a/ic10emu_wasm/src/types.ts b/ic10emu_wasm/src/types.ts index 6bb32a8..12f6b2f 100644 --- a/ic10emu_wasm/src/types.ts +++ b/ic10emu_wasm/src/types.ts @@ -1,36 +1,128 @@ -type FieldType = 'Read' | 'Write' | 'ReadWrite'; +export type FieldType = "Read" | "Write" | "ReadWrite"; -interface LogicField { - field_type: FieldType, - value: number, +export interface LogicField { + field_type: FieldType; + value: number; } -type Fields = Map; +export type Fields = Map; -type SlotType = 'AccessCard' | 'Appliance' | 'Back' | 'Battery' | 'Blocked' | 'Bottle' | 'Cartridge' | 'Circuitboard' | 'CreditCard' | 'DataDisk' | 'DrillHead' | 'Egg' | 'Entity' | 'Flare' | 'GasCanister' | 'GasFilter' | 'Helmet' | 'Ingot' | 'LiquidBottle' | 'LiquidCanister' | 'Magazine' | 'Ore' | 'Organ' | 'Plant' | 'ProgramableChip' | 'ScanningHead' | 'SensorProcessingUnit' | 'SoundCartridge' | 'Suit' | 'Tool' | 'Torpedo' | 'None'; - -interface Slot { - typ: SlotType, - fields: Fields, +export type SlotType = + | "AccessCard" + | "Appliance" + | "Back" + | "Battery" + | "Blocked" + | "Bottle" + | "Cartridge" + | "Circuitboard" + | "CreditCard" + | "DataDisk" + | "DrillHead" + | "Egg" + | "Entity" + | "Flare" + | "GasCanister" + | "GasFilter" + | "Helmet" + | "Ingot" + | "LiquidBottle" + | "LiquidCanister" + | "Magazine" + | "Ore" + | "Organ" + | "Plant" + | "ProgramableChip" + | "ScanningHead" + | "SensorProcessingUnit" + | "SoundCartridge" + | "Suit" + | "Tool" + | "Torpedo" + | "None"; + +export interface Slot { + typ: SlotType; + fields: Fields; } -type Reagents = Map>; +export type Reagents = Map>; -type Connection = { CableNetwork: number } | 'Other' ; +export type Connection = { CableNetwork: number } | "Other"; -type Alias = { RegisterSpec: {indirection: number, target: number} } | { DeviceSpec: { device: "Db" | { Numbered: number } | { Indirect: { indirection: number, target: number } } }, connection: number | undefined }; +export type RegisterSpec = { + RegisterSpec: { indirection: number; target: number }; +}; +export type DeviceSpec = { + DeviceSpec: { + device: + | "Db" + | { Numbered: number } + | { Indirect: { indirection: number; target: number } }; + }; + connection: number | undefined; +}; +export type LogicType = { LogicType: string }; +export type SlotLogicType = { SlotLogicType: string }; +export type BatchMode = { BatchMode: string }; +export type ReagentMode = { ReagentMode: string }; +export type Identifier = { Identifier: { name: string } }; -type Aliases = Map; +export type NumberFloat = { Float: number }; +export type NumberBinary = { Binary: number }; +export type NumberHexadecimal = { Hexadecimal: number }; +export type NumberConstant = { Constant: number }; +export type NumberString = { String: string }; +export type NumberEnum = { Enum: number }; -type Defines = Map; +export type NumberOperand = { + Number: + | NumberFloat + | NumberBinary + | NumberHexadecimal + | NumberConstant + | NumberString + | NumberEnum; +}; +export type Operand = + | RegisterSpec + | DeviceSpec + | NumberOperand + | LogicType + | SlotLogicType + | BatchMode + | ReagentMode + | Identifier; -type Pins = (number | undefined)[] +export type Alias = RegisterSpec | DeviceSpec; + +export type Aliases = Map; + +export type Defines = Map; + +export type Pins = (number | undefined)[]; + +export interface Instruction { + instruction: string; + operands: Operand[]; +} + +export type ICError = { + ParseError: { line: number; start: number; end: number; msg: string }; +}; + +export interface Program { + instructions: Instruction[]; + errors: ICError[]; + labels: Map; +} export interface DeviceRef { - readonly fields: Fields; - readonly slots: Slot[]; - readonly reagents: Reagents; - readonly connections: Connection[]; - readonly aliases?: Aliases | undefined; - readonly defines?: Defines | undefined; - readonly pins?: Pins; + readonly fields: Fields; + readonly slots: Slot[]; + readonly reagents: Reagents; + readonly connections: Connection[]; + readonly aliases?: Aliases | undefined; + readonly defines?: Defines | undefined; + readonly pins?: Pins; + readonly program?: Program; } diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..f21ace0 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "stable" +profile = "default" +targets = [ "wasm32-unknown-unknown" ] diff --git a/www/assets_finding.ipynb b/www/assets_finding.ipynb new file mode 100644 index 0000000..9f34731 --- /dev/null +++ b/www/assets_finding.ipynb @@ -0,0 +1,317 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# About\n", + "\n", + "This is a notebook for finding and copying Textures form extracted game assets to named images for the item database. \n", + "\n", + "## Why not a script?\n", + "\n", + "because depending on what extractor you use and the whims of the developers all this could use some serious tweaking every run. The notebook lets you run things in stages and inspect what your working with." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "database = {}\n", + "\n", + "with open(\"data/database.json\", \"r\") as f:\n", + " database = json.load(f)\n", + "\n", + "db = database[\"db\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Item Database Pulled in" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path \n", + "\n", + "# Location were https://github.com/SeriousCache/UABE has extracted all Texture2D assets\n", + "# Change as necessary\n", + "datapath = Path(r\"E:\\Games\\SteamLibrary\\steamapps\\common\\Stationeers\\Stationpedia\\exported_textures\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Change this Datapath to point to the extracted textures" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Pull in a list of all found textures\n", + "images = list(datapath.glob(\"*.png\"))\n", + "names = [image.name for image in images]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Finding matches\n", + "\n", + "This next section loops through all the item names and collects all the candidate textures. Then, through a series of rules, attempts to narrow down the choices to 1 texture." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "image_candidates = {}\n", + "\n", + "def filter_candidates(candidates):\n", + " max_match_len = 0\n", + " filtered_matches = []\n", + "\n", + " # go for longest match\n", + " for can in candidates:\n", + " name, match, mapping = can\n", + " match_len = len(match)\n", + " if match_len > max_match_len:\n", + " max_match_len = match_len\n", + " filtered_matches = [(name, match, mapping)]\n", + " elif match_len == max_match_len:\n", + " filtered_matches.append((name, match, mapping))\n", + "\n", + " # choose better matches\n", + " if len(filtered_matches) > 1:\n", + " better_matches = []\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if mapping.startswith(\"Item\") and mapping in name:\n", + " better_matches.append((name, match, mapping))\n", + " elif mapping.startswith(\"Structure\") and mapping in name:\n", + " better_matches.append((name, match, mapping))\n", + " if len(better_matches) > 0:\n", + " filtered_matches = better_matches\n", + "\n", + " #exclude build states if we have non build states\n", + " if len(filtered_matches) > 1:\n", + " non_build_state = []\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if \"BuildState\" not in name:\n", + " non_build_state.append((name, match, mapping))\n", + " if len(non_build_state) > 0:\n", + " filtered_matches = non_build_state\n", + "\n", + " #prefer matches without extra tags\n", + " if len(filtered_matches) > 1:\n", + " direct = []\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if f\"{match}-\" in name:\n", + " direct.append((name, match, mapping))\n", + " if len(direct) > 0:\n", + " filtered_matches = direct\n", + " \n", + " #filter to unique filenames\n", + " if len(filtered_matches) > 1:\n", + " unique_names = []\n", + " unique_matches = []\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if name not in unique_names:\n", + " unique_names.append(name)\n", + " unique_matches.append((name, match, mapping))\n", + " filtered_matches = unique_matches\n", + "\n", + " #prefer not worse matches\n", + " if len(filtered_matches) > 1:\n", + " not_worse = []\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if name.startswith(\"Item\") and not mapping.startswith(\"Item\"):\n", + " continue\n", + " elif name.startswith(\"Structure\") and not mapping.startswith(\"Structure\"):\n", + " continue\n", + " elif name.startswith(\"Kit\") and not mapping.startswith(\"Kit\"):\n", + " continue\n", + " elif not name.startswith(match):\n", + " continue\n", + " not_worse.append((name, match, mapping))\n", + " if len(not_worse) > 0:\n", + " filtered_matches = not_worse\n", + "\n", + " #if we have colored variants take White\n", + " if len(filtered_matches) > 1:\n", + " for can in filtered_matches:\n", + " name, match, mapping = can\n", + " if f\"_White\" in name:\n", + " return [name]\n", + "\n", + " return [name for name, _, _ in filtered_matches]\n", + "\n", + "for entry in db.values():\n", + " candidates = []\n", + " for name in names:\n", + " if entry[\"name\"] in name:\n", + " candidates.append((name, entry[\"name\"], entry[\"name\"]))\n", + " if entry[\"name\"].removeprefix(\"Item\") in name:\n", + " candidates.append((name, entry[\"name\"].removeprefix(\"Item\"), entry[\"name\"]))\n", + " if entry[\"name\"].removeprefix(\"Structure\") in name:\n", + " candidates.append((name, entry[\"name\"].removeprefix(\"Structure\"), entry[\"name\"]))\n", + " image_candidates[entry[\"name\"]] = filter_candidates(candidates)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some Items end up with no match but these items are often subtypes of an item that will have a match" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# rematch items to super structure?\n", + "for name in image_candidates.keys():\n", + " for other in image_candidates.keys():\n", + " if name != other and name in other:\n", + " if len(image_candidates[name]) > 0 and len(image_candidates[other]) == 0:\n", + " image_candidates[other] = image_candidates[name]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Prepare out List of file copies. at this point a few items will never have a match. and one or two will have two choices but those choices will be arbitrary." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ItemBiomass []\n", + "StructureBlocker []\n", + "CartridgePlantAnalyser []\n", + "StructureElevatorLevelIndustrial []\n", + "ItemPlantEndothermic_Creative []\n", + "Flag_ODA_10m []\n", + "Flag_ODA_4m []\n", + "Flag_ODA_6m []\n", + "Flag_ODA_8m []\n", + "ItemHorticultureBelt []\n", + "ItemKitLiquidRegulator []\n", + "ItemKitPortablesConnector []\n", + "Landingpad_GasConnectorInwardPiece []\n", + "Landingpad_LiquidConnectorInwardPiece []\n", + "ItemMushroom ['ItemMushroom-resources.assets-3022.png', 'ItemMushroom-resources.assets-9304.png']\n", + "StructurePlinth []\n", + "ItemPlantThermogenic_Creative []\n" + ] + } + ], + "source": [ + "to_copy = []\n", + "for name, candidates in image_candidates.items():\n", + " if len(candidates) != 1:\n", + " print(name, candidates)\n", + " if len(candidates) > 1:\n", + " #take first as fallback\n", + " to_copy.append((name, candidates[0]))\n", + " else:\n", + " # print(name, candidates)\n", + " to_copy.append((name, candidates[0]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1223 of 1223 | 100.00% \n", + "Done\n" + ] + } + ], + "source": [ + "import shutil\n", + "\n", + "destpath = Path(\"img/stationpedia\")\n", + "total_files = len(to_copy)\n", + "\n", + "count = 0\n", + "print ( f\"{count} of {total_files} | { count / total_files * 100}\", end=\"\\r\")\n", + "for name, file in to_copy:\n", + " source = datapath / file\n", + " dest = destpath / f\"{name}.png\"\n", + " shutil.copy(source, dest)\n", + " count += 1\n", + " print ( f\"{count} of {total_files} | { (count / total_files) * 100 :.2f}% \", end=\"\\r\")\n", + "print()\n", + "print(\"Done\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/www/data/database.json b/www/data/database.json index a116783..f3ed921 100644 --- a/www/data/database.json +++ b/www/data/database.json @@ -1 +1 @@ -{"logic_enabled": ["StructureDrinkingFountain", "Robot", "StructureAccessBridge", "StructureLiquidDrain", "StructureActiveVent", "StructureAdvancedComposter", "StructureAdvancedFurnace", "StructureAdvancedPackagingMachine", "ItemAdvancedTablet", "StructureAirConditioner", "StructureAirlock", "ItemAngleGrinder", "StructureArcFurnace", "ItemArcWelder", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureAutolathe", "StructureAutomatedOven", "StructureAutoMinerSmall", "StructureBatterySmall", "StructureBackPressureRegulator", "StructureBasketHoop", "StructureLogicBatchReader", "StructureLogicBatchSlotReader", "StructureLogicBatchWriter", "StructureBatteryMedium", "ItemBatteryCellLarge", "ItemBatteryCellNuclear", "ItemBatteryCell", "StructureBatteryCharger", "StructureBatteryChargerSmall", "Battery_Wireless_cell", "Battery_Wireless_cell_Big", "StructureBeacon", "StructureAngledBench", "StructureBench1", "StructureFlatBench", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlastDoor", "StructureBlockBed", "StructureLogicButton", "StructureCableAnalysizer", "StructureCamera", "StructureCargoStorageMedium", "StructureCargoStorageSmall", "StructureCentrifuge", "StructureChair", "StructureChairBacklessDouble", "StructureChairBacklessSingle", "StructureChairBoothCornerLeft", "StructureChairBoothMiddle", "StructureChairRectangleDouble", "StructureChairRectangleSingle", "StructureChairThickDouble", "StructureChairThickSingle", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureCombustionCentrifuge", "StructureCompositeDoor", "CompositeRollCover", "StructureComputer", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", "StructureConsoleDual", "StructureConsoleMonitor", "StructureControlChair", "StructureCornerLocker", "StructurePassthroughHeatExchangerGasToGas", "StructurePassthroughHeatExchangerGasToLiquid", "StructurePassthroughHeatExchangerLiquidToLiquid", "StructureCryoTubeHorizontal", "StructureCryoTubeVertical", "StructureCryoTube", "StructureDaylightSensor", "StructureDeepMiner", "DeviceStepUnit", "StructureLogicDial", "StructureDigitalValve", "StructureDiodeSlide", "StructureDockPortSide", "StructureSleeperVerticalDroid", "StructureElectrolyzer", "StructureElectronicsPrinter", "StructureElevatorLevelIndustrial", "StructureElevatorLevelFront", "StructureElevatorShaftIndustrial", "StructureElevatorShaft", "ItemEmergencyAngleGrinder", "ItemEmergencyArcWelder", "ItemEmergencyDrill", "ItemEmergencySpaceHelmet", "WeaponPistolEnergy", "WeaponRifleEnergy", "StructureEvaporationChamber", "StructureExpansionValve", "StructureFiltration", "StructureFlashingLight", "ItemFlashlight", "StructureFridgeBig", "StructureFridgeSmall", "StructureFurnace", "StructureCableFuse100k", "StructureCableFuse1k", "StructureCableFuse50k", "StructureCableFuse5k", "StructureMediumRocketGasFuelTank", "StructureCapsuleTankGas", "StructureGasGenerator", "StructureGasMixer", "StructureGasSensor", "StructureGasTankStorage", "StructureSolidFuelGenerator", "StructureGlassDoor", "DynamicGPR", "StructureGrowLight", "H2Combustor", "ItemDrill", "ItemTablet", "ItemHardSuit", "ItemHardBackpack", "ItemHardsuitHelmet", "ItemHardJetpack", "StructureHarvie", "ItemWearLamp", "StructureHeatExchangerGastoGas", "StructureHeatExchangerLiquidtoLiquid", "StructureHeatExchangeLiquidtoGas", "StructureHydraulicPipeBender", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "StructureIceCrusher", "StructureIgniter", "StructureEmergencyButton", "StructureLiquidTankBigInsulated", "StructureLiquidTankSmallInsulated", "ItemIntegratedCircuit10", "StructureInteriorDoorGlass", "StructureInteriorDoorPadded", "StructureInteriorDoorPaddedThin", "StructureInteriorDoorTriangle", "ItemJetpackBasic", "StructureKlaxon", "StructureDiode", "StructureConsoleLED1x3", "StructureConsoleLED1x2", "StructureConsoleLED5", "ItemLabeller", "Landingpad_DataConnectionPiece", "Landingpad_GasConnectorInwardPiece", "Landingpad_GasConnectorOutwardPiece", "Landingpad_LiquidConnectorInwardPiece", "Landingpad_LiquidConnectorOutwardPiece", "Landingpad_ThreshholdPiece", "ItemLaptop", "StructureLargeDirectHeatExchangeLiquidtoLiquid", "StructureLargeDirectHeatExchangeGastoGas", "StructureLargeDirectHeatExchangeGastoLiquid", "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", "StructureTankBig", "StructureLogicSwitch", "StructureLightRound", "StructureLightRoundAngled", "StructureLightRoundSmall", "StructureBackLiquidPressureRegulator", "StructureMediumRocketLiquidFuelTank", "StructureCapsuleTankLiquid", "StructureWaterDigitalValve", "StructureLiquidPipeAnalyzer", "StructureLiquidPipeRadiator", "StructureWaterPipeMeter", "StructureLiquidTankBig", "StructureLiquidTankSmall", "StructureLiquidTankStorage", "StructureLiquidValve", "StructureLiquidVolumePump", "StructureLiquidPressureRegulator", "StructureWaterWallCooler", "StructureStorageLocker", "StructureLockerSmall", "StructureLogicCompare", "StructureLogicGate", "StructureLogicHashGen", "StructureLogicMath", "StructureLogicMemory", "StructureLogicMinMax", "StructureLogicReader", "StructureLogicRocketDownlink", "StructureLogicSelect", "LogicStepSequencer8", "StructureLogicRocketUplink", "StructureLogicWriter", "StructureLogicWriterSwitch", "DeviceLfoVolume", "StructureManualHatch", "StructureLogicMathUnary", "StructureMediumConvectionRadiator", "StructurePassiveLargeRadiatorGas", "StructureMediumConvectionRadiatorLiquid", "StructurePassiveLargeRadiatorLiquid", "StructureMediumHangerDoor", "StructureMediumRadiator", "StructureMediumRadiatorLiquid", "StructureSatelliteDish", "StructurePowerTransmitterReceiver", "StructurePowerTransmitter", "ItemMiningBeltMKII", "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemMKIIAngleGrinder", "ItemMKIIArcWelder", "ItemMKIIDrill", "ItemMKIIMiningDrill", "StructureMotionSensor", "ItemNVG", "StructureNitrolyzer", "StructureHorizontalAutoMiner", "StructureOccupancySensor", "StructurePipeOneWayValve", "StructureLiquidPipeOneWayValve", "StructureOverheadShortCornerLocker", "StructureOverheadShortLocker", "StructurePassiveLiquidDrain", "PassiveSpeaker", "StructurePipeAnalysizer", "StructurePipeRadiator", "StructurePipeHeater", "StructureLiquidPipeHeater", "StructurePipeIgniter", "StructurePipeLabel", "StructurePipeMeter", "StructurePipeRadiatorFlat", "StructurePipeRadiatorFlatLiquid", "ItemPlantSampler", "DynamicLight", "PortableSolarPanel", "StructurePortablesConnector", "StructurePowerConnector", "StructurePowerTransmitterOmni", "StructureBench", "StructurePoweredVent", "StructurePoweredVentLarge", "StructurePressurantValve", "StructurePressureFedGasEngine", "StructurePressureFedLiquidEngine", "StructurePressureRegulator", "StructureProximitySensor", "StructureGovernedGasEngine", "StructurePumpedLiquidEngine", "StructurePurgeValve", "StructureLogicReagentReader", "StructureRecycler", "StructureRefrigeratedVendingMachine", "ItemRemoteDetonator", "StructureResearchMachine", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", "StructureRocketEngineTiny", "StructureRocketManufactory", "StructureRocketMiner", "StructureRocketScanner", "RoverCargo", "Rover_MkI", "StructureSDBHopper", "StructureSDBHopperAdvanced", "StructureSDBSilo", "StructureSecurityPrinter", "ItemSensorLenses", "StructureShelfMedium", "StructureShortCornerLocker", "StructureShortLocker", "StructureShower", "StructureShowerPowered", "StructureSign1x1", "StructureSign2x1", "StructureSingleBed", "StructureSleeper", "StructureSleeperLeft", "StructureSleeperRight", "StructureSleeperVertical", "StructureLogicSlotReader", "StructureSmallDirectHeatExchangeGastoGas", "StructureSmallDirectHeatExchangeLiquidtoGas", "StructureSmallDirectHeatExchangeLiquidtoLiquid", "StructureAirlockGate", "StructureSmallSatelliteDish", "StructureTankSmall", "StructureTankSmallAir", "StructureTankSmallFuel", "StructureSolarPanel", "StructureSolarPanel45", "StructureSolarPanelDual", "StructureSolarPanelFlat", "StructureSolarPanel45Reinforced", "StructureSolarPanelDualReinforced", "StructureSolarPanelFlatReinforced", "StructureSolarPanelReinforced", "StructureSorter", "ItemSpaceHelmet", "ItemSpacepack", "StructureStackerReverse", "StructureStacker", "StructureBattery", "StructureBatteryLarge", "StructureStirlingEngine", "StopWatch", "StructureSuitStorage", "StructureLogicSwitch2", "StructureTankBigInsulated", "StructureTankSmallInsulated", "StructureGroundBasedTelescope", "ItemTerrainManipulator", "ItemMkIIToolbelt", "StructureToolManufactory", "ItemBeacon", "StructureTraderWaypoint", "StructureTransformer", "StructureTransformerMedium", "StructureTransformerSmall", "StructureTransformerMediumReversed", "StructureTransformerSmallReversed", "StructureRocketTransformerSmall", "StructurePressurePlateLarge", "StructurePressurePlateMedium", "StructurePressurePlateSmall", "StructureTurbineGenerator", "StructureTurboVolumePump", "StructureLiquidTurboVolumePump", "StructureChuteUmbilicalMale", "StructureGasUmbilicalMale", "StructureLiquidUmbilicalMale", "StructurePowerUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureGasUmbilicalFemale", "StructureLiquidUmbilicalFemale", "StructurePowerUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureGasUmbilicalFemaleSide", "StructureLiquidUmbilicalFemaleSide", "StructurePowerUmbilicalFemaleSide", "StructureUnloader", "StructureUprightWindTurbine", "StructureValve", "StructureVendingMachine", "StructureVolumePump", "StructureWallCooler", "StructureWallHeater", "StructureWallLight", "StructureWallLightBattery", "StructureLightLongAngled", "StructureLightLongWide", "StructureLightLong", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterPurifier", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "WeaponEnergy", "StructureWeatherStation", "StructureWindTurbine", "StructureWindowShutter", "ItemWirelessBatteryCellExtraLarge"], "slot_logic_enabled": ["Robot", "StructureActiveVent", "ItemAdvancedTablet", "ItemAngleGrinder", "StructureArcFurnace", "ItemArcWelder", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureBatteryCharger", "StructureBatteryChargerSmall", "StructureAngledBench", "StructureBench1", "StructureFlatBench", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlockBed", "StructureCargoStorageSmall", "StructureChair", "StructureChairBacklessDouble", "StructureChairBacklessSingle", "StructureChairBoothCornerLeft", "StructureChairBoothMiddle", "StructureChairRectangleDouble", "StructureChairRectangleSingle", "StructureChairThickDouble", "StructureChairThickSingle", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureControlChair", "StructureCornerLocker", "StructureCryoTube", "ItemEmergencyAngleGrinder", "ItemEmergencyArcWelder", "ItemEmergencyDrill", "WeaponPistolEnergy", "WeaponRifleEnergy", "ItemFlashlight", "StructureFridgeBig", "StructureFridgeSmall", "StructureGasTankStorage", "StructureSolidFuelGenerator", "DynamicGPR", "ItemDrill", "ItemTablet", "ItemHardSuit", "ItemHardBackpack", "ItemHardJetpack", "StructureHarvie", "ItemWearLamp", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "ItemJetpackBasic", "ItemLabeller", "ItemLaptop", "StructureLiquidTankStorage", "StructureWaterWallCooler", "StructureStorageLocker", "StructureLockerSmall", "LogicStepSequencer8", "ItemMiningBeltMKII", "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemMKIIAngleGrinder", "ItemMKIIArcWelder", "ItemMKIIDrill", "ItemMKIIMiningDrill", "ItemNVG", "StructureNitrolyzer", "StructureOverheadShortCornerLocker", "StructureOverheadShortLocker", "ItemPlantSampler", "DynamicLight", "PortableSolarPanel", "StructurePortablesConnector", "StructurePowerConnector", "StructureBench", "StructureRecycler", "ItemRemoteDetonator", "StructureRocketCircuitHousing", "RoverCargo", "Rover_MkI", "ItemSensorLenses", "StructureShelfMedium", "StructureShortCornerLocker", "StructureShortLocker", "StructureSingleBed", "StructureSleeper", "StructureSorter", "ItemSpacepack", "StructureStackerReverse", "StructureStacker", "StructureSuitStorage", "ItemTerrainManipulator", "ItemMkIIToolbelt", "ItemBeacon", "StructureChuteUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureUnloader", "StructureWallCooler", "StructureWallHeater", "StructureWallLightBattery", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "WeaponEnergy"], "devices": ["StructureDrinkingFountain", "StructureAccessBridge", "StructureLiquidDrain", "StructureActiveVent", "StructureAdvancedComposter", "StructureAdvancedFurnace", "StructureAdvancedPackagingMachine", "StructureAirConditioner", "StructureAirlock", "StructureArcFurnace", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureAutolathe", "StructureAutomatedOven", "StructureAutoMinerSmall", "StructureBatterySmall", "StructureBackPressureRegulator", "StructureBasketHoop", "StructureLogicBatchReader", "StructureLogicBatchSlotReader", "StructureLogicBatchWriter", "StructureBatteryMedium", "StructureBatteryCharger", "StructureBatteryChargerSmall", "StructureBeacon", "StructureBench1", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlastDoor", "StructureBlockBed", "StructureLogicButton", "StructureCableAnalysizer", "StructureCamera", "StructureCargoStorageMedium", "StructureCargoStorageSmall", "StructureCentrifuge", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureCombustionCentrifuge", "StructureCompositeDoor", "StructureComputer", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", "StructureConsoleDual", "StructureConsoleMonitor", "StructureControlChair", "StructurePassthroughHeatExchangerGasToGas", "StructurePassthroughHeatExchangerGasToLiquid", "StructurePassthroughHeatExchangerLiquidToLiquid", "StructureCryoTubeHorizontal", "StructureCryoTubeVertical", "StructureCryoTube", "StructureDaylightSensor", "StructureDeepMiner", "DeviceStepUnit", "StructureLogicDial", "StructureDigitalValve", "StructureDiodeSlide", "StructureDockPortSide", "StructureSleeperVerticalDroid", "StructureElectrolyzer", "StructureElectronicsPrinter", "StructureElevatorLevelIndustrial", "StructureElevatorLevelFront", "StructureElevatorShaftIndustrial", "StructureElevatorShaft", "StructureEvaporationChamber", "StructureExpansionValve", "StructureFiltration", "StructureFlashingLight", "StructureFridgeBig", "StructureFridgeSmall", "StructureFurnace", "StructureMediumRocketGasFuelTank", "StructureCapsuleTankGas", "StructureGasGenerator", "StructureGasMixer", "StructureGasSensor", "StructureGasTankStorage", "StructureSolidFuelGenerator", "StructureGlassDoor", "StructureGrowLight", "H2Combustor", "StructureHarvie", "StructureHeatExchangerGastoGas", "StructureHeatExchangerLiquidtoLiquid", "StructureHeatExchangeLiquidtoGas", "StructureHydraulicPipeBender", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "StructureIceCrusher", "StructureIgniter", "StructureEmergencyButton", "StructureLiquidTankBigInsulated", "StructureLiquidTankSmallInsulated", "StructureKlaxon", "StructureDiode", "StructureConsoleLED1x3", "StructureConsoleLED1x2", "StructureConsoleLED5", "Landingpad_DataConnectionPiece", "Landingpad_GasConnectorInwardPiece", "Landingpad_GasConnectorOutwardPiece", "Landingpad_LiquidConnectorInwardPiece", "Landingpad_LiquidConnectorOutwardPiece", "Landingpad_ThreshholdPiece", "StructureLargeDirectHeatExchangeLiquidtoLiquid", "StructureLargeDirectHeatExchangeGastoGas", "StructureLargeDirectHeatExchangeGastoLiquid", "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", "StructureTankBig", "StructureLogicSwitch", "StructureLightRound", "StructureLightRoundAngled", "StructureLightRoundSmall", "StructureBackLiquidPressureRegulator", "StructureMediumRocketLiquidFuelTank", "StructureCapsuleTankLiquid", "StructureWaterDigitalValve", "StructureLiquidPipeAnalyzer", "StructureLiquidTankBig", "StructureLiquidTankSmall", "StructureLiquidTankStorage", "StructureLiquidValve", "StructureLiquidVolumePump", "StructureLiquidPressureRegulator", "StructureWaterWallCooler", "StructureLogicCompare", "StructureLogicGate", "StructureLogicHashGen", "StructureLogicMath", "StructureLogicMemory", "StructureLogicMinMax", "StructureLogicReader", "StructureLogicRocketDownlink", "StructureLogicSelect", "LogicStepSequencer8", "StructureLogicRocketUplink", "StructureLogicWriter", "StructureLogicWriterSwitch", "DeviceLfoVolume", "StructureLogicMathUnary", "StructureMediumConvectionRadiator", "StructurePassiveLargeRadiatorGas", "StructureMediumConvectionRadiatorLiquid", "StructurePassiveLargeRadiatorLiquid", "StructureMediumHangerDoor", "StructureMediumRadiator", "StructureMediumRadiatorLiquid", "StructureSatelliteDish", "StructurePowerTransmitterReceiver", "StructurePowerTransmitter", "StructureMotionSensor", "StructureNitrolyzer", "StructureHorizontalAutoMiner", "StructureOccupancySensor", "StructurePipeOneWayValve", "StructureLiquidPipeOneWayValve", "PassiveSpeaker", "StructurePipeAnalysizer", "StructurePipeHeater", "StructureLiquidPipeHeater", "StructurePipeIgniter", "StructurePortablesConnector", "StructurePowerConnector", "StructurePowerTransmitterOmni", "StructureBench", "StructurePoweredVent", "StructurePoweredVentLarge", "StructurePressurantValve", "StructurePressureFedGasEngine", "StructurePressureFedLiquidEngine", "StructurePressureRegulator", "StructureProximitySensor", "StructureGovernedGasEngine", "StructurePumpedLiquidEngine", "StructurePurgeValve", "StructureLogicReagentReader", "StructureRecycler", "StructureRefrigeratedVendingMachine", "StructureResearchMachine", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", "StructureRocketEngineTiny", "StructureRocketManufactory", "StructureRocketMiner", "StructureRocketScanner", "StructureSDBHopper", "StructureSDBHopperAdvanced", "StructureSDBSilo", "StructureSecurityPrinter", "StructureShower", "StructureShowerPowered", "StructureSleeper", "StructureSleeperLeft", "StructureSleeperRight", "StructureSleeperVertical", "StructureLogicSlotReader", "StructureSmallDirectHeatExchangeGastoGas", "StructureSmallDirectHeatExchangeLiquidtoGas", "StructureSmallDirectHeatExchangeLiquidtoLiquid", "StructureAirlockGate", "StructureSmallSatelliteDish", "StructureTankSmall", "StructureTankSmallAir", "StructureTankSmallFuel", "StructureSolarPanel", "StructureSolarPanel45", "StructureSolarPanelDual", "StructureSolarPanelFlat", "StructureSolarPanel45Reinforced", "StructureSolarPanelDualReinforced", "StructureSolarPanelFlatReinforced", "StructureSolarPanelReinforced", "StructureSorter", "StructureStackerReverse", "StructureStacker", "StructureBattery", "StructureBatteryLarge", "StructureStirlingEngine", "StopWatch", "StructureSuitStorage", "StructureLogicSwitch2", "StructureTankBigInsulated", "StructureTankSmallInsulated", "StructureGroundBasedTelescope", "StructureToolManufactory", "StructureTraderWaypoint", "StructureTransformer", "StructureTransformerMedium", "StructureTransformerSmall", "StructureTransformerMediumReversed", "StructureTransformerSmallReversed", "StructureRocketTransformerSmall", "StructurePressurePlateLarge", "StructurePressurePlateMedium", "StructurePressurePlateSmall", "StructureTurbineGenerator", "StructureTurboVolumePump", "StructureLiquidTurboVolumePump", "StructureChuteUmbilicalMale", "StructureGasUmbilicalMale", "StructureLiquidUmbilicalMale", "StructurePowerUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureGasUmbilicalFemale", "StructureLiquidUmbilicalFemale", "StructurePowerUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureGasUmbilicalFemaleSide", "StructureLiquidUmbilicalFemaleSide", "StructurePowerUmbilicalFemaleSide", "StructureUnloader", "StructureUprightWindTurbine", "StructureValve", "StructureVendingMachine", "StructureVolumePump", "StructureWallCooler", "StructureWallHeater", "StructureWallLight", "StructureWallLightBattery", "StructureLightLongAngled", "StructureLightLongWide", "StructureLightLong", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterPurifier", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "StructureWeatherStation", "StructureWindTurbine", "StructureWindowShutter"], "items": {"ItemAuthoringToolRocketNetwork": {"name": "ItemAuthoringToolRocketNetwork", "hash": -1731627004, "desc": ""}, "MonsterEgg": {"name": "MonsterEgg", "hash": -1667675295, "desc": ""}, "MotherboardMissionControl": {"name": "MotherboardMissionControl", "hash": -127121474, "desc": ""}, "StructureCableCorner3HBurnt": {"name": "StructureCableCorner3HBurnt", "hash": 2393826, "desc": ""}, "StructureDrinkingFountain": {"name": "StructureDrinkingFountain", "hash": 1968371847, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "Robot": {"name": "Robot", "hash": 434786784, "desc": "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer's best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Programmable Chip", "type": "ProgrammableChip"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "Read", "On": "ReadWrite", "TemperatureExternal": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "TargetX": "Write", "TargetY": "Write", "TargetZ": "Write", "MineablesInVicinity": "Read", "MineablesInQueue": "Read", "ReferenceId": "Read", "ForwardX": "Read", "ForwardY": "Read", "ForwardZ": "Read", "Orientation": "Read", "VelocityX": "Read", "VelocityY": "Read", "VelocityZ": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}, "modes": {"0": "None", "1": "Follow", "2": "MoveToTarget", "3": "Roam", "4": "Unload", "5": "PathToTarget", "6": "StorageFull"}}, "StructureAccessBridge": {"name": "StructureAccessBridge", "hash": 1298920475, "desc": "Extendable bridge that spans three grids", "logic": {"Power": "Read", "Open": "ReadWrite", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "AccessCardBlack": {"name": "AccessCardBlack", "hash": -1330388999, "desc": ""}, "AccessCardBlue": {"name": "AccessCardBlue", "hash": -1411327657, "desc": ""}, "AccessCardBrown": {"name": "AccessCardBrown", "hash": 1412428165, "desc": ""}, "AccessCardGray": {"name": "AccessCardGray", "hash": -1339479035, "desc": ""}, "AccessCardGreen": {"name": "AccessCardGreen", "hash": -374567952, "desc": ""}, "AccessCardKhaki": {"name": "AccessCardKhaki", "hash": 337035771, "desc": ""}, "AccessCardOrange": {"name": "AccessCardOrange", "hash": -332896929, "desc": ""}, "AccessCardPink": {"name": "AccessCardPink", "hash": 431317557, "desc": ""}, "AccessCardPurple": {"name": "AccessCardPurple", "hash": 459843265, "desc": ""}, "AccessCardRed": {"name": "AccessCardRed", "hash": -1713748313, "desc": ""}, "AccessCardWhite": {"name": "AccessCardWhite", "hash": 2079959157, "desc": ""}, "AccessCardYellow": {"name": "AccessCardYellow", "hash": 568932536, "desc": ""}, "StructureLiquidDrain": {"name": "StructureLiquidDrain", "hash": 1687692899, "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["Data", "Input"], "2": ["Power", "Input"]}}, "StructureActiveVent": {"name": "StructureActiveVent", "hash": -1129453144, "desc": "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: 'Outward' sets it to pump gas into a space until pressure is reached; 'Inward' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward ...", "slots": [{"name": "", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "PressureInternal": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Pipe", "None"]}}, "CircuitboardAdvAirlockControl": {"name": "CircuitboardAdvAirlockControl", "hash": 1633663176, "desc": ""}, "StructureAdvancedComposter": {"name": "StructureAdvancedComposter", "hash": 446212963, "desc": "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"], "2": ["PipeLiquid", "Input"], "3": ["Power", "None"], "4": ["Chute", "Input"], "5": ["Chute", "Output"]}}, "StructureAdvancedFurnace": {"name": "StructureAdvancedFurnace", "hash": 545937711, "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "SettingInput": "ReadWrite", "SettingOutput": "ReadWrite", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"], "5": ["Pipe", "Output"], "6": ["PipeLiquid", "Output2"]}}, "StructureAdvancedPackagingMachine": {"name": "StructureAdvancedPackagingMachine", "hash": -463037670, "desc": "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemAdvancedTablet": {"name": "ItemAdvancedTablet", "hash": 1722785341, "desc": "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Atmos Analyzer, Tracker, Medical Analyzer, Ore Scanner, eReader, and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Cartridge", "type": "Cartridge"}, {"name": "Cartridge1", "type": "Cartridge"}, {"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "On": "ReadWrite", "Volume": "ReadWrite", "SoundAlert": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureAirConditioner": {"name": "StructureAirConditioner", "hash": -2087593337, "desc": "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit's green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page.", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "PressureOutput2": "Read", "TemperatureOutput2": "Read", "RatioOxygenOutput2": "Read", "RatioCarbonDioxideOutput2": "Read", "RatioNitrogenOutput2": "Read", "RatioPollutantOutput2": "Read", "RatioVolatilesOutput2": "Read", "RatioWaterOutput2": "Read", "RatioNitrousOxideOutput2": "Read", "TotalMolesOutput2": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionOutput2": "Read", "OperationalTemperatureEfficiency": "Read", "TemperatureDifferentialEfficiency": "Read", "PressureEfficiency": "Read", "ReferenceId": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Waste"], "4": ["Power", "None"]}}, "CircuitboardAirControl": {"name": "CircuitboardAirControl", "hash": 1618019559, "desc": "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. "}, "CircuitboardAirlockControl": {"name": "CircuitboardAirlockControl", "hash": 912176135, "desc": "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board\u00e2\u20ac\u2122s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed."}, "StructureAirlock": {"name": "StructureAirlock", "hash": -2105052344, "desc": "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ImGuiCircuitboardAirlockControl": {"name": "ImGuiCircuitboardAirlockControl", "hash": -73796547, "desc": ""}, "ItemAlienMushroom": {"name": "ItemAlienMushroom", "hash": 176446172, "desc": ""}, "ItemAmmoBox": {"name": "ItemAmmoBox", "hash": -9559091, "desc": ""}, "ItemAngleGrinder": {"name": "ItemAngleGrinder", "hash": 201215010, "desc": "Angles-be-gone with the trusty angle grinder.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ApplianceDeskLampLeft": {"name": "ApplianceDeskLampLeft", "hash": -1683849799, "desc": ""}, "ApplianceDeskLampRight": {"name": "ApplianceDeskLampRight", "hash": 1174360780, "desc": ""}, "ApplianceSeedTray": {"name": "ApplianceSeedTray", "hash": 142831994, "desc": "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics.", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}]}, "StructureArcFurnace": {"name": "StructureArcFurnace", "hash": -247344692, "desc": "The simplest smelting system available to the average Stationeer, Recurso's arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys.", "slots": [{"name": "Import", "type": "Ore"}, {"name": "Export", "type": "Ingot"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemArcWelder": {"name": "ItemArcWelder", "hash": 1385062886, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureAreaPowerControlReversed": {"name": "StructureAreaPowerControlReversed", "hash": -1032513487, "desc": "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Idle", "1": "Discharged", "2": "Discharging", "3": "Charging", "4": "Charged"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "StructureAreaPowerControl": {"name": "StructureAreaPowerControl", "hash": 1999523701, "desc": "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Idle", "1": "Discharged", "2": "Discharging", "3": "Charging", "4": "Charged"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "ItemAstroloySheets": {"name": "ItemAstroloySheets", "hash": -1662476145, "desc": ""}, "CartridgeAtmosAnalyser": {"name": "CartridgeAtmosAnalyser", "hash": -1550278665, "desc": "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks."}, "ItemAuthoringTool": {"name": "ItemAuthoringTool", "hash": 789015045, "desc": ""}, "StructureAutolathe": {"name": "StructureAutolathe", "hash": 336213101, "desc": "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t ", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "AutolathePrinterMod": {"name": "AutolathePrinterMod", "hash": 221058307, "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructureAutomatedOven": {"name": "StructureAutomatedOven", "hash": -1672404896, "desc": "", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureAutoMinerSmall": {"name": "StructureAutoMinerSmall", "hash": 7274344, "desc": "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureBatterySmall": {"name": "StructureBatterySmall", "hash": -2123455080, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Power": "Read", "Mode": "Read", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["PowerAndData", "None"]}}, "StructureBackPressureRegulator": {"name": "StructureBackPressureRegulator", "hash": -1149857558, "desc": "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "ItemPotatoBaked": {"name": "ItemPotatoBaked", "hash": -2111886401, "desc": ""}, "AppliancePackagingMachine": {"name": "AppliancePackagingMachine", "hash": -749191906, "desc": "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n ", "slots": [{"name": "Export", "type": "None"}]}, "ItemBasketBall": {"name": "ItemBasketBall", "hash": -1262580790, "desc": ""}, "StructureBasketHoop": {"name": "StructureBasketHoop", "hash": -1613497288, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLogicBatchReader": {"name": "StructureLogicBatchReader", "hash": 264413729, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicBatchSlotReader": {"name": "StructureLogicBatchSlotReader", "hash": 436888930, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicBatchWriter": {"name": "StructureLogicBatchWriter", "hash": 1415443359, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureBatteryMedium": {"name": "StructureBatteryMedium", "hash": -1125305264, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Power": "Read", "Mode": "Read", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["PowerAndData", "None"]}}, "ItemBatteryCellLarge": {"name": "ItemBatteryCellLarge", "hash": -459827268, "desc": "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemBatteryCellNuclear": {"name": "ItemBatteryCellNuclear", "hash": 544617306, "desc": "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys.", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemBatteryCell": {"name": "ItemBatteryCell", "hash": 700133157, "desc": "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer's basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power.", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "StructureBatteryCharger": {"name": "StructureBatteryCharger", "hash": 1945930022, "desc": "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4], "OccupantHash": [0, 1, 2, 3, 4], "Quantity": [0, 1, 2, 3, 4], "Damage": [0, 1, 2, 3, 4], "Charge": [0, 1, 2, 3, 4], "ChargeRatio": [0, 1, 2, 3, 4], "Class": [0, 1, 2, 3, 4], "MaxQuantity": [0, 1, 2, 3, 4], "PrefabHash": [0, 1, 2, 3, 4], "SortingClass": [0, 1, 2, 3, 4], "ReferenceId": [0, 1, 2, 3, 4]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemBatteryChargerSmall": {"name": "ItemBatteryChargerSmall", "hash": 1008295833, "desc": ""}, "StructureBatteryChargerSmall": {"name": "StructureBatteryChargerSmall", "hash": -761772413, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0, 1], "ChargeRatio": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Power", "None"]}}, "Battery_Wireless_cell": {"name": "Battery_Wireless_cell", "hash": -462415758, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "Battery_Wireless_cell_Big": {"name": "Battery_Wireless_cell_Big", "hash": -41519077, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "StructureBeacon": {"name": "StructureBeacon", "hash": -188177083, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureAngledBench": {"name": "StructureAngledBench", "hash": 1811979158, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureBench1": {"name": "StructureBench1", "hash": 406745009, "desc": "", "slots": [{"name": "Appliance 1", "type": "Appliance"}, {"name": "Appliance 2", "type": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureFlatBench": {"name": "StructureFlatBench", "hash": 839890807, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureBench3": {"name": "StructureBench3", "hash": -164622691, "desc": "", "slots": [{"name": "Appliance 1", "type": "Appliance"}, {"name": "Appliance 2", "type": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBench2": {"name": "StructureBench2", "hash": -2127086069, "desc": "", "slots": [{"name": "Appliance 1", "type": "Appliance"}, {"name": "Appliance 2", "type": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBench4": {"name": "StructureBench4", "hash": 1750375230, "desc": "", "slots": [{"name": "Appliance 1", "type": "Appliance"}, {"name": "Appliance 2", "type": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemBiomass": {"name": "ItemBiomass", "hash": -831480639, "desc": "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel)."}, "StructureBlastDoor": {"name": "StructureBlastDoor", "hash": 337416191, "desc": "Airtight and almost undamageable, the original 'Millmar' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBlockBed": {"name": "StructureBlockBed", "hash": 697908419, "desc": "Description coming.", "slots": [{"name": "Bed", "type": "Entity"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Power", "None"]}}, "StructureBlocker": {"name": "StructureBlocker", "hash": 378084505, "desc": ""}, "ItemBreadLoaf": {"name": "ItemBreadLoaf", "hash": 893514943, "desc": ""}, "StructureCableCorner3Burnt": {"name": "StructureCableCorner3Burnt", "hash": 318437449, "desc": ""}, "StructureCableCorner4Burnt": {"name": "StructureCableCorner4Burnt", "hash": 268421361, "desc": ""}, "StructureCableJunction4Burnt": {"name": "StructureCableJunction4Burnt", "hash": -1756896811, "desc": ""}, "StructureCableJunction4HBurnt": {"name": "StructureCableJunction4HBurnt", "hash": -115809132, "desc": ""}, "StructureCableJunction5Burnt": {"name": "StructureCableJunction5Burnt", "hash": 1545286256, "desc": ""}, "StructureCableJunction6Burnt": {"name": "StructureCableJunction6Burnt", "hash": -628145954, "desc": ""}, "StructureCableJunction6HBurnt": {"name": "StructureCableJunction6HBurnt", "hash": 1854404029, "desc": ""}, "StructureCableCornerBurnt": {"name": "StructureCableCornerBurnt", "hash": -177220914, "desc": ""}, "StructureCableCornerHBurnt": {"name": "StructureCableCornerHBurnt", "hash": 1931412811, "desc": ""}, "StructureCableJunctionBurnt": {"name": "StructureCableJunctionBurnt", "hash": -1620686196, "desc": ""}, "StructureCableJunctionHBurnt": {"name": "StructureCableJunctionHBurnt", "hash": -341365649, "desc": ""}, "StructureCableStraightHBurnt": {"name": "StructureCableStraightHBurnt", "hash": 2085762089, "desc": ""}, "StructureCableStraightBurnt": {"name": "StructureCableStraightBurnt", "hash": -1196981113, "desc": ""}, "StructureCableCorner4HBurnt": {"name": "StructureCableCorner4HBurnt", "hash": -981223316, "desc": ""}, "StructureCableJunctionH5Burnt": {"name": "StructureCableJunctionH5Burnt", "hash": 1701593300, "desc": ""}, "StructureLogicButton": {"name": "StructureLogicButton", "hash": 491845673, "desc": "", "logic": {"Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureCableCorner3": {"name": "StructureCableCorner3", "hash": 980469101, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableCorner4": {"name": "StructureCableCorner4", "hash": -1542172466, "desc": ""}, "StructureCableJunction4": {"name": "StructureCableJunction4", "hash": 1112047202, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableJunction5": {"name": "StructureCableJunction5", "hash": 894390004, "desc": ""}, "StructureCableJunction6": {"name": "StructureCableJunction6", "hash": -1404690610, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableCorner": {"name": "StructureCableCorner", "hash": -889269388, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableJunction": {"name": "StructureCableJunction", "hash": -175342021, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableStraight": {"name": "StructureCableStraight", "hash": 605357050, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableAnalysizer": {"name": "StructureCableAnalysizer", "hash": 1036015121, "desc": "", "logic": {"PowerPotential": "Read", "PowerActual": "Read", "PowerRequired": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"]}}, "ItemCableCoil": {"name": "ItemCableCoil", "hash": -466050668, "desc": "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, 'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer's network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "ItemCableCoilHeavy": {"name": "ItemCableCoilHeavy", "hash": 2060134443, "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."}, "StructureCamera": {"name": "StructureCamera", "hash": -342072665, "desc": "Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you're not.", "logic": {"Mode": "ReadWrite", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["PowerAndData", "None"]}}, "CircuitboardCameraDisplay": {"name": "CircuitboardCameraDisplay", "hash": -412104504, "desc": "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera."}, "ItemGasCanisterEmpty": {"name": "ItemGasCanisterEmpty", "hash": 42280099, "desc": "The\u00c2\u00a0portable\u00c2\u00a0Gas Canister\u00c2\u00a0is\u00c2\u00a0the\u00c2\u00a0Stationeer's\u00c2\u00a0basic\u00c2\u00a0unit\u00c2\u00a0of\u00c2\u00a0gas\u00c2\u00a0delivery.\u00c2\u00a0Rated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0standard\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80 atmospheres),\u00c2\u00a0empty\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to a \nPortable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'.\u00c2\u00a0Contains\u00c2\u00a064L\u00c2\u00a0of\u00c2\u00a0gas."}, "ItemGasCanisterCarbonDioxide": {"name": "ItemGasCanisterCarbonDioxide", "hash": -767685874, "desc": "When fabricated, the Carbon Dioxide Gas Canister is filled a pressure of 8000kPa (80 atmospheres) and colored default grey. Used as a secondary fuel in the Jetpack Basic, it can be mounted to a Portable Gas Tank (Air) or Gas Tank Storage for refill.\nCareful not to over pressurize when refilling, or it may go 'bang'."}, "ItemGasCanisterFuel": {"name": "ItemGasCanisterFuel", "hash": -1014695176, "desc": "The\u00c2\u00a0orange\u00c2\u00a0portable\u00c2\u00a0fuel\u00c2\u00a0Gas Canister\u00c2\u00a0supplies\u00c2\u00a0a\u00c2\u00a064L\u00c2\u00a0mixture\u00c2\u00a0of\u00c2\u00a066%\u00c2\u00a0Volatiles/34%\u00c2\u00a0Oxygen\u00c2\u00a0for\u00c2\u00a0powering\u00c2\u00a0such\u00c2\u00a0items\u00c2\u00a0as\u00c2\u00a0the\u00c2\u00a0Welding Torch\u00c2\u00a0and\u00c2\u00a0the\u00c2\u00a0Portable Generator.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterNitrogen": {"name": "ItemGasCanisterNitrogen", "hash": 2145068424, "desc": "The\u00c2\u00a0green\u00c2\u00a0portable\u00c2\u00a0Nitrogen\u00c2\u00a0Gas Canister\u00c2\u00a0supplies\u00c2\u00a0propellant\u00c2\u00a0for\u00c2\u00a0the\u00c2\u00a0Spacepack\u00c2\u00a0and\u00c2\u00a0the\u00c2\u00a0Hardsuit Jetpack.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterOxygen": {"name": "ItemGasCanisterOxygen", "hash": -1152261938, "desc": "The\u00c2\u00a0white\u00c2\u00a0portable\u00c2\u00a064L\u00c2\u00a0Gas Canister\u00c2\u00a0is\u00c2\u00a0the\u00c2\u00a0Stationeer's\u00c2\u00a0basic\u00c2\u00a0unit\u00c2\u00a0of\u00c2\u00a0Oxygen\u00c2\u00a0delivery.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterPollutants": {"name": "ItemGasCanisterPollutants", "hash": -1552586384, "desc": "While this byproduct from smelting - sometimes known simply as 'X' - is a toxin, its specific heat makes it a valuable coolant. All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\u00c2\u00a0\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterVolatiles": {"name": "ItemGasCanisterVolatiles", "hash": -472094806, "desc": ""}, "ItemCannedCondensedMilk": {"name": "ItemCannedCondensedMilk", "hash": -2104175091, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay."}, "ItemCannedEdamame": {"name": "ItemCannedEdamame", "hash": -999714082, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay."}, "ItemFrenchFries": {"name": "ItemFrenchFries", "hash": -57608687, "desc": "Because space would suck without 'em."}, "ItemCannedMushroom": {"name": "ItemCannedMushroom", "hash": -1344601965, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay."}, "ItemCannedPowderedEggs": {"name": "ItemCannedPowderedEggs", "hash": 1161510063, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that's fairly high in nutrition, and does not decay."}, "ItemCannedRicePudding": {"name": "ItemCannedRicePudding", "hash": -1185552595, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay."}, "CardboardBox": {"name": "CardboardBox", "hash": -1976947556, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}]}, "StructureCargoStorageMedium": {"name": "StructureCargoStorageMedium", "hash": 1151864003, "desc": "", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureCargoStorageSmall": {"name": "StructureCargoStorageSmall", "hash": -1493672123, "desc": "", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "CartridgeAccessController": {"name": "CartridgeAccessController", "hash": -1634532552, "desc": ""}, "CartridgePlantAnalyser": {"name": "CartridgePlantAnalyser", "hash": 1101328282, "desc": ""}, "ItemGasFilterCarbonDioxideInfinite": {"name": "ItemGasFilterCarbonDioxideInfinite", "hash": -185568964, "desc": "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterNitrogenInfinite": {"name": "ItemGasFilterNitrogenInfinite", "hash": 152751131, "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterNitrousOxideInfinite": {"name": "ItemGasFilterNitrousOxideInfinite", "hash": -123934842, "desc": "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterOxygenInfinite": {"name": "ItemGasFilterOxygenInfinite", "hash": -1055451111, "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterPollutantsInfinite": {"name": "ItemGasFilterPollutantsInfinite", "hash": -503738105, "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterVolatilesInfinite": {"name": "ItemGasFilterVolatilesInfinite", "hash": -1916176068, "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterWaterInfinite": {"name": "ItemGasFilterWaterInfinite", "hash": -1678456554, "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "StructureCentrifuge": {"name": "StructureCentrifuge", "hash": 690945935, "desc": "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemCerealBar": {"name": "ItemCerealBar", "hash": 791746840, "desc": "Sustains, without decay. If only all our relationships were so well balanced."}, "StructureChair": {"name": "StructureChair", "hash": 1167659360, "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBacklessDouble": {"name": "StructureChairBacklessDouble", "hash": 1944858936, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBacklessSingle": {"name": "StructureChairBacklessSingle", "hash": 1672275150, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBoothCornerLeft": {"name": "StructureChairBoothCornerLeft", "hash": -367720198, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBoothMiddle": {"name": "StructureChairBoothMiddle", "hash": 1640720378, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairRectangleDouble": {"name": "StructureChairRectangleDouble", "hash": -1152812099, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairRectangleSingle": {"name": "StructureChairRectangleSingle", "hash": -1425428917, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairThickDouble": {"name": "StructureChairThickDouble", "hash": -1245724402, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairThickSingle": {"name": "StructureChairThickSingle", "hash": -1510009608, "desc": "", "slots": [{"name": "Seat", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "ItemCharcoal": {"name": "ItemCharcoal", "hash": 252561409, "desc": "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes."}, "ItemChemLightBlue": {"name": "ItemChemLightBlue", "hash": -772542081, "desc": "A safe and slightly rave-some source of blue light. Snap to activate."}, "ItemChemLightGreen": {"name": "ItemChemLightGreen", "hash": -597479390, "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate."}, "ItemChemLightRed": {"name": "ItemChemLightRed", "hash": -525810132, "desc": "A red glowstick. Snap to activate. Then reach for the lasers."}, "ItemChemLightWhite": {"name": "ItemChemLightWhite", "hash": 1312166823, "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay."}, "ItemChemLightYellow": {"name": "ItemChemLightYellow", "hash": 1224819963, "desc": "Dispel the darkness with this yellow glowstick."}, "ApplianceChemistryStation": {"name": "ApplianceChemistryStation", "hash": 1365789392, "desc": "", "slots": [{"name": "Output", "type": "None"}]}, "NpcChick": {"name": "NpcChick", "hash": 155856647, "desc": "", "slots": [{"name": "Brain", "type": "Organ"}]}, "NpcChicken": {"name": "NpcChicken", "hash": 399074198, "desc": "", "slots": [{"name": "Brain", "type": "Organ"}, {"name": "Lungs", "type": "Organ"}]}, "StructureChuteCorner": {"name": "StructureChuteCorner", "hash": 1360330136, "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "StructureChuteJunction": {"name": "StructureChuteJunction", "hash": -611232514, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "StructureChuteStraight": {"name": "StructureChuteStraight", "hash": 168307007, "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "StructureChuteWindow": {"name": "StructureChuteWindow", "hash": -607241919, "desc": "Chute's with windows let you see what's passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "StructureChuteBin": {"name": "StructureChuteBin", "hash": -850484480, "desc": "The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper.", "slots": [{"name": "Input", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Output"], "1": ["PowerAndData", "None"]}}, "StructureChuteDigitalFlipFlopSplitterLeft": {"name": "StructureChuteDigitalFlipFlopSplitterLeft", "hash": -810874728, "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SettingOutput": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Chute", "Output2"], "3": ["PowerAndData", "None"]}}, "StructureChuteDigitalFlipFlopSplitterRight": {"name": "StructureChuteDigitalFlipFlopSplitterRight", "hash": 163728359, "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SettingOutput": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Chute", "Output2"], "3": ["PowerAndData", "None"]}}, "StructureChuteDigitalValveLeft": {"name": "StructureChuteDigitalValveLeft", "hash": 648608238, "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "StructureChuteDigitalValveRight": {"name": "StructureChuteDigitalValveRight", "hash": -1337091041, "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "StructureChuteFlipFlopSplitter": {"name": "StructureChuteFlipFlopSplitter", "hash": -1446854725, "desc": "A chute that toggles between two outputs", "slots": [{"name": "Transport Slot", "type": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureChuteInlet": {"name": "StructureChuteInlet", "hash": -1469588766, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput.", "slots": [{"name": "Import", "type": "None"}], "logic": {"Lock": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"]}}, "StructureChuteOutlet": {"name": "StructureChuteOutlet", "hash": -1022714809, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet's origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput.", "slots": [{"name": "Export", "type": "None"}], "logic": {"Lock": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Data", "None"]}}, "StructureChuteOverflow": {"name": "StructureChuteOverflow", "hash": 225377225, "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "StructureChuteValve": {"name": "StructureChuteValve", "hash": 434875271, "desc": "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute.", "slots": [{"name": "Transport Slot", "type": "None"}]}, "ItemCoffeeMug": {"name": "ItemCoffeeMug", "hash": 1800622698, "desc": ""}, "ReagentColorBlue": {"name": "ReagentColorBlue", "hash": 980054869, "desc": ""}, "ReagentColorGreen": {"name": "ReagentColorGreen", "hash": 120807542, "desc": ""}, "ReagentColorOrange": {"name": "ReagentColorOrange", "hash": -400696159, "desc": ""}, "ReagentColorRed": {"name": "ReagentColorRed", "hash": 1998377961, "desc": ""}, "ReagentColorYellow": {"name": "ReagentColorYellow", "hash": 635208006, "desc": ""}, "StructureCombustionCentrifuge": {"name": "StructureCombustionCentrifuge", "hash": 1238905683, "desc": "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine's RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t ", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionLimiter": "ReadWrite", "Throttle": "ReadWrite", "Rpm": "Read", "Stress": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"], "5": ["Pipe", "Output"]}}, "MotherboardComms": {"name": "MotherboardComms", "hash": -337075633, "desc": "When placed in a Computer and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land."}, "StructureCompositeCladdingAngledCornerInnerLongL": {"name": "StructureCompositeCladdingAngledCornerInnerLongL", "hash": 947705066, "desc": ""}, "StructureCompositeCladdingAngledCornerInnerLongR": {"name": "StructureCompositeCladdingAngledCornerInnerLongR", "hash": -1032590967, "desc": ""}, "StructureCompositeCladdingAngledCornerInnerLong": {"name": "StructureCompositeCladdingAngledCornerInnerLong", "hash": -1417912632, "desc": ""}, "StructureCompositeCladdingAngledCornerInner": {"name": "StructureCompositeCladdingAngledCornerInner", "hash": -1841871763, "desc": ""}, "StructureCompositeCladdingAngledCorner": {"name": "StructureCompositeCladdingAngledCorner", "hash": -69685069, "desc": ""}, "StructureCompositeCladdingAngled": {"name": "StructureCompositeCladdingAngled", "hash": -1513030150, "desc": ""}, "StructureCompositeCladdingCylindricalPanel": {"name": "StructureCompositeCladdingCylindricalPanel", "hash": 1077151132, "desc": ""}, "StructureCompositeCladdingCylindrical": {"name": "StructureCompositeCladdingCylindrical", "hash": 212919006, "desc": ""}, "StructureCompositeCladdingAngledCornerLong": {"name": "StructureCompositeCladdingAngledCornerLong", "hash": 850558385, "desc": ""}, "StructureCompositeCladdingAngledCornerLongR": {"name": "StructureCompositeCladdingAngledCornerLongR", "hash": -348918222, "desc": ""}, "StructureCompositeCladdingAngledLong": {"name": "StructureCompositeCladdingAngledLong", "hash": -387546514, "desc": ""}, "StructureCompositeCladdingPanel": {"name": "StructureCompositeCladdingPanel", "hash": 1997436771, "desc": ""}, "StructureCompositeCladdingRoundedCornerInner": {"name": "StructureCompositeCladdingRoundedCornerInner", "hash": 110184667, "desc": ""}, "StructureCompositeCladdingRoundedCorner": {"name": "StructureCompositeCladdingRoundedCorner", "hash": 1951525046, "desc": ""}, "StructureCompositeCladdingRounded": {"name": "StructureCompositeCladdingRounded", "hash": -259357734, "desc": ""}, "StructureCompositeCladdingSphericalCap": {"name": "StructureCompositeCladdingSphericalCap", "hash": 534213209, "desc": ""}, "StructureCompositeCladdingSphericalCorner": {"name": "StructureCompositeCladdingSphericalCorner", "hash": 1751355139, "desc": ""}, "StructureCompositeCladdingSpherical": {"name": "StructureCompositeCladdingSpherical", "hash": 139107321, "desc": ""}, "StructureCompositeDoor": {"name": "StructureCompositeDoor", "hash": -793837322, "desc": "Recurso's composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureCompositeFloorGrating": {"name": "StructureCompositeFloorGrating", "hash": 324868581, "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings."}, "StructureCompositeFloorGrating2": {"name": "StructureCompositeFloorGrating2", "hash": -895027741, "desc": ""}, "StructureCompositeFloorGrating3": {"name": "StructureCompositeFloorGrating3", "hash": -1113471627, "desc": ""}, "StructureCompositeFloorGrating4": {"name": "StructureCompositeFloorGrating4", "hash": 600133846, "desc": ""}, "StructureCompositeFloorGratingOpen": {"name": "StructureCompositeFloorGratingOpen", "hash": 2109695912, "desc": ""}, "StructureCompositeFloorGratingOpenRotated": {"name": "StructureCompositeFloorGratingOpenRotated", "hash": 882307910, "desc": ""}, "CompositeRollCover": {"name": "CompositeRollCover", "hash": 1228794916, "desc": "0.Operate\n1.Logic", "logic": {"Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureCompositeWall": {"name": "StructureCompositeWall", "hash": 1237302061, "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties."}, "StructureCompositeWall02": {"name": "StructureCompositeWall02", "hash": 718343384, "desc": ""}, "StructureCompositeWall03": {"name": "StructureCompositeWall03", "hash": 1574321230, "desc": ""}, "StructureCompositeWall04": {"name": "StructureCompositeWall04", "hash": -1011701267, "desc": ""}, "StructureCompositeWindow": {"name": "StructureCompositeWindow", "hash": -2060571986, "desc": "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer's focus on form over function."}, "StructureComputer": {"name": "StructureComputer", "hash": -626563514, "desc": "In some ways a relic, the 'Chonk R1' was designed by severely conflicted Norsec technicians, who needed a unit that could operate with a wide range of motherboards, while also enduring the worst a new Cadet could throw at it.\nThe result is a machine described by some as 'the only PC likely to survive our collision with a black hole', while other, less appreciative users regard it as sharing most of its technological DNA with a cheese grater.\nCompatible motherboards:\n- Logic Motherboard\n- Manufacturing Motherboard\n- Sorter Motherboard\n- Communications Motherboard\n- IC Editor Motherboard", "slots": [{"name": "Data Disk", "type": "DataDisk"}, {"name": "Data Disk", "type": "DataDisk"}, {"name": "Motherboard", "type": "Motherboard"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureCondensationChamber": {"name": "StructureCondensationChamber", "hash": 1420719315, "desc": "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input2"], "1": ["Pipe", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Data", "None"], "4": ["Power", "Input"]}}, "StructureCondensationValve": {"name": "StructureCondensationValve", "hash": -965741795, "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["Pipe", "Input"]}}, "ItemCookedCondensedMilk": {"name": "ItemCookedCondensedMilk", "hash": 1715917521, "desc": "A high-nutrient cooked food, which can be canned."}, "CartridgeConfiguration": {"name": "CartridgeConfiguration", "hash": -932136011, "desc": ""}, "StructureConsole": {"name": "StructureConsole", "hash": 235638270, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "type": "Circuitboard"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleDual": {"name": "StructureConsoleDual", "hash": -722284333, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "type": "Circuitboard"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureConsoleMonitor": {"name": "StructureConsoleMonitor", "hash": 801677497, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "type": "Circuitboard"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureCrateMount": {"name": "StructureCrateMount", "hash": -733500083, "desc": "", "slots": [{"name": "Container Slot", "type": "None"}]}, "StructureControlChair": {"name": "StructureControlChair", "hash": -1961153710, "desc": "Once, these chairs were the heart of space-going behemoths. Now, they're items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch.", "slots": [{"name": "Entity", "type": "Entity"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemCookedCorn": {"name": "ItemCookedCorn", "hash": 1344773148, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedMushroom": {"name": "ItemCookedMushroom", "hash": -1076892658, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedPumpkin": {"name": "ItemCookedPumpkin", "hash": 1849281546, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedRice": {"name": "ItemCookedRice", "hash": 2013539020, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedSoybean": {"name": "ItemCookedSoybean", "hash": 1353449022, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedTomato": {"name": "ItemCookedTomato", "hash": -709086714, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCorn": {"name": "ItemCorn", "hash": 258339687, "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light."}, "SeedBag_Corn": {"name": "SeedBag_Corn", "hash": -1290755415, "desc": "Grow a Corn."}, "ItemCornSoup": {"name": "ItemCornSoup", "hash": 545034114, "desc": "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay."}, "StructureCornerLocker": {"name": "StructureCornerLocker", "hash": -1968255729, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5], "OccupantHash": [0, 1, 2, 3, 4, 5], "Quantity": [0, 1, 2, 3, 4, 5], "Damage": [0, 1, 2, 3, 4, 5], "Class": [0, 1, 2, 3, 4, 5], "MaxQuantity": [0, 1, 2, 3, 4, 5], "PrefabHash": [0, 1, 2, 3, 4, 5], "SortingClass": [0, 1, 2, 3, 4, 5], "ReferenceId": [0, 1, 2, 3, 4, 5]}}, "StructurePassthroughHeatExchangerGasToGas": {"name": "StructurePassthroughHeatExchangerGasToGas", "hash": -1674187440, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"], "2": ["Pipe", "Output"], "3": ["Pipe", "Output2"]}}, "StructurePassthroughHeatExchangerGasToLiquid": {"name": "StructurePassthroughHeatExchangerGasToLiquid", "hash": 1928991265, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["Pipe", "Output"], "3": ["PipeLiquid", "Output2"]}}, "StructurePassthroughHeatExchangerLiquidToLiquid": {"name": "StructurePassthroughHeatExchangerLiquidToLiquid", "hash": -1472829583, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["PipeLiquid", "Output"], "3": ["PipeLiquid", "Output2"]}}, "CrateMkII": {"name": "CrateMkII", "hash": 8709219, "desc": "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}]}, "ItemCreditCard": {"name": "ItemCreditCard", "hash": -1756772618, "desc": ""}, "ItemCrowbar": {"name": "ItemCrowbar", "hash": 856108234, "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise."}, "StructureCryoTubeHorizontal": {"name": "StructureCryoTubeHorizontal", "hash": 1443059329, "desc": "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureCryoTubeVertical": {"name": "StructureCryoTubeVertical", "hash": -1381321828, "desc": "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureCryoTube": {"name": "StructureCryoTube", "hash": 1938254586, "desc": "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology.", "slots": [{"name": "Bed", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"], "2": ["Power", "None"]}}, "ItemFilterFern": {"name": "ItemFilterFern", "hash": 266654416, "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant."}, "ItemDataDisk": {"name": "ItemDataDisk", "hash": 1005843700, "desc": ""}, "StructureDaylightSensor": {"name": "StructureDaylightSensor", "hash": 1076425094, "desc": "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it.", "logic": {"Mode": "ReadWrite", "Activate": "ReadWrite", "Horizontal": "Read", "Vertical": "Read", "SolarAngle": "Read", "On": "ReadWrite", "PrefabHash": "Read", "SolarIrradiance": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Horizontal", "2": "Vertical"}, "conn": {"0": ["PowerAndData", "None"]}}, "DecayedFood": {"name": "DecayedFood", "hash": 1531087544, "desc": "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n"}, "StructureDeepMiner": {"name": "StructureDeepMiner", "hash": 265720906, "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", "slots": [{"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"], "2": ["Power", "None"]}}, "DeviceStepUnit": {"name": "DeviceStepUnit", "hash": 1762696475, "desc": "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Volume": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "C-2", "1": "C#-2", "2": "D-2", "3": "D#-2", "4": "E-2", "5": "F-2", "6": "F#-2", "7": "G-2", "8": "G#-2", "9": "A-2", "10": "A#-2", "11": "B-2", "12": "C-1", "13": "C#-1", "14": "D-1", "15": "D#-1", "16": "E-1", "17": "F-1", "18": "F#-1", "19": "G-1", "20": "G#-1", "21": "A-1", "22": "A#-1", "23": "B-1", "24": "C0", "25": "C#0", "26": "D0", "27": "D#0", "28": "E0", "29": "F0", "30": "F#0", "31": "G0", "32": "G#0", "33": "A0", "34": "A#0", "35": "B0", "36": "C1", "37": "C#1", "38": "D1", "39": "D#1", "40": "E1", "41": "F1", "42": "F#1", "43": "G1", "44": "G#1", "45": "A1", "46": "A#1", "47": "B1", "48": "C2", "49": "C#2", "50": "D2", "51": "D#2", "52": "E2", "53": "F2", "54": "F#2", "55": "G2", "56": "G#2", "57": "A2", "58": "A#2", "59": "B2", "60": "C3", "61": "C#3", "62": "D3", "63": "D#3", "64": "E3", "65": "F3", "66": "F#3", "67": "G3", "68": "G#3", "69": "A3", "70": "A#3", "71": "B3", "72": "C4", "73": "C#4", "74": "D4", "75": "D#4", "76": "E4", "77": "F4", "78": "F#4", "79": "G4", "80": "G#4", "81": "A4", "82": "A#4", "83": "B4", "84": "C5", "85": "C#5", "86": "D5", "87": "D#5", "88": "E5", "89": "F5", "90": "F#5", "91": "G5 ", "92": "G#5", "93": "A5", "94": "A#5", "95": "B5", "96": "C6", "97": "C#6", "98": "D6", "99": "D#6", "100": "E6", "101": "F6", "102": "F#6", "103": "G6", "104": "G#6", "105": "A6", "106": "A#6", "107": "B6", "108": "C7", "109": "C#7", "110": "D7", "111": "D#7", "112": "E7", "113": "F7", "114": "F#7", "115": "G7", "116": "G#7", "117": "A7", "118": "A#7", "119": "B7", "120": "C8", "121": "C#8", "122": "D8", "123": "D#8", "124": "E8", "125": "F8", "126": "F#8", "127": "G8"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureLogicDial": {"name": "StructureLogicDial", "hash": 554524804, "desc": "An assignable dial with up to 1000 modes.", "logic": {"Mode": "ReadWrite", "Setting": "ReadWrite", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"]}}, "StructureDigitalValve": {"name": "StructureDigitalValve", "hash": -1280984102, "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input"], "2": ["PowerAndData", "None"]}}, "StructureDiodeSlide": {"name": "StructureDiodeSlide", "hash": 576516101, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemDirtCanister": {"name": "ItemDirtCanister", "hash": 902565329, "desc": "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs."}, "ItemDirtyOre": {"name": "ItemDirtyOre", "hash": -1234745580, "desc": "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet's surface. "}, "ItemSpaceOre": {"name": "ItemSpaceOre", "hash": 2131916219, "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores."}, "ItemDisposableBatteryCharger": {"name": "ItemDisposableBatteryCharger", "hash": -2124435700, "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery."}, "StructureDockPortSide": {"name": "StructureDockPortSide", "hash": -137465079, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"], "1": ["Data", "None"]}}, "CircuitboardDoorControl": {"name": "CircuitboardDoorControl", "hash": 855694771, "desc": "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors."}, "StructureSleeperVerticalDroid": {"name": "StructureSleeperVerticalDroid", "hash": 1382098999, "desc": "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemDuctTape": {"name": "ItemDuctTape", "hash": -1943134693, "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."}, "DynamicCrate": {"name": "DynamicCrate", "hash": 1941079206, "desc": "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it's both standard issue and critical kit for cadets and Commanders alike.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}]}, "DynamicGasCanisterRocketFuel": {"name": "DynamicGasCanisterRocketFuel", "hash": -8883951, "desc": "", "slots": [{"name": "Gas Canister", "type": "None"}]}, "ItemFertilizedEgg": {"name": "ItemFertilizedEgg", "hash": -383972371, "desc": "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable."}, "ItemEggCarton": {"name": "ItemEggCarton", "hash": -524289310, "desc": "Within, eggs reside in mysterious, marmoreal silence.", "slots": [{"name": "", "type": "Egg"}, {"name": "", "type": "Egg"}, {"name": "", "type": "Egg"}, {"name": "", "type": "Egg"}, {"name": "", "type": "Egg"}, {"name": "", "type": "Egg"}]}, "StructureElectrolyzer": {"name": "StructureElectrolyzer", "hash": -1668992663, "desc": "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water's latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it's that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas.", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "ItemElectronicParts": {"name": "ItemElectronicParts", "hash": 731250882, "desc": ""}, "ElectronicPrinterMod": {"name": "ElectronicPrinterMod", "hash": -311170652, "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructureElectronicsPrinter": {"name": "StructureElectronicsPrinter", "hash": 1307165496, "desc": "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ElevatorCarrage": {"name": "ElevatorCarrage", "hash": -110788403, "desc": ""}, "StructureElevatorLevelIndustrial": {"name": "StructureElevatorLevelIndustrial", "hash": 2060648791, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"]}}, "StructureElevatorLevelFront": {"name": "StructureElevatorLevelFront", "hash": -827912235, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureElevatorShaftIndustrial": {"name": "StructureElevatorShaftIndustrial", "hash": 1998354978, "desc": "", "logic": {"ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"]}}, "StructureElevatorShaft": {"name": "StructureElevatorShaft", "hash": 826144419, "desc": "", "logic": {"Power": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemEmergencyAngleGrinder": {"name": "ItemEmergencyAngleGrinder", "hash": -351438780, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyArcWelder": {"name": "ItemEmergencyArcWelder", "hash": -1056029600, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyCrowbar": {"name": "ItemEmergencyCrowbar", "hash": 976699731, "desc": ""}, "ItemEmergencyDrill": {"name": "ItemEmergencyDrill", "hash": -2052458905, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyEvaSuit": {"name": "ItemEmergencyEvaSuit", "hash": 1791306431, "desc": "", "slots": [{"name": "Air Tank", "type": "GasCanister"}, {"name": "Waste Tank", "type": "GasCanister"}, {"name": "Life Support", "type": "Battery"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}]}, "ItemEmergencyPickaxe": {"name": "ItemEmergencyPickaxe", "hash": -1061510408, "desc": ""}, "ItemEmergencyScrewdriver": {"name": "ItemEmergencyScrewdriver", "hash": 266099983, "desc": ""}, "ItemEmergencySpaceHelmet": {"name": "ItemEmergencySpaceHelmet", "hash": 205916793, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemEmergencyToolBelt": {"name": "ItemEmergencyToolBelt", "hash": 1661941301, "desc": "", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}]}, "ItemEmergencyWireCutters": {"name": "ItemEmergencyWireCutters", "hash": 2102803952, "desc": ""}, "ItemEmergencyWrench": {"name": "ItemEmergencyWrench", "hash": 162553030, "desc": ""}, "ItemEmptyCan": {"name": "ItemEmptyCan", "hash": 1013818348, "desc": "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay."}, "ItemPlantEndothermic_Creative": {"name": "ItemPlantEndothermic_Creative", "hash": -1159179557, "desc": ""}, "WeaponPistolEnergy": {"name": "WeaponPistolEnergy", "hash": -385323479, "desc": "0.Stun\n1.Kill", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Stun", "1": "Kill"}}, "WeaponRifleEnergy": {"name": "WeaponRifleEnergy", "hash": 1154745374, "desc": "0.Stun\n1.Kill", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Stun", "1": "Kill"}}, "StructureEngineMountTypeA1": {"name": "StructureEngineMountTypeA1", "hash": 2035781224, "desc": ""}, "EntityChick": {"name": "EntityChick", "hash": 1730165908, "desc": "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "type": "Organ"}]}, "EntityChickenBrown": {"name": "EntityChickenBrown", "hash": 334097180, "desc": "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "type": "Organ"}]}, "EntityChickenWhite": {"name": "EntityChickenWhite", "hash": 1010807532, "desc": "It's a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "type": "Organ"}]}, "EntityRoosterBlack": {"name": "EntityRoosterBlack", "hash": 966959649, "desc": "This is a rooster. It is black. There is dignity in this.", "slots": [{"name": "Brain", "type": "Organ"}]}, "EntityRoosterBrown": {"name": "EntityRoosterBrown", "hash": -583103395, "desc": "The common brown rooster. Don't let it hear you say that.", "slots": [{"name": "Brain", "type": "Organ"}]}, "ItemEvaSuit": {"name": "ItemEvaSuit", "hash": 1677018918, "desc": "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide.", "slots": [{"name": "Air Tank", "type": "GasCanister"}, {"name": "Waste Tank", "type": "GasCanister"}, {"name": "Life Support", "type": "Battery"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}]}, "StructureEvaporationChamber": {"name": "StructureEvaporationChamber", "hash": -1429782576, "desc": "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input2"], "1": ["Pipe", "Output"], "2": ["PipeLiquid", "Input"], "3": ["Data", "None"], "4": ["Power", "Input"]}}, "StructureExpansionValve": {"name": "StructureExpansionValve", "hash": 195298587, "desc": "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["PipeLiquid", "Input"]}}, "StructureFairingTypeA1": {"name": "StructureFairingTypeA1", "hash": 1622567418, "desc": ""}, "StructureFairingTypeA2": {"name": "StructureFairingTypeA2", "hash": -104908736, "desc": ""}, "StructureFairingTypeA3": {"name": "StructureFairingTypeA3", "hash": -1900541738, "desc": ""}, "ItemFern": {"name": "ItemFern", "hash": 892110467, "desc": "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes."}, "SeedBag_Fern": {"name": "SeedBag_Fern", "hash": -1990600883, "desc": "Grow a Fern."}, "Fertilizer": {"name": "Fertilizer", "hash": 1517856652, "desc": "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer's affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. "}, "ItemGasFilterCarbonDioxide": {"name": "ItemGasFilterCarbonDioxide", "hash": 1635000764, "desc": "Given humanity's obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit's waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available."}, "ItemGasFilterNitrogen": {"name": "ItemGasFilterNitrogen", "hash": 632853248, "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere."}, "ItemGasFilterNitrousOxide": {"name": "ItemGasFilterNitrousOxide", "hash": -1247674305, "desc": ""}, "ItemGasFilterOxygen": {"name": "ItemGasFilterOxygen", "hash": -721824748, "desc": "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber)."}, "ItemGasFilterPollutants": {"name": "ItemGasFilterPollutants", "hash": 1915566057, "desc": "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale."}, "ItemGasFilterVolatiles": {"name": "ItemGasFilterVolatiles", "hash": 15011598, "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys."}, "ItemGasFilterWater": {"name": "ItemGasFilterWater", "hash": -1993197973, "desc": "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)"}, "StructureFiltration": {"name": "StructureFiltration", "hash": -348054045, "desc": "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n", "slots": [{"name": "Gas Filter", "type": "GasFilter"}, {"name": "Gas Filter", "type": "GasFilter"}, {"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "PressureOutput2": "Read", "TemperatureOutput2": "Read", "RatioOxygenOutput2": "Read", "RatioCarbonDioxideOutput2": "Read", "RatioNitrogenOutput2": "Read", "RatioPollutantOutput2": "Read", "RatioVolatilesOutput2": "Read", "RatioWaterOutput2": "Read", "RatioNitrousOxideOutput2": "Read", "TotalMolesOutput2": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionOutput2": "Read", "ReferenceId": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Waste"], "4": ["Power", "None"]}}, "FireArmSMG": {"name": "FireArmSMG", "hash": -86315541, "desc": "0.Single\n1.Auto", "slots": [{"name": "", "type": "Magazine"}], "modes": {"0": "Single", "1": "Auto"}}, "ItemReusableFireExtinguisher": {"name": "ItemReusableFireExtinguisher", "hash": -1773192190, "desc": "Requires a canister filled with any inert liquid to opperate.", "slots": [{"name": "Liquid Canister", "type": "LiquidCanister"}]}, "Flag_ODA_10m": {"name": "Flag_ODA_10m", "hash": 1845441951, "desc": ""}, "Flag_ODA_4m": {"name": "Flag_ODA_4m", "hash": 1159126354, "desc": ""}, "Flag_ODA_6m": {"name": "Flag_ODA_6m", "hash": 1998634960, "desc": ""}, "Flag_ODA_8m": {"name": "Flag_ODA_8m", "hash": -375156130, "desc": ""}, "FlareGun": {"name": "FlareGun", "hash": 118685786, "desc": "", "slots": [{"name": "Magazine", "type": "Flare"}, {"name": "", "type": "Blocked"}]}, "StructureFlashingLight": {"name": "StructureFlashingLight", "hash": -1535893860, "desc": "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: 'Default Yellow Flashing Light'.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemFlashlight": {"name": "ItemFlashlight", "hash": -838472102, "desc": "A flashlight with a narrow and wide beam options.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Low Power", "1": "High Power"}}, "ItemFlour": {"name": "ItemFlour", "hash": -665995854, "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."}, "ItemFlowerBlue": {"name": "ItemFlowerBlue", "hash": -1573623434, "desc": ""}, "ItemFlowerGreen": {"name": "ItemFlowerGreen", "hash": -1513337058, "desc": ""}, "ItemFlowerOrange": {"name": "ItemFlowerOrange", "hash": -1411986716, "desc": ""}, "ItemFlowerRed": {"name": "ItemFlowerRed", "hash": -81376085, "desc": ""}, "ItemFlowerYellow": {"name": "ItemFlowerYellow", "hash": 1712822019, "desc": ""}, "ItemFries": {"name": "ItemFries", "hash": 1371786091, "desc": ""}, "StructureFridgeBig": {"name": "StructureFridgeBig", "hash": 958476921, "desc": "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureFridgeSmall": {"name": "StructureFridgeSmall", "hash": 751887598, "desc": "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Pipe", "Input"]}}, "StructureFurnace": {"name": "StructureFurnace", "hash": 1947944864, "desc": "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Open": "ReadWrite", "Mode": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Pipe", "Input"], "3": ["Pipe", "Output"], "4": ["PipeLiquid", "Output2"], "5": ["Data", "None"]}}, "StructureCableFuse100k": {"name": "StructureCableFuse100k", "hash": 281380789, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse1k": {"name": "StructureCableFuse1k", "hash": -1103727120, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse50k": {"name": "StructureCableFuse50k", "hash": -349716617, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse5k": {"name": "StructureCableFuse5k", "hash": -631590668, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureFuselageTypeA1": {"name": "StructureFuselageTypeA1", "hash": 1033024712, "desc": ""}, "StructureFuselageTypeA2": {"name": "StructureFuselageTypeA2", "hash": -1533287054, "desc": ""}, "StructureFuselageTypeA4": {"name": "StructureFuselageTypeA4", "hash": 1308115015, "desc": ""}, "StructureFuselageTypeC5": {"name": "StructureFuselageTypeC5", "hash": 147395155, "desc": ""}, "CartridgeGPS": {"name": "CartridgeGPS", "hash": -1957063345, "desc": ""}, "ItemGasCanisterNitrousOxide": {"name": "ItemGasCanisterNitrousOxide", "hash": -1712153401, "desc": ""}, "ItemGasCanisterSmart": {"name": "ItemGasCanisterSmart", "hash": -668314371, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureMediumRocketGasFuelTank": {"name": "StructureMediumRocketGasFuelTank", "hash": -1093860567, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "Output"], "1": ["Pipe", "Input"]}}, "StructureCapsuleTankGas": {"name": "StructureCapsuleTankGas", "hash": -1385712131, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "CircuitboardGasDisplay": {"name": "CircuitboardGasDisplay", "hash": -82343730, "desc": "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor)."}, "StructureGasGenerator": {"name": "StructureGasGenerator", "hash": 1165997963, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PowerGeneration": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "StructureGasMixer": {"name": "StructureGasMixer", "hash": 2104106366, "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input2"], "2": ["Pipe", "Input"], "3": ["PowerAndData", "None"]}}, "StructureGasSensor": {"name": "StructureGasSensor", "hash": -1252983604, "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"]}}, "DynamicGasTankAdvanced": {"name": "DynamicGasTankAdvanced", "hash": -386375420, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Gas Canister", "type": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureGasTankStorage": {"name": "StructureGasTankStorage", "hash": 1632165346, "desc": "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister.", "slots": [{"name": "Gas Canister", "type": "GasCanister"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Pressure": [0], "Temperature": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "Volume": [0], "Open": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureSolidFuelGenerator": {"name": "StructureSolidFuelGenerator", "hash": 813146305, "desc": "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle.", "slots": [{"name": "Input", "type": "Ore"}], "logic": {"Lock": "ReadWrite", "On": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Not Generating", "1": "Generating"}, "conn": {"0": ["Chute", "Input"], "1": ["Data", "None"], "2": ["Power", "Output"]}}, "StructureGlassDoor": {"name": "StructureGlassDoor", "hash": -324331872, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemGlassSheets": {"name": "ItemGlassSheets", "hash": 1588896491, "desc": "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures."}, "ItemGlasses": {"name": "ItemGlasses", "hash": -1068925231, "desc": ""}, "CircuitboardGraphDisplay": {"name": "CircuitboardGraphDisplay", "hash": 1344368806, "desc": ""}, "DynamicGPR": {"name": "DynamicGPR", "hash": -2085885850, "desc": "The Recurso Ground Penetrating Radar (GPR), when used in conjunction with either a Ore Scanner or a Ore Scanner (Color) placed in a Handheld Tablet, allows a Stationeer to maximize mining yields and save time gathering resources to complete their mission by displaying hidden ores in the terrain. \n\nInsert a cartridge or color scanner into the tablet, then press the activate button on the GPR to scan the surroundings. The data will be displayed on the tablet.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureGrowLight": {"name": "StructureGrowLight", "hash": -1758710260, "desc": "Agrizero's leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. ", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "CartridgeGuide": {"name": "CartridgeGuide", "hash": 872720793, "desc": ""}, "H2Combustor": {"name": "H2Combustor", "hash": 1840108251, "desc": "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with.", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "ItemHEMDroidRepairKit": {"name": "ItemHEMDroidRepairKit", "hash": 470636008, "desc": "Repairs damaged HEM-Droids to full health."}, "ItemPlantThermogenic_Genepool1": {"name": "ItemPlantThermogenic_Genepool1", "hash": -177792789, "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant."}, "ItemPlantThermogenic_Genepool2": {"name": "ItemPlantThermogenic_Genepool2", "hash": 1819167057, "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant."}, "ItemDrill": {"name": "ItemDrill", "hash": 2009673399, "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemGrenade": {"name": "ItemGrenade", "hash": 1544275894, "desc": "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word 'grenade' is derived from the Old French word for 'pomegranate', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff."}, "Handgun": {"name": "Handgun", "hash": 247238062, "desc": "", "slots": [{"name": "Magazine", "type": "Magazine"}]}, "HandgunMagazine": {"name": "HandgunMagazine", "hash": 1254383185, "desc": ""}, "ItemScanner": {"name": "ItemScanner", "hash": 1661270830, "desc": "A mysterious piece of technology, rumored to have Zrillian origins."}, "ItemTablet": {"name": "ItemTablet", "hash": -229808600, "desc": "The Xigo handheld 'Padi' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Cartridge", "type": "Cartridge"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}}, "ItemHardMiningBackPack": {"name": "ItemHardMiningBackPack", "hash": 900366130, "desc": "", "slots": [{"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}]}, "ItemHardSuit": {"name": "ItemHardSuit", "hash": -1758310454, "desc": "Connects to Logic Transmitter", "slots": [{"name": "Air Tank", "type": "GasCanister"}, {"name": "Waste Tank", "type": "GasCanister"}, {"name": "Life Support", "type": "Battery"}, {"name": "Programmable Chip", "type": "ProgrammableChip"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}, {"name": "Filter", "type": "GasFilter"}], "logic": {"Power": "Read", "Error": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "PressureExternal": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "PressureSetting": "ReadWrite", "TemperatureSetting": "ReadWrite", "TemperatureExternal": "Read", "Filtration": "ReadWrite", "AirRelease": "ReadWrite", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "ForwardX": "Read", "ForwardY": "Read", "ForwardZ": "Read", "Orientation": "Read", "VelocityX": "Read", "VelocityY": "Read", "VelocityZ": "Read", "EntityState": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7], "Damage": [0, 1, 2, 3, 4, 5, 6, 7], "Pressure": [0, 1], "Temperature": [0, 1], "Charge": [2], "ChargeRatio": [2], "Class": [0, 1, 2, 3, 4, 5, 6, 7], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7], "FilterType": [4, 5, 6, 7], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7]}}, "ItemHardBackpack": {"name": "ItemHardBackpack", "hash": 374891127, "desc": "This backpack can be useful when you are working inside and don't need to fly around.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}}, "ItemHardsuitHelmet": {"name": "ItemHardsuitHelmet", "hash": -84573099, "desc": "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It's perfect for enduring harsh environments like Venus and Vulcan.", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemHardJetpack": {"name": "ItemHardJetpack", "hash": -412551656, "desc": "The Norsec jetpack isn't 'technically' a jetpack at all, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "type": "GasCanister"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "StructureHarvie": {"name": "StructureHarvie", "hash": 958056199, "desc": "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it's modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export.", "slots": [{"name": "Import", "type": "Plant"}, {"name": "Export", "type": "None"}, {"name": "Hand", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Plant": "Write", "Harvest": "Write", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Idle", "1": "Happy", "2": "UnHappy", "3": "Dead"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "CircuitboardHashDisplay": {"name": "CircuitboardHashDisplay", "hash": 1633074601, "desc": ""}, "ItemHat": {"name": "ItemHat", "hash": 299189339, "desc": "As the name suggests, this is a hat."}, "ItemCropHay": {"name": "ItemCropHay", "hash": 215486157, "desc": ""}, "ItemWearLamp": {"name": "ItemWearLamp", "hash": -598730959, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureHeatExchangerGastoGas": {"name": "StructureHeatExchangerGastoGas", "hash": 21266291, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Output"]}}, "StructureHeatExchangerLiquidtoLiquid": {"name": "StructureHeatExchangerLiquidtoLiquid", "hash": -613784254, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["PipeLiquid", "Output"]}}, "StructureHeatExchangeLiquidtoGas": {"name": "StructureHeatExchangeLiquidtoGas", "hash": 944685608, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PipeLiquid", "Input"], "3": ["PipeLiquid", "Output"]}}, "StructureCableCornerH3": {"name": "StructureCableCornerH3", "hash": -1843379322, "desc": ""}, "StructureCableJunctionH": {"name": "StructureCableJunctionH", "hash": 469451637, "desc": ""}, "StructureCableCornerH4": {"name": "StructureCableCornerH4", "hash": 205837861, "desc": ""}, "StructureCableJunctionH4": {"name": "StructureCableJunctionH4", "hash": -742234680, "desc": ""}, "StructureCableJunctionH5": {"name": "StructureCableJunctionH5", "hash": -1530571426, "desc": ""}, "StructureCableJunctionH6": {"name": "StructureCableJunctionH6", "hash": 1036780772, "desc": ""}, "StructureCableCornerH": {"name": "StructureCableCornerH", "hash": -39359015, "desc": ""}, "StructureCableStraightH": {"name": "StructureCableStraightH", "hash": -146200530, "desc": ""}, "ItemGasFilterCarbonDioxideL": {"name": "ItemGasFilterCarbonDioxideL", "hash": 1876847024, "desc": ""}, "ItemGasFilterNitrogenL": {"name": "ItemGasFilterNitrogenL", "hash": -1387439451, "desc": ""}, "ItemGasFilterNitrousOxideL": {"name": "ItemGasFilterNitrousOxideL", "hash": 465267979, "desc": ""}, "ItemGasFilterOxygenL": {"name": "ItemGasFilterOxygenL", "hash": -1217998945, "desc": ""}, "ItemGasFilterPollutantsL": {"name": "ItemGasFilterPollutantsL", "hash": 1959564765, "desc": ""}, "ItemGasFilterVolatilesL": {"name": "ItemGasFilterVolatilesL", "hash": 1255156286, "desc": ""}, "ItemGasFilterWaterL": {"name": "ItemGasFilterWaterL", "hash": 2004969680, "desc": ""}, "ItemHighVolumeGasCanisterEmpty": {"name": "ItemHighVolumeGasCanisterEmpty", "hash": 998653377, "desc": ""}, "ItemHorticultureBelt": {"name": "ItemHorticultureBelt", "hash": -1117581553, "desc": "", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}]}, "HumanSkull": {"name": "HumanSkull", "hash": -857713709, "desc": ""}, "StructureHydraulicPipeBender": {"name": "StructureHydraulicPipeBender", "hash": -1888248335, "desc": "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureHydroponicsTrayData": {"name": "StructureHydroponicsTrayData", "hash": -1841632400, "desc": "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems.", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Fertiliser", "type": "Plant"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Efficiency": [0], "Health": [0], "Growth": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "Mature": [0], "PrefabHash": [0, 1], "Seeding": [0], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"], "2": ["Data", "None"]}}, "StructureHydroponicsStation": {"name": "StructureHydroponicsStation", "hash": 1441767298, "desc": "", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7], "Damage": [0, 1, 2, 3, 4, 5, 6, 7], "Efficiency": [0, 1, 2, 3, 4, 5, 6, 7], "Health": [0, 1, 2, 3, 4, 5, 6, 7], "Growth": [0, 1, 2, 3, 4, 5, 6, 7], "Class": [0, 1, 2, 3, 4, 5, 6, 7], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7], "Mature": [0, 1, 2, 3, 4, 5, 6, 7], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["PipeLiquid", "Input"]}}, "StructureHydroponicsTray": {"name": "StructureHydroponicsTray", "hash": 1464854517, "desc": "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie.", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Fertiliser", "type": "Plant"}]}, "MotherboardProgrammableChip": {"name": "MotherboardProgrammableChip", "hash": -161107071, "desc": "When placed in a Computer, the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing."}, "StructureCircuitHousing": {"name": "StructureCircuitHousing", "hash": -128473777, "desc": "", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "LineNumber": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "LineNumber": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "Input"], "1": ["Power", "None"]}}, "ItemNitrice": {"name": "ItemNitrice", "hash": -1499471529, "desc": "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small."}, "ItemOxite": {"name": "ItemOxite", "hash": -1805394113, "desc": "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen."}, "ItemVolatiles": {"name": "ItemVolatiles", "hash": 1253102035, "desc": "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity's sake, these are often displayed as H2 by devices like the Atmos Analyzer.\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n"}, "ItemIce": {"name": "ItemIce", "hash": 1217489948, "desc": "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas."}, "StructureIceCrusher": {"name": "StructureIceCrusher", "hash": 443849486, "desc": "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch.", "slots": [{"name": "Import", "type": "Ore"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Chute", "Input"], "3": ["Pipe", "Output"], "4": ["PipeLiquid", "Output2"]}}, "StructureIgniter": {"name": "StructureIgniter", "hash": 1005491513, "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", "logic": {"On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureEmergencyButton": {"name": "StructureEmergencyButton", "hash": 1668452680, "desc": "Description coming.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureInLineTankGas1x2": {"name": "StructureInLineTankGas1x2", "hash": 35149429, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankLiquid1x2": {"name": "StructureInLineTankLiquid1x2", "hash": -1183969663, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankGas1x1": {"name": "StructureInLineTankGas1x1", "hash": -1693382705, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankLiquid1x1": {"name": "StructureInLineTankLiquid1x1", "hash": 543645499, "desc": "A small expansion tank that increases the volume of a pipe network."}, "ItemAstroloyIngot": {"name": "ItemAstroloyIngot", "hash": 412924554, "desc": "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel."}, "ItemConstantanIngot": {"name": "ItemConstantanIngot", "hash": 1058547521, "desc": ""}, "ItemCopperIngot": {"name": "ItemCopperIngot", "hash": -404336834, "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items."}, "ItemElectrumIngot": {"name": "ItemElectrumIngot", "hash": 502280180, "desc": ""}, "ItemGoldIngot": {"name": "ItemGoldIngot", "hash": 226410516, "desc": "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as 'cut-price space exploration' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. "}, "ItemHastelloyIngot": {"name": "ItemHastelloyIngot", "hash": 1579842814, "desc": ""}, "ItemInconelIngot": {"name": "ItemInconelIngot", "hash": -787796599, "desc": ""}, "ItemInvarIngot": {"name": "ItemInvarIngot", "hash": -297990285, "desc": ""}, "ItemIronIngot": {"name": "ItemIronIngot", "hash": -1301215609, "desc": "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items."}, "ItemLeadIngot": {"name": "ItemLeadIngot", "hash": 2134647745, "desc": ""}, "ItemNickelIngot": {"name": "ItemNickelIngot", "hash": -1406385572, "desc": ""}, "ItemSiliconIngot": {"name": "ItemSiliconIngot", "hash": -290196476, "desc": ""}, "ItemSilverIngot": {"name": "ItemSilverIngot", "hash": -929742000, "desc": ""}, "ItemSolderIngot": {"name": "ItemSolderIngot", "hash": -82508479, "desc": ""}, "ItemSteelIngot": {"name": "ItemSteelIngot", "hash": -654790771, "desc": "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting."}, "ItemStelliteIngot": {"name": "ItemStelliteIngot", "hash": -1897868623, "desc": ""}, "ItemWaspaloyIngot": {"name": "ItemWaspaloyIngot", "hash": 156348098, "desc": ""}, "StructureInsulatedPipeLiquidCrossJunction": {"name": "StructureInsulatedPipeLiquidCrossJunction", "hash": 1926651727, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction4": {"name": "StructureInsulatedPipeLiquidCrossJunction4", "hash": 363303270, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction5": {"name": "StructureInsulatedPipeLiquidCrossJunction5", "hash": 1654694384, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction6": {"name": "StructureInsulatedPipeLiquidCrossJunction6", "hash": -72748982, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCorner": {"name": "StructureInsulatedPipeLiquidCorner", "hash": 1713710802, "desc": "Liquid piping with very low temperature loss or gain."}, "StructurePipeInsulatedLiquidCrossJunction": {"name": "StructurePipeInsulatedLiquidCrossJunction", "hash": -2068497073, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidStraight": {"name": "StructureInsulatedPipeLiquidStraight", "hash": 295678685, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidTJunction": {"name": "StructureInsulatedPipeLiquidTJunction", "hash": -532384855, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureLiquidTankBigInsulated": {"name": "StructureLiquidTankBigInsulated", "hash": -1430440215, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidTankSmallInsulated": {"name": "StructureLiquidTankSmallInsulated", "hash": 608607718, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructurePassiveVentInsulated": {"name": "StructurePassiveVentInsulated", "hash": 1363077139, "desc": ""}, "StructureInsulatedPipeCrossJunction3": {"name": "StructureInsulatedPipeCrossJunction3", "hash": 1328210035, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction4": {"name": "StructureInsulatedPipeCrossJunction4", "hash": -783387184, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction5": {"name": "StructureInsulatedPipeCrossJunction5", "hash": -1505147578, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction6": {"name": "StructureInsulatedPipeCrossJunction6", "hash": 1061164284, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCorner": {"name": "StructureInsulatedPipeCorner", "hash": -1967711059, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction": {"name": "StructureInsulatedPipeCrossJunction", "hash": -92778058, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeStraight": {"name": "StructureInsulatedPipeStraight", "hash": 2134172356, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeTJunction": {"name": "StructureInsulatedPipeTJunction", "hash": -2076086215, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedTankConnector": {"name": "StructureInsulatedTankConnector", "hash": -31273349, "desc": "", "slots": [{"name": "", "type": "None"}]}, "StructureInsulatedTankConnectorLiquid": {"name": "StructureInsulatedTankConnectorLiquid", "hash": -1602030414, "desc": "", "slots": [{"name": "Portable Slot", "type": "None"}]}, "ItemInsulation": {"name": "ItemInsulation", "hash": 897176943, "desc": "Mysterious in the extreme, the function of this item is lost to the ages."}, "ItemIntegratedCircuit10": {"name": "ItemIntegratedCircuit10", "hash": -744098481, "desc": "", "logic": {"LineNumber": "Read", "ReferenceId": "Read"}}, "StructureInteriorDoorGlass": {"name": "StructureInteriorDoorGlass", "hash": -2096421875, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorPadded": {"name": "StructureInteriorDoorPadded", "hash": 847461335, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorPaddedThin": {"name": "StructureInteriorDoorPaddedThin", "hash": 1981698201, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorTriangle": {"name": "StructureInteriorDoorTriangle", "hash": -1182923101, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureFrameIron": {"name": "StructureFrameIron", "hash": -1240951678, "desc": ""}, "ItemIronFrames": {"name": "ItemIronFrames", "hash": 1225836666, "desc": ""}, "ItemIronSheets": {"name": "ItemIronSheets", "hash": -487378546, "desc": ""}, "StructureWallIron": {"name": "StructureWallIron", "hash": 1287324802, "desc": ""}, "StructureWallIron02": {"name": "StructureWallIron02", "hash": 1485834215, "desc": ""}, "StructureWallIron03": {"name": "StructureWallIron03", "hash": 798439281, "desc": ""}, "StructureWallIron04": {"name": "StructureWallIron04", "hash": -1309433134, "desc": ""}, "StructureCompositeWindowIron": {"name": "StructureCompositeWindowIron", "hash": -688284639, "desc": ""}, "ItemJetpackBasic": {"name": "ItemJetpackBasic", "hash": 1969189000, "desc": "The basic CHAC jetpack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "type": "GasCanister"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "UniformOrangeJumpSuit": {"name": "UniformOrangeJumpSuit", "hash": 810053150, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "Access Card", "type": "AccessCard"}, {"name": "Credit Card", "type": "CreditCard"}]}, "ItemKitAIMeE": {"name": "ItemKitAIMeE", "hash": 496830914, "desc": ""}, "ItemKitAccessBridge": {"name": "ItemKitAccessBridge", "hash": 513258369, "desc": ""}, "ItemActiveVent": {"name": "ItemActiveVent", "hash": -842048328, "desc": "When constructed, this kit places an Active Vent on any support structure."}, "ItemKitAdvancedComposter": {"name": "ItemKitAdvancedComposter", "hash": -1431998347, "desc": ""}, "ItemKitAdvancedFurnace": {"name": "ItemKitAdvancedFurnace", "hash": -616758353, "desc": ""}, "ItemKitAdvancedPackagingMachine": {"name": "ItemKitAdvancedPackagingMachine", "hash": -598545233, "desc": ""}, "ItemKitAirlock": {"name": "ItemKitAirlock", "hash": 964043875, "desc": ""}, "ItemKitArcFurnace": {"name": "ItemKitArcFurnace", "hash": -98995857, "desc": ""}, "ItemKitWallArch": {"name": "ItemKitWallArch", "hash": 1625214531, "desc": ""}, "ItemKitAtmospherics": {"name": "ItemKitAtmospherics", "hash": 1222286371, "desc": ""}, "ItemKitAutolathe": {"name": "ItemKitAutolathe", "hash": -1753893214, "desc": ""}, "ItemKitHydroponicAutomated": {"name": "ItemKitHydroponicAutomated", "hash": -927931558, "desc": ""}, "ItemKitAutomatedOven": {"name": "ItemKitAutomatedOven", "hash": -1931958659, "desc": ""}, "ItemKitAutoMinerSmall": {"name": "ItemKitAutoMinerSmall", "hash": 1668815415, "desc": ""}, "ItemKitRocketAvionics": {"name": "ItemKitRocketAvionics", "hash": 1396305045, "desc": ""}, "ItemKitChute": {"name": "ItemKitChute", "hash": 1025254665, "desc": ""}, "ItemKitBasket": {"name": "ItemKitBasket", "hash": 148305004, "desc": ""}, "ItemBatteryCharger": {"name": "ItemBatteryCharger", "hash": -1866880307, "desc": "This kit produces a 5-slot Kit (Battery Charger)."}, "ItemKitBatteryLarge": {"name": "ItemKitBatteryLarge", "hash": -21225041, "desc": ""}, "ItemKitBattery": {"name": "ItemKitBattery", "hash": 1406656973, "desc": ""}, "ItemKitBeacon": {"name": "ItemKitBeacon", "hash": 249073136, "desc": ""}, "ItemKitBeds": {"name": "ItemKitBeds", "hash": -1241256797, "desc": ""}, "ItemKitBlastDoor": {"name": "ItemKitBlastDoor", "hash": -1755116240, "desc": ""}, "ItemCableAnalyser": {"name": "ItemCableAnalyser", "hash": -1792787349, "desc": ""}, "ItemCableFuse": {"name": "ItemCableFuse", "hash": 195442047, "desc": ""}, "ItemGasTankStorage": {"name": "ItemGasTankStorage", "hash": -2113012215, "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister."}, "ItemKitCentrifuge": {"name": "ItemKitCentrifuge", "hash": 578182956, "desc": ""}, "ItemKitChairs": {"name": "ItemKitChairs", "hash": -1394008073, "desc": ""}, "ItemKitChuteUmbilical": {"name": "ItemKitChuteUmbilical", "hash": -876560854, "desc": ""}, "ItemKitCompositeCladding": {"name": "ItemKitCompositeCladding", "hash": -1470820996, "desc": ""}, "KitStructureCombustionCentrifuge": {"name": "KitStructureCombustionCentrifuge", "hash": 231903234, "desc": ""}, "ItemKitComputer": {"name": "ItemKitComputer", "hash": 1990225489, "desc": ""}, "ItemKitConsole": {"name": "ItemKitConsole", "hash": -1241851179, "desc": ""}, "ItemKitCrateMount": {"name": "ItemKitCrateMount", "hash": -551612946, "desc": ""}, "ItemKitPassthroughHeatExchanger": {"name": "ItemKitPassthroughHeatExchanger", "hash": 636112787, "desc": ""}, "ItemKitCrateMkII": {"name": "ItemKitCrateMkII", "hash": -1585956426, "desc": ""}, "ItemKitCrate": {"name": "ItemKitCrate", "hash": 429365598, "desc": ""}, "ItemRTG": {"name": "ItemRTG", "hash": 495305053, "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG)."}, "ItemKitCryoTube": {"name": "ItemKitCryoTube", "hash": -545234195, "desc": ""}, "ItemKitDeepMiner": {"name": "ItemKitDeepMiner", "hash": -1935075707, "desc": ""}, "ItemPipeDigitalValve": {"name": "ItemPipeDigitalValve", "hash": -1532448832, "desc": "This kit creates a Digital Valve."}, "ItemKitDockingPort": {"name": "ItemKitDockingPort", "hash": 77421200, "desc": ""}, "ItemKitDoor": {"name": "ItemKitDoor", "hash": 168615924, "desc": ""}, "ItemKitDrinkingFountain": {"name": "ItemKitDrinkingFountain", "hash": -1743663875, "desc": ""}, "ItemKitElectronicsPrinter": {"name": "ItemKitElectronicsPrinter", "hash": -1181922382, "desc": ""}, "ItemKitElevator": {"name": "ItemKitElevator", "hash": -945806652, "desc": ""}, "ItemKitEngineLarge": {"name": "ItemKitEngineLarge", "hash": 755302726, "desc": ""}, "ItemKitEngineMedium": {"name": "ItemKitEngineMedium", "hash": 1969312177, "desc": ""}, "ItemKitEngineSmall": {"name": "ItemKitEngineSmall", "hash": 19645163, "desc": ""}, "ItemFlashingLight": {"name": "ItemFlashingLight", "hash": -2107840748, "desc": ""}, "ItemKitWallFlat": {"name": "ItemKitWallFlat", "hash": -846838195, "desc": ""}, "ItemKitCompositeFloorGrating": {"name": "ItemKitCompositeFloorGrating", "hash": 1182412869, "desc": ""}, "ItemKitFridgeBig": {"name": "ItemKitFridgeBig", "hash": -1168199498, "desc": ""}, "ItemKitFridgeSmall": {"name": "ItemKitFridgeSmall", "hash": 1661226524, "desc": ""}, "ItemKitFurnace": {"name": "ItemKitFurnace", "hash": -806743925, "desc": ""}, "ItemKitFurniture": {"name": "ItemKitFurniture", "hash": 1162905029, "desc": ""}, "ItemKitFuselage": {"name": "ItemKitFuselage", "hash": -366262681, "desc": ""}, "ItemKitGasGenerator": {"name": "ItemKitGasGenerator", "hash": 377745425, "desc": ""}, "ItemPipeGasMixer": {"name": "ItemPipeGasMixer", "hash": -1134459463, "desc": "This kit creates a Gas Mixer."}, "ItemGasSensor": {"name": "ItemGasSensor", "hash": 1717593480, "desc": ""}, "ItemKitGasUmbilical": {"name": "ItemKitGasUmbilical", "hash": -1867280568, "desc": ""}, "ItemKitWallGeometry": {"name": "ItemKitWallGeometry", "hash": -784733231, "desc": ""}, "ItemKitGrowLight": {"name": "ItemKitGrowLight", "hash": 341030083, "desc": ""}, "ItemKitAirlockGate": {"name": "ItemKitAirlockGate", "hash": 682546947, "desc": ""}, "ItemKitHarvie": {"name": "ItemKitHarvie", "hash": -1022693454, "desc": ""}, "ItemKitHydraulicPipeBender": {"name": "ItemKitHydraulicPipeBender", "hash": -2098556089, "desc": ""}, "ItemKitHydroponicStation": {"name": "ItemKitHydroponicStation", "hash": 2057179799, "desc": ""}, "ItemHydroponicTray": {"name": "ItemHydroponicTray", "hash": -1193543727, "desc": "This kits creates a Hydroponics Tray for growing various plants."}, "ItemKitLogicCircuit": {"name": "ItemKitLogicCircuit", "hash": 1512322581, "desc": ""}, "ItemKitIceCrusher": {"name": "ItemKitIceCrusher", "hash": 288111533, "desc": ""}, "ItemIgniter": {"name": "ItemIgniter", "hash": 890106742, "desc": "This kit creates an Kit (Igniter) unit."}, "ItemKitInsulatedLiquidPipe": {"name": "ItemKitInsulatedLiquidPipe", "hash": 2067655311, "desc": ""}, "ItemKitLiquidTankInsulated": {"name": "ItemKitLiquidTankInsulated", "hash": 617773453, "desc": ""}, "ItemPassiveVentInsulated": {"name": "ItemPassiveVentInsulated", "hash": -1397583760, "desc": ""}, "ItemKitInsulatedPipe": {"name": "ItemKitInsulatedPipe", "hash": 452636699, "desc": ""}, "ItemKitInteriorDoors": {"name": "ItemKitInteriorDoors", "hash": 1935945891, "desc": ""}, "ItemKitWallIron": {"name": "ItemKitWallIron", "hash": -524546923, "desc": ""}, "ItemKitLadder": {"name": "ItemKitLadder", "hash": 489494578, "desc": ""}, "ItemKitLandingPadAtmos": {"name": "ItemKitLandingPadAtmos", "hash": 1817007843, "desc": ""}, "ItemKitLandingPadBasic": {"name": "ItemKitLandingPadBasic", "hash": 293581318, "desc": ""}, "ItemKitLandingPadWaypoint": {"name": "ItemKitLandingPadWaypoint", "hash": -1267511065, "desc": ""}, "ItemKitLargeDirectHeatExchanger": {"name": "ItemKitLargeDirectHeatExchanger", "hash": 450164077, "desc": ""}, "ItemKitLargeExtendableRadiator": {"name": "ItemKitLargeExtendableRadiator", "hash": 847430620, "desc": ""}, "ItemKitLargeSatelliteDish": {"name": "ItemKitLargeSatelliteDish", "hash": -2039971217, "desc": ""}, "ItemKitLaunchMount": {"name": "ItemKitLaunchMount", "hash": -1854167549, "desc": ""}, "ItemWallLight": {"name": "ItemWallLight", "hash": 1108423476, "desc": "This kit creates any one of ten Kit (Lights) variants."}, "ItemLiquidTankStorage": {"name": "ItemLiquidTankStorage", "hash": 2037427578, "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."}, "ItemWaterPipeDigitalValve": {"name": "ItemWaterPipeDigitalValve", "hash": 309693520, "desc": ""}, "ItemLiquidDrain": {"name": "ItemLiquidDrain", "hash": 2036225202, "desc": ""}, "ItemLiquidPipeAnalyzer": {"name": "ItemLiquidPipeAnalyzer", "hash": 226055671, "desc": ""}, "ItemWaterPipeMeter": {"name": "ItemWaterPipeMeter", "hash": -90898877, "desc": ""}, "ItemLiquidPipeValve": {"name": "ItemLiquidPipeValve", "hash": -2126113312, "desc": "This kit creates a Liquid Valve."}, "ItemKitPipeLiquid": {"name": "ItemKitPipeLiquid", "hash": -1166461357, "desc": ""}, "ItemPipeLiquidRadiator": {"name": "ItemPipeLiquidRadiator", "hash": -906521320, "desc": "This kit creates a Liquid Pipe Convection Radiator."}, "ItemKitLiquidRegulator": {"name": "ItemKitLiquidRegulator", "hash": 1951126161, "desc": ""}, "ItemKitLiquidTank": {"name": "ItemKitLiquidTank", "hash": -799849305, "desc": ""}, "ItemKitLiquidUmbilical": {"name": "ItemKitLiquidUmbilical", "hash": 1571996765, "desc": ""}, "ItemLiquidPipeVolumePump": {"name": "ItemLiquidPipeVolumePump", "hash": -2106280569, "desc": ""}, "ItemWaterWallCooler": {"name": "ItemWaterWallCooler", "hash": -1721846327, "desc": ""}, "ItemKitLocker": {"name": "ItemKitLocker", "hash": 882301399, "desc": ""}, "ItemKitLogicInputOutput": {"name": "ItemKitLogicInputOutput", "hash": 1997293610, "desc": ""}, "ItemKitLogicMemory": {"name": "ItemKitLogicMemory", "hash": -2098214189, "desc": ""}, "ItemKitLogicProcessor": {"name": "ItemKitLogicProcessor", "hash": 220644373, "desc": ""}, "ItemKitLogicSwitch": {"name": "ItemKitLogicSwitch", "hash": 124499454, "desc": ""}, "ItemKitLogicTransmitter": {"name": "ItemKitLogicTransmitter", "hash": 1005397063, "desc": ""}, "ItemKitPassiveLargeRadiatorLiquid": {"name": "ItemKitPassiveLargeRadiatorLiquid", "hash": 1453961898, "desc": ""}, "ItemKitPassiveLargeRadiatorGas": {"name": "ItemKitPassiveLargeRadiatorGas", "hash": -1752768283, "desc": ""}, "ItemKitSatelliteDish": {"name": "ItemKitSatelliteDish", "hash": 178422810, "desc": ""}, "ItemKitMotherShipCore": {"name": "ItemKitMotherShipCore", "hash": -344968335, "desc": ""}, "ItemKitMusicMachines": {"name": "ItemKitMusicMachines", "hash": -2038889137, "desc": ""}, "ItemKitFlagODA": {"name": "ItemKitFlagODA", "hash": 1701764190, "desc": ""}, "ItemKitHorizontalAutoMiner": {"name": "ItemKitHorizontalAutoMiner", "hash": 844391171, "desc": ""}, "ItemKitWallPadded": {"name": "ItemKitWallPadded", "hash": -821868990, "desc": ""}, "ItemKitEvaporationChamber": {"name": "ItemKitEvaporationChamber", "hash": 1587787610, "desc": ""}, "ItemPipeAnalyizer": {"name": "ItemPipeAnalyizer", "hash": -767597887, "desc": "This kit creates a Pipe Analyzer."}, "ItemPipeIgniter": {"name": "ItemPipeIgniter", "hash": 1366030599, "desc": ""}, "ItemPipeLabel": {"name": "ItemPipeLabel", "hash": 391769637, "desc": "This kit creates a Pipe Label."}, "ItemPipeMeter": {"name": "ItemPipeMeter", "hash": 1207939683, "desc": "This kit creates a Pipe Meter."}, "ItemKitPipeOrgan": {"name": "ItemKitPipeOrgan", "hash": -827125300, "desc": ""}, "ItemKitPipeRadiatorLiquid": {"name": "ItemKitPipeRadiatorLiquid", "hash": -1697302609, "desc": ""}, "ItemKitPipeRadiator": {"name": "ItemKitPipeRadiator", "hash": 920411066, "desc": ""}, "ItemKitPipeUtility": {"name": "ItemKitPipeUtility", "hash": 1934508338, "desc": ""}, "ItemKitPipeUtilityLiquid": {"name": "ItemKitPipeUtilityLiquid", "hash": 595478589, "desc": ""}, "ItemPipeValve": {"name": "ItemPipeValve", "hash": 799323450, "desc": "This kit creates a Valve."}, "ItemKitPipe": {"name": "ItemKitPipe", "hash": -1619793705, "desc": ""}, "ItemKitPlanter": {"name": "ItemKitPlanter", "hash": 119096484, "desc": ""}, "ItemDynamicAirCon": {"name": "ItemDynamicAirCon", "hash": 1072914031, "desc": ""}, "ItemKitDynamicGasTankAdvanced": {"name": "ItemKitDynamicGasTankAdvanced", "hash": 1533501495, "desc": ""}, "ItemKitDynamicCanister": {"name": "ItemKitDynamicCanister", "hash": -1061945368, "desc": ""}, "ItemKitDynamicGenerator": {"name": "ItemKitDynamicGenerator", "hash": -732720413, "desc": ""}, "ItemKitDynamicHydroponics": {"name": "ItemKitDynamicHydroponics", "hash": -1861154222, "desc": ""}, "ItemKitDynamicMKIILiquidCanister": {"name": "ItemKitDynamicMKIILiquidCanister", "hash": -638019974, "desc": ""}, "ItemKitDynamicLiquidCanister": {"name": "ItemKitDynamicLiquidCanister", "hash": 375541286, "desc": ""}, "ItemDynamicScrubber": {"name": "ItemDynamicScrubber", "hash": -971920158, "desc": ""}, "ItemKitPortablesConnector": {"name": "ItemKitPortablesConnector", "hash": 1041148999, "desc": ""}, "ItemPowerConnector": {"name": "ItemPowerConnector", "hash": 839924019, "desc": "This kit creates a Power Connector."}, "ItemAreaPowerControl": {"name": "ItemAreaPowerControl", "hash": 1757673317, "desc": "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow."}, "ItemKitPowerTransmitterOmni": {"name": "ItemKitPowerTransmitterOmni", "hash": -831211676, "desc": ""}, "ItemKitPowerTransmitter": {"name": "ItemKitPowerTransmitter", "hash": 291368213, "desc": ""}, "ItemKitElectricUmbilical": {"name": "ItemKitElectricUmbilical", "hash": 1603046970, "desc": ""}, "ItemKitStandardChute": {"name": "ItemKitStandardChute", "hash": 2133035682, "desc": ""}, "ItemKitPoweredVent": {"name": "ItemKitPoweredVent", "hash": 2015439334, "desc": ""}, "ItemKitPressureFedGasEngine": {"name": "ItemKitPressureFedGasEngine", "hash": -121514007, "desc": ""}, "ItemKitPressureFedLiquidEngine": {"name": "ItemKitPressureFedLiquidEngine", "hash": -99091572, "desc": ""}, "ItemKitRegulator": {"name": "ItemKitRegulator", "hash": 1181371795, "desc": ""}, "ItemKitGovernedGasRocketEngine": {"name": "ItemKitGovernedGasRocketEngine", "hash": 206848766, "desc": ""}, "ItemKitPumpedLiquidEngine": {"name": "ItemKitPumpedLiquidEngine", "hash": 1921918951, "desc": ""}, "ItemRTGSurvival": {"name": "ItemRTGSurvival", "hash": 1817645803, "desc": "This kit creates a Kit (RTG)."}, "ItemPipeRadiator": {"name": "ItemPipeRadiator", "hash": -1796655088, "desc": "This kit creates a Pipe Convection Radiator."}, "ItemKitRailing": {"name": "ItemKitRailing", "hash": 750176282, "desc": ""}, "ItemKitRecycler": {"name": "ItemKitRecycler", "hash": 849148192, "desc": ""}, "ItemKitReinforcedWindows": {"name": "ItemKitReinforcedWindows", "hash": 1459985302, "desc": ""}, "ItemKitRespawnPointWallMounted": {"name": "ItemKitRespawnPointWallMounted", "hash": 1574688481, "desc": ""}, "ItemKitRocketBattery": {"name": "ItemKitRocketBattery", "hash": -314072139, "desc": ""}, "ItemKitRocketCargoStorage": {"name": "ItemKitRocketCargoStorage", "hash": 479850239, "desc": ""}, "ItemKitRocketCelestialTracker": {"name": "ItemKitRocketCelestialTracker", "hash": -303008602, "desc": ""}, "ItemKitRocketCircuitHousing": {"name": "ItemKitRocketCircuitHousing", "hash": 721251202, "desc": ""}, "ItemKitRocketDatalink": {"name": "ItemKitRocketDatalink", "hash": -1256996603, "desc": ""}, "ItemKitRocketGasFuelTank": {"name": "ItemKitRocketGasFuelTank", "hash": -1629347579, "desc": ""}, "ItemKitLaunchTower": {"name": "ItemKitLaunchTower", "hash": -174523552, "desc": ""}, "ItemKitRocketLiquidFuelTank": {"name": "ItemKitRocketLiquidFuelTank", "hash": 2032027950, "desc": ""}, "ItemKitRocketManufactory": {"name": "ItemKitRocketManufactory", "hash": -636127860, "desc": ""}, "ItemKitRocketMiner": {"name": "ItemKitRocketMiner", "hash": -867969909, "desc": ""}, "ItemKitRocketScanner": {"name": "ItemKitRocketScanner", "hash": 1753647154, "desc": ""}, "ItemKitRoverFrame": {"name": "ItemKitRoverFrame", "hash": 1827215803, "desc": ""}, "ItemKitRoverMKI": {"name": "ItemKitRoverMKI", "hash": 197243872, "desc": ""}, "ItemKitSDBHopper": {"name": "ItemKitSDBHopper", "hash": 323957548, "desc": ""}, "KitSDBSilo": {"name": "KitSDBSilo", "hash": 1932952652, "desc": "This kit creates a SDB Silo."}, "ItemKitSecurityPrinter": {"name": "ItemKitSecurityPrinter", "hash": 578078533, "desc": ""}, "ItemKitSensor": {"name": "ItemKitSensor", "hash": -1776897113, "desc": ""}, "ItemKitShower": {"name": "ItemKitShower", "hash": 735858725, "desc": ""}, "ItemKitSign": {"name": "ItemKitSign", "hash": 529996327, "desc": ""}, "ItemKitSleeper": {"name": "ItemKitSleeper", "hash": 326752036, "desc": ""}, "ItemKitSmallDirectHeatExchanger": {"name": "ItemKitSmallDirectHeatExchanger", "hash": -1332682164, "desc": ""}, "ItemFlagSmall": {"name": "ItemFlagSmall", "hash": 2011191088, "desc": ""}, "ItemKitSmallSatelliteDish": {"name": "ItemKitSmallSatelliteDish", "hash": 1960952220, "desc": ""}, "ItemKitSolarPanelBasicReinforced": {"name": "ItemKitSolarPanelBasicReinforced", "hash": -528695432, "desc": ""}, "ItemKitSolarPanelBasic": {"name": "ItemKitSolarPanelBasic", "hash": 844961456, "desc": ""}, "ItemKitSolarPanelReinforced": {"name": "ItemKitSolarPanelReinforced", "hash": -364868685, "desc": ""}, "ItemKitSolarPanel": {"name": "ItemKitSolarPanel", "hash": -1924492105, "desc": ""}, "ItemKitSolidGenerator": {"name": "ItemKitSolidGenerator", "hash": 1293995736, "desc": ""}, "ItemKitSorter": {"name": "ItemKitSorter", "hash": 969522478, "desc": ""}, "ItemKitSpeaker": {"name": "ItemKitSpeaker", "hash": -126038526, "desc": ""}, "ItemKitStacker": {"name": "ItemKitStacker", "hash": 1013244511, "desc": ""}, "ItemKitStairs": {"name": "ItemKitStairs", "hash": 170878959, "desc": ""}, "ItemKitStairwell": {"name": "ItemKitStairwell", "hash": -1868555784, "desc": ""}, "ItemKitStirlingEngine": {"name": "ItemKitStirlingEngine", "hash": -1821571150, "desc": ""}, "ItemKitSuitStorage": {"name": "ItemKitSuitStorage", "hash": 1088892825, "desc": ""}, "ItemKitTables": {"name": "ItemKitTables", "hash": -1361598922, "desc": ""}, "ItemKitTankInsulated": {"name": "ItemKitTankInsulated", "hash": 1021053608, "desc": ""}, "ItemKitTank": {"name": "ItemKitTank", "hash": 771439840, "desc": ""}, "ItemKitGroundTelescope": {"name": "ItemKitGroundTelescope", "hash": -2140672772, "desc": ""}, "ItemKitToolManufactory": {"name": "ItemKitToolManufactory", "hash": 529137748, "desc": ""}, "ItemKitTransformer": {"name": "ItemKitTransformer", "hash": -453039435, "desc": ""}, "ItemKitRocketTransformerSmall": {"name": "ItemKitRocketTransformerSmall", "hash": -932335800, "desc": ""}, "ItemKitTransformerSmall": {"name": "ItemKitTransformerSmall", "hash": 665194284, "desc": ""}, "ItemKitPressurePlate": {"name": "ItemKitPressurePlate", "hash": 123504691, "desc": ""}, "ItemKitTurbineGenerator": {"name": "ItemKitTurbineGenerator", "hash": -1590715731, "desc": ""}, "ItemKitTurboVolumePump": {"name": "ItemKitTurboVolumePump", "hash": -1248429712, "desc": ""}, "ItemKitLiquidTurboVolumePump": {"name": "ItemKitLiquidTurboVolumePump", "hash": -1805020897, "desc": ""}, "ItemKitUprightWindTurbine": {"name": "ItemKitUprightWindTurbine", "hash": -1798044015, "desc": ""}, "ItemKitVendingMachineRefrigerated": {"name": "ItemKitVendingMachineRefrigerated", "hash": -1867508561, "desc": ""}, "ItemKitVendingMachine": {"name": "ItemKitVendingMachine", "hash": -2038384332, "desc": ""}, "ItemPipeVolumePump": {"name": "ItemPipeVolumePump", "hash": -1766301997, "desc": "This kit creates a Volume Pump."}, "ItemWallCooler": {"name": "ItemWallCooler", "hash": -1567752627, "desc": "This kit creates a Wall Cooler."}, "ItemWallHeater": {"name": "ItemWallHeater", "hash": 1880134612, "desc": "This kit creates a Kit (Wall Heater)."}, "ItemKitWall": {"name": "ItemKitWall", "hash": -1826855889, "desc": ""}, "ItemKitWaterBottleFiller": {"name": "ItemKitWaterBottleFiller", "hash": 159886536, "desc": ""}, "ItemKitWaterPurifier": {"name": "ItemKitWaterPurifier", "hash": 611181283, "desc": ""}, "ItemKitWeatherStation": {"name": "ItemKitWeatherStation", "hash": 337505889, "desc": ""}, "ItemKitWindTurbine": {"name": "ItemKitWindTurbine", "hash": -868916503, "desc": ""}, "ItemKitWindowShutter": {"name": "ItemKitWindowShutter", "hash": 1779979754, "desc": ""}, "ItemKitHeatExchanger": {"name": "ItemKitHeatExchanger", "hash": -1710540039, "desc": ""}, "ItemKitPictureFrame": {"name": "ItemKitPictureFrame", "hash": -2062364768, "desc": ""}, "ItemKitResearchMachine": {"name": "ItemKitResearchMachine", "hash": 724776762, "desc": ""}, "KitchenTableShort": {"name": "KitchenTableShort", "hash": -1427415566, "desc": ""}, "KitchenTableSimpleShort": {"name": "KitchenTableSimpleShort", "hash": -78099334, "desc": ""}, "KitchenTableSimpleTall": {"name": "KitchenTableSimpleTall", "hash": -1068629349, "desc": ""}, "KitchenTableTall": {"name": "KitchenTableTall", "hash": -1386237782, "desc": ""}, "StructureKlaxon": {"name": "StructureKlaxon", "hash": -828056979, "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", "logic": {"Power": "Read", "Mode": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Volume": "ReadWrite", "PrefabHash": "Read", "SoundAlert": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "None", "1": "Alarm2", "2": "Alarm3", "3": "Alarm4", "4": "Alarm5", "5": "Alarm6", "6": "Alarm7", "7": "Music1", "8": "Music2", "9": "Music3", "10": "Alarm8", "11": "Alarm9", "12": "Alarm10", "13": "Alarm11", "14": "Alarm12", "15": "Danger", "16": "Warning", "17": "Alert", "18": "StormIncoming", "19": "IntruderAlert", "20": "Depressurising", "21": "Pressurising", "22": "AirlockCycling", "23": "PowerLow", "24": "SystemFailure", "25": "Welcome", "26": "MalfunctionDetected", "27": "HaltWhoGoesThere", "28": "FireFireFire", "29": "One", "30": "Two", "31": "Three", "32": "Four", "33": "Five", "34": "Floor", "35": "RocketLaunching", "36": "LiftOff", "37": "TraderIncoming", "38": "TraderLanded", "39": "PressureHigh", "40": "PressureLow", "41": "TemperatureHigh", "42": "TemperatureLow", "43": "PollutantsDetected", "44": "HighCarbonDioxide", "45": "Alarm1"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureDiode": {"name": "StructureDiode", "hash": 1944485013, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED1x3": {"name": "StructureConsoleLED1x3", "hash": -1949054743, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED1x2": {"name": "StructureConsoleLED1x2", "hash": -53151617, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED5": {"name": "StructureConsoleLED5", "hash": -815193061, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemLabeller": {"name": "ItemLabeller", "hash": -743968726, "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureLadder": {"name": "StructureLadder", "hash": -415420281, "desc": ""}, "StructureLadderEnd": {"name": "StructureLadderEnd", "hash": 1541734993, "desc": ""}, "StructurePlatformLadderOpen": {"name": "StructurePlatformLadderOpen", "hash": 1559586682, "desc": ""}, "Lander": {"name": "Lander", "hash": 1605130615, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "Entity", "type": "Entity"}]}, "Landingpad_BlankPiece": {"name": "Landingpad_BlankPiece", "hash": 912453390, "desc": ""}, "Landingpad_2x2CenterPiece01": {"name": "Landingpad_2x2CenterPiece01", "hash": -1295222317, "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors"}, "Landingpad_CenterPiece01": {"name": "Landingpad_CenterPiece01", "hash": 1070143159, "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", "modes": {"0": "None", "1": "NoContact", "2": "Moving", "3": "Holding", "4": "Landed"}}, "Landingpad_CrossPiece": {"name": "Landingpad_CrossPiece", "hash": 1101296153, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_DataConnectionPiece": {"name": "Landingpad_DataConnectionPiece", "hash": -2066405918, "desc": "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land.", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "ContactTypeId": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "None", "1": "NoContact", "2": "Moving", "3": "Holding", "4": "Landed"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["LandingPad", "Input"], "3": ["LandingPad", "Input"], "4": ["LandingPad", "Input"]}}, "Landingpad_DiagonalPiece01": {"name": "Landingpad_DiagonalPiece01", "hash": 977899131, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_GasConnectorInwardPiece": {"name": "Landingpad_GasConnectorInwardPiece", "hash": 817945707, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["Pipe", "Input"]}}, "Landingpad_GasConnectorOutwardPiece": {"name": "Landingpad_GasConnectorOutwardPiece", "hash": -1100218307, "desc": "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad's gas storage capacity by adding more Landingpad Gas Storage to the landing pad.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["Pipe", "Output"]}}, "Landingpad_GasCylinderTankPiece": {"name": "Landingpad_GasCylinderTankPiece", "hash": 170818567, "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders."}, "Landingpad_LiquidConnectorInwardPiece": {"name": "Landingpad_LiquidConnectorInwardPiece", "hash": -1216167727, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["PipeLiquid", "Input"]}}, "Landingpad_LiquidConnectorOutwardPiece": {"name": "Landingpad_LiquidConnectorOutwardPiece", "hash": -1788929869, "desc": "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad's liquid storage capacity by adding more Landingpad Gas Storage to the landing pad.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["PipeLiquid", "Output"]}}, "Landingpad_StraightPiece01": {"name": "Landingpad_StraightPiece01", "hash": -976273247, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_TaxiPieceCorner": {"name": "Landingpad_TaxiPieceCorner", "hash": -1872345847, "desc": ""}, "Landingpad_TaxiPieceHold": {"name": "Landingpad_TaxiPieceHold", "hash": 146051619, "desc": ""}, "Landingpad_TaxiPieceStraight": {"name": "Landingpad_TaxiPieceStraight", "hash": -1477941080, "desc": ""}, "Landingpad_ThreshholdPiece": {"name": "Landingpad_ThreshholdPiece", "hash": -1514298582, "desc": "", "logic": {"Power": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "Input"]}}, "ItemLaptop": {"name": "ItemLaptop", "hash": 141535121, "desc": "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}, {"name": "Battery", "type": "Battery"}, {"name": "Motherboard", "type": "Motherboard"}], "logic": {"Power": "Read", "Error": "Read", "PressureExternal": "Read", "On": "ReadWrite", "TemperatureExternal": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Charge": [1], "ChargeRatio": [1], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "ReferenceId": [0, 1, 2]}}, "StructureLargeDirectHeatExchangeLiquidtoLiquid": {"name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", "hash": 792686502, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"]}}, "StructureLargeDirectHeatExchangeGastoGas": {"name": "StructureLargeDirectHeatExchangeGastoGas", "hash": -1230658883, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"]}}, "StructureLargeDirectHeatExchangeGastoLiquid": {"name": "StructureLargeDirectHeatExchangeGastoLiquid", "hash": 1412338038, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Input2"]}}, "StructureLargeExtendableRadiator": {"name": "StructureLargeExtendableRadiator", "hash": -566775170, "desc": "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms.", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"]}}, "StructureLargeHangerDoor": {"name": "StructureLargeHangerDoor", "hash": -1351081801, "desc": "1 x 3 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLargeSatelliteDish": {"name": "StructureLargeSatelliteDish", "hash": 1913391845, "desc": "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureTankBig": {"name": "StructureTankBig", "hash": -1606848156, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureLaunchMount": {"name": "StructureLaunchMount", "hash": -558953231, "desc": "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code."}, "StructureRocketTower": {"name": "StructureRocketTower", "hash": -654619479, "desc": ""}, "StructureLogicSwitch": {"name": "StructureLogicSwitch", "hash": 1220484876, "desc": "", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLightRound": {"name": "StructureLightRound", "hash": 1514476632, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightRoundAngled": {"name": "StructureLightRoundAngled", "hash": 1592905386, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightRoundSmall": {"name": "StructureLightRoundSmall", "hash": 1436121888, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemLightSword": {"name": "ItemLightSword", "hash": 1949076595, "desc": "A charming, if useless, pseudo-weapon. (Creative only.)"}, "StructureBackLiquidPressureRegulator": {"name": "StructureBackLiquidPressureRegulator", "hash": 2099900163, "desc": "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "ItemLiquidCanisterEmpty": {"name": "ItemLiquidCanisterEmpty", "hash": -185207387, "desc": "Holds Water, if you have some."}, "ItemLiquidCanisterSmart": {"name": "ItemLiquidCanisterSmart", "hash": 777684475, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemGasCanisterWater": {"name": "ItemGasCanisterWater", "hash": -1854861891, "desc": "The\u00c2\u00a0blue\u00c2\u00a0portable\u00c2\u00a0Water\u00c2\u00a0Gas Canister\u00c2\u00a0has\u00c2\u00a0a\u00c2\u00a064L\u00c2\u00a0capacity,\u00c2\u00a0supplying\u00c2\u00a0Water\u00c2\u00a0to\u00c2\u00a0items\u00c2\u00a0like\u00c2\u00a0the\u00c2\u00a0Portable Hydroponics\u00c2\u00a0unit, or any other connected system.\u00c2\u00a0All\u00c2\u00a0liquid\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Liquid Tank\u00c2\u00a0or\u00c2\u00a0Liquid Tank Storage\u00c2\u00a0for\u00c2\u00a0refill."}, "StructureMediumRocketLiquidFuelTank": {"name": "StructureMediumRocketLiquidFuelTank", "hash": 1143639539, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "Output"], "1": ["PipeLiquid", "Input"]}}, "StructureCapsuleTankLiquid": {"name": "StructureCapsuleTankLiquid", "hash": 1415396263, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureWaterDigitalValve": {"name": "StructureWaterDigitalValve", "hash": -517628750, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["PipeLiquid", "Input"], "2": ["PowerAndData", "None"]}}, "StructurePipeLiquidCrossJunction3": {"name": "StructurePipeLiquidCrossJunction3", "hash": 1628087508, "desc": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction4": {"name": "StructurePipeLiquidCrossJunction4", "hash": -9555593, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction5": {"name": "StructurePipeLiquidCrossJunction5", "hash": -2006384159, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction6": {"name": "StructurePipeLiquidCrossJunction6", "hash": 291524699, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCorner": {"name": "StructurePipeLiquidCorner", "hash": -1856720921, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction": {"name": "StructurePipeLiquidCrossJunction", "hash": 1848735691, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidStraight": {"name": "StructurePipeLiquidStraight", "hash": 667597982, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidTJunction": {"name": "StructurePipeLiquidTJunction", "hash": 262616717, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructureLiquidPipeAnalyzer": {"name": "StructureLiquidPipeAnalyzer", "hash": -2113838091, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLiquidPipeRadiator": {"name": "StructureLiquidPipeRadiator", "hash": 2072805863, "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureWaterPipeMeter": {"name": "StructureWaterPipeMeter", "hash": 433184168, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureLiquidTankBig": {"name": "StructureLiquidTankBig", "hash": 1098900430, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureTankConnectorLiquid": {"name": "StructureTankConnectorLiquid", "hash": 1331802518, "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", "slots": [{"name": "Portable Slot", "type": "None"}]}, "StructureLiquidTankSmall": {"name": "StructureLiquidTankSmall", "hash": 1988118157, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidTankStorage": {"name": "StructureLiquidTankStorage", "hash": 1691898022, "desc": "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters.", "slots": [{"name": "Liquid Canister", "type": "LiquidCanister"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Pressure": [0], "Temperature": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "Volume": [0], "Open": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidValve": {"name": "StructureLiquidValve", "hash": 1849974453, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"]}}, "StructureLiquidVolumePump": {"name": "StructureLiquidVolumePump", "hash": -454028979, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["PipeLiquid", "Input"], "2": ["PowerAndData", "None"]}}, "StructureLiquidPressureRegulator": {"name": "StructureLiquidPressureRegulator", "hash": 482248766, "desc": "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "StructureWaterWallCooler": {"name": "StructureWaterWallCooler", "hash": -1369060582, "desc": "", "slots": [{"name": "", "type": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PowerAndData", "None"]}}, "StructureStorageLocker": {"name": "StructureStorageLocker", "hash": -793623899, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]}}, "StructureLockerSmall": {"name": "StructureLockerSmall", "hash": -647164662, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "PrefabHash": [0, 1, 2, 3], "SortingClass": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}}, "StructureLogicCompare": {"name": "StructureLogicCompare", "hash": -1489728908, "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Equals", "1": "Greater", "2": "Less", "3": "NotEquals"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicGate": {"name": "StructureLogicGate", "hash": 1942143074, "desc": "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "AND", "1": "OR", "2": "XOR", "3": "NAND", "4": "NOR", "5": "XNOR"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicHashGen": {"name": "StructureLogicHashGen", "hash": 2077593121, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLogicMath": {"name": "StructureLogicMath", "hash": 1657691323, "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Add", "1": "Subtract", "2": "Multiply", "3": "Divide", "4": "Mod", "5": "Atan2", "6": "Pow", "7": "Log"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicMemory": {"name": "StructureLogicMemory", "hash": -851746783, "desc": "", "logic": {"Setting": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLogicMinMax": {"name": "StructureLogicMinMax", "hash": 929022276, "desc": "0.Greater\n1.Less", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Greater", "1": "Less"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicMirror": {"name": "StructureLogicMirror", "hash": 2096189278, "desc": "", "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "MotherboardLogic": {"name": "MotherboardLogic", "hash": 502555944, "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items."}, "StructureLogicReader": {"name": "StructureLogicReader", "hash": -345383640, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicRocketDownlink": {"name": "StructureLogicRocketDownlink", "hash": 876108549, "desc": "", "logic": {"Power": "Read", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "Input"]}}, "StructureLogicSelect": {"name": "StructureLogicSelect", "hash": 1822736084, "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Equals", "1": "Greater", "2": "Less", "3": "NotEquals"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "LogicStepSequencer8": {"name": "LogicStepSequencer8", "hash": 1531272458, "desc": "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer's BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer.", "slots": [{"name": "Sound Cartridge", "type": "SoundCartridge"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "ReadWrite", "Bpm": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Whole Note", "1": "Half Note", "2": "Quarter Note", "3": "Eighth Note", "4": "Sixteenth Note"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Power", "Input"]}}, "StructureLogicTransmitter": {"name": "StructureLogicTransmitter", "hash": -693235651, "desc": "Connects to Logic Transmitter", "modes": {"0": "Passive", "1": "Active"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Input"], "3": ["Power", "None"]}}, "StructureLogicRocketUplink": {"name": "StructureLogicRocketUplink", "hash": 546002924, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "None"]}}, "StructureLogicWriter": {"name": "StructureLogicWriter", "hash": -1326019434, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicWriterSwitch": {"name": "StructureLogicWriterSwitch", "hash": -1321250424, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "DeviceLfoVolume": {"name": "DeviceLfoVolume", "hash": -1844430312, "desc": "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You're in space. Make it sound cool.\n\nFor more info, check out the music page.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "ReadWrite", "Bpm": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Whole Note", "1": "Half Note", "2": "Quarter Note", "3": "Eighth Note", "4": "Sixteenth Note"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureManualHatch": {"name": "StructureManualHatch", "hash": -1808154199, "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "ItemMarineBodyArmor": {"name": "ItemMarineBodyArmor", "hash": 1399098998, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}]}, "ItemMarineHelmet": {"name": "ItemMarineHelmet", "hash": 1073631646, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}]}, "UniformMarine": {"name": "UniformMarine", "hash": -48342840, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "Access Card", "type": "AccessCard"}, {"name": "Credit Card", "type": "CreditCard"}]}, "StructureLogicMathUnary": {"name": "StructureLogicMathUnary", "hash": -1160020195, "desc": "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Ceil", "1": "Floor", "2": "Abs", "3": "Log", "4": "Exp", "5": "Round", "6": "Rand", "7": "Sqrt", "8": "Sin", "9": "Cos", "10": "Tan", "11": "Asin", "12": "Acos", "13": "Atan", "14": "Not"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "CartridgeMedicalAnalyser": {"name": "CartridgeMedicalAnalyser", "hash": -1116110181, "desc": "When added to the OreCore Handheld Tablet, Asura's's ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users."}, "StructureMediumConvectionRadiator": {"name": "StructureMediumConvectionRadiator", "hash": -1918215845, "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructurePassiveLargeRadiatorGas": {"name": "StructurePassiveLargeRadiatorGas", "hash": 2066977095, "desc": "Has been replaced by Medium Convection Radiator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureMediumConvectionRadiatorLiquid": {"name": "StructureMediumConvectionRadiatorLiquid", "hash": -1169014183, "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructurePassiveLargeRadiatorLiquid": {"name": "StructurePassiveLargeRadiatorLiquid", "hash": 24786172, "desc": "Has been replaced by Medium Convection Radiator Liquid.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "ItemGasFilterCarbonDioxideM": {"name": "ItemGasFilterCarbonDioxideM", "hash": 416897318, "desc": ""}, "ItemGasFilterNitrogenM": {"name": "ItemGasFilterNitrogenM", "hash": -632657357, "desc": ""}, "ItemGasFilterNitrousOxideM": {"name": "ItemGasFilterNitrousOxideM", "hash": 1824284061, "desc": ""}, "ItemGasFilterOxygenM": {"name": "ItemGasFilterOxygenM", "hash": -1067319543, "desc": ""}, "ItemGasFilterPollutantsM": {"name": "ItemGasFilterPollutantsM", "hash": 63677771, "desc": ""}, "ItemGasFilterVolatilesM": {"name": "ItemGasFilterVolatilesM", "hash": 1037507240, "desc": ""}, "ItemGasFilterWaterM": {"name": "ItemGasFilterWaterM", "hash": 8804422, "desc": ""}, "StructureMediumHangerDoor": {"name": "StructureMediumHangerDoor", "hash": -566348148, "desc": "1 x 2 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureMediumRadiator": {"name": "StructureMediumRadiator", "hash": -975966237, "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureMediumRadiatorLiquid": {"name": "StructureMediumRadiatorLiquid", "hash": -1141760613, "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructureSatelliteDish": {"name": "StructureSatelliteDish", "hash": 439026183, "desc": "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "Meteorite": {"name": "Meteorite", "hash": -99064335, "desc": ""}, "ApplianceMicrowave": {"name": "ApplianceMicrowave", "hash": -1136173965, "desc": "While countless 'better' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don't worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking.", "slots": [{"name": "Output", "type": "None"}]}, "StructurePowerTransmitterReceiver": {"name": "StructurePowerTransmitterReceiver", "hash": 1195820278, "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Unlinked", "1": "Linked"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Output"]}}, "StructurePowerTransmitter": {"name": "StructurePowerTransmitter", "hash": -65087121, "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Unlinked", "1": "Linked"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "ItemMilk": {"name": "ItemMilk", "hash": 1327248310, "desc": "Full disclosure, it's not actually 'milk', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin."}, "ItemMiningBackPack": {"name": "ItemMiningBackPack", "hash": -1650383245, "desc": "", "slots": [{"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}]}, "ItemMiningBelt": {"name": "ItemMiningBelt", "hash": -676435305, "desc": "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer's mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit.", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}]}, "ItemMiningBeltMKII": {"name": "ItemMiningBeltMKII", "hash": 1470787934, "desc": "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. ", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}, {"name": "Ore", "type": "Ore"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "ItemMiningCharge": {"name": "ItemMiningCharge", "hash": 15829510, "desc": "A low cost, high yield explosive with a 10 second timer.", "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemMiningDrill": {"name": "ItemMiningDrill", "hash": 1055173191, "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.'", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemMiningDrillHeavy": {"name": "ItemMiningDrillHeavy", "hash": -1663349918, "desc": "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso 'Topo' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemRocketMiningDrillHead": {"name": "ItemRocketMiningDrillHead", "hash": 2109945337, "desc": "Replaceable drill head for Rocket Miner"}, "ItemRocketMiningDrillHeadDurable": {"name": "ItemRocketMiningDrillHeadDurable", "hash": 1530764483, "desc": ""}, "ItemRocketMiningDrillHeadHighSpeedIce": {"name": "ItemRocketMiningDrillHeadHighSpeedIce", "hash": 653461728, "desc": ""}, "ItemRocketMiningDrillHeadHighSpeedMineral": {"name": "ItemRocketMiningDrillHeadHighSpeedMineral", "hash": 1440678625, "desc": ""}, "ItemRocketMiningDrillHeadIce": {"name": "ItemRocketMiningDrillHeadIce", "hash": -380904592, "desc": ""}, "ItemRocketMiningDrillHeadLongTerm": {"name": "ItemRocketMiningDrillHeadLongTerm", "hash": -684020753, "desc": ""}, "ItemRocketMiningDrillHeadMineral": {"name": "ItemRocketMiningDrillHeadMineral", "hash": 1083675581, "desc": ""}, "ItemMKIIAngleGrinder": {"name": "ItemMKIIAngleGrinder", "hash": 240174650, "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIIArcWelder": {"name": "ItemMKIIArcWelder", "hash": -2061979347, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIICrowbar": {"name": "ItemMKIICrowbar", "hash": 1440775434, "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure."}, "ItemMKIIDrill": {"name": "ItemMKIIDrill", "hash": 324791548, "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIIDuctTape": {"name": "ItemMKIIDuctTape", "hash": 388774906, "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."}, "ItemMKIIMiningDrill": {"name": "ItemMKIIMiningDrill", "hash": -1875271296, "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.' The MK II is more resistant to temperature and pressure.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemMKIIScrewdriver": {"name": "ItemMKIIScrewdriver", "hash": -2015613246, "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure."}, "ItemMKIIWireCutters": {"name": "ItemMKIIWireCutters", "hash": -178893251, "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools."}, "ItemMKIIWrench": {"name": "ItemMKIIWrench", "hash": 1862001680, "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure."}, "CircuitboardModeControl": {"name": "CircuitboardModeControl", "hash": -1134148135, "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes."}, "MothershipCore": {"name": "MothershipCore", "hash": -1930442922, "desc": "A relic of from an earlier era of space ambition, Sinotai's mothership cores formed the central element of a generation's space-going creations. While Sinotai's pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts."}, "StructureMotionSensor": {"name": "StructureMotionSensor", "hash": -1713470563, "desc": "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on.", "logic": {"Activate": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemMuffin": {"name": "ItemMuffin", "hash": -1864982322, "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin."}, "ItemMushroom": {"name": "ItemMushroom", "hash": 2044798572, "desc": "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it."}, "SeedBag_Mushroom": {"name": "SeedBag_Mushroom", "hash": 311593418, "desc": "Grow a Mushroom."}, "CartridgeNetworkAnalyser": {"name": "CartridgeNetworkAnalyser", "hash": 1606989119, "desc": "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it's used in conjunction with the OreCore Handheld Tablet."}, "ItemNVG": {"name": "ItemNVG", "hash": 982514123, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureNitrolyzer": {"name": "StructureNitrolyzer", "hash": 1898243702, "desc": "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed.", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureInput2": "Read", "TemperatureInput2": "Read", "RatioOxygenInput2": "Read", "RatioCarbonDioxideInput2": "Read", "RatioNitrogenInput2": "Read", "RatioPollutantInput2": "Read", "RatioVolatilesInput2": "Read", "RatioWaterInput2": "Read", "RatioNitrousOxideInput2": "Read", "TotalMolesInput2": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionInput2": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Input2"], "3": ["Pipe", "Output"], "4": ["Power", "None"]}}, "StructureHorizontalAutoMiner": {"name": "StructureHorizontalAutoMiner", "hash": 1070427573, "desc": "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureOccupancySensor": {"name": "StructureOccupancySensor", "hash": 322782515, "desc": "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room.", "logic": {"Activate": "Read", "Quantity": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructurePipeOneWayValve": {"name": "StructurePipeOneWayValve", "hash": 1580412404, "desc": "The one way valve moves gas in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.\n", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureLiquidPipeOneWayValve": {"name": "StructureLiquidPipeOneWayValve", "hash": -782453061, "desc": "The one way valve moves liquid in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure..", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "ItemCoalOre": {"name": "ItemCoalOre", "hash": 1724793494, "desc": "Humanity wouldn't have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black)."}, "ItemCobaltOre": {"name": "ItemCobaltOre", "hash": -983091249, "desc": "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys."}, "ItemCopperOre": {"name": "ItemCopperOre", "hash": -707307845, "desc": "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires."}, "ItemGoldOre": {"name": "ItemGoldOre", "hash": -1348105509, "desc": "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold's strength is that it does nothing."}, "ItemIronOre": {"name": "ItemIronOre", "hash": 1758427767, "desc": "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s."}, "ItemLeadOre": {"name": "ItemLeadOre", "hash": -190236170, "desc": "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions."}, "ItemNickelOre": {"name": "ItemNickelOre", "hash": 1830218956, "desc": "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys."}, "ItemSiliconOre": {"name": "ItemSiliconOre", "hash": 1103972403, "desc": "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission."}, "ItemSilverOre": {"name": "ItemSilverOre", "hash": -916518678, "desc": "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys."}, "ItemUraniumOre": {"name": "ItemUraniumOre", "hash": -1516581844, "desc": "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named 'nuclear fission', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material."}, "CartridgeOreScanner": {"name": "CartridgeOreScanner", "hash": -1768732546, "desc": "When inserted into a Handheld Tablet and used in conjunction with a Ground Penetrating Radar (GPR), the scanner will display minerals hidden underground on the tablet."}, "CartridgeOreScannerColor": {"name": "CartridgeOreScannerColor", "hash": 1738236580, "desc": "When inserted into a Handheld Tablet and used in conjunction with a Ground Penetrating Radar (GPR), the scanner will display minerals hidden underground in different colors on the tablet.\n\nIron and Nickle = red \nIce, Lead, Cobalt = cyan\nGold and Silver = green\nCoal and Silicon = magenta\nCopper and Oxite = yellow\nVolatiles and Uranium = white"}, "StructureOverheadShortCornerLocker": {"name": "StructureOverheadShortCornerLocker", "hash": -1794932560, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}}, "StructureOverheadShortLocker": {"name": "StructureOverheadShortLocker", "hash": 1468249454, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "AppliancePaintMixer": {"name": "AppliancePaintMixer", "hash": -1339716113, "desc": "", "slots": [{"name": "Output", "type": "Bottle"}]}, "StructurePassiveLiquidDrain": {"name": "StructurePassiveLiquidDrain", "hash": 1812364811, "desc": "Moves liquids from a pipe network to the world atmosphere.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureFloorDrain": {"name": "StructureFloorDrain", "hash": 1048813293, "desc": "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also."}, "PassiveSpeaker": {"name": "PassiveSpeaker", "hash": 248893646, "desc": "", "logic": {"Volume": "ReadWrite", "PrefabHash": "ReadWrite", "SoundAlert": "ReadWrite", "ReferenceId": "ReadWrite"}, "conn": {"0": ["Data", "Input"]}}, "ItemPassiveVent": {"name": "ItemPassiveVent", "hash": 238631271, "desc": "This kit creates a Passive Vent among other variants."}, "StructurePassiveVent": {"name": "StructurePassiveVent", "hash": 335498166, "desc": "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. "}, "ItemPeaceLily": {"name": "ItemPeaceLily", "hash": 2042955224, "desc": "A fetching lily with greater resistance to cold temperatures."}, "ItemPickaxe": {"name": "ItemPickaxe", "hash": -913649823, "desc": "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe."}, "StructurePictureFrameThickLandscapeLarge": {"name": "StructurePictureFrameThickLandscapeLarge", "hash": -1434523206, "desc": ""}, "StructurePictureFrameThickMountLandscapeLarge": {"name": "StructurePictureFrameThickMountLandscapeLarge", "hash": 950004659, "desc": ""}, "StructurePictureFrameThickMountLandscapeSmall": {"name": "StructurePictureFrameThickMountLandscapeSmall", "hash": 347154462, "desc": ""}, "StructurePictureFrameThickLandscapeSmall": {"name": "StructurePictureFrameThickLandscapeSmall", "hash": -2041566697, "desc": ""}, "StructurePictureFrameThickMountPortraitLarge": {"name": "StructurePictureFrameThickMountPortraitLarge", "hash": -1459641358, "desc": ""}, "StructurePictureFrameThickMountPortraitSmall": {"name": "StructurePictureFrameThickMountPortraitSmall", "hash": -2066653089, "desc": ""}, "StructurePictureFrameThickPortraitLarge": {"name": "StructurePictureFrameThickPortraitLarge", "hash": -1686949570, "desc": ""}, "StructurePictureFrameThickPortraitSmall": {"name": "StructurePictureFrameThickPortraitSmall", "hash": -1218579821, "desc": ""}, "StructurePictureFrameThinLandscapeLarge": {"name": "StructurePictureFrameThinLandscapeLarge", "hash": -1418288625, "desc": ""}, "StructurePictureFrameThinMountLandscapeLarge": {"name": "StructurePictureFrameThinMountLandscapeLarge", "hash": -1146760430, "desc": ""}, "StructurePictureFrameThinMountLandscapeSmall": {"name": "StructurePictureFrameThinMountLandscapeSmall", "hash": -1752493889, "desc": ""}, "StructurePictureFrameThinLandscapeSmall": {"name": "StructurePictureFrameThinLandscapeSmall", "hash": -2024250974, "desc": ""}, "StructurePictureFrameThinMountPortraitLarge": {"name": "StructurePictureFrameThinMountPortraitLarge", "hash": 1094895077, "desc": ""}, "StructurePictureFrameThinPortraitLarge": {"name": "StructurePictureFrameThinPortraitLarge", "hash": 1212777087, "desc": ""}, "StructurePictureFrameThinPortraitSmall": {"name": "StructurePictureFrameThinPortraitSmall", "hash": 1684488658, "desc": ""}, "StructurePictureFrameThinMountPortraitSmall": {"name": "StructurePictureFrameThinMountPortraitSmall", "hash": 1835796040, "desc": ""}, "ItemPillHeal": {"name": "ItemPillHeal", "hash": 1118069417, "desc": "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response."}, "ItemPillStun": {"name": "ItemPillStun", "hash": 418958601, "desc": "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it."}, "StructurePipeCrossJunction3": {"name": "StructurePipeCrossJunction3", "hash": 2038427184, "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction4": {"name": "StructurePipeCrossJunction4", "hash": -417629293, "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction5": {"name": "StructurePipeCrossJunction5", "hash": -1877193979, "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction6": {"name": "StructurePipeCrossJunction6", "hash": 152378047, "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCorner": {"name": "StructurePipeCorner", "hash": -1785673561, "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction": {"name": "StructurePipeCrossJunction", "hash": -1405295588, "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeStraight": {"name": "StructurePipeStraight", "hash": 73728932, "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeTJunction": {"name": "StructurePipeTJunction", "hash": -913817472, "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeAnalysizer": {"name": "StructurePipeAnalysizer", "hash": 435685051, "desc": "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer via a {Logic system.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "PipeBenderMod": {"name": "PipeBenderMod", "hash": 443947415, "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructurePipeRadiator": {"name": "StructurePipeRadiator", "hash": 1696603168, "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeCowl": {"name": "StructurePipeCowl", "hash": 465816159, "desc": ""}, "ItemPipeCowl": {"name": "ItemPipeCowl", "hash": -38898376, "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres."}, "StructurePipeHeater": {"name": "StructurePipeHeater", "hash": -419758574, "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLiquidPipeHeater": {"name": "StructureLiquidPipeHeater", "hash": -287495560, "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemPipeHeater": {"name": "ItemPipeHeater", "hash": -1751627006, "desc": "Creates a Pipe Heater (Gas)."}, "ItemLiquidPipeHeater": {"name": "ItemLiquidPipeHeater", "hash": -248475032, "desc": "Creates a Pipe Heater (Liquid)."}, "StructurePipeIgniter": {"name": "StructurePipeIgniter", "hash": 1286441942, "desc": "Ignites the atmosphere inside the attached pipe network.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructurePipeLabel": {"name": "StructurePipeLabel", "hash": -999721119, "desc": "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeMeter": {"name": "StructurePipeMeter", "hash": -1798362329, "desc": "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeOrgan": {"name": "StructurePipeOrgan", "hash": 1305252611, "desc": "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning.", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructurePipeRadiatorFlat": {"name": "StructurePipeRadiatorFlat", "hash": -399883995, "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeRadiatorFlatLiquid": {"name": "StructurePipeRadiatorFlatLiquid", "hash": 2024754523, "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "AppliancePlantGeneticAnalyzer": {"name": "AppliancePlantGeneticAnalyzer", "hash": -1303038067, "desc": "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold.", "slots": [{"name": "Input", "type": "Tool"}]}, "AppliancePlantGeneticSplicer": {"name": "AppliancePlantGeneticSplicer", "hash": -1094868323, "desc": "The Genetic Splicer can be used to copy a single gene from one 'source' plant to another 'target' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort.", "slots": [{"name": "Source Plant", "type": "Plant"}, {"name": "Target Plant", "type": "Plant"}]}, "AppliancePlantGeneticStabilizer": {"name": "AppliancePlantGeneticStabilizer", "hash": 871432335, "desc": "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n ", "slots": [{"name": "Plant", "type": "Plant"}], "modes": {"0": "Stabilize", "1": "Destabilize"}}, "ItemPlantSampler": {"name": "ItemPlantSampler", "hash": 173023800, "desc": "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "StructurePlanter": {"name": "StructurePlanter", "hash": -1125641329, "desc": "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water).", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}]}, "ItemPlasticSheets": {"name": "ItemPlasticSheets", "hash": 662053345, "desc": ""}, "StructurePlinth": {"name": "StructurePlinth", "hash": 989835703, "desc": "", "slots": [{"name": "", "type": "None"}]}, "ItemMiningDrillPneumatic": {"name": "ItemMiningDrillPneumatic", "hash": 1258187304, "desc": "0.Default\n1.Flatten", "slots": [{"name": "Gas Canister", "type": "GasCanister"}], "modes": {"0": "Default", "1": "Flatten"}}, "DynamicAirConditioner": {"name": "DynamicAirConditioner", "hash": 519913639, "desc": "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases.", "slots": [{"name": "Battery", "type": "Battery"}], "modes": {"0": "Cold", "1": "Hot"}}, "DynamicScrubber": {"name": "DynamicScrubber", "hash": 755048589, "desc": "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Gas Filter", "type": "GasFilter"}, {"name": "Gas Filter", "type": "GasFilter"}]}, "PortableComposter": {"name": "PortableComposter", "hash": -1958705204, "desc": "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "Battery"}, {"name": "Liquid Canister", "type": "LiquidCanister"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "DynamicGasCanisterEmpty": {"name": "DynamicGasCanisterEmpty", "hash": -1741267161, "desc": "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterAir": {"name": "DynamicGasCanisterAir", "hash": -1713611165, "desc": "Portable gas tanks do one thing: store gas. But there's lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterCarbonDioxide": {"name": "DynamicGasCanisterCarbonDioxide", "hash": -322413931, "desc": "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or ... boom. Once it's full, you can refill a Canister (CO2) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere ... of sorts.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterFuel": {"name": "DynamicGasCanisterFuel", "hash": -817051527, "desc": "Portable tanks store gas. They're good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It's really up to you.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterNitrogen": {"name": "DynamicGasCanisterNitrogen", "hash": 121951301, "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll end up with Nitrogen in places you weren't expecting. You can refill a Canister (Nitrogen) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterNitrousOxide": {"name": "DynamicGasCanisterNitrousOxide", "hash": 30727200, "desc": "", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterOxygen": {"name": "DynamicGasCanisterOxygen", "hash": 1360925836, "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterPollutants": {"name": "DynamicGasCanisterPollutants", "hash": 396065382, "desc": "", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasCanisterVolatiles": {"name": "DynamicGasCanisterVolatiles", "hash": 108086870, "desc": "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don't fill it above 10 MPa, unless you're the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank's striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System.", "slots": [{"name": "Gas Canister", "type": "None"}]}, "DynamicGasTankAdvancedOxygen": {"name": "DynamicGasTankAdvancedOxygen", "hash": -1264455519, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Gas Canister", "type": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "DynamicGenerator": {"name": "DynamicGenerator", "hash": -82087220, "desc": "Every Stationeer's best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It's pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference.", "slots": [{"name": "Gas Canister", "type": "GasCanister"}, {"name": "Battery", "type": "Battery"}]}, "DynamicHydroponics": {"name": "DynamicHydroponics", "hash": 587726607, "desc": "", "slots": [{"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Plant", "type": "Plant"}, {"name": "Liquid Canister", "type": "LiquidCanister"}, {"name": "Liquid Canister", "type": "Plant"}, {"name": "Liquid Canister", "type": "Plant"}, {"name": "Liquid Canister", "type": "Plant"}, {"name": "Liquid Canister", "type": "Plant"}]}, "DynamicLight": {"name": "DynamicLight", "hash": -21970188, "desc": "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination's lacking. Powered by any battery, it's a 'no-frills' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like.", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "DynamicLiquidCanisterEmpty": {"name": "DynamicLiquidCanisterEmpty", "hash": -1939209112, "desc": "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", "slots": [{"name": "Liquid Canister", "type": "LiquidCanister"}]}, "DynamicGasCanisterWater": {"name": "DynamicGasCanisterWater", "hash": 197293625, "desc": "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", "slots": [{"name": "Gas Canister", "type": "LiquidCanister"}]}, "DynamicMKIILiquidCanisterEmpty": {"name": "DynamicMKIILiquidCanisterEmpty", "hash": 2130739600, "desc": "An empty, insulated liquid Gas Canister.", "slots": [{"name": "Liquid Canister", "type": "LiquidCanister"}]}, "DynamicMKIILiquidCanisterWater": {"name": "DynamicMKIILiquidCanisterWater", "hash": -319510386, "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", "slots": [{"name": "Liquid Canister", "type": "LiquidCanister"}]}, "PortableSolarPanel": {"name": "PortableSolarPanel", "hash": 2043318949, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Open": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructurePortablesConnector": {"name": "StructurePortablesConnector", "hash": -899013427, "desc": "", "slots": [{"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Input2"]}}, "ItemPotato": {"name": "ItemPotato", "hash": 1929046963, "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."}, "SeedBag_Potato": {"name": "SeedBag_Potato", "hash": 1005571172, "desc": "Grow a Potato."}, "ItemCookedPowderedEggs": {"name": "ItemCookedPowderedEggs", "hash": -1712264413, "desc": "A high-nutrient cooked food, which can be canned."}, "StructurePowerConnector": {"name": "StructurePowerConnector", "hash": -782951720, "desc": "Attaches a Kit (Portable Generator) to a power network.", "slots": [{"name": "Portable Slot", "type": "None"}], "logic": {"Open": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Power", "Input"]}}, "CircuitboardPowerControl": {"name": "CircuitboardPowerControl", "hash": -1923778429, "desc": "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. "}, "StructurePowerTransmitterOmni": {"name": "StructurePowerTransmitterOmni", "hash": -327468845, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureBench": {"name": "StructureBench", "hash": -2042448192, "desc": "When it's time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave.", "slots": [{"name": "Appliance 1", "type": "Appliance"}, {"name": "Appliance 2", "type": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructurePoweredVent": {"name": "StructurePoweredVent", "hash": 938836756, "desc": "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Output"], "2": ["Power", "None"]}}, "StructurePoweredVentLarge": {"name": "StructurePoweredVentLarge", "hash": -785498334, "desc": "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Output"], "2": ["Power", "None"]}}, "StructurePressurantValve": {"name": "StructurePressurantValve", "hash": 23052817, "desc": "Pumps gas into a liquid pipe in order to raise the pressure", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "StructurePressureFedGasEngine": {"name": "StructurePressureFedGasEngine", "hash": -624011170, "desc": "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"], "2": ["PowerAndData", "Output"]}}, "StructurePressureFedLiquidEngine": {"name": "StructurePressureFedLiquidEngine", "hash": 379750958, "desc": "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["PowerAndData", "Output"]}}, "StructurePressureRegulator": {"name": "StructurePressureRegulator", "hash": 209854039, "desc": "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "StructureProximitySensor": {"name": "StructureProximitySensor", "hash": 568800213, "desc": "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet.", "logic": {"Activate": "Read", "Setting": "ReadWrite", "Quantity": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureGovernedGasEngine": {"name": "StructureGovernedGasEngine", "hash": -214232602, "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructurePumpedLiquidEngine": {"name": "StructurePumpedLiquidEngine", "hash": -2031440019, "desc": "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"], "2": ["PowerAndData", "Output"]}}, "ItemPumpkin": {"name": "ItemPumpkin", "hash": 1277828144, "desc": "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light."}, "ItemPumpkinPie": {"name": "ItemPumpkinPie", "hash": 62768076, "desc": ""}, "SeedBag_Pumpkin": {"name": "SeedBag_Pumpkin", "hash": 1423199840, "desc": "Grow a Pumpkin."}, "ItemPumpkinSoup": {"name": "ItemPumpkinSoup", "hash": 1277979876, "desc": "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay"}, "ItemPureIceCarbonDioxide": {"name": "ItemPureIceCarbonDioxide", "hash": -1251009404, "desc": "A frozen chunk of pure Carbon Dioxide"}, "ItemPureIceHydrogen": {"name": "ItemPureIceHydrogen", "hash": 944530361, "desc": "A frozen chunk of pure Hydrogen"}, "ItemPureIceLiquidCarbonDioxide": {"name": "ItemPureIceLiquidCarbonDioxide", "hash": -1715945725, "desc": "A frozen chunk of pure Liquid Carbon Dioxide"}, "ItemPureIceLiquidHydrogen": {"name": "ItemPureIceLiquidHydrogen", "hash": -1044933269, "desc": "A frozen chunk of pure Liquid Hydrogen"}, "ItemPureIceLiquidNitrogen": {"name": "ItemPureIceLiquidNitrogen", "hash": 1674576569, "desc": "A frozen chunk of pure Liquid Nitrogen"}, "ItemPureIceLiquidNitrous": {"name": "ItemPureIceLiquidNitrous", "hash": 1428477399, "desc": "A frozen chunk of pure Liquid Nitrous Oxide"}, "ItemPureIceLiquidOxygen": {"name": "ItemPureIceLiquidOxygen", "hash": 541621589, "desc": "A frozen chunk of pure Liquid Oxygen"}, "ItemPureIceLiquidPollutant": {"name": "ItemPureIceLiquidPollutant", "hash": -1748926678, "desc": "A frozen chunk of pure Liquid Pollutant"}, "ItemPureIceLiquidVolatiles": {"name": "ItemPureIceLiquidVolatiles", "hash": -1306628937, "desc": "A frozen chunk of pure Liquid Volatiles"}, "ItemPureIceNitrogen": {"name": "ItemPureIceNitrogen", "hash": -1708395413, "desc": "A frozen chunk of pure Nitrogen"}, "ItemPureIceNitrous": {"name": "ItemPureIceNitrous", "hash": 386754635, "desc": "A frozen chunk of pure Nitrous Oxide"}, "ItemPureIceOxygen": {"name": "ItemPureIceOxygen", "hash": -1150448260, "desc": "A frozen chunk of pure Oxygen"}, "ItemPureIcePollutant": {"name": "ItemPureIcePollutant", "hash": -1755356, "desc": "A frozen chunk of pure Pollutant"}, "ItemPureIcePollutedWater": {"name": "ItemPureIcePollutedWater", "hash": -2073202179, "desc": "A frozen chunk of Polluted Water"}, "ItemPureIceSteam": {"name": "ItemPureIceSteam", "hash": -874791066, "desc": "A frozen chunk of pure Steam"}, "ItemPureIceVolatiles": {"name": "ItemPureIceVolatiles", "hash": -633723719, "desc": "A frozen chunk of pure Volatiles"}, "ItemPureIce": {"name": "ItemPureIce", "hash": -1616308158, "desc": "A frozen chunk of pure Water"}, "StructurePurgeValve": {"name": "StructurePurgeValve", "hash": -737232128, "desc": "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "RailingElegant01": {"name": "RailingElegant01", "hash": 399661231, "desc": ""}, "RailingElegant02": {"name": "RailingElegant02", "hash": -1898247915, "desc": ""}, "StructureRailing": {"name": "StructureRailing", "hash": -1756913871, "desc": "\"Safety third.\""}, "RailingIndustrial02": {"name": "RailingIndustrial02", "hash": -2072792175, "desc": ""}, "ItemReagentMix": {"name": "ItemReagentMix", "hash": -1641500434, "desc": "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot."}, "ApplianceReagentProcessor": {"name": "ApplianceReagentProcessor", "hash": 1260918085, "desc": "Sitting somewhere between a high powered juicer and an alchemist's alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you're ready to go.", "slots": [{"name": "Input", "type": "None"}, {"name": "Output", "type": "None"}]}, "StructureLogicReagentReader": {"name": "StructureLogicReagentReader", "hash": -124308857, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureRecycler": {"name": "StructureRecycler", "hash": -1633947337, "desc": "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureRefrigeratedVendingMachine": {"name": "StructureRefrigeratedVendingMachine", "hash": -1577831321, "desc": "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit's default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. ", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RequestHash": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureReinforcedCompositeWindowSteel": {"name": "StructureReinforcedCompositeWindowSteel", "hash": -816454272, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedCompositeWindow": {"name": "StructureReinforcedCompositeWindow", "hash": 2027713511, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedWallPaddedWindow": {"name": "StructureReinforcedWallPaddedWindow", "hash": 1939061729, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedWallPaddedWindowThin": {"name": "StructureReinforcedWallPaddedWindowThin", "hash": 158502707, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "ItemRemoteDetonator": {"name": "ItemRemoteDetonator", "hash": 678483886, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemExplosive": {"name": "ItemExplosive", "hash": 235361649, "desc": ""}, "ItemResearchCapsule": {"name": "ItemResearchCapsule", "hash": 819096942, "desc": ""}, "ItemResearchCapsuleGreen": {"name": "ItemResearchCapsuleGreen", "hash": -1352732550, "desc": ""}, "ItemResearchCapsuleRed": {"name": "ItemResearchCapsuleRed", "hash": 954947943, "desc": ""}, "ItemResearchCapsuleYellow": {"name": "ItemResearchCapsuleYellow", "hash": 750952701, "desc": ""}, "StructureResearchMachine": {"name": "StructureResearchMachine", "hash": -796627526, "desc": "", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "CurrentResearchPodType": "Read", "ManualResearchRequiredPod": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"]}}, "RespawnPoint": {"name": "RespawnPoint", "hash": -788672929, "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead."}, "RespawnPointWallMounted": {"name": "RespawnPointWallMounted", "hash": -491247370, "desc": ""}, "ItemRice": {"name": "ItemRice", "hash": 658916791, "desc": "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought."}, "SeedBag_Rice": {"name": "SeedBag_Rice", "hash": -1691151239, "desc": "Grow some Rice."}, "ItemRoadFlare": {"name": "ItemRoadFlare", "hash": 871811564, "desc": "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space."}, "StructureRocketAvionics": {"name": "StructureRocketAvionics", "hash": 808389066, "desc": "", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Temperature": "Read", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "VelocityRelativeY": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "Progress": "Read", "DestinationCode": "ReadWrite", "Acceleration": "Read", "ReferenceId": "Read", "AutoShutOff": "ReadWrite", "Mass": "Read", "DryMass": "Read", "Thrust": "Read", "Weight": "Read", "ThrustToWeight": "Read", "TimeToDestination": "Read", "BurnTimeRemaining": "Read", "AutoLand": "Write", "FlightControlRule": "Read", "ReEntryAltitude": "Read", "Apex": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read", "Discover": "Read", "Chart": "Read", "Survey": "Read", "NavPoints": "Read", "ChartedNavPoints": "Read", "Sites": "Read", "CurrentCode": "Read", "Density": "Read", "Richness": "Read", "Size": "Read", "TotalQuantity": "Read", "MinedQuantity": "Read"}, "modes": {"0": "Invalid", "1": "None", "2": "Mine", "3": "Survey", "4": "Discover", "5": "Chart"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureRocketCelestialTracker": {"name": "StructureRocketCelestialTracker", "hash": 997453927, "desc": "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned.", "logic": {"Power": "Read", "Error": "Read", "Horizontal": "Read", "Vertical": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "Index": "ReadWrite", "CelestialHash": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureRocketCircuitHousing": {"name": "StructureRocketCircuitHousing", "hash": 150135861, "desc": "", "slots": [{"name": "Programmable Chip", "type": "ProgrammableChip"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "LineNumber": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "LineNumber": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "Input"]}}, "MotherboardRockets": {"name": "MotherboardRockets", "hash": -806986392, "desc": ""}, "StructureRocketEngineTiny": {"name": "StructureRocketEngineTiny", "hash": 178472613, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructureRocketManufactory": {"name": "StructureRocketManufactory", "hash": 1781051034, "desc": "", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureRocketMiner": {"name": "StructureRocketMiner", "hash": -2087223687, "desc": "Gathers available resources at the rocket's current space location.", "slots": [{"name": "Export", "type": "None"}, {"name": "Drill Head Slot", "type": "DrillHead"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "DrillCondition": "Read"}, "conn": {"0": ["Chute", "Output"], "1": ["PowerAndData", "None"]}}, "StructureRocketScanner": {"name": "StructureRocketScanner", "hash": 2014252591, "desc": "", "slots": [{"name": "Scanner Head Slot", "type": "ScanningHead"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemRocketScanningHead": {"name": "ItemRocketScanningHead", "hash": -1198702771, "desc": ""}, "RoverCargo": {"name": "RoverCargo", "hash": 350726273, "desc": "Connects to Logic Transmitter", "slots": [{"name": "Entity", "type": "Entity"}, {"name": "Entity", "type": "Entity"}, {"name": "Gas Filter", "type": "GasFilter"}, {"name": "Gas Filter", "type": "GasFilter"}, {"name": "Gas Filter", "type": "GasFilter"}, {"name": "Gas Canister", "type": "GasCanister"}, {"name": "Gas Canister", "type": "GasCanister"}, {"name": "Gas Canister", "type": "GasCanister"}, {"name": "Gas Canister", "type": "GasCanister"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Container Slot", "type": "None"}, {"name": "Container Slot", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Power": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Pressure": [5, 6, 7, 8], "Temperature": [5, 6, 7, 8], "Charge": [9, 10, 11], "ChargeRatio": [9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "FilterType": [2, 3, 4], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}}, "StructureRover": {"name": "StructureRover", "hash": 806513938, "desc": ""}, "Rover_MkI_build_states": {"name": "Rover_MkI_build_states", "hash": 861674123, "desc": ""}, "Rover_MkI": {"name": "Rover_MkI", "hash": -2049946335, "desc": "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter", "slots": [{"name": "Entity", "type": "Entity"}, {"name": "Entity", "type": "Entity"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "Battery", "type": "Battery"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Power": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Charge": [2, 3, 4], "ChargeRatio": [2, 3, 4], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}}, "StructureSDBHopper": {"name": "StructureSDBHopper", "hash": -1875856925, "desc": "", "slots": [{"name": "Import", "type": "None"}], "logic": {"Open": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "None"]}}, "StructureSDBHopperAdvanced": {"name": "StructureSDBHopperAdvanced", "hash": 467225612, "desc": "", "slots": [{"name": "Import", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Chute", "Input"]}}, "StructureSDBSilo": {"name": "StructureSDBSilo", "hash": 1155865682, "desc": "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "SMGMagazine": {"name": "SMGMagazine", "hash": -256607540, "desc": ""}, "ItemScrewdriver": {"name": "ItemScrewdriver", "hash": 687940869, "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units."}, "ItemSecurityCamera": {"name": "ItemSecurityCamera", "hash": -1981101032, "desc": "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that 'always watched' feeling."}, "StructureSecurityPrinter": {"name": "StructureSecurityPrinter", "hash": -641491515, "desc": "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemSensorLenses": {"name": "ItemSensorLenses", "hash": -1176140051, "desc": "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface.", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Sensor Processing Unit", "type": "SensorProcessingUnit"}], "logic": {"Power": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}}, "ItemSensorProcessingUnitCelestialScanner": {"name": "ItemSensorProcessingUnitCelestialScanner", "hash": -1154200014, "desc": ""}, "ItemSensorProcessingUnitOreScanner": {"name": "ItemSensorProcessingUnitOreScanner", "hash": -1219128491, "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."}, "ItemSensorProcessingUnitMesonScanner": {"name": "ItemSensorProcessingUnitMesonScanner", "hash": -1730464583, "desc": "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures."}, "StructureShelf": {"name": "StructureShelf", "hash": 1172114950, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}]}, "StructureShelfMedium": {"name": "StructureShelfMedium", "hash": 182006674, "desc": "A shelf for putting things on, so you can see them.", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "CircuitboardShipDisplay": {"name": "CircuitboardShipDisplay", "hash": -2044446819, "desc": "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board."}, "StructureShortCornerLocker": {"name": "StructureShortCornerLocker", "hash": 1330754486, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}}, "StructureShortLocker": {"name": "StructureShortLocker", "hash": -554553467, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "StructureShower": {"name": "StructureShower", "hash": -775128944, "desc": "", "logic": {"Open": "ReadWrite", "Activate": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructureShowerPowered": {"name": "StructureShowerPowered", "hash": -1081797501, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Power", "None"]}}, "StructureSign1x1": {"name": "StructureSign1x1", "hash": 879058460, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureSign2x1": {"name": "StructureSign2x1", "hash": 908320837, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureSingleBed": {"name": "StructureSingleBed", "hash": -492611, "desc": "Description coming.", "slots": [{"name": "Bed", "type": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "DynamicSkeleton": {"name": "DynamicSkeleton", "hash": 106953348, "desc": ""}, "StructureSleeper": {"name": "StructureSleeper", "hash": -1467449329, "desc": "", "slots": [{"name": "Bed", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperLeft": {"name": "StructureSleeperLeft", "hash": 1213495833, "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperRight": {"name": "StructureSleeperRight", "hash": -1812330717, "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperVertical": {"name": "StructureSleeperVertical", "hash": -1300059018, "desc": "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "type": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureLogicSlotReader": {"name": "StructureLogicSlotReader", "hash": -767867194, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureSmallTableBacklessDouble": {"name": "StructureSmallTableBacklessDouble", "hash": -1633000411, "desc": ""}, "StructureSmallTableBacklessSingle": {"name": "StructureSmallTableBacklessSingle", "hash": -1897221677, "desc": ""}, "StructureSmallTableDinnerSingle": {"name": "StructureSmallTableDinnerSingle", "hash": 1260651529, "desc": ""}, "StructureSmallTableRectangleDouble": {"name": "StructureSmallTableRectangleDouble", "hash": -660451023, "desc": ""}, "StructureSmallTableRectangleSingle": {"name": "StructureSmallTableRectangleSingle", "hash": -924678969, "desc": ""}, "StructureSmallTableThickDouble": {"name": "StructureSmallTableThickDouble", "hash": -19246131, "desc": ""}, "StructureSmallDirectHeatExchangeGastoGas": {"name": "StructureSmallDirectHeatExchangeGastoGas", "hash": 1310303582, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"]}}, "StructureSmallDirectHeatExchangeLiquidtoGas": {"name": "StructureSmallDirectHeatExchangeLiquidtoGas", "hash": 1825212016, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Input2"]}}, "StructureSmallDirectHeatExchangeLiquidtoLiquid": {"name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", "hash": -507770416, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"]}}, "StructureFlagSmall": {"name": "StructureFlagSmall", "hash": -1529819532, "desc": ""}, "StructureAirlockGate": {"name": "StructureAirlockGate", "hash": 1736080881, "desc": "1 x 1 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSmallSatelliteDish": {"name": "StructureSmallSatelliteDish", "hash": -2138748650, "desc": "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureSmallTableThickSingle": {"name": "StructureSmallTableThickSingle", "hash": -291862981, "desc": ""}, "StructureTankSmall": {"name": "StructureTankSmall", "hash": 1013514688, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "StructureTankSmallAir": {"name": "StructureTankSmallAir", "hash": 955744474, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "StructureTankSmallFuel": {"name": "StructureTankSmallFuel", "hash": 2102454415, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "CircuitboardSolarControl": {"name": "CircuitboardSolarControl", "hash": 2020180320, "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel."}, "StructureSolarPanel": {"name": "StructureSolarPanel", "hash": -2045627372, "desc": "Sinotai's standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanel45": {"name": "StructureSolarPanel45", "hash": -1554349863, "desc": "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelDual": {"name": "StructureSolarPanelDual", "hash": -539224550, "desc": "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSolarPanelFlat": {"name": "StructureSolarPanelFlat", "hash": 1968102968, "desc": "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanel45Reinforced": {"name": "StructureSolarPanel45Reinforced", "hash": 930865127, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelDualReinforced": {"name": "StructureSolarPanelDualReinforced", "hash": -1545574413, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSolarPanelFlatReinforced": {"name": "StructureSolarPanelFlatReinforced", "hash": 1697196770, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelReinforced": {"name": "StructureSolarPanelReinforced", "hash": -934345724, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemSolidFuel": {"name": "ItemSolidFuel", "hash": -365253871, "desc": ""}, "StructureSorter": {"name": "StructureSorter", "hash": -1009150565, "desc": "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "", "type": "None"}, {"name": "Data Disk", "type": "DataDisk"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "PrefabHash": [0, 1, 2, 3], "SortingClass": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}, "modes": {"0": "Split", "1": "Filter", "2": "Logic"}, "conn": {"0": ["Chute", "Output2"], "1": ["Chute", "Input"], "2": ["Chute", "Output"], "3": ["PowerAndData", "None"]}}, "MotherboardSorter": {"name": "MotherboardSorter", "hash": -1908268220, "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass."}, "ItemSoundCartridgeBass": {"name": "ItemSoundCartridgeBass", "hash": -1883441704, "desc": ""}, "ItemSoundCartridgeDrums": {"name": "ItemSoundCartridgeDrums", "hash": -1901500508, "desc": ""}, "ItemSoundCartridgeLeads": {"name": "ItemSoundCartridgeLeads", "hash": -1174735962, "desc": ""}, "ItemSoundCartridgeSynth": {"name": "ItemSoundCartridgeSynth", "hash": -1971419310, "desc": ""}, "ItemSoyOil": {"name": "ItemSoyOil", "hash": 1387403148, "desc": ""}, "ItemSoybean": {"name": "ItemSoybean", "hash": 1924673028, "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil"}, "SeedBag_Soybean": {"name": "SeedBag_Soybean", "hash": 1783004244, "desc": "Grow some Soybean."}, "ItemSpaceCleaner": {"name": "ItemSpaceCleaner", "hash": -1737666461, "desc": "There was a time when humanity really wanted to keep space clean. That time has passed."}, "ItemSpaceHelmet": {"name": "ItemSpaceHelmet", "hash": 714830451, "desc": "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer.", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemSpaceIce": {"name": "ItemSpaceIce", "hash": 675686937, "desc": ""}, "SpaceShuttle": {"name": "SpaceShuttle", "hash": -1991297271, "desc": "An antiquated Sinotai transport craft, long since decommissioned.", "slots": [{"name": "Captain's Seat", "type": "Entity"}, {"name": "Passenger Seat Left", "type": "Entity"}, {"name": "Passenger Seat Right", "type": "Entity"}]}, "ItemSpacepack": {"name": "ItemSpacepack", "hash": -1260618380, "desc": "The basic CHAC spacepack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "type": "GasCanister"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "ItemSprayGun": {"name": "ItemSprayGun", "hash": 1289723966, "desc": "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans.", "slots": [{"name": "Spray Can", "type": "Bottle"}]}, "ItemSprayCanBlack": {"name": "ItemSprayCanBlack", "hash": -688107795, "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses."}, "ItemSprayCanBlue": {"name": "ItemSprayCanBlue", "hash": -498464883, "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'"}, "ItemSprayCanBrown": {"name": "ItemSprayCanBrown", "hash": 845176977, "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."}, "ItemSprayCanGreen": {"name": "ItemSprayCanGreen", "hash": -1880941852, "desc": "Green is the color of life, and longing. Paradoxically, it's also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it's just what light does at around 500 billionths of a meter."}, "ItemSprayCanGrey": {"name": "ItemSprayCanGrey", "hash": -1645266981, "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do."}, "ItemSprayCanKhaki": {"name": "ItemSprayCanKhaki", "hash": 1918456047, "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode."}, "ItemSprayCanOrange": {"name": "ItemSprayCanOrange", "hash": -158007629, "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove."}, "ItemSprayCanPink": {"name": "ItemSprayCanPink", "hash": 1344257263, "desc": "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change."}, "ItemSprayCanPurple": {"name": "ItemSprayCanPurple", "hash": 30686509, "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong."}, "ItemSprayCanRed": {"name": "ItemSprayCanRed", "hash": 1514393921, "desc": "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power."}, "ItemSprayCanWhite": {"name": "ItemSprayCanWhite", "hash": 498481505, "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."}, "ItemSprayCanYellow": {"name": "ItemSprayCanYellow", "hash": 995468116, "desc": "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It's less fun than orange, but less emotionally limp than khaki. It's hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks."}, "StructureStackerReverse": {"name": "StructureStackerReverse", "hash": 1585641623, "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureStacker": {"name": "StructureStacker", "hash": -2020231820, "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Processing", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureStairs4x2": {"name": "StructureStairs4x2", "hash": 1405018945, "desc": ""}, "StructureStairs4x2RailL": {"name": "StructureStairs4x2RailL", "hash": 155214029, "desc": ""}, "StructureStairs4x2RailR": {"name": "StructureStairs4x2RailR", "hash": -212902482, "desc": ""}, "StructureStairs4x2Rails": {"name": "StructureStairs4x2Rails", "hash": -1088008720, "desc": ""}, "StructureStairwellBackLeft": {"name": "StructureStairwellBackLeft", "hash": 505924160, "desc": ""}, "StructureStairwellBackPassthrough": {"name": "StructureStairwellBackPassthrough", "hash": -862048392, "desc": ""}, "StructureStairwellBackRight": {"name": "StructureStairwellBackRight", "hash": -2128896573, "desc": ""}, "StructureStairwellFrontLeft": {"name": "StructureStairwellFrontLeft", "hash": -37454456, "desc": ""}, "StructureStairwellFrontPassthrough": {"name": "StructureStairwellFrontPassthrough", "hash": -1625452928, "desc": ""}, "StructureStairwellFrontRight": {"name": "StructureStairwellFrontRight", "hash": 340210934, "desc": ""}, "StructureStairwellNoDoors": {"name": "StructureStairwellNoDoors", "hash": 2049879875, "desc": ""}, "StructureBattery": {"name": "StructureBattery", "hash": -400115994, "desc": "Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large).", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureBatteryLarge": {"name": "StructureBatteryLarge", "hash": -1388288459, "desc": "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai 'Da Dianchi' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). ", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureFrame": {"name": "StructureFrame", "hash": 1432512808, "desc": "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework."}, "StructureFrameCornerCut": {"name": "StructureFrameCornerCut", "hash": 271315669, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureFrameCorner": {"name": "StructureFrameCorner", "hash": -2112390778, "desc": "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame's Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on."}, "StructureFrameSide": {"name": "StructureFrameSide", "hash": -302420053, "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."}, "ItemSteelFrames": {"name": "ItemSteelFrames", "hash": -1448105779, "desc": "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand."}, "ItemSteelSheets": {"name": "ItemSteelSheets", "hash": 38555961, "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types."}, "ItemStelliteGlassSheets": {"name": "ItemStelliteGlassSheets", "hash": -2038663432, "desc": "A stronger glass substitute."}, "StructureStirlingEngine": {"name": "StructureStirlingEngine", "hash": -260316435, "desc": "Harnessing an ancient thermal exploit, the Recurso 'Libra' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room's ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have ... sub-optimal results.", "slots": [{"name": "Gas Canister", "type": "GasCanister"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PowerGeneration": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "EnvironmentEfficiency": "Read", "WorkingGasEfficiency": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "StopWatch": {"name": "StopWatch", "hash": -1527229051, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureSuitStorage": {"name": "StructureSuitStorage", "hash": 255034731, "desc": "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit's batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack's pipes must be connected or the unit will show an error state, but it will still charge the battery.", "slots": [{"name": "Helmet", "type": "Helmet"}, {"name": "Suit", "type": "Suit"}, {"name": "Back", "type": "Back"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Pressure": [0, 1, 2], "Charge": [0, 1, 2], "ChargeRatio": [0, 1, 2], "Class": [0, 1, 2], "PressureWaste": [1], "PressureAir": [1], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "Open": [0], "On": [0], "Lock": [0], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Pipe", "Input"], "3": ["Pipe", "Input2"], "4": ["Pipe", "Output"]}}, "StructureLogicSwitch2": {"name": "StructureLogicSwitch2", "hash": 321604921, "desc": "", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "ItemPlantSwitchGrass": {"name": "ItemPlantSwitchGrass", "hash": -532672323, "desc": ""}, "SeedBag_Switchgrass": {"name": "SeedBag_Switchgrass", "hash": 488360169, "desc": ""}, "ApplianceTabletDock": {"name": "ApplianceTabletDock", "hash": 1853941363, "desc": "", "slots": [{"name": "", "type": "Tool"}]}, "StructureTankBigInsulated": {"name": "StructureTankBigInsulated", "hash": 1280378227, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureTankConnector": {"name": "StructureTankConnector", "hash": -1276379454, "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", "slots": [{"name": "", "type": "None"}]}, "StructureTankSmallInsulated": {"name": "StructureTankSmallInsulated", "hash": 272136332, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureGroundBasedTelescope": {"name": "StructureGroundBasedTelescope", "hash": -619745681, "desc": "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "HorizontalRatio": "ReadWrite", "VerticalRatio": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read", "CelestialHash": "Read", "AlignmentError": "Read", "DistanceAu": "Read", "OrbitPeriod": "Read", "Inclination": "Read", "Eccentricity": "Read", "SemiMajorAxis": "Read", "DistanceKm": "Read", "CelestialParentHash": "Read", "TrueAnomaly": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemTerrainManipulator": {"name": "ItemTerrainManipulator", "hash": 111280987, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Battery", "type": "Battery"}, {"name": "Dirt Canister", "type": "Ore"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemPlantThermogenic_Creative": {"name": "ItemPlantThermogenic_Creative", "hash": -1208890208, "desc": ""}, "ItemTomato": {"name": "ItemTomato", "hash": -998592080, "desc": "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace."}, "SeedBag_Tomato": {"name": "SeedBag_Tomato", "hash": -1922066841, "desc": "Grow a Tomato."}, "ItemTomatoSoup": {"name": "ItemTomatoSoup", "hash": 688734890, "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."}, "ItemToolBelt": {"name": "ItemToolBelt", "hash": -355127880, "desc": "If there's one piece of equipment that embodies Stationeer life above all else, it's the humble toolbelt (Editor's note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt's eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt.", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}]}, "ItemMkIIToolbelt": {"name": "ItemMkIIToolbelt", "hash": 1467558064, "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", "slots": [{"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "Tool", "type": "Tool"}, {"name": "", "type": "None"}, {"name": "", "type": "None"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}}, "StructureToolManufactory": {"name": "StructureToolManufactory", "hash": -465741100, "desc": "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "type": "Ingot"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ToolPrinterMod": {"name": "ToolPrinterMod", "hash": 1700018136, "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "WeaponTorpedo": {"name": "WeaponTorpedo", "hash": -1102977898, "desc": ""}, "StructureTorpedoRack": {"name": "StructureTorpedoRack", "hash": 1473807953, "desc": "", "slots": [{"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}, {"name": "Torpedo", "type": "Torpedo"}]}, "ToyLuna": {"name": "ToyLuna", "hash": 94730034, "desc": ""}, "CartridgeTracker": {"name": "CartridgeTracker", "hash": 81488783, "desc": ""}, "ItemBeacon": {"name": "ItemBeacon", "hash": -869869491, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureTraderWaypoint": {"name": "StructureTraderWaypoint", "hash": 1570931620, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureTransformer": {"name": "StructureTransformer", "hash": -1423212473, "desc": "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureTransformerMedium": {"name": "StructureTransformerMedium", "hash": -1065725831, "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Input"], "1": ["PowerAndData", "Output"]}}, "StructureTransformerSmall": {"name": "StructureTransformerSmall", "hash": -890946730, "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "StructureTransformerMediumReversed": {"name": "StructureTransformerMediumReversed", "hash": 833912764, "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"], "1": ["PowerAndData", "Input"]}}, "StructureTransformerSmallReversed": {"name": "StructureTransformerSmallReversed", "hash": 1054059374, "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"], "1": ["PowerAndData", "Input"]}}, "StructureRocketTransformerSmall": {"name": "StructureRocketTransformerSmall", "hash": 518925193, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["Data", "None"]}}, "StructurePressurePlateLarge": {"name": "StructurePressurePlateLarge", "hash": -2008706143, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructurePressurePlateMedium": {"name": "StructurePressurePlateMedium", "hash": 1269458680, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructurePressurePlateSmall": {"name": "StructurePressurePlateSmall", "hash": -1536471028, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "ItemTropicalPlant": {"name": "ItemTropicalPlant", "hash": -800947386, "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."}, "StructureTurbineGenerator": {"name": "StructureTurbineGenerator", "hash": 1282191063, "desc": "", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureTurboVolumePump": {"name": "StructureTurboVolumePump", "hash": 1310794736, "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Right", "1": "Left"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Pipe", "Output"], "3": ["Pipe", "Input"]}}, "StructureLiquidTurboVolumePump": {"name": "StructureLiquidTurboVolumePump", "hash": -1051805505, "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Right", "1": "Left"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["PipeLiquid", "Input"], "3": ["PipeLiquid", "Output"]}}, "StructureChuteUmbilicalMale": {"name": "StructureChuteUmbilicalMale", "hash": -958884053, "desc": "0.Left\n1.Center\n2.Right", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Chute", "Input"], "1": ["PowerAndData", "None"]}}, "StructureGasUmbilicalMale": {"name": "StructureGasUmbilicalMale", "hash": -1814939203, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructureLiquidUmbilicalMale": {"name": "StructureLiquidUmbilicalMale", "hash": -1798420047, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "StructurePowerUmbilicalMale": {"name": "StructurePowerUmbilicalMale", "hash": 1529453938, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureChuteUmbilicalFemale": {"name": "StructureChuteUmbilicalFemale", "hash": -1918892177, "desc": "", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"]}}, "StructureGasUmbilicalFemale": {"name": "StructureGasUmbilicalFemale", "hash": -1680477930, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"]}}, "StructureLiquidUmbilicalFemale": {"name": "StructureLiquidUmbilicalFemale", "hash": 1734723642, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructurePowerUmbilicalFemale": {"name": "StructurePowerUmbilicalFemale", "hash": 101488029, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"]}}, "StructureChuteUmbilicalFemaleSide": {"name": "StructureChuteUmbilicalFemaleSide", "hash": -659093969, "desc": "", "slots": [{"name": "Transport Slot", "type": "None"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"]}}, "StructureGasUmbilicalFemaleSide": {"name": "StructureGasUmbilicalFemaleSide", "hash": -648683847, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"]}}, "StructureLiquidUmbilicalFemaleSide": {"name": "StructureLiquidUmbilicalFemaleSide", "hash": 1220870319, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructurePowerUmbilicalFemaleSide": {"name": "StructurePowerUmbilicalFemaleSide", "hash": 1922506192, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"]}}, "UniformCommander": {"name": "UniformCommander", "hash": -2083426457, "desc": "", "slots": [{"name": "", "type": "None"}, {"name": "", "type": "None"}, {"name": "Access Card", "type": "AccessCard"}, {"name": "Access Card", "type": "AccessCard"}, {"name": "Credit Card", "type": "CreditCard"}]}, "StructureUnloader": {"name": "StructureUnloader", "hash": 750118160, "desc": "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureUprightWindTurbine": {"name": "StructureUprightWindTurbine", "hash": 1622183451, "desc": "Norsec's basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind.", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"]}}, "StructureValve": {"name": "StructureValve", "hash": -692036078, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "None"], "1": ["Pipe", "None"]}}, "StructureVendingMachine": {"name": "StructureVendingMachine", "hash": -443130773, "desc": "The Xigo-designed 'Slot Mate' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks.", "slots": [{"name": "Import", "type": "None"}, {"name": "Export", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}, {"name": "Storage", "type": "None"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RequestHash": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureVolumePump": {"name": "StructureVolumePump", "hash": -321403609, "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input"], "2": ["PowerAndData", "None"]}}, "StructureWallArchArrow": {"name": "StructureWallArchArrow", "hash": 1649708822, "desc": ""}, "StructureWallArchCornerRound": {"name": "StructureWallArchCornerRound", "hash": 1794588890, "desc": ""}, "StructureWallArchCornerSquare": {"name": "StructureWallArchCornerSquare", "hash": -1963016580, "desc": ""}, "StructureWallArchCornerTriangle": {"name": "StructureWallArchCornerTriangle", "hash": 1281911841, "desc": ""}, "StructureWallArchPlating": {"name": "StructureWallArchPlating", "hash": 1182510648, "desc": ""}, "StructureWallArchTwoTone": {"name": "StructureWallArchTwoTone", "hash": 782529714, "desc": ""}, "StructureWallArch": {"name": "StructureWallArch", "hash": -858143148, "desc": ""}, "StructureWallFlatCornerRound": {"name": "StructureWallFlatCornerRound", "hash": 898708250, "desc": ""}, "StructureWallFlatCornerSquare": {"name": "StructureWallFlatCornerSquare", "hash": 298130111, "desc": ""}, "StructureWallFlatCornerTriangleFlat": {"name": "StructureWallFlatCornerTriangleFlat", "hash": -1161662836, "desc": ""}, "StructureWallFlatCornerTriangle": {"name": "StructureWallFlatCornerTriangle", "hash": 2097419366, "desc": ""}, "StructureWallFlat": {"name": "StructureWallFlat", "hash": 1635864154, "desc": ""}, "StructureWallGeometryCorner": {"name": "StructureWallGeometryCorner", "hash": 1979212240, "desc": ""}, "StructureWallGeometryStreight": {"name": "StructureWallGeometryStreight", "hash": 1049735537, "desc": ""}, "StructureWallGeometryTMirrored": {"name": "StructureWallGeometryTMirrored", "hash": -1427845483, "desc": ""}, "StructureWallGeometryT": {"name": "StructureWallGeometryT", "hash": 1602758612, "desc": ""}, "StructureWallLargePanelArrow": {"name": "StructureWallLargePanelArrow", "hash": -776581573, "desc": ""}, "StructureWallLargePanel": {"name": "StructureWallLargePanel", "hash": 1492930217, "desc": ""}, "StructureWallPaddedArchCorner": {"name": "StructureWallPaddedArchCorner", "hash": -1126688298, "desc": ""}, "StructureWallPaddedArchLightFittingTop": {"name": "StructureWallPaddedArchLightFittingTop", "hash": 1171987947, "desc": ""}, "StructureWallPaddedArchLightsFittings": {"name": "StructureWallPaddedArchLightsFittings", "hash": -1546743960, "desc": ""}, "StructureWallPaddedArch": {"name": "StructureWallPaddedArch", "hash": 1590330637, "desc": ""}, "StructureWallPaddedCornerThin": {"name": "StructureWallPaddedCornerThin", "hash": 1183203913, "desc": ""}, "StructureWallPaddedCorner": {"name": "StructureWallPaddedCorner", "hash": -155945899, "desc": ""}, "StructureWallPaddedNoBorderCorner": {"name": "StructureWallPaddedNoBorderCorner", "hash": 179694804, "desc": ""}, "StructureWallPaddedNoBorder": {"name": "StructureWallPaddedNoBorder", "hash": 8846501, "desc": ""}, "StructureWallPaddedThinNoBorderCorner": {"name": "StructureWallPaddedThinNoBorderCorner", "hash": 1769527556, "desc": ""}, "StructureWallPaddedThinNoBorder": {"name": "StructureWallPaddedThinNoBorder", "hash": -1611559100, "desc": ""}, "StructureWallPaddedWindowThin": {"name": "StructureWallPaddedWindowThin", "hash": -37302931, "desc": ""}, "StructureWallPaddedWindow": {"name": "StructureWallPaddedWindow", "hash": 2087628940, "desc": ""}, "StructureWallPaddingArchVent": {"name": "StructureWallPaddingArchVent", "hash": -1243329828, "desc": ""}, "StructureWallPaddingLightFitting": {"name": "StructureWallPaddingLightFitting", "hash": 2024882687, "desc": ""}, "StructureWallPaddingThin": {"name": "StructureWallPaddingThin", "hash": -1102403554, "desc": ""}, "StructureWallPadding": {"name": "StructureWallPadding", "hash": 635995024, "desc": ""}, "StructureWallPlating": {"name": "StructureWallPlating", "hash": 26167457, "desc": ""}, "StructureWallSmallPanelsAndHatch": {"name": "StructureWallSmallPanelsAndHatch", "hash": 619828719, "desc": ""}, "StructureWallSmallPanelsArrow": {"name": "StructureWallSmallPanelsArrow", "hash": -639306697, "desc": ""}, "StructureWallSmallPanelsMonoChrome": {"name": "StructureWallSmallPanelsMonoChrome", "hash": 386820253, "desc": ""}, "StructureWallSmallPanelsOpen": {"name": "StructureWallSmallPanelsOpen", "hash": -1407480603, "desc": ""}, "StructureWallSmallPanelsTwoTone": {"name": "StructureWallSmallPanelsTwoTone", "hash": 1709994581, "desc": ""}, "StructureWallCooler": {"name": "StructureWallCooler", "hash": -739292323, "desc": "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas's heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page.", "slots": [{"name": "", "type": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Pipe", "None"], "1": ["PowerAndData", "None"]}}, "StructureWallHeater": {"name": "StructureWallHeater", "hash": 24258244, "desc": "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level.", "slots": [{"name": "", "type": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallLight": {"name": "StructureWallLight", "hash": -1860064656, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallLightBattery": {"name": "StructureWallLightBattery", "hash": -1306415132, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLongAngled": {"name": "StructureLightLongAngled", "hash": 1847265835, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLongWide": {"name": "StructureLightLongWide", "hash": 555215790, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLong": {"name": "StructureLightLong", "hash": 797794350, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallVent": {"name": "StructureWallVent", "hash": -1177469307, "desc": "Used to mix atmospheres passively between two walls."}, "ItemWaterBottle": {"name": "ItemWaterBottle", "hash": 107741229, "desc": "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler."}, "StructureWaterBottleFiller": {"name": "StructureWaterBottleFiller", "hash": -1178961954, "desc": "", "slots": [{"name": "Bottle Slot", "type": "LiquidBottle"}, {"name": "Bottle Slot", "type": "LiquidBottle"}], "logic": {"Error": "Read", "Activate": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructureWaterBottleFillerBottom": {"name": "StructureWaterBottleFillerBottom", "hash": 1433754995, "desc": "", "slots": [{"name": "Bottle Slot", "type": "LiquidBottle"}, {"name": "Bottle Slot", "type": "LiquidBottle"}], "logic": {"Error": "Read", "Activate": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructureWaterPurifier": {"name": "StructureWaterPurifier", "hash": 887383294, "desc": "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe.", "slots": [{"name": "Import", "type": "Ore"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Power", "None"], "4": ["Chute", "Input"]}}, "StructureWaterBottleFillerPoweredBottom": {"name": "StructureWaterBottleFillerPoweredBottom", "hash": 1986658780, "desc": "", "slots": [{"name": "Bottle Slot", "type": "LiquidBottle"}, {"name": "Bottle Slot", "type": "LiquidBottle"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PowerAndData", "None"]}}, "StructureWaterBottleFillerPowered": {"name": "StructureWaterBottleFillerPowered", "hash": -756587791, "desc": "", "slots": [{"name": "Bottle Slot", "type": "LiquidBottle"}, {"name": "Bottle Slot", "type": "LiquidBottle"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "WeaponEnergy": {"name": "WeaponEnergy", "hash": 789494694, "desc": "", "slots": [{"name": "Battery", "type": "Battery"}], "logic": {"On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureWeatherStation": {"name": "StructureWeatherStation", "hash": 1997212478, "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "NextWeatherEventTime": "Read", "ReferenceId": "Read"}, "modes": {"0": "NoStorm", "1": "StormIncoming", "2": "InStorm"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemWeldingTorch": {"name": "ItemWeldingTorch", "hash": -2066892079, "desc": "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic 'Zairo' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells.", "slots": [{"name": "Gas Canister", "type": "GasCanister"}]}, "ItemWheat": {"name": "ItemWheat", "hash": -1057658015, "desc": "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor."}, "SeedBag_Wheet": {"name": "SeedBag_Wheet", "hash": -654756733, "desc": "Grow some Wheat."}, "StructureWindTurbine": {"name": "StructureWindTurbine", "hash": -2082355173, "desc": "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind.", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"], "1": ["Data", "None"]}}, "StructureWindowShutter": {"name": "StructureWindowShutter", "hash": 2056377335, "desc": "For those special, private moments, a window that can be closed to prying eyes. \n \nWhen closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemPlantEndothermic_Genepool1": {"name": "ItemPlantEndothermic_Genepool1", "hash": 851290561, "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius."}, "ItemPlantEndothermic_Genepool2": {"name": "ItemPlantEndothermic_Genepool2", "hash": -1414203269, "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius."}, "ItemWireCutters": {"name": "ItemWireCutters", "hash": 1535854074, "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools."}, "ItemWirelessBatteryCellExtraLarge": {"name": "ItemWirelessBatteryCellExtraLarge", "hash": -504717121, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemWreckageAirConditioner1": {"name": "ItemWreckageAirConditioner1", "hash": -1826023284, "desc": ""}, "ItemWreckageAirConditioner2": {"name": "ItemWreckageAirConditioner2", "hash": 169888054, "desc": ""}, "ItemWreckageHydroponicsTray1": {"name": "ItemWreckageHydroponicsTray1", "hash": -310178617, "desc": ""}, "ItemWreckageLargeExtendableRadiator01": {"name": "ItemWreckageLargeExtendableRadiator01", "hash": -997763, "desc": ""}, "ItemWreckageStructureRTG1": {"name": "ItemWreckageStructureRTG1", "hash": 391453348, "desc": ""}, "ItemWreckageStructureWeatherStation002": {"name": "ItemWreckageStructureWeatherStation002", "hash": 1464424921, "desc": ""}, "ItemWreckageStructureWeatherStation001": {"name": "ItemWreckageStructureWeatherStation001", "hash": -834664349, "desc": ""}, "ItemWreckageStructureWeatherStation006": {"name": "ItemWreckageStructureWeatherStation006", "hash": 1344576960, "desc": ""}, "ItemWreckageStructureWeatherStation003": {"name": "ItemWreckageStructureWeatherStation003", "hash": 542009679, "desc": ""}, "ItemWreckageStructureWeatherStation008": {"name": "ItemWreckageStructureWeatherStation008", "hash": -1214467897, "desc": ""}, "ItemWreckageStructureWeatherStation007": {"name": "ItemWreckageStructureWeatherStation007", "hash": 656649558, "desc": ""}, "ItemWreckageStructureWeatherStation005": {"name": "ItemWreckageStructureWeatherStation005", "hash": -919745414, "desc": ""}, "ItemWreckageStructureWeatherStation004": {"name": "ItemWreckageStructureWeatherStation004", "hash": -1104478996, "desc": ""}, "ItemWreckageTurbineGenerator2": {"name": "ItemWreckageTurbineGenerator2", "hash": 98602599, "desc": ""}, "ItemWreckageTurbineGenerator1": {"name": "ItemWreckageTurbineGenerator1", "hash": -1662394403, "desc": ""}, "ItemWreckageTurbineGenerator3": {"name": "ItemWreckageTurbineGenerator3", "hash": 1927790321, "desc": ""}, "ItemWreckageWallCooler2": {"name": "ItemWreckageWallCooler2", "hash": 45733800, "desc": ""}, "ItemWreckageWallCooler1": {"name": "ItemWreckageWallCooler1", "hash": -1682930158, "desc": ""}, "ItemWrench": {"name": "ItemWrench", "hash": -1886261558, "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures"}, "CartridgeElectronicReader": {"name": "CartridgeElectronicReader", "hash": -1462180176, "desc": ""}}} \ No newline at end of file +{"logic_enabled": ["StructureDrinkingFountain", "Robot", "StructureAccessBridge", "StructureLiquidDrain", "StructureActiveVent", "StructureAdvancedComposter", "StructureAdvancedFurnace", "StructureAdvancedPackagingMachine", "ItemAdvancedTablet", "StructureAirConditioner", "StructureAirlock", "ItemAngleGrinder", "StructureArcFurnace", "ItemArcWelder", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureAutolathe", "StructureAutomatedOven", "StructureAutoMinerSmall", "StructureBatterySmall", "StructureBackPressureRegulator", "StructureBasketHoop", "StructureLogicBatchReader", "StructureLogicBatchSlotReader", "StructureLogicBatchWriter", "StructureBatteryMedium", "ItemBatteryCellLarge", "ItemBatteryCellNuclear", "ItemBatteryCell", "StructureBatteryCharger", "StructureBatteryChargerSmall", "Battery_Wireless_cell", "Battery_Wireless_cell_Big", "StructureBeacon", "StructureAngledBench", "StructureBench1", "StructureFlatBench", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlastDoor", "StructureBlockBed", "StructureLogicButton", "StructureCableAnalysizer", "StructureCamera", "StructureCargoStorageMedium", "StructureCargoStorageSmall", "StructureCentrifuge", "StructureChair", "StructureChairBacklessDouble", "StructureChairBacklessSingle", "StructureChairBoothCornerLeft", "StructureChairBoothMiddle", "StructureChairRectangleDouble", "StructureChairRectangleSingle", "StructureChairThickDouble", "StructureChairThickSingle", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureCombustionCentrifuge", "StructureCompositeDoor", "CompositeRollCover", "StructureComputer", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", "StructureConsoleDual", "StructureConsoleMonitor", "StructureControlChair", "StructureCornerLocker", "StructurePassthroughHeatExchangerGasToGas", "StructurePassthroughHeatExchangerGasToLiquid", "StructurePassthroughHeatExchangerLiquidToLiquid", "StructureCryoTubeHorizontal", "StructureCryoTubeVertical", "StructureCryoTube", "StructureDaylightSensor", "StructureDeepMiner", "DeviceStepUnit", "StructureLogicDial", "StructureDigitalValve", "StructureDiodeSlide", "StructureDockPortSide", "StructureSleeperVerticalDroid", "StructureElectrolyzer", "StructureElectronicsPrinter", "StructureElevatorLevelIndustrial", "StructureElevatorLevelFront", "StructureElevatorShaftIndustrial", "StructureElevatorShaft", "ItemEmergencyAngleGrinder", "ItemEmergencyArcWelder", "ItemEmergencyDrill", "ItemEmergencySpaceHelmet", "WeaponPistolEnergy", "WeaponRifleEnergy", "StructureEvaporationChamber", "StructureExpansionValve", "StructureFiltration", "StructureFlashingLight", "ItemFlashlight", "StructureFridgeBig", "StructureFridgeSmall", "StructureFurnace", "StructureCableFuse100k", "StructureCableFuse1k", "StructureCableFuse50k", "StructureCableFuse5k", "StructureMediumRocketGasFuelTank", "StructureCapsuleTankGas", "StructureGasGenerator", "StructureGasMixer", "StructureGasSensor", "StructureGasTankStorage", "StructureSolidFuelGenerator", "StructureGlassDoor", "DynamicGPR", "StructureGrowLight", "H2Combustor", "ItemDrill", "ItemTablet", "ItemHardSuit", "ItemHardBackpack", "ItemHardsuitHelmet", "ItemHardJetpack", "StructureHarvie", "ItemWearLamp", "StructureHeatExchangerGastoGas", "StructureHeatExchangerLiquidtoLiquid", "StructureHeatExchangeLiquidtoGas", "StructureHydraulicPipeBender", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "StructureIceCrusher", "StructureIgniter", "StructureEmergencyButton", "StructureLiquidTankBigInsulated", "StructureLiquidTankSmallInsulated", "ItemIntegratedCircuit10", "StructureInteriorDoorGlass", "StructureInteriorDoorPadded", "StructureInteriorDoorPaddedThin", "StructureInteriorDoorTriangle", "ItemJetpackBasic", "StructureKlaxon", "StructureDiode", "StructureConsoleLED1x3", "StructureConsoleLED1x2", "StructureConsoleLED5", "ItemLabeller", "Landingpad_DataConnectionPiece", "Landingpad_GasConnectorInwardPiece", "Landingpad_GasConnectorOutwardPiece", "Landingpad_LiquidConnectorInwardPiece", "Landingpad_LiquidConnectorOutwardPiece", "Landingpad_ThreshholdPiece", "ItemLaptop", "StructureLargeDirectHeatExchangeLiquidtoLiquid", "StructureLargeDirectHeatExchangeGastoGas", "StructureLargeDirectHeatExchangeGastoLiquid", "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", "StructureTankBig", "StructureLogicSwitch", "StructureLightRound", "StructureLightRoundAngled", "StructureLightRoundSmall", "StructureBackLiquidPressureRegulator", "StructureMediumRocketLiquidFuelTank", "StructureCapsuleTankLiquid", "StructureWaterDigitalValve", "StructureLiquidPipeAnalyzer", "StructureLiquidPipeRadiator", "StructureWaterPipeMeter", "StructureLiquidTankBig", "StructureLiquidTankSmall", "StructureLiquidTankStorage", "StructureLiquidValve", "StructureLiquidVolumePump", "StructureLiquidPressureRegulator", "StructureWaterWallCooler", "StructureStorageLocker", "StructureLockerSmall", "StructureLogicCompare", "StructureLogicGate", "StructureLogicHashGen", "StructureLogicMath", "StructureLogicMemory", "StructureLogicMinMax", "StructureLogicReader", "StructureLogicRocketDownlink", "StructureLogicSelect", "LogicStepSequencer8", "StructureLogicRocketUplink", "StructureLogicWriter", "StructureLogicWriterSwitch", "DeviceLfoVolume", "StructureManualHatch", "StructureLogicMathUnary", "StructureMediumConvectionRadiator", "StructurePassiveLargeRadiatorGas", "StructureMediumConvectionRadiatorLiquid", "StructurePassiveLargeRadiatorLiquid", "StructureMediumHangerDoor", "StructureMediumRadiator", "StructureMediumRadiatorLiquid", "StructureSatelliteDish", "StructurePowerTransmitterReceiver", "StructurePowerTransmitter", "ItemMiningBeltMKII", "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemMKIIAngleGrinder", "ItemMKIIArcWelder", "ItemMKIIDrill", "ItemMKIIMiningDrill", "StructureMotionSensor", "ItemNVG", "StructureNitrolyzer", "StructureHorizontalAutoMiner", "StructureOccupancySensor", "StructurePipeOneWayValve", "StructureLiquidPipeOneWayValve", "StructureOverheadShortCornerLocker", "StructureOverheadShortLocker", "StructurePassiveLiquidDrain", "PassiveSpeaker", "StructurePipeAnalysizer", "StructurePipeRadiator", "StructurePipeHeater", "StructureLiquidPipeHeater", "StructurePipeIgniter", "StructurePipeLabel", "StructurePipeMeter", "StructurePipeRadiatorFlat", "StructurePipeRadiatorFlatLiquid", "ItemPlantSampler", "DynamicLight", "PortableSolarPanel", "StructurePortablesConnector", "StructurePowerConnector", "StructurePowerTransmitterOmni", "StructureBench", "StructurePoweredVent", "StructurePoweredVentLarge", "StructurePressurantValve", "StructurePressureFedGasEngine", "StructurePressureFedLiquidEngine", "StructurePressureRegulator", "StructureProximitySensor", "StructureGovernedGasEngine", "StructurePumpedLiquidEngine", "StructurePurgeValve", "StructureLogicReagentReader", "StructureRecycler", "StructureRefrigeratedVendingMachine", "ItemRemoteDetonator", "StructureResearchMachine", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", "StructureRocketEngineTiny", "StructureRocketManufactory", "StructureRocketMiner", "StructureRocketScanner", "RoverCargo", "Rover_MkI", "StructureSDBHopper", "StructureSDBHopperAdvanced", "StructureSDBSilo", "StructureSecurityPrinter", "ItemSensorLenses", "StructureShelfMedium", "StructureShortCornerLocker", "StructureShortLocker", "StructureShower", "StructureShowerPowered", "StructureSign1x1", "StructureSign2x1", "StructureSingleBed", "StructureSleeper", "StructureSleeperLeft", "StructureSleeperRight", "StructureSleeperVertical", "StructureLogicSlotReader", "StructureSmallDirectHeatExchangeGastoGas", "StructureSmallDirectHeatExchangeLiquidtoGas", "StructureSmallDirectHeatExchangeLiquidtoLiquid", "StructureAirlockGate", "StructureSmallSatelliteDish", "StructureTankSmall", "StructureTankSmallAir", "StructureTankSmallFuel", "StructureSolarPanel", "StructureSolarPanel45", "StructureSolarPanelDual", "StructureSolarPanelFlat", "StructureSolarPanel45Reinforced", "StructureSolarPanelDualReinforced", "StructureSolarPanelFlatReinforced", "StructureSolarPanelReinforced", "StructureSorter", "ItemSpaceHelmet", "ItemSpacepack", "StructureStackerReverse", "StructureStacker", "StructureBattery", "StructureBatteryLarge", "StructureStirlingEngine", "StopWatch", "StructureSuitStorage", "StructureLogicSwitch2", "StructureTankBigInsulated", "StructureTankSmallInsulated", "StructureGroundBasedTelescope", "ItemTerrainManipulator", "ItemMkIIToolbelt", "StructureToolManufactory", "ItemBeacon", "StructureTraderWaypoint", "StructureTransformer", "StructureTransformerMedium", "StructureTransformerSmall", "StructureTransformerMediumReversed", "StructureTransformerSmallReversed", "StructureRocketTransformerSmall", "StructurePressurePlateLarge", "StructurePressurePlateMedium", "StructurePressurePlateSmall", "StructureTurbineGenerator", "StructureTurboVolumePump", "StructureLiquidTurboVolumePump", "StructureChuteUmbilicalMale", "StructureGasUmbilicalMale", "StructureLiquidUmbilicalMale", "StructurePowerUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureGasUmbilicalFemale", "StructureLiquidUmbilicalFemale", "StructurePowerUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureGasUmbilicalFemaleSide", "StructureLiquidUmbilicalFemaleSide", "StructurePowerUmbilicalFemaleSide", "StructureUnloader", "StructureUprightWindTurbine", "StructureValve", "StructureVendingMachine", "StructureVolumePump", "StructureWallCooler", "StructureWallHeater", "StructureWallLight", "StructureWallLightBattery", "StructureLightLongAngled", "StructureLightLongWide", "StructureLightLong", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterPurifier", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "WeaponEnergy", "StructureWeatherStation", "StructureWindTurbine", "StructureWindowShutter", "ItemWirelessBatteryCellExtraLarge"], "slot_logic_enabled": ["Robot", "StructureActiveVent", "ItemAdvancedTablet", "ItemAngleGrinder", "StructureArcFurnace", "ItemArcWelder", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureBatteryCharger", "StructureBatteryChargerSmall", "StructureAngledBench", "StructureBench1", "StructureFlatBench", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlockBed", "StructureCargoStorageSmall", "StructureChair", "StructureChairBacklessDouble", "StructureChairBacklessSingle", "StructureChairBoothCornerLeft", "StructureChairBoothMiddle", "StructureChairRectangleDouble", "StructureChairRectangleSingle", "StructureChairThickDouble", "StructureChairThickSingle", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureControlChair", "StructureCornerLocker", "StructureCryoTube", "ItemEmergencyAngleGrinder", "ItemEmergencyArcWelder", "ItemEmergencyDrill", "WeaponPistolEnergy", "WeaponRifleEnergy", "ItemFlashlight", "StructureFridgeBig", "StructureFridgeSmall", "StructureGasTankStorage", "StructureSolidFuelGenerator", "DynamicGPR", "ItemDrill", "ItemTablet", "ItemHardSuit", "ItemHardBackpack", "ItemHardJetpack", "StructureHarvie", "ItemWearLamp", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "ItemJetpackBasic", "ItemLabeller", "ItemLaptop", "StructureLiquidTankStorage", "StructureWaterWallCooler", "StructureStorageLocker", "StructureLockerSmall", "LogicStepSequencer8", "ItemMiningBeltMKII", "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemMKIIAngleGrinder", "ItemMKIIArcWelder", "ItemMKIIDrill", "ItemMKIIMiningDrill", "ItemNVG", "StructureNitrolyzer", "StructureOverheadShortCornerLocker", "StructureOverheadShortLocker", "ItemPlantSampler", "DynamicLight", "PortableSolarPanel", "StructurePortablesConnector", "StructurePowerConnector", "StructureBench", "StructureRecycler", "ItemRemoteDetonator", "StructureRocketCircuitHousing", "RoverCargo", "Rover_MkI", "ItemSensorLenses", "StructureShelfMedium", "StructureShortCornerLocker", "StructureShortLocker", "StructureSingleBed", "StructureSleeper", "StructureSorter", "ItemSpacepack", "StructureStackerReverse", "StructureStacker", "StructureSuitStorage", "ItemTerrainManipulator", "ItemMkIIToolbelt", "ItemBeacon", "StructureChuteUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureUnloader", "StructureWallCooler", "StructureWallHeater", "StructureWallLightBattery", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "WeaponEnergy"], "devices": ["StructureDrinkingFountain", "StructureAccessBridge", "StructureLiquidDrain", "StructureActiveVent", "StructureAdvancedComposter", "StructureAdvancedFurnace", "StructureAdvancedPackagingMachine", "StructureAirConditioner", "StructureAirlock", "StructureArcFurnace", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureAutolathe", "StructureAutomatedOven", "StructureAutoMinerSmall", "StructureBatterySmall", "StructureBackPressureRegulator", "StructureBasketHoop", "StructureLogicBatchReader", "StructureLogicBatchSlotReader", "StructureLogicBatchWriter", "StructureBatteryMedium", "StructureBatteryCharger", "StructureBatteryChargerSmall", "StructureBeacon", "StructureBench1", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlastDoor", "StructureBlockBed", "StructureLogicButton", "StructureCableAnalysizer", "StructureCamera", "StructureCargoStorageMedium", "StructureCargoStorageSmall", "StructureCentrifuge", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteInlet", "StructureChuteOutlet", "StructureCombustionCentrifuge", "StructureCompositeDoor", "StructureComputer", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", "StructureConsoleDual", "StructureConsoleMonitor", "StructureControlChair", "StructurePassthroughHeatExchangerGasToGas", "StructurePassthroughHeatExchangerGasToLiquid", "StructurePassthroughHeatExchangerLiquidToLiquid", "StructureCryoTubeHorizontal", "StructureCryoTubeVertical", "StructureCryoTube", "StructureDaylightSensor", "StructureDeepMiner", "DeviceStepUnit", "StructureLogicDial", "StructureDigitalValve", "StructureDiodeSlide", "StructureDockPortSide", "StructureSleeperVerticalDroid", "StructureElectrolyzer", "StructureElectronicsPrinter", "StructureElevatorLevelIndustrial", "StructureElevatorLevelFront", "StructureElevatorShaftIndustrial", "StructureElevatorShaft", "StructureEvaporationChamber", "StructureExpansionValve", "StructureFiltration", "StructureFlashingLight", "StructureFridgeBig", "StructureFridgeSmall", "StructureFurnace", "StructureMediumRocketGasFuelTank", "StructureCapsuleTankGas", "StructureGasGenerator", "StructureGasMixer", "StructureGasSensor", "StructureGasTankStorage", "StructureSolidFuelGenerator", "StructureGlassDoor", "StructureGrowLight", "H2Combustor", "StructureHarvie", "StructureHeatExchangerGastoGas", "StructureHeatExchangerLiquidtoLiquid", "StructureHeatExchangeLiquidtoGas", "StructureHydraulicPipeBender", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureCircuitHousing", "StructureIceCrusher", "StructureIgniter", "StructureEmergencyButton", "StructureLiquidTankBigInsulated", "StructureLiquidTankSmallInsulated", "StructureKlaxon", "StructureDiode", "StructureConsoleLED1x3", "StructureConsoleLED1x2", "StructureConsoleLED5", "Landingpad_DataConnectionPiece", "Landingpad_GasConnectorInwardPiece", "Landingpad_GasConnectorOutwardPiece", "Landingpad_LiquidConnectorInwardPiece", "Landingpad_LiquidConnectorOutwardPiece", "Landingpad_ThreshholdPiece", "StructureLargeDirectHeatExchangeLiquidtoLiquid", "StructureLargeDirectHeatExchangeGastoGas", "StructureLargeDirectHeatExchangeGastoLiquid", "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", "StructureTankBig", "StructureLogicSwitch", "StructureLightRound", "StructureLightRoundAngled", "StructureLightRoundSmall", "StructureBackLiquidPressureRegulator", "StructureMediumRocketLiquidFuelTank", "StructureCapsuleTankLiquid", "StructureWaterDigitalValve", "StructureLiquidPipeAnalyzer", "StructureLiquidTankBig", "StructureLiquidTankSmall", "StructureLiquidTankStorage", "StructureLiquidValve", "StructureLiquidVolumePump", "StructureLiquidPressureRegulator", "StructureWaterWallCooler", "StructureLogicCompare", "StructureLogicGate", "StructureLogicHashGen", "StructureLogicMath", "StructureLogicMemory", "StructureLogicMinMax", "StructureLogicReader", "StructureLogicRocketDownlink", "StructureLogicSelect", "LogicStepSequencer8", "StructureLogicRocketUplink", "StructureLogicWriter", "StructureLogicWriterSwitch", "DeviceLfoVolume", "StructureLogicMathUnary", "StructureMediumConvectionRadiator", "StructurePassiveLargeRadiatorGas", "StructureMediumConvectionRadiatorLiquid", "StructurePassiveLargeRadiatorLiquid", "StructureMediumHangerDoor", "StructureMediumRadiator", "StructureMediumRadiatorLiquid", "StructureSatelliteDish", "StructurePowerTransmitterReceiver", "StructurePowerTransmitter", "StructureMotionSensor", "StructureNitrolyzer", "StructureHorizontalAutoMiner", "StructureOccupancySensor", "StructurePipeOneWayValve", "StructureLiquidPipeOneWayValve", "PassiveSpeaker", "StructurePipeAnalysizer", "StructurePipeHeater", "StructureLiquidPipeHeater", "StructurePipeIgniter", "StructurePortablesConnector", "StructurePowerConnector", "StructurePowerTransmitterOmni", "StructureBench", "StructurePoweredVent", "StructurePoweredVentLarge", "StructurePressurantValve", "StructurePressureFedGasEngine", "StructurePressureFedLiquidEngine", "StructurePressureRegulator", "StructureProximitySensor", "StructureGovernedGasEngine", "StructurePumpedLiquidEngine", "StructurePurgeValve", "StructureLogicReagentReader", "StructureRecycler", "StructureRefrigeratedVendingMachine", "StructureResearchMachine", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", "StructureRocketEngineTiny", "StructureRocketManufactory", "StructureRocketMiner", "StructureRocketScanner", "StructureSDBHopper", "StructureSDBHopperAdvanced", "StructureSDBSilo", "StructureSecurityPrinter", "StructureShower", "StructureShowerPowered", "StructureSleeper", "StructureSleeperLeft", "StructureSleeperRight", "StructureSleeperVertical", "StructureLogicSlotReader", "StructureSmallDirectHeatExchangeGastoGas", "StructureSmallDirectHeatExchangeLiquidtoGas", "StructureSmallDirectHeatExchangeLiquidtoLiquid", "StructureAirlockGate", "StructureSmallSatelliteDish", "StructureTankSmall", "StructureTankSmallAir", "StructureTankSmallFuel", "StructureSolarPanel", "StructureSolarPanel45", "StructureSolarPanelDual", "StructureSolarPanelFlat", "StructureSolarPanel45Reinforced", "StructureSolarPanelDualReinforced", "StructureSolarPanelFlatReinforced", "StructureSolarPanelReinforced", "StructureSorter", "StructureStackerReverse", "StructureStacker", "StructureBattery", "StructureBatteryLarge", "StructureStirlingEngine", "StopWatch", "StructureSuitStorage", "StructureLogicSwitch2", "StructureTankBigInsulated", "StructureTankSmallInsulated", "StructureGroundBasedTelescope", "StructureToolManufactory", "StructureTraderWaypoint", "StructureTransformer", "StructureTransformerMedium", "StructureTransformerSmall", "StructureTransformerMediumReversed", "StructureTransformerSmallReversed", "StructureRocketTransformerSmall", "StructurePressurePlateLarge", "StructurePressurePlateMedium", "StructurePressurePlateSmall", "StructureTurbineGenerator", "StructureTurboVolumePump", "StructureLiquidTurboVolumePump", "StructureChuteUmbilicalMale", "StructureGasUmbilicalMale", "StructureLiquidUmbilicalMale", "StructurePowerUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureGasUmbilicalFemale", "StructureLiquidUmbilicalFemale", "StructurePowerUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureGasUmbilicalFemaleSide", "StructureLiquidUmbilicalFemaleSide", "StructurePowerUmbilicalFemaleSide", "StructureUnloader", "StructureUprightWindTurbine", "StructureValve", "StructureVendingMachine", "StructureVolumePump", "StructureWallCooler", "StructureWallHeater", "StructureWallLight", "StructureWallLightBattery", "StructureLightLongAngled", "StructureLightLongWide", "StructureLightLong", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterPurifier", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "StructureWeatherStation", "StructureWindTurbine", "StructureWindowShutter"], "strutures": ["StructureCableCorner3HBurnt", "StructureDrinkingFountain", "StructureAccessBridge", "StructureLiquidDrain", "StructureActiveVent", "StructureAdvancedComposter", "StructureAdvancedFurnace", "StructureAdvancedPackagingMachine", "StructureAirConditioner", "StructureAirlock", "StructureArcFurnace", "StructureAreaPowerControlReversed", "StructureAreaPowerControl", "StructureAutolathe", "StructureAutomatedOven", "StructureAutoMinerSmall", "StructureBatterySmall", "StructureBackPressureRegulator", "StructureBasketHoop", "StructureLogicBatchReader", "StructureLogicBatchSlotReader", "StructureLogicBatchWriter", "StructureBatteryMedium", "StructureBatteryCharger", "StructureBatteryChargerSmall", "StructureBeacon", "StructureAngledBench", "StructureBench1", "StructureFlatBench", "StructureBench3", "StructureBench2", "StructureBench4", "StructureBlastDoor", "StructureBlockBed", "StructureBlocker", "StructureCableCorner3Burnt", "StructureCableCorner4Burnt", "StructureCableJunction4Burnt", "StructureCableJunction4HBurnt", "StructureCableJunction5Burnt", "StructureCableJunction6Burnt", "StructureCableJunction6HBurnt", "StructureCableCornerBurnt", "StructureCableCornerHBurnt", "StructureCableJunctionBurnt", "StructureCableJunctionHBurnt", "StructureCableStraightHBurnt", "StructureCableStraightBurnt", "StructureCableCorner4HBurnt", "StructureCableJunctionH5Burnt", "StructureLogicButton", "StructureCableCorner3", "StructureCableCorner4", "StructureCableJunction4", "StructureCableJunction5", "StructureCableJunction6", "StructureCableCorner", "StructureCableJunction", "StructureCableStraight", "StructureCableAnalysizer", "StructureCamera", "StructureCargoStorageMedium", "StructureCargoStorageSmall", "StructureCentrifuge", "StructureChair", "StructureChairBacklessDouble", "StructureChairBacklessSingle", "StructureChairBoothCornerLeft", "StructureChairBoothMiddle", "StructureChairRectangleDouble", "StructureChairRectangleSingle", "StructureChairThickDouble", "StructureChairThickSingle", "StructureChuteCorner", "StructureChuteJunction", "StructureChuteStraight", "StructureChuteWindow", "StructureChuteBin", "StructureChuteDigitalFlipFlopSplitterLeft", "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", "StructureChuteFlipFlopSplitter", "StructureChuteInlet", "StructureChuteOutlet", "StructureChuteOverflow", "StructureChuteValve", "StructureCombustionCentrifuge", "StructureCompositeCladdingAngledCornerInnerLongL", "StructureCompositeCladdingAngledCornerInnerLongR", "StructureCompositeCladdingAngledCornerInnerLong", "StructureCompositeCladdingAngledCornerInner", "StructureCompositeCladdingAngledCorner", "StructureCompositeCladdingAngled", "StructureCompositeCladdingCylindricalPanel", "StructureCompositeCladdingCylindrical", "StructureCompositeCladdingAngledCornerLong", "StructureCompositeCladdingAngledCornerLongR", "StructureCompositeCladdingAngledLong", "StructureCompositeCladdingPanel", "StructureCompositeCladdingRoundedCornerInner", "StructureCompositeCladdingRoundedCorner", "StructureCompositeCladdingRounded", "StructureCompositeCladdingSphericalCap", "StructureCompositeCladdingSphericalCorner", "StructureCompositeCladdingSpherical", "StructureCompositeDoor", "StructureCompositeFloorGrating", "StructureCompositeFloorGrating2", "StructureCompositeFloorGrating3", "StructureCompositeFloorGrating4", "StructureCompositeFloorGratingOpen", "StructureCompositeFloorGratingOpenRotated", "StructureCompositeWall", "StructureCompositeWall02", "StructureCompositeWall03", "StructureCompositeWall04", "StructureCompositeWindow", "StructureComputer", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", "StructureConsoleDual", "StructureConsoleMonitor", "StructureCrateMount", "StructureControlChair", "StructureCornerLocker", "StructurePassthroughHeatExchangerGasToGas", "StructurePassthroughHeatExchangerGasToLiquid", "StructurePassthroughHeatExchangerLiquidToLiquid", "StructureCryoTubeHorizontal", "StructureCryoTubeVertical", "StructureCryoTube", "StructureDaylightSensor", "StructureDeepMiner", "StructureLogicDial", "StructureDigitalValve", "StructureDiodeSlide", "StructureDockPortSide", "StructureSleeperVerticalDroid", "StructureElectrolyzer", "StructureElectronicsPrinter", "StructureElevatorLevelIndustrial", "StructureElevatorLevelFront", "StructureElevatorShaftIndustrial", "StructureElevatorShaft", "StructureEngineMountTypeA1", "StructureEvaporationChamber", "StructureExpansionValve", "StructureFairingTypeA1", "StructureFairingTypeA2", "StructureFairingTypeA3", "StructureFiltration", "StructureFlashingLight", "StructureFridgeBig", "StructureFridgeSmall", "StructureFurnace", "StructureCableFuse100k", "StructureCableFuse1k", "StructureCableFuse50k", "StructureCableFuse5k", "StructureFuselageTypeA1", "StructureFuselageTypeA2", "StructureFuselageTypeA4", "StructureFuselageTypeC5", "StructureMediumRocketGasFuelTank", "StructureCapsuleTankGas", "StructureGasGenerator", "StructureGasMixer", "StructureGasSensor", "StructureGasTankStorage", "StructureSolidFuelGenerator", "StructureGlassDoor", "StructureGrowLight", "StructureHarvie", "StructureHeatExchangerGastoGas", "StructureHeatExchangerLiquidtoLiquid", "StructureHeatExchangeLiquidtoGas", "StructureCableCornerH3", "StructureCableJunctionH", "StructureCableCornerH4", "StructureCableJunctionH4", "StructureCableJunctionH5", "StructureCableJunctionH6", "StructureCableCornerH", "StructureCableStraightH", "StructureHydraulicPipeBender", "StructureHydroponicsTrayData", "StructureHydroponicsStation", "StructureHydroponicsTray", "StructureCircuitHousing", "StructureIceCrusher", "StructureIgniter", "StructureEmergencyButton", "StructureInLineTankGas1x2", "StructureInLineTankLiquid1x2", "StructureInLineTankGas1x1", "StructureInLineTankLiquid1x1", "StructureInsulatedPipeLiquidCrossJunction", "StructureInsulatedPipeLiquidCrossJunction4", "StructureInsulatedPipeLiquidCrossJunction5", "StructureInsulatedPipeLiquidCrossJunction6", "StructureInsulatedPipeLiquidCorner", "StructurePipeInsulatedLiquidCrossJunction", "StructureInsulatedPipeLiquidStraight", "StructureInsulatedPipeLiquidTJunction", "StructureLiquidTankBigInsulated", "StructureLiquidTankSmallInsulated", "StructurePassiveVentInsulated", "StructureInsulatedPipeCrossJunction3", "StructureInsulatedPipeCrossJunction4", "StructureInsulatedPipeCrossJunction5", "StructureInsulatedPipeCrossJunction6", "StructureInsulatedPipeCorner", "StructureInsulatedPipeCrossJunction", "StructureInsulatedPipeStraight", "StructureInsulatedPipeTJunction", "StructureInsulatedTankConnector", "StructureInsulatedTankConnectorLiquid", "StructureInteriorDoorGlass", "StructureInteriorDoorPadded", "StructureInteriorDoorPaddedThin", "StructureInteriorDoorTriangle", "StructureFrameIron", "StructureWallIron", "StructureWallIron02", "StructureWallIron03", "StructureWallIron04", "StructureCompositeWindowIron", "StructureKlaxon", "StructureDiode", "StructureConsoleLED1x3", "StructureConsoleLED1x2", "StructureConsoleLED5", "StructureLadder", "StructureLadderEnd", "StructurePlatformLadderOpen", "StructureLargeDirectHeatExchangeLiquidtoLiquid", "StructureLargeDirectHeatExchangeGastoGas", "StructureLargeDirectHeatExchangeGastoLiquid", "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", "StructureTankBig", "StructureLaunchMount", "StructureRocketTower", "StructureLogicSwitch", "StructureLightRound", "StructureLightRoundAngled", "StructureLightRoundSmall", "StructureBackLiquidPressureRegulator", "StructureMediumRocketLiquidFuelTank", "StructureCapsuleTankLiquid", "StructureWaterDigitalValve", "StructurePipeLiquidCrossJunction3", "StructurePipeLiquidCrossJunction4", "StructurePipeLiquidCrossJunction5", "StructurePipeLiquidCrossJunction6", "StructurePipeLiquidCorner", "StructurePipeLiquidCrossJunction", "StructurePipeLiquidStraight", "StructurePipeLiquidTJunction", "StructureLiquidPipeAnalyzer", "StructureLiquidPipeRadiator", "StructureWaterPipeMeter", "StructureLiquidTankBig", "StructureTankConnectorLiquid", "StructureLiquidTankSmall", "StructureLiquidTankStorage", "StructureLiquidValve", "StructureLiquidVolumePump", "StructureLiquidPressureRegulator", "StructureWaterWallCooler", "StructureStorageLocker", "StructureLockerSmall", "StructureLogicCompare", "StructureLogicGate", "StructureLogicHashGen", "StructureLogicMath", "StructureLogicMemory", "StructureLogicMinMax", "StructureLogicMirror", "StructureLogicReader", "StructureLogicRocketDownlink", "StructureLogicSelect", "StructureLogicTransmitter", "StructureLogicRocketUplink", "StructureLogicWriter", "StructureLogicWriterSwitch", "StructureManualHatch", "StructureLogicMathUnary", "StructureMediumConvectionRadiator", "StructurePassiveLargeRadiatorGas", "StructureMediumConvectionRadiatorLiquid", "StructurePassiveLargeRadiatorLiquid", "StructureMediumHangerDoor", "StructureMediumRadiator", "StructureMediumRadiatorLiquid", "StructureSatelliteDish", "StructurePowerTransmitterReceiver", "StructurePowerTransmitter", "StructureMotionSensor", "StructureNitrolyzer", "StructureHorizontalAutoMiner", "StructureOccupancySensor", "StructurePipeOneWayValve", "StructureLiquidPipeOneWayValve", "StructureOverheadShortCornerLocker", "StructureOverheadShortLocker", "StructurePassiveLiquidDrain", "StructureFloorDrain", "StructurePassiveVent", "StructurePictureFrameThickLandscapeLarge", "StructurePictureFrameThickMountLandscapeLarge", "StructurePictureFrameThickMountLandscapeSmall", "StructurePictureFrameThickLandscapeSmall", "StructurePictureFrameThickMountPortraitLarge", "StructurePictureFrameThickMountPortraitSmall", "StructurePictureFrameThickPortraitLarge", "StructurePictureFrameThickPortraitSmall", "StructurePictureFrameThinLandscapeLarge", "StructurePictureFrameThinMountLandscapeLarge", "StructurePictureFrameThinMountLandscapeSmall", "StructurePictureFrameThinLandscapeSmall", "StructurePictureFrameThinMountPortraitLarge", "StructurePictureFrameThinPortraitLarge", "StructurePictureFrameThinPortraitSmall", "StructurePictureFrameThinMountPortraitSmall", "StructurePipeCrossJunction3", "StructurePipeCrossJunction4", "StructurePipeCrossJunction5", "StructurePipeCrossJunction6", "StructurePipeCorner", "StructurePipeCrossJunction", "StructurePipeStraight", "StructurePipeTJunction", "StructurePipeAnalysizer", "StructurePipeRadiator", "StructurePipeCowl", "StructurePipeHeater", "StructureLiquidPipeHeater", "StructurePipeIgniter", "StructurePipeLabel", "StructurePipeMeter", "StructurePipeOrgan", "StructurePipeRadiatorFlat", "StructurePipeRadiatorFlatLiquid", "StructurePlanter", "StructurePlinth", "StructurePortablesConnector", "StructurePowerConnector", "StructurePowerTransmitterOmni", "StructureBench", "StructurePoweredVent", "StructurePoweredVentLarge", "StructurePressurantValve", "StructurePressureFedGasEngine", "StructurePressureFedLiquidEngine", "StructurePressureRegulator", "StructureProximitySensor", "StructureGovernedGasEngine", "StructurePumpedLiquidEngine", "StructurePurgeValve", "StructureRailing", "StructureLogicReagentReader", "StructureRecycler", "StructureRefrigeratedVendingMachine", "StructureReinforcedCompositeWindowSteel", "StructureReinforcedCompositeWindow", "StructureReinforcedWallPaddedWindow", "StructureReinforcedWallPaddedWindowThin", "StructureResearchMachine", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", "StructureRocketEngineTiny", "StructureRocketManufactory", "StructureRocketMiner", "StructureRocketScanner", "StructureRover", "StructureSDBHopper", "StructureSDBHopperAdvanced", "StructureSDBSilo", "StructureSecurityPrinter", "StructureShelf", "StructureShelfMedium", "StructureShortCornerLocker", "StructureShortLocker", "StructureShower", "StructureShowerPowered", "StructureSign1x1", "StructureSign2x1", "StructureSingleBed", "StructureSleeper", "StructureSleeperLeft", "StructureSleeperRight", "StructureSleeperVertical", "StructureLogicSlotReader", "StructureSmallTableBacklessDouble", "StructureSmallTableBacklessSingle", "StructureSmallTableDinnerSingle", "StructureSmallTableRectangleDouble", "StructureSmallTableRectangleSingle", "StructureSmallTableThickDouble", "StructureSmallDirectHeatExchangeGastoGas", "StructureSmallDirectHeatExchangeLiquidtoGas", "StructureSmallDirectHeatExchangeLiquidtoLiquid", "StructureFlagSmall", "StructureAirlockGate", "StructureSmallSatelliteDish", "StructureSmallTableThickSingle", "StructureTankSmall", "StructureTankSmallAir", "StructureTankSmallFuel", "StructureSolarPanel", "StructureSolarPanel45", "StructureSolarPanelDual", "StructureSolarPanelFlat", "StructureSolarPanel45Reinforced", "StructureSolarPanelDualReinforced", "StructureSolarPanelFlatReinforced", "StructureSolarPanelReinforced", "StructureSorter", "StructureStackerReverse", "StructureStacker", "StructureStairs4x2", "StructureStairs4x2RailL", "StructureStairs4x2RailR", "StructureStairs4x2Rails", "StructureStairwellBackLeft", "StructureStairwellBackPassthrough", "StructureStairwellBackRight", "StructureStairwellFrontLeft", "StructureStairwellFrontPassthrough", "StructureStairwellFrontRight", "StructureStairwellNoDoors", "StructureBattery", "StructureBatteryLarge", "StructureFrame", "StructureFrameCornerCut", "StructureFrameCorner", "StructureFrameSide", "StructureStirlingEngine", "StructureSuitStorage", "StructureLogicSwitch2", "StructureTankBigInsulated", "StructureTankConnector", "StructureTankSmallInsulated", "StructureGroundBasedTelescope", "StructureToolManufactory", "StructureTorpedoRack", "StructureTraderWaypoint", "StructureTransformer", "StructureTransformerMedium", "StructureTransformerSmall", "StructureTransformerMediumReversed", "StructureTransformerSmallReversed", "StructureRocketTransformerSmall", "StructurePressurePlateLarge", "StructurePressurePlateMedium", "StructurePressurePlateSmall", "StructureTurbineGenerator", "StructureTurboVolumePump", "StructureLiquidTurboVolumePump", "StructureChuteUmbilicalMale", "StructureGasUmbilicalMale", "StructureLiquidUmbilicalMale", "StructurePowerUmbilicalMale", "StructureChuteUmbilicalFemale", "StructureGasUmbilicalFemale", "StructureLiquidUmbilicalFemale", "StructurePowerUmbilicalFemale", "StructureChuteUmbilicalFemaleSide", "StructureGasUmbilicalFemaleSide", "StructureLiquidUmbilicalFemaleSide", "StructurePowerUmbilicalFemaleSide", "StructureUnloader", "StructureUprightWindTurbine", "StructureValve", "StructureVendingMachine", "StructureVolumePump", "StructureWallArchArrow", "StructureWallArchCornerRound", "StructureWallArchCornerSquare", "StructureWallArchCornerTriangle", "StructureWallArchPlating", "StructureWallArchTwoTone", "StructureWallArch", "StructureWallFlatCornerRound", "StructureWallFlatCornerSquare", "StructureWallFlatCornerTriangleFlat", "StructureWallFlatCornerTriangle", "StructureWallFlat", "StructureWallGeometryCorner", "StructureWallGeometryStreight", "StructureWallGeometryTMirrored", "StructureWallGeometryT", "StructureWallLargePanelArrow", "StructureWallLargePanel", "StructureWallPaddedArchCorner", "StructureWallPaddedArchLightFittingTop", "StructureWallPaddedArchLightsFittings", "StructureWallPaddedArch", "StructureWallPaddedCornerThin", "StructureWallPaddedCorner", "StructureWallPaddedNoBorderCorner", "StructureWallPaddedNoBorder", "StructureWallPaddedThinNoBorderCorner", "StructureWallPaddedThinNoBorder", "StructureWallPaddedWindowThin", "StructureWallPaddedWindow", "StructureWallPaddingArchVent", "StructureWallPaddingLightFitting", "StructureWallPaddingThin", "StructureWallPadding", "StructureWallPlating", "StructureWallSmallPanelsAndHatch", "StructureWallSmallPanelsArrow", "StructureWallSmallPanelsMonoChrome", "StructureWallSmallPanelsOpen", "StructureWallSmallPanelsTwoTone", "StructureWallCooler", "StructureWallHeater", "StructureWallLight", "StructureWallLightBattery", "StructureLightLongAngled", "StructureLightLongWide", "StructureLightLong", "StructureWallVent", "StructureWaterBottleFiller", "StructureWaterBottleFillerBottom", "StructureWaterPurifier", "StructureWaterBottleFillerPoweredBottom", "StructureWaterBottleFillerPowered", "StructureWeatherStation", "StructureWindTurbine", "StructureWindowShutter"], "items": ["ItemAuthoringToolRocketNetwork", "MonsterEgg", "MotherboardMissionControl", "Robot", "AccessCardBlack", "AccessCardBlue", "AccessCardBrown", "AccessCardGray", "AccessCardGreen", "AccessCardKhaki", "AccessCardOrange", "AccessCardPink", "AccessCardPurple", "AccessCardRed", "AccessCardWhite", "AccessCardYellow", "CircuitboardAdvAirlockControl", "ItemAdvancedTablet", "CircuitboardAirControl", "CircuitboardAirlockControl", "ImGuiCircuitboardAirlockControl", "ItemAlienMushroom", "ItemAmmoBox", "ItemAngleGrinder", "ApplianceDeskLampLeft", "ApplianceDeskLampRight", "ApplianceSeedTray", "ItemArcWelder", "ItemAstroloySheets", "CartridgeAtmosAnalyser", "ItemAuthoringTool", "AutolathePrinterMod", "ItemPotatoBaked", "AppliancePackagingMachine", "ItemBasketBall", "ItemBatteryCellLarge", "ItemBatteryCellNuclear", "ItemBatteryCell", "ItemBatteryChargerSmall", "Battery_Wireless_cell", "Battery_Wireless_cell_Big", "ItemBiomass", "ItemBreadLoaf", "ItemCableCoil", "ItemCableCoilHeavy", "CircuitboardCameraDisplay", "ItemGasCanisterEmpty", "ItemGasCanisterCarbonDioxide", "ItemGasCanisterFuel", "ItemGasCanisterNitrogen", "ItemGasCanisterOxygen", "ItemGasCanisterPollutants", "ItemGasCanisterVolatiles", "ItemCannedCondensedMilk", "ItemCannedEdamame", "ItemFrenchFries", "ItemCannedMushroom", "ItemCannedPowderedEggs", "ItemCannedRicePudding", "CardboardBox", "CartridgeAccessController", "CartridgePlantAnalyser", "ItemGasFilterCarbonDioxideInfinite", "ItemGasFilterNitrogenInfinite", "ItemGasFilterNitrousOxideInfinite", "ItemGasFilterOxygenInfinite", "ItemGasFilterPollutantsInfinite", "ItemGasFilterVolatilesInfinite", "ItemGasFilterWaterInfinite", "ItemCerealBar", "ItemCharcoal", "ItemChemLightBlue", "ItemChemLightGreen", "ItemChemLightRed", "ItemChemLightWhite", "ItemChemLightYellow", "ApplianceChemistryStation", "NpcChick", "NpcChicken", "ItemCoffeeMug", "ReagentColorBlue", "ReagentColorGreen", "ReagentColorOrange", "ReagentColorRed", "ReagentColorYellow", "MotherboardComms", "CompositeRollCover", "ItemCookedCondensedMilk", "CartridgeConfiguration", "ItemCookedCorn", "ItemCookedMushroom", "ItemCookedPumpkin", "ItemCookedRice", "ItemCookedSoybean", "ItemCookedTomato", "ItemCorn", "SeedBag_Corn", "ItemCornSoup", "CrateMkII", "ItemCreditCard", "ItemCrowbar", "ItemFilterFern", "ItemDataDisk", "DecayedFood", "DeviceStepUnit", "ItemDirtCanister", "ItemDirtyOre", "ItemSpaceOre", "ItemDisposableBatteryCharger", "CircuitboardDoorControl", "ItemDuctTape", "DynamicCrate", "DynamicGasCanisterRocketFuel", "ItemFertilizedEgg", "ItemEggCarton", "ItemElectronicParts", "ElectronicPrinterMod", "ElevatorCarrage", "ItemEmergencyAngleGrinder", "ItemEmergencyArcWelder", "ItemEmergencyCrowbar", "ItemEmergencyDrill", "ItemEmergencyEvaSuit", "ItemEmergencyPickaxe", "ItemEmergencyScrewdriver", "ItemEmergencySpaceHelmet", "ItemEmergencyToolBelt", "ItemEmergencyWireCutters", "ItemEmergencyWrench", "ItemEmptyCan", "ItemPlantEndothermic_Creative", "WeaponPistolEnergy", "WeaponRifleEnergy", "EntityChick", "EntityChickenBrown", "EntityChickenWhite", "EntityRoosterBlack", "EntityRoosterBrown", "ItemEvaSuit", "ItemFern", "SeedBag_Fern", "Fertilizer", "ItemGasFilterCarbonDioxide", "ItemGasFilterNitrogen", "ItemGasFilterNitrousOxide", "ItemGasFilterOxygen", "ItemGasFilterPollutants", "ItemGasFilterVolatiles", "ItemGasFilterWater", "FireArmSMG", "ItemReusableFireExtinguisher", "Flag_ODA_10m", "Flag_ODA_4m", "Flag_ODA_6m", "Flag_ODA_8m", "FlareGun", "ItemFlashlight", "ItemFlour", "ItemFlowerBlue", "ItemFlowerGreen", "ItemFlowerOrange", "ItemFlowerRed", "ItemFlowerYellow", "ItemFries", "CartridgeGPS", "ItemGasCanisterNitrousOxide", "ItemGasCanisterSmart", "CircuitboardGasDisplay", "DynamicGasTankAdvanced", "ItemGlassSheets", "ItemGlasses", "CircuitboardGraphDisplay", "DynamicGPR", "CartridgeGuide", "H2Combustor", "ItemHEMDroidRepairKit", "ItemPlantThermogenic_Genepool1", "ItemPlantThermogenic_Genepool2", "ItemDrill", "ItemGrenade", "Handgun", "HandgunMagazine", "ItemScanner", "ItemTablet", "ItemHardMiningBackPack", "ItemHardSuit", "ItemHardBackpack", "ItemHardsuitHelmet", "ItemHardJetpack", "CircuitboardHashDisplay", "ItemHat", "ItemCropHay", "ItemWearLamp", "ItemGasFilterCarbonDioxideL", "ItemGasFilterNitrogenL", "ItemGasFilterNitrousOxideL", "ItemGasFilterOxygenL", "ItemGasFilterPollutantsL", "ItemGasFilterVolatilesL", "ItemGasFilterWaterL", "ItemHighVolumeGasCanisterEmpty", "ItemHorticultureBelt", "HumanSkull", "MotherboardProgrammableChip", "ItemNitrice", "ItemOxite", "ItemVolatiles", "ItemIce", "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", "ItemElectrumIngot", "ItemGoldIngot", "ItemHastelloyIngot", "ItemInconelIngot", "ItemInvarIngot", "ItemIronIngot", "ItemLeadIngot", "ItemNickelIngot", "ItemSiliconIngot", "ItemSilverIngot", "ItemSolderIngot", "ItemSteelIngot", "ItemStelliteIngot", "ItemWaspaloyIngot", "ItemInsulation", "ItemIntegratedCircuit10", "ItemIronFrames", "ItemIronSheets", "ItemJetpackBasic", "UniformOrangeJumpSuit", "ItemKitAIMeE", "ItemKitAccessBridge", "ItemActiveVent", "ItemKitAdvancedComposter", "ItemKitAdvancedFurnace", "ItemKitAdvancedPackagingMachine", "ItemKitAirlock", "ItemKitArcFurnace", "ItemKitWallArch", "ItemKitAtmospherics", "ItemKitAutolathe", "ItemKitHydroponicAutomated", "ItemKitAutomatedOven", "ItemKitAutoMinerSmall", "ItemKitRocketAvionics", "ItemKitChute", "ItemKitBasket", "ItemBatteryCharger", "ItemKitBatteryLarge", "ItemKitBattery", "ItemKitBeacon", "ItemKitBeds", "ItemKitBlastDoor", "ItemCableAnalyser", "ItemCableFuse", "ItemGasTankStorage", "ItemKitCentrifuge", "ItemKitChairs", "ItemKitChuteUmbilical", "ItemKitCompositeCladding", "KitStructureCombustionCentrifuge", "ItemKitComputer", "ItemKitConsole", "ItemKitCrateMount", "ItemKitPassthroughHeatExchanger", "ItemKitCrateMkII", "ItemKitCrate", "ItemRTG", "ItemKitCryoTube", "ItemKitDeepMiner", "ItemPipeDigitalValve", "ItemKitDockingPort", "ItemKitDoor", "ItemKitDrinkingFountain", "ItemKitElectronicsPrinter", "ItemKitElevator", "ItemKitEngineLarge", "ItemKitEngineMedium", "ItemKitEngineSmall", "ItemFlashingLight", "ItemKitWallFlat", "ItemKitCompositeFloorGrating", "ItemKitFridgeBig", "ItemKitFridgeSmall", "ItemKitFurnace", "ItemKitFurniture", "ItemKitFuselage", "ItemKitGasGenerator", "ItemPipeGasMixer", "ItemGasSensor", "ItemKitGasUmbilical", "ItemKitWallGeometry", "ItemKitGrowLight", "ItemKitAirlockGate", "ItemKitHarvie", "ItemKitHydraulicPipeBender", "ItemKitHydroponicStation", "ItemHydroponicTray", "ItemKitLogicCircuit", "ItemKitIceCrusher", "ItemIgniter", "ItemKitInsulatedLiquidPipe", "ItemKitLiquidTankInsulated", "ItemPassiveVentInsulated", "ItemKitInsulatedPipe", "ItemKitInteriorDoors", "ItemKitWallIron", "ItemKitLadder", "ItemKitLandingPadAtmos", "ItemKitLandingPadBasic", "ItemKitLandingPadWaypoint", "ItemKitLargeDirectHeatExchanger", "ItemKitLargeExtendableRadiator", "ItemKitLargeSatelliteDish", "ItemKitLaunchMount", "ItemWallLight", "ItemLiquidTankStorage", "ItemWaterPipeDigitalValve", "ItemLiquidDrain", "ItemLiquidPipeAnalyzer", "ItemWaterPipeMeter", "ItemLiquidPipeValve", "ItemKitPipeLiquid", "ItemPipeLiquidRadiator", "ItemKitLiquidRegulator", "ItemKitLiquidTank", "ItemKitLiquidUmbilical", "ItemLiquidPipeVolumePump", "ItemWaterWallCooler", "ItemKitLocker", "ItemKitLogicInputOutput", "ItemKitLogicMemory", "ItemKitLogicProcessor", "ItemKitLogicSwitch", "ItemKitLogicTransmitter", "ItemKitPassiveLargeRadiatorLiquid", "ItemKitPassiveLargeRadiatorGas", "ItemKitSatelliteDish", "ItemKitMotherShipCore", "ItemKitMusicMachines", "ItemKitFlagODA", "ItemKitHorizontalAutoMiner", "ItemKitWallPadded", "ItemKitEvaporationChamber", "ItemPipeAnalyizer", "ItemPipeIgniter", "ItemPipeLabel", "ItemPipeMeter", "ItemKitPipeOrgan", "ItemKitPipeRadiatorLiquid", "ItemKitPipeRadiator", "ItemKitPipeUtility", "ItemKitPipeUtilityLiquid", "ItemPipeValve", "ItemKitPipe", "ItemKitPlanter", "ItemDynamicAirCon", "ItemKitDynamicGasTankAdvanced", "ItemKitDynamicCanister", "ItemKitDynamicGenerator", "ItemKitDynamicHydroponics", "ItemKitDynamicMKIILiquidCanister", "ItemKitDynamicLiquidCanister", "ItemDynamicScrubber", "ItemKitPortablesConnector", "ItemPowerConnector", "ItemAreaPowerControl", "ItemKitPowerTransmitterOmni", "ItemKitPowerTransmitter", "ItemKitElectricUmbilical", "ItemKitStandardChute", "ItemKitPoweredVent", "ItemKitPressureFedGasEngine", "ItemKitPressureFedLiquidEngine", "ItemKitRegulator", "ItemKitGovernedGasRocketEngine", "ItemKitPumpedLiquidEngine", "ItemRTGSurvival", "ItemPipeRadiator", "ItemKitRailing", "ItemKitRecycler", "ItemKitReinforcedWindows", "ItemKitRespawnPointWallMounted", "ItemKitRocketBattery", "ItemKitRocketCargoStorage", "ItemKitRocketCelestialTracker", "ItemKitRocketCircuitHousing", "ItemKitRocketDatalink", "ItemKitRocketGasFuelTank", "ItemKitLaunchTower", "ItemKitRocketLiquidFuelTank", "ItemKitRocketManufactory", "ItemKitRocketMiner", "ItemKitRocketScanner", "ItemKitRoverFrame", "ItemKitRoverMKI", "ItemKitSDBHopper", "KitSDBSilo", "ItemKitSecurityPrinter", "ItemKitSensor", "ItemKitShower", "ItemKitSign", "ItemKitSleeper", "ItemKitSmallDirectHeatExchanger", "ItemFlagSmall", "ItemKitSmallSatelliteDish", "ItemKitSolarPanelBasicReinforced", "ItemKitSolarPanelBasic", "ItemKitSolarPanelReinforced", "ItemKitSolarPanel", "ItemKitSolidGenerator", "ItemKitSorter", "ItemKitSpeaker", "ItemKitStacker", "ItemKitStairs", "ItemKitStairwell", "ItemKitStirlingEngine", "ItemKitSuitStorage", "ItemKitTables", "ItemKitTankInsulated", "ItemKitTank", "ItemKitGroundTelescope", "ItemKitToolManufactory", "ItemKitTransformer", "ItemKitRocketTransformerSmall", "ItemKitTransformerSmall", "ItemKitPressurePlate", "ItemKitTurbineGenerator", "ItemKitTurboVolumePump", "ItemKitLiquidTurboVolumePump", "ItemKitUprightWindTurbine", "ItemKitVendingMachineRefrigerated", "ItemKitVendingMachine", "ItemPipeVolumePump", "ItemWallCooler", "ItemWallHeater", "ItemKitWall", "ItemKitWaterBottleFiller", "ItemKitWaterPurifier", "ItemKitWeatherStation", "ItemKitWindTurbine", "ItemKitWindowShutter", "ItemKitHeatExchanger", "ItemKitPictureFrame", "ItemKitResearchMachine", "KitchenTableShort", "KitchenTableSimpleShort", "KitchenTableSimpleTall", "KitchenTableTall", "ItemLabeller", "Lander", "Landingpad_BlankPiece", "Landingpad_2x2CenterPiece01", "Landingpad_CenterPiece01", "Landingpad_CrossPiece", "Landingpad_DataConnectionPiece", "Landingpad_DiagonalPiece01", "Landingpad_GasConnectorInwardPiece", "Landingpad_GasConnectorOutwardPiece", "Landingpad_GasCylinderTankPiece", "Landingpad_LiquidConnectorInwardPiece", "Landingpad_LiquidConnectorOutwardPiece", "Landingpad_StraightPiece01", "Landingpad_TaxiPieceCorner", "Landingpad_TaxiPieceHold", "Landingpad_TaxiPieceStraight", "Landingpad_ThreshholdPiece", "ItemLaptop", "ItemLightSword", "ItemLiquidCanisterEmpty", "ItemLiquidCanisterSmart", "ItemGasCanisterWater", "MotherboardLogic", "LogicStepSequencer8", "DeviceLfoVolume", "ItemMarineBodyArmor", "ItemMarineHelmet", "UniformMarine", "CartridgeMedicalAnalyser", "ItemGasFilterCarbonDioxideM", "ItemGasFilterNitrogenM", "ItemGasFilterNitrousOxideM", "ItemGasFilterOxygenM", "ItemGasFilterPollutantsM", "ItemGasFilterVolatilesM", "ItemGasFilterWaterM", "Meteorite", "ApplianceMicrowave", "ItemMilk", "ItemMiningBackPack", "ItemMiningBelt", "ItemMiningBeltMKII", "ItemMiningCharge", "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemRocketMiningDrillHead", "ItemRocketMiningDrillHeadDurable", "ItemRocketMiningDrillHeadHighSpeedIce", "ItemRocketMiningDrillHeadHighSpeedMineral", "ItemRocketMiningDrillHeadIce", "ItemRocketMiningDrillHeadLongTerm", "ItemRocketMiningDrillHeadMineral", "ItemMKIIAngleGrinder", "ItemMKIIArcWelder", "ItemMKIICrowbar", "ItemMKIIDrill", "ItemMKIIDuctTape", "ItemMKIIMiningDrill", "ItemMKIIScrewdriver", "ItemMKIIWireCutters", "ItemMKIIWrench", "CircuitboardModeControl", "MothershipCore", "ItemMuffin", "ItemMushroom", "SeedBag_Mushroom", "CartridgeNetworkAnalyser", "ItemNVG", "ItemCoalOre", "ItemCobaltOre", "ItemCopperOre", "ItemGoldOre", "ItemIronOre", "ItemLeadOre", "ItemNickelOre", "ItemSiliconOre", "ItemSilverOre", "ItemUraniumOre", "CartridgeOreScanner", "CartridgeOreScannerColor", "AppliancePaintMixer", "PassiveSpeaker", "ItemPassiveVent", "ItemPeaceLily", "ItemPickaxe", "ItemPillHeal", "ItemPillStun", "PipeBenderMod", "ItemPipeCowl", "ItemPipeHeater", "ItemLiquidPipeHeater", "AppliancePlantGeneticAnalyzer", "AppliancePlantGeneticSplicer", "AppliancePlantGeneticStabilizer", "ItemPlantSampler", "ItemPlasticSheets", "ItemMiningDrillPneumatic", "DynamicAirConditioner", "DynamicScrubber", "PortableComposter", "DynamicGasCanisterEmpty", "DynamicGasCanisterAir", "DynamicGasCanisterCarbonDioxide", "DynamicGasCanisterFuel", "DynamicGasCanisterNitrogen", "DynamicGasCanisterNitrousOxide", "DynamicGasCanisterOxygen", "DynamicGasCanisterPollutants", "DynamicGasCanisterVolatiles", "DynamicGasTankAdvancedOxygen", "DynamicGenerator", "DynamicHydroponics", "DynamicLight", "DynamicLiquidCanisterEmpty", "DynamicGasCanisterWater", "DynamicMKIILiquidCanisterEmpty", "DynamicMKIILiquidCanisterWater", "PortableSolarPanel", "ItemPotato", "SeedBag_Potato", "ItemCookedPowderedEggs", "CircuitboardPowerControl", "ItemPumpkin", "ItemPumpkinPie", "SeedBag_Pumpkin", "ItemPumpkinSoup", "ItemPureIceCarbonDioxide", "ItemPureIceHydrogen", "ItemPureIceLiquidCarbonDioxide", "ItemPureIceLiquidHydrogen", "ItemPureIceLiquidNitrogen", "ItemPureIceLiquidNitrous", "ItemPureIceLiquidOxygen", "ItemPureIceLiquidPollutant", "ItemPureIceLiquidVolatiles", "ItemPureIceNitrogen", "ItemPureIceNitrous", "ItemPureIceOxygen", "ItemPureIcePollutant", "ItemPureIcePollutedWater", "ItemPureIceSteam", "ItemPureIceVolatiles", "ItemPureIce", "RailingElegant01", "RailingElegant02", "RailingIndustrial02", "ItemReagentMix", "ApplianceReagentProcessor", "ItemRemoteDetonator", "ItemExplosive", "ItemResearchCapsule", "ItemResearchCapsuleGreen", "ItemResearchCapsuleRed", "ItemResearchCapsuleYellow", "RespawnPoint", "RespawnPointWallMounted", "ItemRice", "SeedBag_Rice", "ItemRoadFlare", "MotherboardRockets", "ItemRocketScanningHead", "RoverCargo", "Rover_MkI_build_states", "Rover_MkI", "SMGMagazine", "ItemScrewdriver", "ItemSecurityCamera", "ItemSensorLenses", "ItemSensorProcessingUnitCelestialScanner", "ItemSensorProcessingUnitOreScanner", "ItemSensorProcessingUnitMesonScanner", "CircuitboardShipDisplay", "DynamicSkeleton", "CircuitboardSolarControl", "ItemSolidFuel", "MotherboardSorter", "ItemSoundCartridgeBass", "ItemSoundCartridgeDrums", "ItemSoundCartridgeLeads", "ItemSoundCartridgeSynth", "ItemSoyOil", "ItemSoybean", "SeedBag_Soybean", "ItemSpaceCleaner", "ItemSpaceHelmet", "ItemSpaceIce", "SpaceShuttle", "ItemSpacepack", "ItemSprayGun", "ItemSprayCanBlack", "ItemSprayCanBlue", "ItemSprayCanBrown", "ItemSprayCanGreen", "ItemSprayCanGrey", "ItemSprayCanKhaki", "ItemSprayCanOrange", "ItemSprayCanPink", "ItemSprayCanPurple", "ItemSprayCanRed", "ItemSprayCanWhite", "ItemSprayCanYellow", "ItemSteelFrames", "ItemSteelSheets", "ItemStelliteGlassSheets", "StopWatch", "ItemPlantSwitchGrass", "SeedBag_Switchgrass", "ApplianceTabletDock", "ItemTerrainManipulator", "ItemPlantThermogenic_Creative", "ItemTomato", "SeedBag_Tomato", "ItemTomatoSoup", "ItemToolBelt", "ItemMkIIToolbelt", "ToolPrinterMod", "WeaponTorpedo", "ToyLuna", "CartridgeTracker", "ItemBeacon", "ItemTropicalPlant", "UniformCommander", "ItemWaterBottle", "WeaponEnergy", "ItemWeldingTorch", "ItemWheat", "SeedBag_Wheet", "ItemPlantEndothermic_Genepool1", "ItemPlantEndothermic_Genepool2", "ItemWireCutters", "ItemWirelessBatteryCellExtraLarge", "ItemWreckageAirConditioner1", "ItemWreckageAirConditioner2", "ItemWreckageHydroponicsTray1", "ItemWreckageLargeExtendableRadiator01", "ItemWreckageStructureRTG1", "ItemWreckageStructureWeatherStation002", "ItemWreckageStructureWeatherStation001", "ItemWreckageStructureWeatherStation006", "ItemWreckageStructureWeatherStation003", "ItemWreckageStructureWeatherStation008", "ItemWreckageStructureWeatherStation007", "ItemWreckageStructureWeatherStation005", "ItemWreckageStructureWeatherStation004", "ItemWreckageTurbineGenerator2", "ItemWreckageTurbineGenerator1", "ItemWreckageTurbineGenerator3", "ItemWreckageWallCooler2", "ItemWreckageWallCooler1", "ItemWrench", "CartridgeElectronicReader"], "db": {"ItemAuthoringToolRocketNetwork": {"name": "ItemAuthoringToolRocketNetwork", "hash": -1731627004, "desc": ""}, "MonsterEgg": {"name": "MonsterEgg", "hash": -1667675295, "desc": ""}, "MotherboardMissionControl": {"name": "MotherboardMissionControl", "hash": -127121474, "desc": ""}, "StructureCableCorner3HBurnt": {"name": "StructureCableCorner3HBurnt", "hash": 2393826, "desc": ""}, "StructureDrinkingFountain": {"name": "StructureDrinkingFountain", "hash": 1968371847, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "Robot": {"name": "Robot", "hash": 434786784, "desc": "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer's best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Programmable Chip", "typ": "ProgrammableChip"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "Read", "On": "ReadWrite", "TemperatureExternal": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "TargetX": "Write", "TargetY": "Write", "TargetZ": "Write", "MineablesInVicinity": "Read", "MineablesInQueue": "Read", "ReferenceId": "Read", "ForwardX": "Read", "ForwardY": "Read", "ForwardZ": "Read", "Orientation": "Read", "VelocityX": "Read", "VelocityY": "Read", "VelocityZ": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}, "modes": {"0": "None", "1": "Follow", "2": "MoveToTarget", "3": "Roam", "4": "Unload", "5": "PathToTarget", "6": "StorageFull"}}, "StructureAccessBridge": {"name": "StructureAccessBridge", "hash": 1298920475, "desc": "Extendable bridge that spans three grids", "logic": {"Power": "Read", "Open": "ReadWrite", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "AccessCardBlack": {"name": "AccessCardBlack", "hash": -1330388999, "desc": ""}, "AccessCardBlue": {"name": "AccessCardBlue", "hash": -1411327657, "desc": ""}, "AccessCardBrown": {"name": "AccessCardBrown", "hash": 1412428165, "desc": ""}, "AccessCardGray": {"name": "AccessCardGray", "hash": -1339479035, "desc": ""}, "AccessCardGreen": {"name": "AccessCardGreen", "hash": -374567952, "desc": ""}, "AccessCardKhaki": {"name": "AccessCardKhaki", "hash": 337035771, "desc": ""}, "AccessCardOrange": {"name": "AccessCardOrange", "hash": -332896929, "desc": ""}, "AccessCardPink": {"name": "AccessCardPink", "hash": 431317557, "desc": ""}, "AccessCardPurple": {"name": "AccessCardPurple", "hash": 459843265, "desc": ""}, "AccessCardRed": {"name": "AccessCardRed", "hash": -1713748313, "desc": ""}, "AccessCardWhite": {"name": "AccessCardWhite", "hash": 2079959157, "desc": ""}, "AccessCardYellow": {"name": "AccessCardYellow", "hash": 568932536, "desc": ""}, "StructureLiquidDrain": {"name": "StructureLiquidDrain", "hash": 1687692899, "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["Data", "Input"], "2": ["Power", "Input"]}}, "StructureActiveVent": {"name": "StructureActiveVent", "hash": -1129453144, "desc": "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: 'Outward' sets it to pump gas into a space until pressure is reached; 'Inward' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward ...", "slots": [{"name": "", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "PressureInternal": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Pipe", "None"]}}, "CircuitboardAdvAirlockControl": {"name": "CircuitboardAdvAirlockControl", "hash": 1633663176, "desc": ""}, "StructureAdvancedComposter": {"name": "StructureAdvancedComposter", "hash": 446212963, "desc": "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"], "2": ["PipeLiquid", "Input"], "3": ["Power", "None"], "4": ["Chute", "Input"], "5": ["Chute", "Output"]}}, "StructureAdvancedFurnace": {"name": "StructureAdvancedFurnace", "hash": 545937711, "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "SettingInput": "ReadWrite", "SettingOutput": "ReadWrite", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"], "5": ["Pipe", "Output"], "6": ["PipeLiquid", "Output2"]}}, "StructureAdvancedPackagingMachine": {"name": "StructureAdvancedPackagingMachine", "hash": -463037670, "desc": "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemAdvancedTablet": {"name": "ItemAdvancedTablet", "hash": 1722785341, "desc": "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Atmos Analyzer, Tracker, Medical Analyzer, Ore Scanner, eReader, and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Cartridge", "typ": "Cartridge"}, {"name": "Cartridge1", "typ": "Cartridge"}, {"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "On": "ReadWrite", "Volume": "ReadWrite", "SoundAlert": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureAirConditioner": {"name": "StructureAirConditioner", "hash": -2087593337, "desc": "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit's green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page.", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "PressureOutput2": "Read", "TemperatureOutput2": "Read", "RatioOxygenOutput2": "Read", "RatioCarbonDioxideOutput2": "Read", "RatioNitrogenOutput2": "Read", "RatioPollutantOutput2": "Read", "RatioVolatilesOutput2": "Read", "RatioWaterOutput2": "Read", "RatioNitrousOxideOutput2": "Read", "TotalMolesOutput2": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionOutput2": "Read", "OperationalTemperatureEfficiency": "Read", "TemperatureDifferentialEfficiency": "Read", "PressureEfficiency": "Read", "ReferenceId": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Waste"], "4": ["Power", "None"]}}, "CircuitboardAirControl": {"name": "CircuitboardAirControl", "hash": 1618019559, "desc": "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. "}, "CircuitboardAirlockControl": {"name": "CircuitboardAirlockControl", "hash": 912176135, "desc": "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board\u00e2\u20ac\u2122s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed."}, "StructureAirlock": {"name": "StructureAirlock", "hash": -2105052344, "desc": "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ImGuiCircuitboardAirlockControl": {"name": "ImGuiCircuitboardAirlockControl", "hash": -73796547, "desc": ""}, "ItemAlienMushroom": {"name": "ItemAlienMushroom", "hash": 176446172, "desc": ""}, "ItemAmmoBox": {"name": "ItemAmmoBox", "hash": -9559091, "desc": ""}, "ItemAngleGrinder": {"name": "ItemAngleGrinder", "hash": 201215010, "desc": "Angles-be-gone with the trusty angle grinder.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ApplianceDeskLampLeft": {"name": "ApplianceDeskLampLeft", "hash": -1683849799, "desc": ""}, "ApplianceDeskLampRight": {"name": "ApplianceDeskLampRight", "hash": 1174360780, "desc": ""}, "ApplianceSeedTray": {"name": "ApplianceSeedTray", "hash": 142831994, "desc": "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics.", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}]}, "StructureArcFurnace": {"name": "StructureArcFurnace", "hash": -247344692, "desc": "The simplest smelting system available to the average Stationeer, Recurso's arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys.", "slots": [{"name": "Import", "typ": "Ore"}, {"name": "Export", "typ": "Ingot"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemArcWelder": {"name": "ItemArcWelder", "hash": 1385062886, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureAreaPowerControlReversed": {"name": "StructureAreaPowerControlReversed", "hash": -1032513487, "desc": "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Idle", "1": "Discharged", "2": "Discharging", "3": "Charging", "4": "Charged"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "StructureAreaPowerControl": {"name": "StructureAreaPowerControl", "hash": 1999523701, "desc": "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Idle", "1": "Discharged", "2": "Discharging", "3": "Charging", "4": "Charged"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "ItemAstroloySheets": {"name": "ItemAstroloySheets", "hash": -1662476145, "desc": ""}, "CartridgeAtmosAnalyser": {"name": "CartridgeAtmosAnalyser", "hash": -1550278665, "desc": "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks."}, "ItemAuthoringTool": {"name": "ItemAuthoringTool", "hash": 789015045, "desc": ""}, "StructureAutolathe": {"name": "StructureAutolathe", "hash": 336213101, "desc": "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t ", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "AutolathePrinterMod": {"name": "AutolathePrinterMod", "hash": 221058307, "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructureAutomatedOven": {"name": "StructureAutomatedOven", "hash": -1672404896, "desc": "", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureAutoMinerSmall": {"name": "StructureAutoMinerSmall", "hash": 7274344, "desc": "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureBatterySmall": {"name": "StructureBatterySmall", "hash": -2123455080, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Power": "Read", "Mode": "Read", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["PowerAndData", "None"]}}, "StructureBackPressureRegulator": {"name": "StructureBackPressureRegulator", "hash": -1149857558, "desc": "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "ItemPotatoBaked": {"name": "ItemPotatoBaked", "hash": -2111886401, "desc": ""}, "AppliancePackagingMachine": {"name": "AppliancePackagingMachine", "hash": -749191906, "desc": "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n ", "slots": [{"name": "Export", "typ": "None"}]}, "ItemBasketBall": {"name": "ItemBasketBall", "hash": -1262580790, "desc": ""}, "StructureBasketHoop": {"name": "StructureBasketHoop", "hash": -1613497288, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLogicBatchReader": {"name": "StructureLogicBatchReader", "hash": 264413729, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicBatchSlotReader": {"name": "StructureLogicBatchSlotReader", "hash": 436888930, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicBatchWriter": {"name": "StructureLogicBatchWriter", "hash": 1415443359, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureBatteryMedium": {"name": "StructureBatteryMedium", "hash": -1125305264, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Power": "Read", "Mode": "Read", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["PowerAndData", "None"]}}, "ItemBatteryCellLarge": {"name": "ItemBatteryCellLarge", "hash": -459827268, "desc": "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemBatteryCellNuclear": {"name": "ItemBatteryCellNuclear", "hash": 544617306, "desc": "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys.", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemBatteryCell": {"name": "ItemBatteryCell", "hash": 700133157, "desc": "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer's basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power.", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "StructureBatteryCharger": {"name": "StructureBatteryCharger", "hash": 1945930022, "desc": "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4], "OccupantHash": [0, 1, 2, 3, 4], "Quantity": [0, 1, 2, 3, 4], "Damage": [0, 1, 2, 3, 4], "Charge": [0, 1, 2, 3, 4], "ChargeRatio": [0, 1, 2, 3, 4], "Class": [0, 1, 2, 3, 4], "MaxQuantity": [0, 1, 2, 3, 4], "PrefabHash": [0, 1, 2, 3, 4], "SortingClass": [0, 1, 2, 3, 4], "ReferenceId": [0, 1, 2, 3, 4]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemBatteryChargerSmall": {"name": "ItemBatteryChargerSmall", "hash": 1008295833, "desc": ""}, "StructureBatteryChargerSmall": {"name": "StructureBatteryChargerSmall", "hash": -761772413, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0, 1], "ChargeRatio": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Power", "None"]}}, "Battery_Wireless_cell": {"name": "Battery_Wireless_cell", "hash": -462415758, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "Battery_Wireless_cell_Big": {"name": "Battery_Wireless_cell_Big", "hash": -41519077, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "StructureBeacon": {"name": "StructureBeacon", "hash": -188177083, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureAngledBench": {"name": "StructureAngledBench", "hash": 1811979158, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureBench1": {"name": "StructureBench1", "hash": 406745009, "desc": "", "slots": [{"name": "Appliance 1", "typ": "Appliance"}, {"name": "Appliance 2", "typ": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureFlatBench": {"name": "StructureFlatBench", "hash": 839890807, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureBench3": {"name": "StructureBench3", "hash": -164622691, "desc": "", "slots": [{"name": "Appliance 1", "typ": "Appliance"}, {"name": "Appliance 2", "typ": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBench2": {"name": "StructureBench2", "hash": -2127086069, "desc": "", "slots": [{"name": "Appliance 1", "typ": "Appliance"}, {"name": "Appliance 2", "typ": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBench4": {"name": "StructureBench4", "hash": 1750375230, "desc": "", "slots": [{"name": "Appliance 1", "typ": "Appliance"}, {"name": "Appliance 2", "typ": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemBiomass": {"name": "ItemBiomass", "hash": -831480639, "desc": "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel)."}, "StructureBlastDoor": {"name": "StructureBlastDoor", "hash": 337416191, "desc": "Airtight and almost undamageable, the original 'Millmar' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureBlockBed": {"name": "StructureBlockBed", "hash": 697908419, "desc": "Description coming.", "slots": [{"name": "Bed", "typ": "Entity"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Power", "None"]}}, "StructureBlocker": {"name": "StructureBlocker", "hash": 378084505, "desc": ""}, "ItemBreadLoaf": {"name": "ItemBreadLoaf", "hash": 893514943, "desc": ""}, "StructureCableCorner3Burnt": {"name": "StructureCableCorner3Burnt", "hash": 318437449, "desc": ""}, "StructureCableCorner4Burnt": {"name": "StructureCableCorner4Burnt", "hash": 268421361, "desc": ""}, "StructureCableJunction4Burnt": {"name": "StructureCableJunction4Burnt", "hash": -1756896811, "desc": ""}, "StructureCableJunction4HBurnt": {"name": "StructureCableJunction4HBurnt", "hash": -115809132, "desc": ""}, "StructureCableJunction5Burnt": {"name": "StructureCableJunction5Burnt", "hash": 1545286256, "desc": ""}, "StructureCableJunction6Burnt": {"name": "StructureCableJunction6Burnt", "hash": -628145954, "desc": ""}, "StructureCableJunction6HBurnt": {"name": "StructureCableJunction6HBurnt", "hash": 1854404029, "desc": ""}, "StructureCableCornerBurnt": {"name": "StructureCableCornerBurnt", "hash": -177220914, "desc": ""}, "StructureCableCornerHBurnt": {"name": "StructureCableCornerHBurnt", "hash": 1931412811, "desc": ""}, "StructureCableJunctionBurnt": {"name": "StructureCableJunctionBurnt", "hash": -1620686196, "desc": ""}, "StructureCableJunctionHBurnt": {"name": "StructureCableJunctionHBurnt", "hash": -341365649, "desc": ""}, "StructureCableStraightHBurnt": {"name": "StructureCableStraightHBurnt", "hash": 2085762089, "desc": ""}, "StructureCableStraightBurnt": {"name": "StructureCableStraightBurnt", "hash": -1196981113, "desc": ""}, "StructureCableCorner4HBurnt": {"name": "StructureCableCorner4HBurnt", "hash": -981223316, "desc": ""}, "StructureCableJunctionH5Burnt": {"name": "StructureCableJunctionH5Burnt", "hash": 1701593300, "desc": ""}, "StructureLogicButton": {"name": "StructureLogicButton", "hash": 491845673, "desc": "", "logic": {"Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureCableCorner3": {"name": "StructureCableCorner3", "hash": 980469101, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableCorner4": {"name": "StructureCableCorner4", "hash": -1542172466, "desc": ""}, "StructureCableJunction4": {"name": "StructureCableJunction4", "hash": 1112047202, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableJunction5": {"name": "StructureCableJunction5", "hash": 894390004, "desc": ""}, "StructureCableJunction6": {"name": "StructureCableJunction6", "hash": -1404690610, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableCorner": {"name": "StructureCableCorner", "hash": -889269388, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableJunction": {"name": "StructureCableJunction", "hash": -175342021, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableStraight": {"name": "StructureCableStraight", "hash": 605357050, "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "StructureCableAnalysizer": {"name": "StructureCableAnalysizer", "hash": 1036015121, "desc": "", "logic": {"PowerPotential": "Read", "PowerActual": "Read", "PowerRequired": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"]}}, "ItemCableCoil": {"name": "ItemCableCoil", "hash": -466050668, "desc": "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, 'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer's network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."}, "ItemCableCoilHeavy": {"name": "ItemCableCoilHeavy", "hash": 2060134443, "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."}, "StructureCamera": {"name": "StructureCamera", "hash": -342072665, "desc": "Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you're not.", "logic": {"Mode": "ReadWrite", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["PowerAndData", "None"]}}, "CircuitboardCameraDisplay": {"name": "CircuitboardCameraDisplay", "hash": -412104504, "desc": "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera."}, "ItemGasCanisterEmpty": {"name": "ItemGasCanisterEmpty", "hash": 42280099, "desc": "The\u00c2\u00a0portable\u00c2\u00a0Gas Canister\u00c2\u00a0is\u00c2\u00a0the\u00c2\u00a0Stationeer's\u00c2\u00a0basic\u00c2\u00a0unit\u00c2\u00a0of\u00c2\u00a0gas\u00c2\u00a0delivery.\u00c2\u00a0Rated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0standard\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80 atmospheres),\u00c2\u00a0empty\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to a \nPortable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'.\u00c2\u00a0Contains\u00c2\u00a064L\u00c2\u00a0of\u00c2\u00a0gas."}, "ItemGasCanisterCarbonDioxide": {"name": "ItemGasCanisterCarbonDioxide", "hash": -767685874, "desc": "When fabricated, the Carbon Dioxide Gas Canister is filled a pressure of 8000kPa (80 atmospheres) and colored default grey. Used as a secondary fuel in the Jetpack Basic, it can be mounted to a Portable Gas Tank (Air) or Gas Tank Storage for refill.\nCareful not to over pressurize when refilling, or it may go 'bang'."}, "ItemGasCanisterFuel": {"name": "ItemGasCanisterFuel", "hash": -1014695176, "desc": "The\u00c2\u00a0orange\u00c2\u00a0portable\u00c2\u00a0fuel\u00c2\u00a0Gas Canister\u00c2\u00a0supplies\u00c2\u00a0a\u00c2\u00a064L\u00c2\u00a0mixture\u00c2\u00a0of\u00c2\u00a066%\u00c2\u00a0Volatiles/34%\u00c2\u00a0Oxygen\u00c2\u00a0for\u00c2\u00a0powering\u00c2\u00a0such\u00c2\u00a0items\u00c2\u00a0as\u00c2\u00a0the\u00c2\u00a0Welding Torch\u00c2\u00a0and\u00c2\u00a0the\u00c2\u00a0Portable Generator.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterNitrogen": {"name": "ItemGasCanisterNitrogen", "hash": 2145068424, "desc": "The\u00c2\u00a0green\u00c2\u00a0portable\u00c2\u00a0Nitrogen\u00c2\u00a0Gas Canister\u00c2\u00a0supplies\u00c2\u00a0propellant\u00c2\u00a0for\u00c2\u00a0the\u00c2\u00a0Spacepack\u00c2\u00a0and\u00c2\u00a0the\u00c2\u00a0Hardsuit Jetpack.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterOxygen": {"name": "ItemGasCanisterOxygen", "hash": -1152261938, "desc": "The\u00c2\u00a0white\u00c2\u00a0portable\u00c2\u00a064L\u00c2\u00a0Gas Canister\u00c2\u00a0is\u00c2\u00a0the\u00c2\u00a0Stationeer's\u00c2\u00a0basic\u00c2\u00a0unit\u00c2\u00a0of\u00c2\u00a0Oxygen\u00c2\u00a0delivery.\u00c2\u00a0All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterPollutants": {"name": "ItemGasCanisterPollutants", "hash": -1552586384, "desc": "While this byproduct from smelting - sometimes known simply as 'X' - is a toxin, its specific heat makes it a valuable coolant. All\u00c2\u00a0gas\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Gas Tank (Air)\u00c2\u00a0or\u00c2\u00a0Gas Tank Storage\u00c2\u00a0for\u00c2\u00a0refill.\u00c2\u00a0\nCareful\u00c2\u00a0not\u00c2\u00a0to\u00c2\u00a0pressurize\u00c2\u00a0beyond\u00c2\u00a010MPa,\u00c2\u00a0or\u00c2\u00a0it\u00c2\u00a0may\u00c2\u00a0go\u00c2\u00a0'bang'."}, "ItemGasCanisterVolatiles": {"name": "ItemGasCanisterVolatiles", "hash": -472094806, "desc": ""}, "ItemCannedCondensedMilk": {"name": "ItemCannedCondensedMilk", "hash": -2104175091, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay."}, "ItemCannedEdamame": {"name": "ItemCannedEdamame", "hash": -999714082, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay."}, "ItemFrenchFries": {"name": "ItemFrenchFries", "hash": -57608687, "desc": "Because space would suck without 'em."}, "ItemCannedMushroom": {"name": "ItemCannedMushroom", "hash": -1344601965, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay."}, "ItemCannedPowderedEggs": {"name": "ItemCannedPowderedEggs", "hash": 1161510063, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that's fairly high in nutrition, and does not decay."}, "ItemCannedRicePudding": {"name": "ItemCannedRicePudding", "hash": -1185552595, "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay."}, "CardboardBox": {"name": "CardboardBox", "hash": -1976947556, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}]}, "StructureCargoStorageMedium": {"name": "StructureCargoStorageMedium", "hash": 1151864003, "desc": "", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureCargoStorageSmall": {"name": "StructureCargoStorageSmall", "hash": -1493672123, "desc": "", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "CartridgeAccessController": {"name": "CartridgeAccessController", "hash": -1634532552, "desc": ""}, "CartridgePlantAnalyser": {"name": "CartridgePlantAnalyser", "hash": 1101328282, "desc": ""}, "ItemGasFilterCarbonDioxideInfinite": {"name": "ItemGasFilterCarbonDioxideInfinite", "hash": -185568964, "desc": "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterNitrogenInfinite": {"name": "ItemGasFilterNitrogenInfinite", "hash": 152751131, "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterNitrousOxideInfinite": {"name": "ItemGasFilterNitrousOxideInfinite", "hash": -123934842, "desc": "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterOxygenInfinite": {"name": "ItemGasFilterOxygenInfinite", "hash": -1055451111, "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterPollutantsInfinite": {"name": "ItemGasFilterPollutantsInfinite", "hash": -503738105, "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterVolatilesInfinite": {"name": "ItemGasFilterVolatilesInfinite", "hash": -1916176068, "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "ItemGasFilterWaterInfinite": {"name": "ItemGasFilterWaterInfinite", "hash": -1678456554, "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle."}, "StructureCentrifuge": {"name": "StructureCentrifuge", "hash": 690945935, "desc": "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemCerealBar": {"name": "ItemCerealBar", "hash": 791746840, "desc": "Sustains, without decay. If only all our relationships were so well balanced."}, "StructureChair": {"name": "StructureChair", "hash": 1167659360, "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBacklessDouble": {"name": "StructureChairBacklessDouble", "hash": 1944858936, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBacklessSingle": {"name": "StructureChairBacklessSingle", "hash": 1672275150, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBoothCornerLeft": {"name": "StructureChairBoothCornerLeft", "hash": -367720198, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairBoothMiddle": {"name": "StructureChairBoothMiddle", "hash": 1640720378, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairRectangleDouble": {"name": "StructureChairRectangleDouble", "hash": -1152812099, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairRectangleSingle": {"name": "StructureChairRectangleSingle", "hash": -1425428917, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairThickDouble": {"name": "StructureChairThickDouble", "hash": -1245724402, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "StructureChairThickSingle": {"name": "StructureChairThickSingle", "hash": -1510009608, "desc": "", "slots": [{"name": "Seat", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "ItemCharcoal": {"name": "ItemCharcoal", "hash": 252561409, "desc": "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes."}, "ItemChemLightBlue": {"name": "ItemChemLightBlue", "hash": -772542081, "desc": "A safe and slightly rave-some source of blue light. Snap to activate."}, "ItemChemLightGreen": {"name": "ItemChemLightGreen", "hash": -597479390, "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate."}, "ItemChemLightRed": {"name": "ItemChemLightRed", "hash": -525810132, "desc": "A red glowstick. Snap to activate. Then reach for the lasers."}, "ItemChemLightWhite": {"name": "ItemChemLightWhite", "hash": 1312166823, "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay."}, "ItemChemLightYellow": {"name": "ItemChemLightYellow", "hash": 1224819963, "desc": "Dispel the darkness with this yellow glowstick."}, "ApplianceChemistryStation": {"name": "ApplianceChemistryStation", "hash": 1365789392, "desc": "", "slots": [{"name": "Output", "typ": "None"}]}, "NpcChick": {"name": "NpcChick", "hash": 155856647, "desc": "", "slots": [{"name": "Brain", "typ": "Organ"}]}, "NpcChicken": {"name": "NpcChicken", "hash": 399074198, "desc": "", "slots": [{"name": "Brain", "typ": "Organ"}, {"name": "Lungs", "typ": "Organ"}]}, "StructureChuteCorner": {"name": "StructureChuteCorner", "hash": 1360330136, "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "StructureChuteJunction": {"name": "StructureChuteJunction", "hash": -611232514, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "StructureChuteStraight": {"name": "StructureChuteStraight", "hash": 168307007, "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "StructureChuteWindow": {"name": "StructureChuteWindow", "hash": -607241919, "desc": "Chute's with windows let you see what's passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "StructureChuteBin": {"name": "StructureChuteBin", "hash": -850484480, "desc": "The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper.", "slots": [{"name": "Input", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Output"], "1": ["PowerAndData", "None"]}}, "StructureChuteDigitalFlipFlopSplitterLeft": {"name": "StructureChuteDigitalFlipFlopSplitterLeft", "hash": -810874728, "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SettingOutput": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Chute", "Output2"], "3": ["PowerAndData", "None"]}}, "StructureChuteDigitalFlipFlopSplitterRight": {"name": "StructureChuteDigitalFlipFlopSplitterRight", "hash": 163728359, "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SettingOutput": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Chute", "Output2"], "3": ["PowerAndData", "None"]}}, "StructureChuteDigitalValveLeft": {"name": "StructureChuteDigitalValveLeft", "hash": 648608238, "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "StructureChuteDigitalValveRight": {"name": "StructureChuteDigitalValveRight", "hash": -1337091041, "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Quantity": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "StructureChuteFlipFlopSplitter": {"name": "StructureChuteFlipFlopSplitter", "hash": -1446854725, "desc": "A chute that toggles between two outputs", "slots": [{"name": "Transport Slot", "typ": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureChuteInlet": {"name": "StructureChuteInlet", "hash": -1469588766, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput.", "slots": [{"name": "Import", "typ": "None"}], "logic": {"Lock": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"]}}, "StructureChuteOutlet": {"name": "StructureChuteOutlet", "hash": -1022714809, "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet's origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput.", "slots": [{"name": "Export", "typ": "None"}], "logic": {"Lock": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"], "1": ["Data", "None"]}}, "StructureChuteOverflow": {"name": "StructureChuteOverflow", "hash": 225377225, "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "StructureChuteValve": {"name": "StructureChuteValve", "hash": 434875271, "desc": "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute.", "slots": [{"name": "Transport Slot", "typ": "None"}]}, "ItemCoffeeMug": {"name": "ItemCoffeeMug", "hash": 1800622698, "desc": ""}, "ReagentColorBlue": {"name": "ReagentColorBlue", "hash": 980054869, "desc": ""}, "ReagentColorGreen": {"name": "ReagentColorGreen", "hash": 120807542, "desc": ""}, "ReagentColorOrange": {"name": "ReagentColorOrange", "hash": -400696159, "desc": ""}, "ReagentColorRed": {"name": "ReagentColorRed", "hash": 1998377961, "desc": ""}, "ReagentColorYellow": {"name": "ReagentColorYellow", "hash": 635208006, "desc": ""}, "StructureCombustionCentrifuge": {"name": "StructureCombustionCentrifuge", "hash": 1238905683, "desc": "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine's RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t ", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionLimiter": "ReadWrite", "Throttle": "ReadWrite", "Rpm": "Read", "Stress": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"], "5": ["Pipe", "Output"]}}, "MotherboardComms": {"name": "MotherboardComms", "hash": -337075633, "desc": "When placed in a Computer and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land."}, "StructureCompositeCladdingAngledCornerInnerLongL": {"name": "StructureCompositeCladdingAngledCornerInnerLongL", "hash": 947705066, "desc": ""}, "StructureCompositeCladdingAngledCornerInnerLongR": {"name": "StructureCompositeCladdingAngledCornerInnerLongR", "hash": -1032590967, "desc": ""}, "StructureCompositeCladdingAngledCornerInnerLong": {"name": "StructureCompositeCladdingAngledCornerInnerLong", "hash": -1417912632, "desc": ""}, "StructureCompositeCladdingAngledCornerInner": {"name": "StructureCompositeCladdingAngledCornerInner", "hash": -1841871763, "desc": ""}, "StructureCompositeCladdingAngledCorner": {"name": "StructureCompositeCladdingAngledCorner", "hash": -69685069, "desc": ""}, "StructureCompositeCladdingAngled": {"name": "StructureCompositeCladdingAngled", "hash": -1513030150, "desc": ""}, "StructureCompositeCladdingCylindricalPanel": {"name": "StructureCompositeCladdingCylindricalPanel", "hash": 1077151132, "desc": ""}, "StructureCompositeCladdingCylindrical": {"name": "StructureCompositeCladdingCylindrical", "hash": 212919006, "desc": ""}, "StructureCompositeCladdingAngledCornerLong": {"name": "StructureCompositeCladdingAngledCornerLong", "hash": 850558385, "desc": ""}, "StructureCompositeCladdingAngledCornerLongR": {"name": "StructureCompositeCladdingAngledCornerLongR", "hash": -348918222, "desc": ""}, "StructureCompositeCladdingAngledLong": {"name": "StructureCompositeCladdingAngledLong", "hash": -387546514, "desc": ""}, "StructureCompositeCladdingPanel": {"name": "StructureCompositeCladdingPanel", "hash": 1997436771, "desc": ""}, "StructureCompositeCladdingRoundedCornerInner": {"name": "StructureCompositeCladdingRoundedCornerInner", "hash": 110184667, "desc": ""}, "StructureCompositeCladdingRoundedCorner": {"name": "StructureCompositeCladdingRoundedCorner", "hash": 1951525046, "desc": ""}, "StructureCompositeCladdingRounded": {"name": "StructureCompositeCladdingRounded", "hash": -259357734, "desc": ""}, "StructureCompositeCladdingSphericalCap": {"name": "StructureCompositeCladdingSphericalCap", "hash": 534213209, "desc": ""}, "StructureCompositeCladdingSphericalCorner": {"name": "StructureCompositeCladdingSphericalCorner", "hash": 1751355139, "desc": ""}, "StructureCompositeCladdingSpherical": {"name": "StructureCompositeCladdingSpherical", "hash": 139107321, "desc": ""}, "StructureCompositeDoor": {"name": "StructureCompositeDoor", "hash": -793837322, "desc": "Recurso's composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureCompositeFloorGrating": {"name": "StructureCompositeFloorGrating", "hash": 324868581, "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings."}, "StructureCompositeFloorGrating2": {"name": "StructureCompositeFloorGrating2", "hash": -895027741, "desc": ""}, "StructureCompositeFloorGrating3": {"name": "StructureCompositeFloorGrating3", "hash": -1113471627, "desc": ""}, "StructureCompositeFloorGrating4": {"name": "StructureCompositeFloorGrating4", "hash": 600133846, "desc": ""}, "StructureCompositeFloorGratingOpen": {"name": "StructureCompositeFloorGratingOpen", "hash": 2109695912, "desc": ""}, "StructureCompositeFloorGratingOpenRotated": {"name": "StructureCompositeFloorGratingOpenRotated", "hash": 882307910, "desc": ""}, "CompositeRollCover": {"name": "CompositeRollCover", "hash": 1228794916, "desc": "0.Operate\n1.Logic", "logic": {"Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureCompositeWall": {"name": "StructureCompositeWall", "hash": 1237302061, "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties."}, "StructureCompositeWall02": {"name": "StructureCompositeWall02", "hash": 718343384, "desc": ""}, "StructureCompositeWall03": {"name": "StructureCompositeWall03", "hash": 1574321230, "desc": ""}, "StructureCompositeWall04": {"name": "StructureCompositeWall04", "hash": -1011701267, "desc": ""}, "StructureCompositeWindow": {"name": "StructureCompositeWindow", "hash": -2060571986, "desc": "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer's focus on form over function."}, "StructureComputer": {"name": "StructureComputer", "hash": -626563514, "desc": "In some ways a relic, the 'Chonk R1' was designed by severely conflicted Norsec technicians, who needed a unit that could operate with a wide range of motherboards, while also enduring the worst a new Cadet could throw at it.\nThe result is a machine described by some as 'the only PC likely to survive our collision with a black hole', while other, less appreciative users regard it as sharing most of its technological DNA with a cheese grater.\nCompatible motherboards:\n- Logic Motherboard\n- Manufacturing Motherboard\n- Sorter Motherboard\n- Communications Motherboard\n- IC Editor Motherboard", "slots": [{"name": "Data Disk", "typ": "DataDisk"}, {"name": "Data Disk", "typ": "DataDisk"}, {"name": "Motherboard", "typ": "Motherboard"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureCondensationChamber": {"name": "StructureCondensationChamber", "hash": 1420719315, "desc": "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input2"], "1": ["Pipe", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Data", "None"], "4": ["Power", "Input"]}}, "StructureCondensationValve": {"name": "StructureCondensationValve", "hash": -965741795, "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["Pipe", "Input"]}}, "ItemCookedCondensedMilk": {"name": "ItemCookedCondensedMilk", "hash": 1715917521, "desc": "A high-nutrient cooked food, which can be canned."}, "CartridgeConfiguration": {"name": "CartridgeConfiguration", "hash": -932136011, "desc": ""}, "StructureConsole": {"name": "StructureConsole", "hash": 235638270, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "typ": "Circuitboard"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleDual": {"name": "StructureConsoleDual", "hash": -722284333, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "typ": "Circuitboard"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureConsoleMonitor": {"name": "StructureConsoleMonitor", "hash": 801677497, "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", "slots": [{"name": "Circuit Board", "typ": "Circuitboard"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureCrateMount": {"name": "StructureCrateMount", "hash": -733500083, "desc": "", "slots": [{"name": "Container Slot", "typ": "None"}]}, "StructureControlChair": {"name": "StructureControlChair", "hash": -1961153710, "desc": "Once, these chairs were the heart of space-going behemoths. Now, they're items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch.", "slots": [{"name": "Entity", "typ": "Entity"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemCookedCorn": {"name": "ItemCookedCorn", "hash": 1344773148, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedMushroom": {"name": "ItemCookedMushroom", "hash": -1076892658, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedPumpkin": {"name": "ItemCookedPumpkin", "hash": 1849281546, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedRice": {"name": "ItemCookedRice", "hash": 2013539020, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedSoybean": {"name": "ItemCookedSoybean", "hash": 1353449022, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCookedTomato": {"name": "ItemCookedTomato", "hash": -709086714, "desc": "A high-nutrient cooked food, which can be canned."}, "ItemCorn": {"name": "ItemCorn", "hash": 258339687, "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light."}, "SeedBag_Corn": {"name": "SeedBag_Corn", "hash": -1290755415, "desc": "Grow a Corn."}, "ItemCornSoup": {"name": "ItemCornSoup", "hash": 545034114, "desc": "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay."}, "StructureCornerLocker": {"name": "StructureCornerLocker", "hash": -1968255729, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5], "OccupantHash": [0, 1, 2, 3, 4, 5], "Quantity": [0, 1, 2, 3, 4, 5], "Damage": [0, 1, 2, 3, 4, 5], "Class": [0, 1, 2, 3, 4, 5], "MaxQuantity": [0, 1, 2, 3, 4, 5], "PrefabHash": [0, 1, 2, 3, 4, 5], "SortingClass": [0, 1, 2, 3, 4, 5], "ReferenceId": [0, 1, 2, 3, 4, 5]}}, "StructurePassthroughHeatExchangerGasToGas": {"name": "StructurePassthroughHeatExchangerGasToGas", "hash": -1674187440, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"], "2": ["Pipe", "Output"], "3": ["Pipe", "Output2"]}}, "StructurePassthroughHeatExchangerGasToLiquid": {"name": "StructurePassthroughHeatExchangerGasToLiquid", "hash": 1928991265, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["Pipe", "Output"], "3": ["PipeLiquid", "Output2"]}}, "StructurePassthroughHeatExchangerLiquidToLiquid": {"name": "StructurePassthroughHeatExchangerLiquidToLiquid", "hash": -1472829583, "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["PipeLiquid", "Output"], "3": ["PipeLiquid", "Output2"]}}, "CrateMkII": {"name": "CrateMkII", "hash": 8709219, "desc": "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}]}, "ItemCreditCard": {"name": "ItemCreditCard", "hash": -1756772618, "desc": ""}, "ItemCrowbar": {"name": "ItemCrowbar", "hash": 856108234, "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise."}, "StructureCryoTubeHorizontal": {"name": "StructureCryoTubeHorizontal", "hash": 1443059329, "desc": "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureCryoTubeVertical": {"name": "StructureCryoTubeVertical", "hash": -1381321828, "desc": "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureCryoTube": {"name": "StructureCryoTube", "hash": 1938254586, "desc": "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology.", "slots": [{"name": "Bed", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"], "2": ["Power", "None"]}}, "ItemFilterFern": {"name": "ItemFilterFern", "hash": 266654416, "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant."}, "ItemDataDisk": {"name": "ItemDataDisk", "hash": 1005843700, "desc": ""}, "StructureDaylightSensor": {"name": "StructureDaylightSensor", "hash": 1076425094, "desc": "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it.", "logic": {"Mode": "ReadWrite", "Activate": "ReadWrite", "Horizontal": "Read", "Vertical": "Read", "SolarAngle": "Read", "On": "ReadWrite", "PrefabHash": "Read", "SolarIrradiance": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Horizontal", "2": "Vertical"}, "conn": {"0": ["PowerAndData", "None"]}}, "DecayedFood": {"name": "DecayedFood", "hash": 1531087544, "desc": "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n"}, "StructureDeepMiner": {"name": "StructureDeepMiner", "hash": 265720906, "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", "slots": [{"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Output"], "1": ["Data", "None"], "2": ["Power", "None"]}}, "DeviceStepUnit": {"name": "DeviceStepUnit", "hash": 1762696475, "desc": "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Volume": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "C-2", "1": "C#-2", "2": "D-2", "3": "D#-2", "4": "E-2", "5": "F-2", "6": "F#-2", "7": "G-2", "8": "G#-2", "9": "A-2", "10": "A#-2", "11": "B-2", "12": "C-1", "13": "C#-1", "14": "D-1", "15": "D#-1", "16": "E-1", "17": "F-1", "18": "F#-1", "19": "G-1", "20": "G#-1", "21": "A-1", "22": "A#-1", "23": "B-1", "24": "C0", "25": "C#0", "26": "D0", "27": "D#0", "28": "E0", "29": "F0", "30": "F#0", "31": "G0", "32": "G#0", "33": "A0", "34": "A#0", "35": "B0", "36": "C1", "37": "C#1", "38": "D1", "39": "D#1", "40": "E1", "41": "F1", "42": "F#1", "43": "G1", "44": "G#1", "45": "A1", "46": "A#1", "47": "B1", "48": "C2", "49": "C#2", "50": "D2", "51": "D#2", "52": "E2", "53": "F2", "54": "F#2", "55": "G2", "56": "G#2", "57": "A2", "58": "A#2", "59": "B2", "60": "C3", "61": "C#3", "62": "D3", "63": "D#3", "64": "E3", "65": "F3", "66": "F#3", "67": "G3", "68": "G#3", "69": "A3", "70": "A#3", "71": "B3", "72": "C4", "73": "C#4", "74": "D4", "75": "D#4", "76": "E4", "77": "F4", "78": "F#4", "79": "G4", "80": "G#4", "81": "A4", "82": "A#4", "83": "B4", "84": "C5", "85": "C#5", "86": "D5", "87": "D#5", "88": "E5", "89": "F5", "90": "F#5", "91": "G5 ", "92": "G#5", "93": "A5", "94": "A#5", "95": "B5", "96": "C6", "97": "C#6", "98": "D6", "99": "D#6", "100": "E6", "101": "F6", "102": "F#6", "103": "G6", "104": "G#6", "105": "A6", "106": "A#6", "107": "B6", "108": "C7", "109": "C#7", "110": "D7", "111": "D#7", "112": "E7", "113": "F7", "114": "F#7", "115": "G7", "116": "G#7", "117": "A7", "118": "A#7", "119": "B7", "120": "C8", "121": "C#8", "122": "D8", "123": "D#8", "124": "E8", "125": "F8", "126": "F#8", "127": "G8"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureLogicDial": {"name": "StructureLogicDial", "hash": 554524804, "desc": "An assignable dial with up to 1000 modes.", "logic": {"Mode": "ReadWrite", "Setting": "ReadWrite", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"]}}, "StructureDigitalValve": {"name": "StructureDigitalValve", "hash": -1280984102, "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input"], "2": ["PowerAndData", "None"]}}, "StructureDiodeSlide": {"name": "StructureDiodeSlide", "hash": 576516101, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemDirtCanister": {"name": "ItemDirtCanister", "hash": 902565329, "desc": "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs."}, "ItemDirtyOre": {"name": "ItemDirtyOre", "hash": -1234745580, "desc": "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet's surface. "}, "ItemSpaceOre": {"name": "ItemSpaceOre", "hash": 2131916219, "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores."}, "ItemDisposableBatteryCharger": {"name": "ItemDisposableBatteryCharger", "hash": -2124435700, "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery."}, "StructureDockPortSide": {"name": "StructureDockPortSide", "hash": -137465079, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"], "1": ["Data", "None"]}}, "CircuitboardDoorControl": {"name": "CircuitboardDoorControl", "hash": 855694771, "desc": "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors."}, "StructureSleeperVerticalDroid": {"name": "StructureSleeperVerticalDroid", "hash": 1382098999, "desc": "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemDuctTape": {"name": "ItemDuctTape", "hash": -1943134693, "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."}, "DynamicCrate": {"name": "DynamicCrate", "hash": 1941079206, "desc": "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it's both standard issue and critical kit for cadets and Commanders alike.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}]}, "DynamicGasCanisterRocketFuel": {"name": "DynamicGasCanisterRocketFuel", "hash": -8883951, "desc": "", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "ItemFertilizedEgg": {"name": "ItemFertilizedEgg", "hash": -383972371, "desc": "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable."}, "ItemEggCarton": {"name": "ItemEggCarton", "hash": -524289310, "desc": "Within, eggs reside in mysterious, marmoreal silence.", "slots": [{"name": "", "typ": "Egg"}, {"name": "", "typ": "Egg"}, {"name": "", "typ": "Egg"}, {"name": "", "typ": "Egg"}, {"name": "", "typ": "Egg"}, {"name": "", "typ": "Egg"}]}, "StructureElectrolyzer": {"name": "StructureElectrolyzer", "hash": -1668992663, "desc": "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water's latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it's that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas.", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "ItemElectronicParts": {"name": "ItemElectronicParts", "hash": 731250882, "desc": ""}, "ElectronicPrinterMod": {"name": "ElectronicPrinterMod", "hash": -311170652, "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructureElectronicsPrinter": {"name": "StructureElectronicsPrinter", "hash": 1307165496, "desc": "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ElevatorCarrage": {"name": "ElevatorCarrage", "hash": -110788403, "desc": ""}, "StructureElevatorLevelIndustrial": {"name": "StructureElevatorLevelIndustrial", "hash": 2060648791, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"]}}, "StructureElevatorLevelFront": {"name": "StructureElevatorLevelFront", "hash": -827912235, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureElevatorShaftIndustrial": {"name": "StructureElevatorShaftIndustrial", "hash": 1998354978, "desc": "", "logic": {"ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"]}}, "StructureElevatorShaft": {"name": "StructureElevatorShaft", "hash": 826144419, "desc": "", "logic": {"Power": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ElevatorSpeed": "ReadWrite", "ElevatorLevel": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Elevator", "None"], "1": ["Elevator", "None"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemEmergencyAngleGrinder": {"name": "ItemEmergencyAngleGrinder", "hash": -351438780, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyArcWelder": {"name": "ItemEmergencyArcWelder", "hash": -1056029600, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyCrowbar": {"name": "ItemEmergencyCrowbar", "hash": 976699731, "desc": ""}, "ItemEmergencyDrill": {"name": "ItemEmergencyDrill", "hash": -2052458905, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemEmergencyEvaSuit": {"name": "ItemEmergencyEvaSuit", "hash": 1791306431, "desc": "", "slots": [{"name": "Air Tank", "typ": "GasCanister"}, {"name": "Waste Tank", "typ": "GasCanister"}, {"name": "Life Support", "typ": "Battery"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}]}, "ItemEmergencyPickaxe": {"name": "ItemEmergencyPickaxe", "hash": -1061510408, "desc": ""}, "ItemEmergencyScrewdriver": {"name": "ItemEmergencyScrewdriver", "hash": 266099983, "desc": ""}, "ItemEmergencySpaceHelmet": {"name": "ItemEmergencySpaceHelmet", "hash": 205916793, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemEmergencyToolBelt": {"name": "ItemEmergencyToolBelt", "hash": 1661941301, "desc": "", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}]}, "ItemEmergencyWireCutters": {"name": "ItemEmergencyWireCutters", "hash": 2102803952, "desc": ""}, "ItemEmergencyWrench": {"name": "ItemEmergencyWrench", "hash": 162553030, "desc": ""}, "ItemEmptyCan": {"name": "ItemEmptyCan", "hash": 1013818348, "desc": "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay."}, "ItemPlantEndothermic_Creative": {"name": "ItemPlantEndothermic_Creative", "hash": -1159179557, "desc": ""}, "WeaponPistolEnergy": {"name": "WeaponPistolEnergy", "hash": -385323479, "desc": "0.Stun\n1.Kill", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Stun", "1": "Kill"}}, "WeaponRifleEnergy": {"name": "WeaponRifleEnergy", "hash": 1154745374, "desc": "0.Stun\n1.Kill", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Stun", "1": "Kill"}}, "StructureEngineMountTypeA1": {"name": "StructureEngineMountTypeA1", "hash": 2035781224, "desc": ""}, "EntityChick": {"name": "EntityChick", "hash": 1730165908, "desc": "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "typ": "Organ"}]}, "EntityChickenBrown": {"name": "EntityChickenBrown", "hash": 334097180, "desc": "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "typ": "Organ"}]}, "EntityChickenWhite": {"name": "EntityChickenWhite", "hash": 1010807532, "desc": "It's a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", "slots": [{"name": "Brain", "typ": "Organ"}]}, "EntityRoosterBlack": {"name": "EntityRoosterBlack", "hash": 966959649, "desc": "This is a rooster. It is black. There is dignity in this.", "slots": [{"name": "Brain", "typ": "Organ"}]}, "EntityRoosterBrown": {"name": "EntityRoosterBrown", "hash": -583103395, "desc": "The common brown rooster. Don't let it hear you say that.", "slots": [{"name": "Brain", "typ": "Organ"}]}, "ItemEvaSuit": {"name": "ItemEvaSuit", "hash": 1677018918, "desc": "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide.", "slots": [{"name": "Air Tank", "typ": "GasCanister"}, {"name": "Waste Tank", "typ": "GasCanister"}, {"name": "Life Support", "typ": "Battery"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}]}, "StructureEvaporationChamber": {"name": "StructureEvaporationChamber", "hash": -1429782576, "desc": "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input2"], "1": ["Pipe", "Output"], "2": ["PipeLiquid", "Input"], "3": ["Data", "None"], "4": ["Power", "Input"]}}, "StructureExpansionValve": {"name": "StructureExpansionValve", "hash": 195298587, "desc": "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["PipeLiquid", "Input"]}}, "StructureFairingTypeA1": {"name": "StructureFairingTypeA1", "hash": 1622567418, "desc": ""}, "StructureFairingTypeA2": {"name": "StructureFairingTypeA2", "hash": -104908736, "desc": ""}, "StructureFairingTypeA3": {"name": "StructureFairingTypeA3", "hash": -1900541738, "desc": ""}, "ItemFern": {"name": "ItemFern", "hash": 892110467, "desc": "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes."}, "SeedBag_Fern": {"name": "SeedBag_Fern", "hash": -1990600883, "desc": "Grow a Fern."}, "Fertilizer": {"name": "Fertilizer", "hash": 1517856652, "desc": "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer's affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. "}, "ItemGasFilterCarbonDioxide": {"name": "ItemGasFilterCarbonDioxide", "hash": 1635000764, "desc": "Given humanity's obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit's waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available."}, "ItemGasFilterNitrogen": {"name": "ItemGasFilterNitrogen", "hash": 632853248, "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere."}, "ItemGasFilterNitrousOxide": {"name": "ItemGasFilterNitrousOxide", "hash": -1247674305, "desc": ""}, "ItemGasFilterOxygen": {"name": "ItemGasFilterOxygen", "hash": -721824748, "desc": "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber)."}, "ItemGasFilterPollutants": {"name": "ItemGasFilterPollutants", "hash": 1915566057, "desc": "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale."}, "ItemGasFilterVolatiles": {"name": "ItemGasFilterVolatiles", "hash": 15011598, "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys."}, "ItemGasFilterWater": {"name": "ItemGasFilterWater", "hash": -1993197973, "desc": "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)"}, "StructureFiltration": {"name": "StructureFiltration", "hash": -348054045, "desc": "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n", "slots": [{"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "PressureOutput2": "Read", "TemperatureOutput2": "Read", "RatioOxygenOutput2": "Read", "RatioCarbonDioxideOutput2": "Read", "RatioNitrogenOutput2": "Read", "RatioPollutantOutput2": "Read", "RatioVolatilesOutput2": "Read", "RatioWaterOutput2": "Read", "RatioNitrousOxideOutput2": "Read", "TotalMolesOutput2": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "CombustionOutput2": "Read", "ReferenceId": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Waste"], "4": ["Power", "None"]}}, "FireArmSMG": {"name": "FireArmSMG", "hash": -86315541, "desc": "0.Single\n1.Auto", "slots": [{"name": "", "typ": "Magazine"}], "modes": {"0": "Single", "1": "Auto"}}, "ItemReusableFireExtinguisher": {"name": "ItemReusableFireExtinguisher", "hash": -1773192190, "desc": "Requires a canister filled with any inert liquid to opperate.", "slots": [{"name": "Liquid Canister", "typ": "LiquidCanister"}]}, "Flag_ODA_10m": {"name": "Flag_ODA_10m", "hash": 1845441951, "desc": ""}, "Flag_ODA_4m": {"name": "Flag_ODA_4m", "hash": 1159126354, "desc": ""}, "Flag_ODA_6m": {"name": "Flag_ODA_6m", "hash": 1998634960, "desc": ""}, "Flag_ODA_8m": {"name": "Flag_ODA_8m", "hash": -375156130, "desc": ""}, "FlareGun": {"name": "FlareGun", "hash": 118685786, "desc": "", "slots": [{"name": "Magazine", "typ": "Flare"}, {"name": "", "typ": "Blocked"}]}, "StructureFlashingLight": {"name": "StructureFlashingLight", "hash": -1535893860, "desc": "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: 'Default Yellow Flashing Light'.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemFlashlight": {"name": "ItemFlashlight", "hash": -838472102, "desc": "A flashlight with a narrow and wide beam options.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Low Power", "1": "High Power"}}, "ItemFlour": {"name": "ItemFlour", "hash": -665995854, "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."}, "ItemFlowerBlue": {"name": "ItemFlowerBlue", "hash": -1573623434, "desc": ""}, "ItemFlowerGreen": {"name": "ItemFlowerGreen", "hash": -1513337058, "desc": ""}, "ItemFlowerOrange": {"name": "ItemFlowerOrange", "hash": -1411986716, "desc": ""}, "ItemFlowerRed": {"name": "ItemFlowerRed", "hash": -81376085, "desc": ""}, "ItemFlowerYellow": {"name": "ItemFlowerYellow", "hash": 1712822019, "desc": ""}, "ItemFries": {"name": "ItemFries", "hash": 1371786091, "desc": ""}, "StructureFridgeBig": {"name": "StructureFridgeBig", "hash": 958476921, "desc": "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureFridgeSmall": {"name": "StructureFridgeSmall", "hash": 751887598, "desc": "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Pipe", "Input"]}}, "StructureFurnace": {"name": "StructureFurnace", "hash": 1947944864, "desc": "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Open": "ReadWrite", "Mode": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "RecipeHash": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Pipe", "Input"], "3": ["Pipe", "Output"], "4": ["PipeLiquid", "Output2"], "5": ["Data", "None"]}}, "StructureCableFuse100k": {"name": "StructureCableFuse100k", "hash": 281380789, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse1k": {"name": "StructureCableFuse1k", "hash": -1103727120, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse50k": {"name": "StructureCableFuse50k", "hash": -349716617, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureCableFuse5k": {"name": "StructureCableFuse5k", "hash": -631590668, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureFuselageTypeA1": {"name": "StructureFuselageTypeA1", "hash": 1033024712, "desc": ""}, "StructureFuselageTypeA2": {"name": "StructureFuselageTypeA2", "hash": -1533287054, "desc": ""}, "StructureFuselageTypeA4": {"name": "StructureFuselageTypeA4", "hash": 1308115015, "desc": ""}, "StructureFuselageTypeC5": {"name": "StructureFuselageTypeC5", "hash": 147395155, "desc": ""}, "CartridgeGPS": {"name": "CartridgeGPS", "hash": -1957063345, "desc": ""}, "ItemGasCanisterNitrousOxide": {"name": "ItemGasCanisterNitrousOxide", "hash": -1712153401, "desc": ""}, "ItemGasCanisterSmart": {"name": "ItemGasCanisterSmart", "hash": -668314371, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureMediumRocketGasFuelTank": {"name": "StructureMediumRocketGasFuelTank", "hash": -1093860567, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "Output"], "1": ["Pipe", "Input"]}}, "StructureCapsuleTankGas": {"name": "StructureCapsuleTankGas", "hash": -1385712131, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "CircuitboardGasDisplay": {"name": "CircuitboardGasDisplay", "hash": -82343730, "desc": "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor)."}, "StructureGasGenerator": {"name": "StructureGasGenerator", "hash": 1165997963, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PowerGeneration": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "StructureGasMixer": {"name": "StructureGasMixer", "hash": 2104106366, "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input2"], "2": ["Pipe", "Input"], "3": ["PowerAndData", "None"]}}, "StructureGasSensor": {"name": "StructureGasSensor", "hash": -1252983604, "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"]}}, "DynamicGasTankAdvanced": {"name": "DynamicGasTankAdvanced", "hash": -386375420, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Gas Canister", "typ": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureGasTankStorage": {"name": "StructureGasTankStorage", "hash": 1632165346, "desc": "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister.", "slots": [{"name": "Gas Canister", "typ": "GasCanister"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Pressure": [0], "Temperature": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "Volume": [0], "Open": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureSolidFuelGenerator": {"name": "StructureSolidFuelGenerator", "hash": 813146305, "desc": "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle.", "slots": [{"name": "Input", "typ": "Ore"}], "logic": {"Lock": "ReadWrite", "On": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Not Generating", "1": "Generating"}, "conn": {"0": ["Chute", "Input"], "1": ["Data", "None"], "2": ["Power", "Output"]}}, "StructureGlassDoor": {"name": "StructureGlassDoor", "hash": -324331872, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemGlassSheets": {"name": "ItemGlassSheets", "hash": 1588896491, "desc": "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures."}, "ItemGlasses": {"name": "ItemGlasses", "hash": -1068925231, "desc": ""}, "CircuitboardGraphDisplay": {"name": "CircuitboardGraphDisplay", "hash": 1344368806, "desc": ""}, "DynamicGPR": {"name": "DynamicGPR", "hash": -2085885850, "desc": "The Recurso Ground Penetrating Radar (GPR), when used in conjunction with either a Ore Scanner or a Ore Scanner (Color) placed in a Handheld Tablet, allows a Stationeer to maximize mining yields and save time gathering resources to complete their mission by displaying hidden ores in the terrain. \n\nInsert a cartridge or color scanner into the tablet, then press the activate button on the GPR to scan the surroundings. The data will be displayed on the tablet.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureGrowLight": {"name": "StructureGrowLight", "hash": -1758710260, "desc": "Agrizero's leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. ", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "CartridgeGuide": {"name": "CartridgeGuide", "hash": 872720793, "desc": ""}, "H2Combustor": {"name": "H2Combustor", "hash": 1840108251, "desc": "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with.", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "ItemHEMDroidRepairKit": {"name": "ItemHEMDroidRepairKit", "hash": 470636008, "desc": "Repairs damaged HEM-Droids to full health."}, "ItemPlantThermogenic_Genepool1": {"name": "ItemPlantThermogenic_Genepool1", "hash": -177792789, "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant."}, "ItemPlantThermogenic_Genepool2": {"name": "ItemPlantThermogenic_Genepool2", "hash": 1819167057, "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant."}, "ItemDrill": {"name": "ItemDrill", "hash": 2009673399, "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemGrenade": {"name": "ItemGrenade", "hash": 1544275894, "desc": "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word 'grenade' is derived from the Old French word for 'pomegranate', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff."}, "Handgun": {"name": "Handgun", "hash": 247238062, "desc": "", "slots": [{"name": "Magazine", "typ": "Magazine"}]}, "HandgunMagazine": {"name": "HandgunMagazine", "hash": 1254383185, "desc": ""}, "ItemScanner": {"name": "ItemScanner", "hash": 1661270830, "desc": "A mysterious piece of technology, rumored to have Zrillian origins."}, "ItemTablet": {"name": "ItemTablet", "hash": -229808600, "desc": "The Xigo handheld 'Padi' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Cartridge", "typ": "Cartridge"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}}, "ItemHardMiningBackPack": {"name": "ItemHardMiningBackPack", "hash": 900366130, "desc": "", "slots": [{"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}]}, "ItemHardSuit": {"name": "ItemHardSuit", "hash": -1758310454, "desc": "Connects to Logic Transmitter", "slots": [{"name": "Air Tank", "typ": "GasCanister"}, {"name": "Waste Tank", "typ": "GasCanister"}, {"name": "Life Support", "typ": "Battery"}, {"name": "Programmable Chip", "typ": "ProgrammableChip"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}, {"name": "Filter", "typ": "GasFilter"}], "logic": {"Power": "Read", "Error": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "PressureExternal": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "PressureSetting": "ReadWrite", "TemperatureSetting": "ReadWrite", "TemperatureExternal": "Read", "Filtration": "ReadWrite", "AirRelease": "ReadWrite", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "VelocityMagnitude": "Read", "VelocityRelativeX": "Read", "VelocityRelativeY": "Read", "VelocityRelativeZ": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "ForwardX": "Read", "ForwardY": "Read", "ForwardZ": "Read", "Orientation": "Read", "VelocityX": "Read", "VelocityY": "Read", "VelocityZ": "Read", "EntityState": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7], "Damage": [0, 1, 2, 3, 4, 5, 6, 7], "Pressure": [0, 1], "Temperature": [0, 1], "Charge": [2], "ChargeRatio": [2], "Class": [0, 1, 2, 3, 4, 5, 6, 7], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7], "FilterType": [4, 5, 6, 7], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7]}}, "ItemHardBackpack": {"name": "ItemHardBackpack", "hash": 374891127, "desc": "This backpack can be useful when you are working inside and don't need to fly around.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}}, "ItemHardsuitHelmet": {"name": "ItemHardsuitHelmet", "hash": -84573099, "desc": "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It's perfect for enduring harsh environments like Venus and Vulcan.", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemHardJetpack": {"name": "ItemHardJetpack", "hash": -412551656, "desc": "The Norsec jetpack isn't 'technically' a jetpack at all, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "typ": "GasCanister"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "StructureHarvie": {"name": "StructureHarvie", "hash": 958056199, "desc": "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it's modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export.", "slots": [{"name": "Import", "typ": "Plant"}, {"name": "Export", "typ": "None"}, {"name": "Hand", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Plant": "Write", "Harvest": "Write", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Idle", "1": "Happy", "2": "UnHappy", "3": "Dead"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["PowerAndData", "None"]}}, "CircuitboardHashDisplay": {"name": "CircuitboardHashDisplay", "hash": 1633074601, "desc": ""}, "ItemHat": {"name": "ItemHat", "hash": 299189339, "desc": "As the name suggests, this is a hat."}, "ItemCropHay": {"name": "ItemCropHay", "hash": 215486157, "desc": ""}, "ItemWearLamp": {"name": "ItemWearLamp", "hash": -598730959, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureHeatExchangerGastoGas": {"name": "StructureHeatExchangerGastoGas", "hash": 21266291, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Pipe", "Output"]}}, "StructureHeatExchangerLiquidtoLiquid": {"name": "StructureHeatExchangerLiquidtoLiquid", "hash": -613784254, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["PipeLiquid", "Output"]}}, "StructureHeatExchangeLiquidtoGas": {"name": "StructureHeatExchangeLiquidtoGas", "hash": 944685608, "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PipeLiquid", "Input"], "3": ["PipeLiquid", "Output"]}}, "StructureCableCornerH3": {"name": "StructureCableCornerH3", "hash": -1843379322, "desc": ""}, "StructureCableJunctionH": {"name": "StructureCableJunctionH", "hash": 469451637, "desc": ""}, "StructureCableCornerH4": {"name": "StructureCableCornerH4", "hash": 205837861, "desc": ""}, "StructureCableJunctionH4": {"name": "StructureCableJunctionH4", "hash": -742234680, "desc": ""}, "StructureCableJunctionH5": {"name": "StructureCableJunctionH5", "hash": -1530571426, "desc": ""}, "StructureCableJunctionH6": {"name": "StructureCableJunctionH6", "hash": 1036780772, "desc": ""}, "StructureCableCornerH": {"name": "StructureCableCornerH", "hash": -39359015, "desc": ""}, "StructureCableStraightH": {"name": "StructureCableStraightH", "hash": -146200530, "desc": ""}, "ItemGasFilterCarbonDioxideL": {"name": "ItemGasFilterCarbonDioxideL", "hash": 1876847024, "desc": ""}, "ItemGasFilterNitrogenL": {"name": "ItemGasFilterNitrogenL", "hash": -1387439451, "desc": ""}, "ItemGasFilterNitrousOxideL": {"name": "ItemGasFilterNitrousOxideL", "hash": 465267979, "desc": ""}, "ItemGasFilterOxygenL": {"name": "ItemGasFilterOxygenL", "hash": -1217998945, "desc": ""}, "ItemGasFilterPollutantsL": {"name": "ItemGasFilterPollutantsL", "hash": 1959564765, "desc": ""}, "ItemGasFilterVolatilesL": {"name": "ItemGasFilterVolatilesL", "hash": 1255156286, "desc": ""}, "ItemGasFilterWaterL": {"name": "ItemGasFilterWaterL", "hash": 2004969680, "desc": ""}, "ItemHighVolumeGasCanisterEmpty": {"name": "ItemHighVolumeGasCanisterEmpty", "hash": 998653377, "desc": ""}, "ItemHorticultureBelt": {"name": "ItemHorticultureBelt", "hash": -1117581553, "desc": "", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}]}, "HumanSkull": {"name": "HumanSkull", "hash": -857713709, "desc": ""}, "StructureHydraulicPipeBender": {"name": "StructureHydraulicPipeBender", "hash": -1888248335, "desc": "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureHydroponicsTrayData": {"name": "StructureHydroponicsTrayData", "hash": -1841632400, "desc": "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems.", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Fertiliser", "typ": "Plant"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Efficiency": [0], "Health": [0], "Growth": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "Mature": [0], "PrefabHash": [0, 1], "Seeding": [0], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"], "2": ["Data", "None"]}}, "StructureHydroponicsStation": {"name": "StructureHydroponicsStation", "hash": 1441767298, "desc": "", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7], "Damage": [0, 1, 2, 3, 4, 5, 6, 7], "Efficiency": [0, 1, 2, 3, 4, 5, 6, 7], "Health": [0, 1, 2, 3, 4, 5, 6, 7], "Growth": [0, 1, 2, 3, 4, 5, 6, 7], "Class": [0, 1, 2, 3, 4, 5, 6, 7], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7], "Mature": [0, 1, 2, 3, 4, 5, 6, 7], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["PipeLiquid", "Input"]}}, "StructureHydroponicsTray": {"name": "StructureHydroponicsTray", "hash": 1464854517, "desc": "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie.", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Fertiliser", "typ": "Plant"}]}, "MotherboardProgrammableChip": {"name": "MotherboardProgrammableChip", "hash": -161107071, "desc": "When placed in a Computer, the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing."}, "StructureCircuitHousing": {"name": "StructureCircuitHousing", "hash": -128473777, "desc": "", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "LineNumber": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "LineNumber": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "Input"], "1": ["Power", "None"]}}, "ItemNitrice": {"name": "ItemNitrice", "hash": -1499471529, "desc": "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small."}, "ItemOxite": {"name": "ItemOxite", "hash": -1805394113, "desc": "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen."}, "ItemVolatiles": {"name": "ItemVolatiles", "hash": 1253102035, "desc": "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity's sake, these are often displayed as H2 by devices like the Atmos Analyzer.\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n"}, "ItemIce": {"name": "ItemIce", "hash": 1217489948, "desc": "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas."}, "StructureIceCrusher": {"name": "StructureIceCrusher", "hash": 443849486, "desc": "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch.", "slots": [{"name": "Import", "typ": "Ore"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Chute", "Input"], "3": ["Pipe", "Output"], "4": ["PipeLiquid", "Output2"]}}, "StructureIgniter": {"name": "StructureIgniter", "hash": 1005491513, "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", "logic": {"On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureEmergencyButton": {"name": "StructureEmergencyButton", "hash": 1668452680, "desc": "Description coming.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureInLineTankGas1x2": {"name": "StructureInLineTankGas1x2", "hash": 35149429, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankLiquid1x2": {"name": "StructureInLineTankLiquid1x2", "hash": -1183969663, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankGas1x1": {"name": "StructureInLineTankGas1x1", "hash": -1693382705, "desc": "A small expansion tank that increases the volume of a pipe network."}, "StructureInLineTankLiquid1x1": {"name": "StructureInLineTankLiquid1x1", "hash": 543645499, "desc": "A small expansion tank that increases the volume of a pipe network."}, "ItemAstroloyIngot": {"name": "ItemAstroloyIngot", "hash": 412924554, "desc": "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel."}, "ItemConstantanIngot": {"name": "ItemConstantanIngot", "hash": 1058547521, "desc": ""}, "ItemCopperIngot": {"name": "ItemCopperIngot", "hash": -404336834, "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items."}, "ItemElectrumIngot": {"name": "ItemElectrumIngot", "hash": 502280180, "desc": ""}, "ItemGoldIngot": {"name": "ItemGoldIngot", "hash": 226410516, "desc": "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as 'cut-price space exploration' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. "}, "ItemHastelloyIngot": {"name": "ItemHastelloyIngot", "hash": 1579842814, "desc": ""}, "ItemInconelIngot": {"name": "ItemInconelIngot", "hash": -787796599, "desc": ""}, "ItemInvarIngot": {"name": "ItemInvarIngot", "hash": -297990285, "desc": ""}, "ItemIronIngot": {"name": "ItemIronIngot", "hash": -1301215609, "desc": "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items."}, "ItemLeadIngot": {"name": "ItemLeadIngot", "hash": 2134647745, "desc": ""}, "ItemNickelIngot": {"name": "ItemNickelIngot", "hash": -1406385572, "desc": ""}, "ItemSiliconIngot": {"name": "ItemSiliconIngot", "hash": -290196476, "desc": ""}, "ItemSilverIngot": {"name": "ItemSilverIngot", "hash": -929742000, "desc": ""}, "ItemSolderIngot": {"name": "ItemSolderIngot", "hash": -82508479, "desc": ""}, "ItemSteelIngot": {"name": "ItemSteelIngot", "hash": -654790771, "desc": "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting."}, "ItemStelliteIngot": {"name": "ItemStelliteIngot", "hash": -1897868623, "desc": ""}, "ItemWaspaloyIngot": {"name": "ItemWaspaloyIngot", "hash": 156348098, "desc": ""}, "StructureInsulatedPipeLiquidCrossJunction": {"name": "StructureInsulatedPipeLiquidCrossJunction", "hash": 1926651727, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction4": {"name": "StructureInsulatedPipeLiquidCrossJunction4", "hash": 363303270, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction5": {"name": "StructureInsulatedPipeLiquidCrossJunction5", "hash": 1654694384, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCrossJunction6": {"name": "StructureInsulatedPipeLiquidCrossJunction6", "hash": -72748982, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidCorner": {"name": "StructureInsulatedPipeLiquidCorner", "hash": 1713710802, "desc": "Liquid piping with very low temperature loss or gain."}, "StructurePipeInsulatedLiquidCrossJunction": {"name": "StructurePipeInsulatedLiquidCrossJunction", "hash": -2068497073, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidStraight": {"name": "StructureInsulatedPipeLiquidStraight", "hash": 295678685, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureInsulatedPipeLiquidTJunction": {"name": "StructureInsulatedPipeLiquidTJunction", "hash": -532384855, "desc": "Liquid piping with very low temperature loss or gain."}, "StructureLiquidTankBigInsulated": {"name": "StructureLiquidTankBigInsulated", "hash": -1430440215, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidTankSmallInsulated": {"name": "StructureLiquidTankSmallInsulated", "hash": 608607718, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructurePassiveVentInsulated": {"name": "StructurePassiveVentInsulated", "hash": 1363077139, "desc": ""}, "StructureInsulatedPipeCrossJunction3": {"name": "StructureInsulatedPipeCrossJunction3", "hash": 1328210035, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction4": {"name": "StructureInsulatedPipeCrossJunction4", "hash": -783387184, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction5": {"name": "StructureInsulatedPipeCrossJunction5", "hash": -1505147578, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction6": {"name": "StructureInsulatedPipeCrossJunction6", "hash": 1061164284, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCorner": {"name": "StructureInsulatedPipeCorner", "hash": -1967711059, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeCrossJunction": {"name": "StructureInsulatedPipeCrossJunction", "hash": -92778058, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeStraight": {"name": "StructureInsulatedPipeStraight", "hash": 2134172356, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedPipeTJunction": {"name": "StructureInsulatedPipeTJunction", "hash": -2076086215, "desc": "Insulated pipes greatly reduce heat loss from gases stored in them."}, "StructureInsulatedTankConnector": {"name": "StructureInsulatedTankConnector", "hash": -31273349, "desc": "", "slots": [{"name": "", "typ": "None"}]}, "StructureInsulatedTankConnectorLiquid": {"name": "StructureInsulatedTankConnectorLiquid", "hash": -1602030414, "desc": "", "slots": [{"name": "Portable Slot", "typ": "None"}]}, "ItemInsulation": {"name": "ItemInsulation", "hash": 897176943, "desc": "Mysterious in the extreme, the function of this item is lost to the ages."}, "ItemIntegratedCircuit10": {"name": "ItemIntegratedCircuit10", "hash": -744098481, "desc": "", "logic": {"LineNumber": "Read", "ReferenceId": "Read"}}, "StructureInteriorDoorGlass": {"name": "StructureInteriorDoorGlass", "hash": -2096421875, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorPadded": {"name": "StructureInteriorDoorPadded", "hash": 847461335, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorPaddedThin": {"name": "StructureInteriorDoorPaddedThin", "hash": 1981698201, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureInteriorDoorTriangle": {"name": "StructureInteriorDoorTriangle", "hash": -1182923101, "desc": "0.Operate\n1.Logic", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "StructureFrameIron": {"name": "StructureFrameIron", "hash": -1240951678, "desc": ""}, "ItemIronFrames": {"name": "ItemIronFrames", "hash": 1225836666, "desc": ""}, "ItemIronSheets": {"name": "ItemIronSheets", "hash": -487378546, "desc": ""}, "StructureWallIron": {"name": "StructureWallIron", "hash": 1287324802, "desc": ""}, "StructureWallIron02": {"name": "StructureWallIron02", "hash": 1485834215, "desc": ""}, "StructureWallIron03": {"name": "StructureWallIron03", "hash": 798439281, "desc": ""}, "StructureWallIron04": {"name": "StructureWallIron04", "hash": -1309433134, "desc": ""}, "StructureCompositeWindowIron": {"name": "StructureCompositeWindowIron", "hash": -688284639, "desc": ""}, "ItemJetpackBasic": {"name": "ItemJetpackBasic", "hash": 1969189000, "desc": "The basic CHAC jetpack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "typ": "GasCanister"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "UniformOrangeJumpSuit": {"name": "UniformOrangeJumpSuit", "hash": 810053150, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "Access Card", "typ": "AccessCard"}, {"name": "Credit Card", "typ": "CreditCard"}]}, "ItemKitAIMeE": {"name": "ItemKitAIMeE", "hash": 496830914, "desc": ""}, "ItemKitAccessBridge": {"name": "ItemKitAccessBridge", "hash": 513258369, "desc": ""}, "ItemActiveVent": {"name": "ItemActiveVent", "hash": -842048328, "desc": "When constructed, this kit places an Active Vent on any support structure."}, "ItemKitAdvancedComposter": {"name": "ItemKitAdvancedComposter", "hash": -1431998347, "desc": ""}, "ItemKitAdvancedFurnace": {"name": "ItemKitAdvancedFurnace", "hash": -616758353, "desc": ""}, "ItemKitAdvancedPackagingMachine": {"name": "ItemKitAdvancedPackagingMachine", "hash": -598545233, "desc": ""}, "ItemKitAirlock": {"name": "ItemKitAirlock", "hash": 964043875, "desc": ""}, "ItemKitArcFurnace": {"name": "ItemKitArcFurnace", "hash": -98995857, "desc": ""}, "ItemKitWallArch": {"name": "ItemKitWallArch", "hash": 1625214531, "desc": ""}, "ItemKitAtmospherics": {"name": "ItemKitAtmospherics", "hash": 1222286371, "desc": ""}, "ItemKitAutolathe": {"name": "ItemKitAutolathe", "hash": -1753893214, "desc": ""}, "ItemKitHydroponicAutomated": {"name": "ItemKitHydroponicAutomated", "hash": -927931558, "desc": ""}, "ItemKitAutomatedOven": {"name": "ItemKitAutomatedOven", "hash": -1931958659, "desc": ""}, "ItemKitAutoMinerSmall": {"name": "ItemKitAutoMinerSmall", "hash": 1668815415, "desc": ""}, "ItemKitRocketAvionics": {"name": "ItemKitRocketAvionics", "hash": 1396305045, "desc": ""}, "ItemKitChute": {"name": "ItemKitChute", "hash": 1025254665, "desc": ""}, "ItemKitBasket": {"name": "ItemKitBasket", "hash": 148305004, "desc": ""}, "ItemBatteryCharger": {"name": "ItemBatteryCharger", "hash": -1866880307, "desc": "This kit produces a 5-slot Kit (Battery Charger)."}, "ItemKitBatteryLarge": {"name": "ItemKitBatteryLarge", "hash": -21225041, "desc": ""}, "ItemKitBattery": {"name": "ItemKitBattery", "hash": 1406656973, "desc": ""}, "ItemKitBeacon": {"name": "ItemKitBeacon", "hash": 249073136, "desc": ""}, "ItemKitBeds": {"name": "ItemKitBeds", "hash": -1241256797, "desc": ""}, "ItemKitBlastDoor": {"name": "ItemKitBlastDoor", "hash": -1755116240, "desc": ""}, "ItemCableAnalyser": {"name": "ItemCableAnalyser", "hash": -1792787349, "desc": ""}, "ItemCableFuse": {"name": "ItemCableFuse", "hash": 195442047, "desc": ""}, "ItemGasTankStorage": {"name": "ItemGasTankStorage", "hash": -2113012215, "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister."}, "ItemKitCentrifuge": {"name": "ItemKitCentrifuge", "hash": 578182956, "desc": ""}, "ItemKitChairs": {"name": "ItemKitChairs", "hash": -1394008073, "desc": ""}, "ItemKitChuteUmbilical": {"name": "ItemKitChuteUmbilical", "hash": -876560854, "desc": ""}, "ItemKitCompositeCladding": {"name": "ItemKitCompositeCladding", "hash": -1470820996, "desc": ""}, "KitStructureCombustionCentrifuge": {"name": "KitStructureCombustionCentrifuge", "hash": 231903234, "desc": ""}, "ItemKitComputer": {"name": "ItemKitComputer", "hash": 1990225489, "desc": ""}, "ItemKitConsole": {"name": "ItemKitConsole", "hash": -1241851179, "desc": ""}, "ItemKitCrateMount": {"name": "ItemKitCrateMount", "hash": -551612946, "desc": ""}, "ItemKitPassthroughHeatExchanger": {"name": "ItemKitPassthroughHeatExchanger", "hash": 636112787, "desc": ""}, "ItemKitCrateMkII": {"name": "ItemKitCrateMkII", "hash": -1585956426, "desc": ""}, "ItemKitCrate": {"name": "ItemKitCrate", "hash": 429365598, "desc": ""}, "ItemRTG": {"name": "ItemRTG", "hash": 495305053, "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG)."}, "ItemKitCryoTube": {"name": "ItemKitCryoTube", "hash": -545234195, "desc": ""}, "ItemKitDeepMiner": {"name": "ItemKitDeepMiner", "hash": -1935075707, "desc": ""}, "ItemPipeDigitalValve": {"name": "ItemPipeDigitalValve", "hash": -1532448832, "desc": "This kit creates a Digital Valve."}, "ItemKitDockingPort": {"name": "ItemKitDockingPort", "hash": 77421200, "desc": ""}, "ItemKitDoor": {"name": "ItemKitDoor", "hash": 168615924, "desc": ""}, "ItemKitDrinkingFountain": {"name": "ItemKitDrinkingFountain", "hash": -1743663875, "desc": ""}, "ItemKitElectronicsPrinter": {"name": "ItemKitElectronicsPrinter", "hash": -1181922382, "desc": ""}, "ItemKitElevator": {"name": "ItemKitElevator", "hash": -945806652, "desc": ""}, "ItemKitEngineLarge": {"name": "ItemKitEngineLarge", "hash": 755302726, "desc": ""}, "ItemKitEngineMedium": {"name": "ItemKitEngineMedium", "hash": 1969312177, "desc": ""}, "ItemKitEngineSmall": {"name": "ItemKitEngineSmall", "hash": 19645163, "desc": ""}, "ItemFlashingLight": {"name": "ItemFlashingLight", "hash": -2107840748, "desc": ""}, "ItemKitWallFlat": {"name": "ItemKitWallFlat", "hash": -846838195, "desc": ""}, "ItemKitCompositeFloorGrating": {"name": "ItemKitCompositeFloorGrating", "hash": 1182412869, "desc": ""}, "ItemKitFridgeBig": {"name": "ItemKitFridgeBig", "hash": -1168199498, "desc": ""}, "ItemKitFridgeSmall": {"name": "ItemKitFridgeSmall", "hash": 1661226524, "desc": ""}, "ItemKitFurnace": {"name": "ItemKitFurnace", "hash": -806743925, "desc": ""}, "ItemKitFurniture": {"name": "ItemKitFurniture", "hash": 1162905029, "desc": ""}, "ItemKitFuselage": {"name": "ItemKitFuselage", "hash": -366262681, "desc": ""}, "ItemKitGasGenerator": {"name": "ItemKitGasGenerator", "hash": 377745425, "desc": ""}, "ItemPipeGasMixer": {"name": "ItemPipeGasMixer", "hash": -1134459463, "desc": "This kit creates a Gas Mixer."}, "ItemGasSensor": {"name": "ItemGasSensor", "hash": 1717593480, "desc": ""}, "ItemKitGasUmbilical": {"name": "ItemKitGasUmbilical", "hash": -1867280568, "desc": ""}, "ItemKitWallGeometry": {"name": "ItemKitWallGeometry", "hash": -784733231, "desc": ""}, "ItemKitGrowLight": {"name": "ItemKitGrowLight", "hash": 341030083, "desc": ""}, "ItemKitAirlockGate": {"name": "ItemKitAirlockGate", "hash": 682546947, "desc": ""}, "ItemKitHarvie": {"name": "ItemKitHarvie", "hash": -1022693454, "desc": ""}, "ItemKitHydraulicPipeBender": {"name": "ItemKitHydraulicPipeBender", "hash": -2098556089, "desc": ""}, "ItemKitHydroponicStation": {"name": "ItemKitHydroponicStation", "hash": 2057179799, "desc": ""}, "ItemHydroponicTray": {"name": "ItemHydroponicTray", "hash": -1193543727, "desc": "This kits creates a Hydroponics Tray for growing various plants."}, "ItemKitLogicCircuit": {"name": "ItemKitLogicCircuit", "hash": 1512322581, "desc": ""}, "ItemKitIceCrusher": {"name": "ItemKitIceCrusher", "hash": 288111533, "desc": ""}, "ItemIgniter": {"name": "ItemIgniter", "hash": 890106742, "desc": "This kit creates an Kit (Igniter) unit."}, "ItemKitInsulatedLiquidPipe": {"name": "ItemKitInsulatedLiquidPipe", "hash": 2067655311, "desc": ""}, "ItemKitLiquidTankInsulated": {"name": "ItemKitLiquidTankInsulated", "hash": 617773453, "desc": ""}, "ItemPassiveVentInsulated": {"name": "ItemPassiveVentInsulated", "hash": -1397583760, "desc": ""}, "ItemKitInsulatedPipe": {"name": "ItemKitInsulatedPipe", "hash": 452636699, "desc": ""}, "ItemKitInteriorDoors": {"name": "ItemKitInteriorDoors", "hash": 1935945891, "desc": ""}, "ItemKitWallIron": {"name": "ItemKitWallIron", "hash": -524546923, "desc": ""}, "ItemKitLadder": {"name": "ItemKitLadder", "hash": 489494578, "desc": ""}, "ItemKitLandingPadAtmos": {"name": "ItemKitLandingPadAtmos", "hash": 1817007843, "desc": ""}, "ItemKitLandingPadBasic": {"name": "ItemKitLandingPadBasic", "hash": 293581318, "desc": ""}, "ItemKitLandingPadWaypoint": {"name": "ItemKitLandingPadWaypoint", "hash": -1267511065, "desc": ""}, "ItemKitLargeDirectHeatExchanger": {"name": "ItemKitLargeDirectHeatExchanger", "hash": 450164077, "desc": ""}, "ItemKitLargeExtendableRadiator": {"name": "ItemKitLargeExtendableRadiator", "hash": 847430620, "desc": ""}, "ItemKitLargeSatelliteDish": {"name": "ItemKitLargeSatelliteDish", "hash": -2039971217, "desc": ""}, "ItemKitLaunchMount": {"name": "ItemKitLaunchMount", "hash": -1854167549, "desc": ""}, "ItemWallLight": {"name": "ItemWallLight", "hash": 1108423476, "desc": "This kit creates any one of ten Kit (Lights) variants."}, "ItemLiquidTankStorage": {"name": "ItemLiquidTankStorage", "hash": 2037427578, "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."}, "ItemWaterPipeDigitalValve": {"name": "ItemWaterPipeDigitalValve", "hash": 309693520, "desc": ""}, "ItemLiquidDrain": {"name": "ItemLiquidDrain", "hash": 2036225202, "desc": ""}, "ItemLiquidPipeAnalyzer": {"name": "ItemLiquidPipeAnalyzer", "hash": 226055671, "desc": ""}, "ItemWaterPipeMeter": {"name": "ItemWaterPipeMeter", "hash": -90898877, "desc": ""}, "ItemLiquidPipeValve": {"name": "ItemLiquidPipeValve", "hash": -2126113312, "desc": "This kit creates a Liquid Valve."}, "ItemKitPipeLiquid": {"name": "ItemKitPipeLiquid", "hash": -1166461357, "desc": ""}, "ItemPipeLiquidRadiator": {"name": "ItemPipeLiquidRadiator", "hash": -906521320, "desc": "This kit creates a Liquid Pipe Convection Radiator."}, "ItemKitLiquidRegulator": {"name": "ItemKitLiquidRegulator", "hash": 1951126161, "desc": ""}, "ItemKitLiquidTank": {"name": "ItemKitLiquidTank", "hash": -799849305, "desc": ""}, "ItemKitLiquidUmbilical": {"name": "ItemKitLiquidUmbilical", "hash": 1571996765, "desc": ""}, "ItemLiquidPipeVolumePump": {"name": "ItemLiquidPipeVolumePump", "hash": -2106280569, "desc": ""}, "ItemWaterWallCooler": {"name": "ItemWaterWallCooler", "hash": -1721846327, "desc": ""}, "ItemKitLocker": {"name": "ItemKitLocker", "hash": 882301399, "desc": ""}, "ItemKitLogicInputOutput": {"name": "ItemKitLogicInputOutput", "hash": 1997293610, "desc": ""}, "ItemKitLogicMemory": {"name": "ItemKitLogicMemory", "hash": -2098214189, "desc": ""}, "ItemKitLogicProcessor": {"name": "ItemKitLogicProcessor", "hash": 220644373, "desc": ""}, "ItemKitLogicSwitch": {"name": "ItemKitLogicSwitch", "hash": 124499454, "desc": ""}, "ItemKitLogicTransmitter": {"name": "ItemKitLogicTransmitter", "hash": 1005397063, "desc": ""}, "ItemKitPassiveLargeRadiatorLiquid": {"name": "ItemKitPassiveLargeRadiatorLiquid", "hash": 1453961898, "desc": ""}, "ItemKitPassiveLargeRadiatorGas": {"name": "ItemKitPassiveLargeRadiatorGas", "hash": -1752768283, "desc": ""}, "ItemKitSatelliteDish": {"name": "ItemKitSatelliteDish", "hash": 178422810, "desc": ""}, "ItemKitMotherShipCore": {"name": "ItemKitMotherShipCore", "hash": -344968335, "desc": ""}, "ItemKitMusicMachines": {"name": "ItemKitMusicMachines", "hash": -2038889137, "desc": ""}, "ItemKitFlagODA": {"name": "ItemKitFlagODA", "hash": 1701764190, "desc": ""}, "ItemKitHorizontalAutoMiner": {"name": "ItemKitHorizontalAutoMiner", "hash": 844391171, "desc": ""}, "ItemKitWallPadded": {"name": "ItemKitWallPadded", "hash": -821868990, "desc": ""}, "ItemKitEvaporationChamber": {"name": "ItemKitEvaporationChamber", "hash": 1587787610, "desc": ""}, "ItemPipeAnalyizer": {"name": "ItemPipeAnalyizer", "hash": -767597887, "desc": "This kit creates a Pipe Analyzer."}, "ItemPipeIgniter": {"name": "ItemPipeIgniter", "hash": 1366030599, "desc": ""}, "ItemPipeLabel": {"name": "ItemPipeLabel", "hash": 391769637, "desc": "This kit creates a Pipe Label."}, "ItemPipeMeter": {"name": "ItemPipeMeter", "hash": 1207939683, "desc": "This kit creates a Pipe Meter."}, "ItemKitPipeOrgan": {"name": "ItemKitPipeOrgan", "hash": -827125300, "desc": ""}, "ItemKitPipeRadiatorLiquid": {"name": "ItemKitPipeRadiatorLiquid", "hash": -1697302609, "desc": ""}, "ItemKitPipeRadiator": {"name": "ItemKitPipeRadiator", "hash": 920411066, "desc": ""}, "ItemKitPipeUtility": {"name": "ItemKitPipeUtility", "hash": 1934508338, "desc": ""}, "ItemKitPipeUtilityLiquid": {"name": "ItemKitPipeUtilityLiquid", "hash": 595478589, "desc": ""}, "ItemPipeValve": {"name": "ItemPipeValve", "hash": 799323450, "desc": "This kit creates a Valve."}, "ItemKitPipe": {"name": "ItemKitPipe", "hash": -1619793705, "desc": ""}, "ItemKitPlanter": {"name": "ItemKitPlanter", "hash": 119096484, "desc": ""}, "ItemDynamicAirCon": {"name": "ItemDynamicAirCon", "hash": 1072914031, "desc": ""}, "ItemKitDynamicGasTankAdvanced": {"name": "ItemKitDynamicGasTankAdvanced", "hash": 1533501495, "desc": ""}, "ItemKitDynamicCanister": {"name": "ItemKitDynamicCanister", "hash": -1061945368, "desc": ""}, "ItemKitDynamicGenerator": {"name": "ItemKitDynamicGenerator", "hash": -732720413, "desc": ""}, "ItemKitDynamicHydroponics": {"name": "ItemKitDynamicHydroponics", "hash": -1861154222, "desc": ""}, "ItemKitDynamicMKIILiquidCanister": {"name": "ItemKitDynamicMKIILiquidCanister", "hash": -638019974, "desc": ""}, "ItemKitDynamicLiquidCanister": {"name": "ItemKitDynamicLiquidCanister", "hash": 375541286, "desc": ""}, "ItemDynamicScrubber": {"name": "ItemDynamicScrubber", "hash": -971920158, "desc": ""}, "ItemKitPortablesConnector": {"name": "ItemKitPortablesConnector", "hash": 1041148999, "desc": ""}, "ItemPowerConnector": {"name": "ItemPowerConnector", "hash": 839924019, "desc": "This kit creates a Power Connector."}, "ItemAreaPowerControl": {"name": "ItemAreaPowerControl", "hash": 1757673317, "desc": "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow."}, "ItemKitPowerTransmitterOmni": {"name": "ItemKitPowerTransmitterOmni", "hash": -831211676, "desc": ""}, "ItemKitPowerTransmitter": {"name": "ItemKitPowerTransmitter", "hash": 291368213, "desc": ""}, "ItemKitElectricUmbilical": {"name": "ItemKitElectricUmbilical", "hash": 1603046970, "desc": ""}, "ItemKitStandardChute": {"name": "ItemKitStandardChute", "hash": 2133035682, "desc": ""}, "ItemKitPoweredVent": {"name": "ItemKitPoweredVent", "hash": 2015439334, "desc": ""}, "ItemKitPressureFedGasEngine": {"name": "ItemKitPressureFedGasEngine", "hash": -121514007, "desc": ""}, "ItemKitPressureFedLiquidEngine": {"name": "ItemKitPressureFedLiquidEngine", "hash": -99091572, "desc": ""}, "ItemKitRegulator": {"name": "ItemKitRegulator", "hash": 1181371795, "desc": ""}, "ItemKitGovernedGasRocketEngine": {"name": "ItemKitGovernedGasRocketEngine", "hash": 206848766, "desc": ""}, "ItemKitPumpedLiquidEngine": {"name": "ItemKitPumpedLiquidEngine", "hash": 1921918951, "desc": ""}, "ItemRTGSurvival": {"name": "ItemRTGSurvival", "hash": 1817645803, "desc": "This kit creates a Kit (RTG)."}, "ItemPipeRadiator": {"name": "ItemPipeRadiator", "hash": -1796655088, "desc": "This kit creates a Pipe Convection Radiator."}, "ItemKitRailing": {"name": "ItemKitRailing", "hash": 750176282, "desc": ""}, "ItemKitRecycler": {"name": "ItemKitRecycler", "hash": 849148192, "desc": ""}, "ItemKitReinforcedWindows": {"name": "ItemKitReinforcedWindows", "hash": 1459985302, "desc": ""}, "ItemKitRespawnPointWallMounted": {"name": "ItemKitRespawnPointWallMounted", "hash": 1574688481, "desc": ""}, "ItemKitRocketBattery": {"name": "ItemKitRocketBattery", "hash": -314072139, "desc": ""}, "ItemKitRocketCargoStorage": {"name": "ItemKitRocketCargoStorage", "hash": 479850239, "desc": ""}, "ItemKitRocketCelestialTracker": {"name": "ItemKitRocketCelestialTracker", "hash": -303008602, "desc": ""}, "ItemKitRocketCircuitHousing": {"name": "ItemKitRocketCircuitHousing", "hash": 721251202, "desc": ""}, "ItemKitRocketDatalink": {"name": "ItemKitRocketDatalink", "hash": -1256996603, "desc": ""}, "ItemKitRocketGasFuelTank": {"name": "ItemKitRocketGasFuelTank", "hash": -1629347579, "desc": ""}, "ItemKitLaunchTower": {"name": "ItemKitLaunchTower", "hash": -174523552, "desc": ""}, "ItemKitRocketLiquidFuelTank": {"name": "ItemKitRocketLiquidFuelTank", "hash": 2032027950, "desc": ""}, "ItemKitRocketManufactory": {"name": "ItemKitRocketManufactory", "hash": -636127860, "desc": ""}, "ItemKitRocketMiner": {"name": "ItemKitRocketMiner", "hash": -867969909, "desc": ""}, "ItemKitRocketScanner": {"name": "ItemKitRocketScanner", "hash": 1753647154, "desc": ""}, "ItemKitRoverFrame": {"name": "ItemKitRoverFrame", "hash": 1827215803, "desc": ""}, "ItemKitRoverMKI": {"name": "ItemKitRoverMKI", "hash": 197243872, "desc": ""}, "ItemKitSDBHopper": {"name": "ItemKitSDBHopper", "hash": 323957548, "desc": ""}, "KitSDBSilo": {"name": "KitSDBSilo", "hash": 1932952652, "desc": "This kit creates a SDB Silo."}, "ItemKitSecurityPrinter": {"name": "ItemKitSecurityPrinter", "hash": 578078533, "desc": ""}, "ItemKitSensor": {"name": "ItemKitSensor", "hash": -1776897113, "desc": ""}, "ItemKitShower": {"name": "ItemKitShower", "hash": 735858725, "desc": ""}, "ItemKitSign": {"name": "ItemKitSign", "hash": 529996327, "desc": ""}, "ItemKitSleeper": {"name": "ItemKitSleeper", "hash": 326752036, "desc": ""}, "ItemKitSmallDirectHeatExchanger": {"name": "ItemKitSmallDirectHeatExchanger", "hash": -1332682164, "desc": ""}, "ItemFlagSmall": {"name": "ItemFlagSmall", "hash": 2011191088, "desc": ""}, "ItemKitSmallSatelliteDish": {"name": "ItemKitSmallSatelliteDish", "hash": 1960952220, "desc": ""}, "ItemKitSolarPanelBasicReinforced": {"name": "ItemKitSolarPanelBasicReinforced", "hash": -528695432, "desc": ""}, "ItemKitSolarPanelBasic": {"name": "ItemKitSolarPanelBasic", "hash": 844961456, "desc": ""}, "ItemKitSolarPanelReinforced": {"name": "ItemKitSolarPanelReinforced", "hash": -364868685, "desc": ""}, "ItemKitSolarPanel": {"name": "ItemKitSolarPanel", "hash": -1924492105, "desc": ""}, "ItemKitSolidGenerator": {"name": "ItemKitSolidGenerator", "hash": 1293995736, "desc": ""}, "ItemKitSorter": {"name": "ItemKitSorter", "hash": 969522478, "desc": ""}, "ItemKitSpeaker": {"name": "ItemKitSpeaker", "hash": -126038526, "desc": ""}, "ItemKitStacker": {"name": "ItemKitStacker", "hash": 1013244511, "desc": ""}, "ItemKitStairs": {"name": "ItemKitStairs", "hash": 170878959, "desc": ""}, "ItemKitStairwell": {"name": "ItemKitStairwell", "hash": -1868555784, "desc": ""}, "ItemKitStirlingEngine": {"name": "ItemKitStirlingEngine", "hash": -1821571150, "desc": ""}, "ItemKitSuitStorage": {"name": "ItemKitSuitStorage", "hash": 1088892825, "desc": ""}, "ItemKitTables": {"name": "ItemKitTables", "hash": -1361598922, "desc": ""}, "ItemKitTankInsulated": {"name": "ItemKitTankInsulated", "hash": 1021053608, "desc": ""}, "ItemKitTank": {"name": "ItemKitTank", "hash": 771439840, "desc": ""}, "ItemKitGroundTelescope": {"name": "ItemKitGroundTelescope", "hash": -2140672772, "desc": ""}, "ItemKitToolManufactory": {"name": "ItemKitToolManufactory", "hash": 529137748, "desc": ""}, "ItemKitTransformer": {"name": "ItemKitTransformer", "hash": -453039435, "desc": ""}, "ItemKitRocketTransformerSmall": {"name": "ItemKitRocketTransformerSmall", "hash": -932335800, "desc": ""}, "ItemKitTransformerSmall": {"name": "ItemKitTransformerSmall", "hash": 665194284, "desc": ""}, "ItemKitPressurePlate": {"name": "ItemKitPressurePlate", "hash": 123504691, "desc": ""}, "ItemKitTurbineGenerator": {"name": "ItemKitTurbineGenerator", "hash": -1590715731, "desc": ""}, "ItemKitTurboVolumePump": {"name": "ItemKitTurboVolumePump", "hash": -1248429712, "desc": ""}, "ItemKitLiquidTurboVolumePump": {"name": "ItemKitLiquidTurboVolumePump", "hash": -1805020897, "desc": ""}, "ItemKitUprightWindTurbine": {"name": "ItemKitUprightWindTurbine", "hash": -1798044015, "desc": ""}, "ItemKitVendingMachineRefrigerated": {"name": "ItemKitVendingMachineRefrigerated", "hash": -1867508561, "desc": ""}, "ItemKitVendingMachine": {"name": "ItemKitVendingMachine", "hash": -2038384332, "desc": ""}, "ItemPipeVolumePump": {"name": "ItemPipeVolumePump", "hash": -1766301997, "desc": "This kit creates a Volume Pump."}, "ItemWallCooler": {"name": "ItemWallCooler", "hash": -1567752627, "desc": "This kit creates a Wall Cooler."}, "ItemWallHeater": {"name": "ItemWallHeater", "hash": 1880134612, "desc": "This kit creates a Kit (Wall Heater)."}, "ItemKitWall": {"name": "ItemKitWall", "hash": -1826855889, "desc": ""}, "ItemKitWaterBottleFiller": {"name": "ItemKitWaterBottleFiller", "hash": 159886536, "desc": ""}, "ItemKitWaterPurifier": {"name": "ItemKitWaterPurifier", "hash": 611181283, "desc": ""}, "ItemKitWeatherStation": {"name": "ItemKitWeatherStation", "hash": 337505889, "desc": ""}, "ItemKitWindTurbine": {"name": "ItemKitWindTurbine", "hash": -868916503, "desc": ""}, "ItemKitWindowShutter": {"name": "ItemKitWindowShutter", "hash": 1779979754, "desc": ""}, "ItemKitHeatExchanger": {"name": "ItemKitHeatExchanger", "hash": -1710540039, "desc": ""}, "ItemKitPictureFrame": {"name": "ItemKitPictureFrame", "hash": -2062364768, "desc": ""}, "ItemKitResearchMachine": {"name": "ItemKitResearchMachine", "hash": 724776762, "desc": ""}, "KitchenTableShort": {"name": "KitchenTableShort", "hash": -1427415566, "desc": ""}, "KitchenTableSimpleShort": {"name": "KitchenTableSimpleShort", "hash": -78099334, "desc": ""}, "KitchenTableSimpleTall": {"name": "KitchenTableSimpleTall", "hash": -1068629349, "desc": ""}, "KitchenTableTall": {"name": "KitchenTableTall", "hash": -1386237782, "desc": ""}, "StructureKlaxon": {"name": "StructureKlaxon", "hash": -828056979, "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", "logic": {"Power": "Read", "Mode": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Volume": "ReadWrite", "PrefabHash": "Read", "SoundAlert": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "None", "1": "Alarm2", "2": "Alarm3", "3": "Alarm4", "4": "Alarm5", "5": "Alarm6", "6": "Alarm7", "7": "Music1", "8": "Music2", "9": "Music3", "10": "Alarm8", "11": "Alarm9", "12": "Alarm10", "13": "Alarm11", "14": "Alarm12", "15": "Danger", "16": "Warning", "17": "Alert", "18": "StormIncoming", "19": "IntruderAlert", "20": "Depressurising", "21": "Pressurising", "22": "AirlockCycling", "23": "PowerLow", "24": "SystemFailure", "25": "Welcome", "26": "MalfunctionDetected", "27": "HaltWhoGoesThere", "28": "FireFireFire", "29": "One", "30": "Two", "31": "Three", "32": "Four", "33": "Five", "34": "Floor", "35": "RocketLaunching", "36": "LiftOff", "37": "TraderIncoming", "38": "TraderLanded", "39": "PressureHigh", "40": "PressureLow", "41": "TemperatureHigh", "42": "TemperatureLow", "43": "PollutantsDetected", "44": "HighCarbonDioxide", "45": "Alarm1"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureDiode": {"name": "StructureDiode", "hash": 1944485013, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED1x3": {"name": "StructureConsoleLED1x3", "hash": -1949054743, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED1x2": {"name": "StructureConsoleLED1x2", "hash": -53151617, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureConsoleLED5": {"name": "StructureConsoleLED5", "hash": -815193061, "desc": "0.Default\n1.Percent\n2.Power", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Color": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Default", "1": "Percent", "2": "Power"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemLabeller": {"name": "ItemLabeller", "hash": -743968726, "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureLadder": {"name": "StructureLadder", "hash": -415420281, "desc": ""}, "StructureLadderEnd": {"name": "StructureLadderEnd", "hash": 1541734993, "desc": ""}, "StructurePlatformLadderOpen": {"name": "StructurePlatformLadderOpen", "hash": 1559586682, "desc": ""}, "Lander": {"name": "Lander", "hash": 1605130615, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "Entity", "typ": "Entity"}]}, "Landingpad_BlankPiece": {"name": "Landingpad_BlankPiece", "hash": 912453390, "desc": ""}, "Landingpad_2x2CenterPiece01": {"name": "Landingpad_2x2CenterPiece01", "hash": -1295222317, "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors"}, "Landingpad_CenterPiece01": {"name": "Landingpad_CenterPiece01", "hash": 1070143159, "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", "modes": {"0": "None", "1": "NoContact", "2": "Moving", "3": "Holding", "4": "Landed"}}, "Landingpad_CrossPiece": {"name": "Landingpad_CrossPiece", "hash": 1101296153, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_DataConnectionPiece": {"name": "Landingpad_DataConnectionPiece", "hash": -2066405918, "desc": "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land.", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "ContactTypeId": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "modes": {"0": "None", "1": "NoContact", "2": "Moving", "3": "Holding", "4": "Landed"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["LandingPad", "Input"], "3": ["LandingPad", "Input"], "4": ["LandingPad", "Input"]}}, "Landingpad_DiagonalPiece01": {"name": "Landingpad_DiagonalPiece01", "hash": 977899131, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_GasConnectorInwardPiece": {"name": "Landingpad_GasConnectorInwardPiece", "hash": 817945707, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["Pipe", "Input"]}}, "Landingpad_GasConnectorOutwardPiece": {"name": "Landingpad_GasConnectorOutwardPiece", "hash": -1100218307, "desc": "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad's gas storage capacity by adding more Landingpad Gas Storage to the landing pad.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["Pipe", "Output"]}}, "Landingpad_GasCylinderTankPiece": {"name": "Landingpad_GasCylinderTankPiece", "hash": 170818567, "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders."}, "Landingpad_LiquidConnectorInwardPiece": {"name": "Landingpad_LiquidConnectorInwardPiece", "hash": -1216167727, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["PipeLiquid", "Input"]}}, "Landingpad_LiquidConnectorOutwardPiece": {"name": "Landingpad_LiquidConnectorOutwardPiece", "hash": -1788929869, "desc": "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad's liquid storage capacity by adding more Landingpad Gas Storage to the landing pad.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "None"], "4": ["PipeLiquid", "Output"]}}, "Landingpad_StraightPiece01": {"name": "Landingpad_StraightPiece01", "hash": -976273247, "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."}, "Landingpad_TaxiPieceCorner": {"name": "Landingpad_TaxiPieceCorner", "hash": -1872345847, "desc": ""}, "Landingpad_TaxiPieceHold": {"name": "Landingpad_TaxiPieceHold", "hash": 146051619, "desc": ""}, "Landingpad_TaxiPieceStraight": {"name": "Landingpad_TaxiPieceStraight", "hash": -1477941080, "desc": ""}, "Landingpad_ThreshholdPiece": {"name": "Landingpad_ThreshholdPiece", "hash": -1514298582, "desc": "", "logic": {"Power": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["LandingPad", "Input"], "1": ["LandingPad", "Input"], "2": ["LandingPad", "Input"], "3": ["Data", "Input"]}}, "ItemLaptop": {"name": "ItemLaptop", "hash": 141535121, "desc": "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}, {"name": "Battery", "typ": "Battery"}, {"name": "Motherboard", "typ": "Motherboard"}], "logic": {"Power": "Read", "Error": "Read", "PressureExternal": "Read", "On": "ReadWrite", "TemperatureExternal": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Charge": [1], "ChargeRatio": [1], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "ReferenceId": [0, 1, 2]}}, "StructureLargeDirectHeatExchangeLiquidtoLiquid": {"name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", "hash": 792686502, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"]}}, "StructureLargeDirectHeatExchangeGastoGas": {"name": "StructureLargeDirectHeatExchangeGastoGas", "hash": -1230658883, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"]}}, "StructureLargeDirectHeatExchangeGastoLiquid": {"name": "StructureLargeDirectHeatExchangeGastoLiquid", "hash": 1412338038, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Input2"]}}, "StructureLargeExtendableRadiator": {"name": "StructureLargeExtendableRadiator", "hash": -566775170, "desc": "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms.", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"]}}, "StructureLargeHangerDoor": {"name": "StructureLargeHangerDoor", "hash": -1351081801, "desc": "1 x 3 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLargeSatelliteDish": {"name": "StructureLargeSatelliteDish", "hash": 1913391845, "desc": "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureTankBig": {"name": "StructureTankBig", "hash": -1606848156, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureLaunchMount": {"name": "StructureLaunchMount", "hash": -558953231, "desc": "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code."}, "StructureRocketTower": {"name": "StructureRocketTower", "hash": -654619479, "desc": ""}, "StructureLogicSwitch": {"name": "StructureLogicSwitch", "hash": 1220484876, "desc": "", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLightRound": {"name": "StructureLightRound", "hash": 1514476632, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightRoundAngled": {"name": "StructureLightRoundAngled", "hash": 1592905386, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightRoundSmall": {"name": "StructureLightRoundSmall", "hash": 1436121888, "desc": "Description coming.", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemLightSword": {"name": "ItemLightSword", "hash": 1949076595, "desc": "A charming, if useless, pseudo-weapon. (Creative only.)"}, "StructureBackLiquidPressureRegulator": {"name": "StructureBackLiquidPressureRegulator", "hash": 2099900163, "desc": "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "ItemLiquidCanisterEmpty": {"name": "ItemLiquidCanisterEmpty", "hash": -185207387, "desc": "Holds Water, if you have some."}, "ItemLiquidCanisterSmart": {"name": "ItemLiquidCanisterSmart", "hash": 777684475, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemGasCanisterWater": {"name": "ItemGasCanisterWater", "hash": -1854861891, "desc": "The\u00c2\u00a0blue\u00c2\u00a0portable\u00c2\u00a0Water\u00c2\u00a0Gas Canister\u00c2\u00a0has\u00c2\u00a0a\u00c2\u00a064L\u00c2\u00a0capacity,\u00c2\u00a0supplying\u00c2\u00a0Water\u00c2\u00a0to\u00c2\u00a0items\u00c2\u00a0like\u00c2\u00a0the\u00c2\u00a0Portable Hydroponics\u00c2\u00a0unit, or any other connected system.\u00c2\u00a0All\u00c2\u00a0liquid\u00c2\u00a0canisters\u00c2\u00a0are\u00c2\u00a0full\u00c2\u00a0when\u00c2\u00a0fabricated\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0pressure\u00c2\u00a0of\u00c2\u00a08000kPa\u00c2\u00a0(80\u00c2\u00a0atmospheres),\u00c2\u00a0and\u00c2\u00a0can\u00c2\u00a0be\u00c2\u00a0mounted\u00c2\u00a0to\u00c2\u00a0a\u00c2\u00a0Portable Liquid Tank\u00c2\u00a0or\u00c2\u00a0Liquid Tank Storage\u00c2\u00a0for\u00c2\u00a0refill."}, "StructureMediumRocketLiquidFuelTank": {"name": "StructureMediumRocketLiquidFuelTank", "hash": 1143639539, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "Output"], "1": ["PipeLiquid", "Input"]}}, "StructureCapsuleTankLiquid": {"name": "StructureCapsuleTankLiquid", "hash": 1415396263, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureWaterDigitalValve": {"name": "StructureWaterDigitalValve", "hash": -517628750, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["PipeLiquid", "Input"], "2": ["PowerAndData", "None"]}}, "StructurePipeLiquidCrossJunction3": {"name": "StructurePipeLiquidCrossJunction3", "hash": 1628087508, "desc": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction4": {"name": "StructurePipeLiquidCrossJunction4", "hash": -9555593, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction5": {"name": "StructurePipeLiquidCrossJunction5", "hash": -2006384159, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction6": {"name": "StructurePipeLiquidCrossJunction6", "hash": 291524699, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCorner": {"name": "StructurePipeLiquidCorner", "hash": -1856720921, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidCrossJunction": {"name": "StructurePipeLiquidCrossJunction", "hash": 1848735691, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidStraight": {"name": "StructurePipeLiquidStraight", "hash": 667597982, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructurePipeLiquidTJunction": {"name": "StructurePipeLiquidTJunction", "hash": 262616717, "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."}, "StructureLiquidPipeAnalyzer": {"name": "StructureLiquidPipeAnalyzer", "hash": -2113838091, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLiquidPipeRadiator": {"name": "StructureLiquidPipeRadiator", "hash": 2072805863, "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureWaterPipeMeter": {"name": "StructureWaterPipeMeter", "hash": 433184168, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureLiquidTankBig": {"name": "StructureLiquidTankBig", "hash": 1098900430, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureTankConnectorLiquid": {"name": "StructureTankConnectorLiquid", "hash": 1331802518, "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", "slots": [{"name": "Portable Slot", "typ": "None"}]}, "StructureLiquidTankSmall": {"name": "StructureLiquidTankSmall", "hash": 1988118157, "desc": "", "logic": {"Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidTankStorage": {"name": "StructureLiquidTankStorage", "hash": 1691898022, "desc": "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters.", "slots": [{"name": "Liquid Canister", "typ": "LiquidCanister"}], "logic": {"Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Pressure": [0], "Temperature": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "Volume": [0], "Open": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"]}}, "StructureLiquidValve": {"name": "StructureLiquidValve", "hash": 1849974453, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"]}}, "StructureLiquidVolumePump": {"name": "StructureLiquidVolumePump", "hash": -454028979, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Output"], "1": ["PipeLiquid", "Input"], "2": ["PowerAndData", "None"]}}, "StructureLiquidPressureRegulator": {"name": "StructureLiquidPressureRegulator", "hash": 482248766, "desc": "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "StructureWaterWallCooler": {"name": "StructureWaterWallCooler", "hash": -1369060582, "desc": "", "slots": [{"name": "", "typ": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PowerAndData", "None"]}}, "StructureStorageLocker": {"name": "StructureStorageLocker", "hash": -793623899, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]}}, "StructureLockerSmall": {"name": "StructureLockerSmall", "hash": -647164662, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "PrefabHash": [0, 1, 2, 3], "SortingClass": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}}, "StructureLogicCompare": {"name": "StructureLogicCompare", "hash": -1489728908, "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Equals", "1": "Greater", "2": "Less", "3": "NotEquals"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicGate": {"name": "StructureLogicGate", "hash": 1942143074, "desc": "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "AND", "1": "OR", "2": "XOR", "3": "NAND", "4": "NOR", "5": "XNOR"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicHashGen": {"name": "StructureLogicHashGen", "hash": 2077593121, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLogicMath": {"name": "StructureLogicMath", "hash": 1657691323, "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Add", "1": "Subtract", "2": "Multiply", "3": "Divide", "4": "Mod", "5": "Atan2", "6": "Pow", "7": "Log"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicMemory": {"name": "StructureLogicMemory", "hash": -851746783, "desc": "", "logic": {"Setting": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructureLogicMinMax": {"name": "StructureLogicMinMax", "hash": 929022276, "desc": "0.Greater\n1.Less", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Greater", "1": "Less"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "StructureLogicMirror": {"name": "StructureLogicMirror", "hash": 2096189278, "desc": "", "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "MotherboardLogic": {"name": "MotherboardLogic", "hash": 502555944, "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items."}, "StructureLogicReader": {"name": "StructureLogicReader", "hash": -345383640, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicRocketDownlink": {"name": "StructureLogicRocketDownlink", "hash": 876108549, "desc": "", "logic": {"Power": "Read", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "Input"]}}, "StructureLogicSelect": {"name": "StructureLogicSelect", "hash": 1822736084, "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Equals", "1": "Greater", "2": "Less", "3": "NotEquals"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Output"], "3": ["Power", "None"]}}, "LogicStepSequencer8": {"name": "LogicStepSequencer8", "hash": 1531272458, "desc": "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer's BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer.", "slots": [{"name": "Sound Cartridge", "typ": "SoundCartridge"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "ReadWrite", "Bpm": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Whole Note", "1": "Half Note", "2": "Quarter Note", "3": "Eighth Note", "4": "Sixteenth Note"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Power", "Input"]}}, "StructureLogicTransmitter": {"name": "StructureLogicTransmitter", "hash": -693235651, "desc": "Connects to Logic Transmitter", "modes": {"0": "Passive", "1": "Active"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Input"], "2": ["Data", "Input"], "3": ["Power", "None"]}}, "StructureLogicRocketUplink": {"name": "StructureLogicRocketUplink", "hash": 546002924, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "None"]}}, "StructureLogicWriter": {"name": "StructureLogicWriter", "hash": -1326019434, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureLogicWriterSwitch": {"name": "StructureLogicWriterSwitch", "hash": -1321250424, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ForceWrite": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "DeviceLfoVolume": {"name": "DeviceLfoVolume", "hash": -1844430312, "desc": "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You're in space. Make it sound cool.\n\nFor more info, check out the music page.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "ReadWrite", "Bpm": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Whole Note", "1": "Half Note", "2": "Quarter Note", "3": "Eighth Note", "4": "Sixteenth Note"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureManualHatch": {"name": "StructureManualHatch", "hash": -1808154199, "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}}, "ItemMarineBodyArmor": {"name": "ItemMarineBodyArmor", "hash": 1399098998, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}]}, "ItemMarineHelmet": {"name": "ItemMarineHelmet", "hash": 1073631646, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}]}, "UniformMarine": {"name": "UniformMarine", "hash": -48342840, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "Access Card", "typ": "AccessCard"}, {"name": "Credit Card", "typ": "CreditCard"}]}, "StructureLogicMathUnary": {"name": "StructureLogicMathUnary", "hash": -1160020195, "desc": "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Ceil", "1": "Floor", "2": "Abs", "3": "Log", "4": "Exp", "5": "Round", "6": "Rand", "7": "Sqrt", "8": "Sin", "9": "Cos", "10": "Tan", "11": "Asin", "12": "Acos", "13": "Atan", "14": "Not"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "CartridgeMedicalAnalyser": {"name": "CartridgeMedicalAnalyser", "hash": -1116110181, "desc": "When added to the OreCore Handheld Tablet, Asura's's ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users."}, "StructureMediumConvectionRadiator": {"name": "StructureMediumConvectionRadiator", "hash": -1918215845, "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructurePassiveLargeRadiatorGas": {"name": "StructurePassiveLargeRadiatorGas", "hash": 2066977095, "desc": "Has been replaced by Medium Convection Radiator.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureMediumConvectionRadiatorLiquid": {"name": "StructureMediumConvectionRadiatorLiquid", "hash": -1169014183, "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructurePassiveLargeRadiatorLiquid": {"name": "StructurePassiveLargeRadiatorLiquid", "hash": 24786172, "desc": "Has been replaced by Medium Convection Radiator Liquid.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "ItemGasFilterCarbonDioxideM": {"name": "ItemGasFilterCarbonDioxideM", "hash": 416897318, "desc": ""}, "ItemGasFilterNitrogenM": {"name": "ItemGasFilterNitrogenM", "hash": -632657357, "desc": ""}, "ItemGasFilterNitrousOxideM": {"name": "ItemGasFilterNitrousOxideM", "hash": 1824284061, "desc": ""}, "ItemGasFilterOxygenM": {"name": "ItemGasFilterOxygenM", "hash": -1067319543, "desc": ""}, "ItemGasFilterPollutantsM": {"name": "ItemGasFilterPollutantsM", "hash": 63677771, "desc": ""}, "ItemGasFilterVolatilesM": {"name": "ItemGasFilterVolatilesM", "hash": 1037507240, "desc": ""}, "ItemGasFilterWaterM": {"name": "ItemGasFilterWaterM", "hash": 8804422, "desc": ""}, "StructureMediumHangerDoor": {"name": "StructureMediumHangerDoor", "hash": -566348148, "desc": "1 x 2 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureMediumRadiator": {"name": "StructureMediumRadiator", "hash": -975966237, "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureMediumRadiatorLiquid": {"name": "StructureMediumRadiatorLiquid", "hash": -1141760613, "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructureSatelliteDish": {"name": "StructureSatelliteDish", "hash": 439026183, "desc": "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "Meteorite": {"name": "Meteorite", "hash": -99064335, "desc": ""}, "ApplianceMicrowave": {"name": "ApplianceMicrowave", "hash": -1136173965, "desc": "While countless 'better' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don't worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking.", "slots": [{"name": "Output", "typ": "None"}]}, "StructurePowerTransmitterReceiver": {"name": "StructurePowerTransmitterReceiver", "hash": 1195820278, "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Unlinked", "1": "Linked"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Output"]}}, "StructurePowerTransmitter": {"name": "StructurePowerTransmitter", "hash": -65087121, "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PositionX": "Read", "PositionY": "Read", "PositionZ": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Unlinked", "1": "Linked"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "ItemMilk": {"name": "ItemMilk", "hash": 1327248310, "desc": "Full disclosure, it's not actually 'milk', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin."}, "ItemMiningBackPack": {"name": "ItemMiningBackPack", "hash": -1650383245, "desc": "", "slots": [{"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}]}, "ItemMiningBelt": {"name": "ItemMiningBelt", "hash": -676435305, "desc": "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer's mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit.", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}]}, "ItemMiningBeltMKII": {"name": "ItemMiningBeltMKII", "hash": 1470787934, "desc": "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. ", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}, {"name": "Ore", "typ": "Ore"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "ItemMiningCharge": {"name": "ItemMiningCharge", "hash": 15829510, "desc": "A low cost, high yield explosive with a 10 second timer.", "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemMiningDrill": {"name": "ItemMiningDrill", "hash": 1055173191, "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.'", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemMiningDrillHeavy": {"name": "ItemMiningDrillHeavy", "hash": -1663349918, "desc": "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso 'Topo' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemRocketMiningDrillHead": {"name": "ItemRocketMiningDrillHead", "hash": 2109945337, "desc": "Replaceable drill head for Rocket Miner"}, "ItemRocketMiningDrillHeadDurable": {"name": "ItemRocketMiningDrillHeadDurable", "hash": 1530764483, "desc": ""}, "ItemRocketMiningDrillHeadHighSpeedIce": {"name": "ItemRocketMiningDrillHeadHighSpeedIce", "hash": 653461728, "desc": ""}, "ItemRocketMiningDrillHeadHighSpeedMineral": {"name": "ItemRocketMiningDrillHeadHighSpeedMineral", "hash": 1440678625, "desc": ""}, "ItemRocketMiningDrillHeadIce": {"name": "ItemRocketMiningDrillHeadIce", "hash": -380904592, "desc": ""}, "ItemRocketMiningDrillHeadLongTerm": {"name": "ItemRocketMiningDrillHeadLongTerm", "hash": -684020753, "desc": ""}, "ItemRocketMiningDrillHeadMineral": {"name": "ItemRocketMiningDrillHeadMineral", "hash": 1083675581, "desc": ""}, "ItemMKIIAngleGrinder": {"name": "ItemMKIIAngleGrinder", "hash": 240174650, "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIIArcWelder": {"name": "ItemMKIIArcWelder", "hash": -2061979347, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIICrowbar": {"name": "ItemMKIICrowbar", "hash": 1440775434, "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure."}, "ItemMKIIDrill": {"name": "ItemMKIIDrill", "hash": 324791548, "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Activate": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemMKIIDuctTape": {"name": "ItemMKIIDuctTape", "hash": 388774906, "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."}, "ItemMKIIMiningDrill": {"name": "ItemMKIIMiningDrill", "hash": -1875271296, "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.' The MK II is more resistant to temperature and pressure.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Default", "1": "Flatten"}}, "ItemMKIIScrewdriver": {"name": "ItemMKIIScrewdriver", "hash": -2015613246, "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure."}, "ItemMKIIWireCutters": {"name": "ItemMKIIWireCutters", "hash": -178893251, "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools."}, "ItemMKIIWrench": {"name": "ItemMKIIWrench", "hash": 1862001680, "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure."}, "CircuitboardModeControl": {"name": "CircuitboardModeControl", "hash": -1134148135, "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes."}, "MothershipCore": {"name": "MothershipCore", "hash": -1930442922, "desc": "A relic of from an earlier era of space ambition, Sinotai's mothership cores formed the central element of a generation's space-going creations. While Sinotai's pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts."}, "StructureMotionSensor": {"name": "StructureMotionSensor", "hash": -1713470563, "desc": "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on.", "logic": {"Activate": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemMuffin": {"name": "ItemMuffin", "hash": -1864982322, "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin."}, "ItemMushroom": {"name": "ItemMushroom", "hash": 2044798572, "desc": "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it."}, "SeedBag_Mushroom": {"name": "SeedBag_Mushroom", "hash": 311593418, "desc": "Grow a Mushroom."}, "CartridgeNetworkAnalyser": {"name": "CartridgeNetworkAnalyser", "hash": 1606989119, "desc": "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it's used in conjunction with the OreCore Handheld Tablet."}, "ItemNVG": {"name": "ItemNVG", "hash": 982514123, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureNitrolyzer": {"name": "StructureNitrolyzer", "hash": 1898243702, "desc": "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed.", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "PressureInput": "Read", "TemperatureInput": "Read", "RatioOxygenInput": "Read", "RatioCarbonDioxideInput": "Read", "RatioNitrogenInput": "Read", "RatioPollutantInput": "Read", "RatioVolatilesInput": "Read", "RatioWaterInput": "Read", "RatioNitrousOxideInput": "Read", "TotalMolesInput": "Read", "PressureInput2": "Read", "TemperatureInput2": "Read", "RatioOxygenInput2": "Read", "RatioCarbonDioxideInput2": "Read", "RatioNitrogenInput2": "Read", "RatioPollutantInput2": "Read", "RatioVolatilesInput2": "Read", "RatioWaterInput2": "Read", "RatioNitrousOxideInput2": "Read", "TotalMolesInput2": "Read", "PressureOutput": "Read", "TemperatureOutput": "Read", "RatioOxygenOutput": "Read", "RatioCarbonDioxideOutput": "Read", "RatioNitrogenOutput": "Read", "RatioPollutantOutput": "Read", "RatioVolatilesOutput": "Read", "RatioWaterOutput": "Read", "RatioNitrousOxideOutput": "Read", "TotalMolesOutput": "Read", "CombustionInput": "Read", "CombustionInput2": "Read", "CombustionOutput": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Idle", "1": "Active"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Input2"], "3": ["Pipe", "Output"], "4": ["Power", "None"]}}, "StructureHorizontalAutoMiner": {"name": "StructureHorizontalAutoMiner", "hash": 1070427573, "desc": "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureOccupancySensor": {"name": "StructureOccupancySensor", "hash": 322782515, "desc": "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room.", "logic": {"Activate": "Read", "Quantity": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructurePipeOneWayValve": {"name": "StructurePipeOneWayValve", "hash": 1580412404, "desc": "The one way valve moves gas in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.\n", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"]}}, "StructureLiquidPipeOneWayValve": {"name": "StructureLiquidPipeOneWayValve", "hash": -782453061, "desc": "The one way valve moves liquid in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure..", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "ItemCoalOre": {"name": "ItemCoalOre", "hash": 1724793494, "desc": "Humanity wouldn't have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black)."}, "ItemCobaltOre": {"name": "ItemCobaltOre", "hash": -983091249, "desc": "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys."}, "ItemCopperOre": {"name": "ItemCopperOre", "hash": -707307845, "desc": "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires."}, "ItemGoldOre": {"name": "ItemGoldOre", "hash": -1348105509, "desc": "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold's strength is that it does nothing."}, "ItemIronOre": {"name": "ItemIronOre", "hash": 1758427767, "desc": "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s."}, "ItemLeadOre": {"name": "ItemLeadOre", "hash": -190236170, "desc": "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions."}, "ItemNickelOre": {"name": "ItemNickelOre", "hash": 1830218956, "desc": "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys."}, "ItemSiliconOre": {"name": "ItemSiliconOre", "hash": 1103972403, "desc": "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission."}, "ItemSilverOre": {"name": "ItemSilverOre", "hash": -916518678, "desc": "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys."}, "ItemUraniumOre": {"name": "ItemUraniumOre", "hash": -1516581844, "desc": "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named 'nuclear fission', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material."}, "CartridgeOreScanner": {"name": "CartridgeOreScanner", "hash": -1768732546, "desc": "When inserted into a Handheld Tablet and used in conjunction with a Ground Penetrating Radar (GPR), the scanner will display minerals hidden underground on the tablet."}, "CartridgeOreScannerColor": {"name": "CartridgeOreScannerColor", "hash": 1738236580, "desc": "When inserted into a Handheld Tablet and used in conjunction with a Ground Penetrating Radar (GPR), the scanner will display minerals hidden underground in different colors on the tablet.\n\nIron and Nickle = red \nIce, Lead, Cobalt = cyan\nGold and Silver = green\nCoal and Silicon = magenta\nCopper and Oxite = yellow\nVolatiles and Uranium = white"}, "StructureOverheadShortCornerLocker": {"name": "StructureOverheadShortCornerLocker", "hash": -1794932560, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}}, "StructureOverheadShortLocker": {"name": "StructureOverheadShortLocker", "hash": 1468249454, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "AppliancePaintMixer": {"name": "AppliancePaintMixer", "hash": -1339716113, "desc": "", "slots": [{"name": "Output", "typ": "Bottle"}]}, "StructurePassiveLiquidDrain": {"name": "StructurePassiveLiquidDrain", "hash": 1812364811, "desc": "Moves liquids from a pipe network to the world atmosphere.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureFloorDrain": {"name": "StructureFloorDrain", "hash": 1048813293, "desc": "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also."}, "PassiveSpeaker": {"name": "PassiveSpeaker", "hash": 248893646, "desc": "", "logic": {"Volume": "ReadWrite", "PrefabHash": "ReadWrite", "SoundAlert": "ReadWrite", "ReferenceId": "ReadWrite"}, "conn": {"0": ["Data", "Input"]}}, "ItemPassiveVent": {"name": "ItemPassiveVent", "hash": 238631271, "desc": "This kit creates a Passive Vent among other variants."}, "StructurePassiveVent": {"name": "StructurePassiveVent", "hash": 335498166, "desc": "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. "}, "ItemPeaceLily": {"name": "ItemPeaceLily", "hash": 2042955224, "desc": "A fetching lily with greater resistance to cold temperatures."}, "ItemPickaxe": {"name": "ItemPickaxe", "hash": -913649823, "desc": "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe."}, "StructurePictureFrameThickLandscapeLarge": {"name": "StructurePictureFrameThickLandscapeLarge", "hash": -1434523206, "desc": ""}, "StructurePictureFrameThickMountLandscapeLarge": {"name": "StructurePictureFrameThickMountLandscapeLarge", "hash": 950004659, "desc": ""}, "StructurePictureFrameThickMountLandscapeSmall": {"name": "StructurePictureFrameThickMountLandscapeSmall", "hash": 347154462, "desc": ""}, "StructurePictureFrameThickLandscapeSmall": {"name": "StructurePictureFrameThickLandscapeSmall", "hash": -2041566697, "desc": ""}, "StructurePictureFrameThickMountPortraitLarge": {"name": "StructurePictureFrameThickMountPortraitLarge", "hash": -1459641358, "desc": ""}, "StructurePictureFrameThickMountPortraitSmall": {"name": "StructurePictureFrameThickMountPortraitSmall", "hash": -2066653089, "desc": ""}, "StructurePictureFrameThickPortraitLarge": {"name": "StructurePictureFrameThickPortraitLarge", "hash": -1686949570, "desc": ""}, "StructurePictureFrameThickPortraitSmall": {"name": "StructurePictureFrameThickPortraitSmall", "hash": -1218579821, "desc": ""}, "StructurePictureFrameThinLandscapeLarge": {"name": "StructurePictureFrameThinLandscapeLarge", "hash": -1418288625, "desc": ""}, "StructurePictureFrameThinMountLandscapeLarge": {"name": "StructurePictureFrameThinMountLandscapeLarge", "hash": -1146760430, "desc": ""}, "StructurePictureFrameThinMountLandscapeSmall": {"name": "StructurePictureFrameThinMountLandscapeSmall", "hash": -1752493889, "desc": ""}, "StructurePictureFrameThinLandscapeSmall": {"name": "StructurePictureFrameThinLandscapeSmall", "hash": -2024250974, "desc": ""}, "StructurePictureFrameThinMountPortraitLarge": {"name": "StructurePictureFrameThinMountPortraitLarge", "hash": 1094895077, "desc": ""}, "StructurePictureFrameThinPortraitLarge": {"name": "StructurePictureFrameThinPortraitLarge", "hash": 1212777087, "desc": ""}, "StructurePictureFrameThinPortraitSmall": {"name": "StructurePictureFrameThinPortraitSmall", "hash": 1684488658, "desc": ""}, "StructurePictureFrameThinMountPortraitSmall": {"name": "StructurePictureFrameThinMountPortraitSmall", "hash": 1835796040, "desc": ""}, "ItemPillHeal": {"name": "ItemPillHeal", "hash": 1118069417, "desc": "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response."}, "ItemPillStun": {"name": "ItemPillStun", "hash": 418958601, "desc": "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it."}, "StructurePipeCrossJunction3": {"name": "StructurePipeCrossJunction3", "hash": 2038427184, "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction4": {"name": "StructurePipeCrossJunction4", "hash": -417629293, "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction5": {"name": "StructurePipeCrossJunction5", "hash": -1877193979, "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction6": {"name": "StructurePipeCrossJunction6", "hash": 152378047, "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCorner": {"name": "StructurePipeCorner", "hash": -1785673561, "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeCrossJunction": {"name": "StructurePipeCrossJunction", "hash": -1405295588, "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeStraight": {"name": "StructurePipeStraight", "hash": 73728932, "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeTJunction": {"name": "StructurePipeTJunction", "hash": -913817472, "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench."}, "StructurePipeAnalysizer": {"name": "StructurePipeAnalysizer", "hash": 435685051, "desc": "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer via a {Logic system.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "PipeBenderMod": {"name": "PipeBenderMod", "hash": 443947415, "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "StructurePipeRadiator": {"name": "StructurePipeRadiator", "hash": 1696603168, "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeCowl": {"name": "StructurePipeCowl", "hash": 465816159, "desc": ""}, "ItemPipeCowl": {"name": "ItemPipeCowl", "hash": -38898376, "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres."}, "StructurePipeHeater": {"name": "StructurePipeHeater", "hash": -419758574, "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureLiquidPipeHeater": {"name": "StructureLiquidPipeHeater", "hash": -287495560, "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemPipeHeater": {"name": "ItemPipeHeater", "hash": -1751627006, "desc": "Creates a Pipe Heater (Gas)."}, "ItemLiquidPipeHeater": {"name": "ItemLiquidPipeHeater", "hash": -248475032, "desc": "Creates a Pipe Heater (Liquid)."}, "StructurePipeIgniter": {"name": "StructurePipeIgniter", "hash": 1286441942, "desc": "Ignites the atmosphere inside the attached pipe network.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructurePipeLabel": {"name": "StructurePipeLabel", "hash": -999721119, "desc": "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeMeter": {"name": "StructurePipeMeter", "hash": -1798362329, "desc": "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeOrgan": {"name": "StructurePipeOrgan", "hash": 1305252611, "desc": "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning.", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructurePipeRadiatorFlat": {"name": "StructurePipeRadiatorFlat", "hash": -399883995, "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructurePipeRadiatorFlatLiquid": {"name": "StructurePipeRadiatorFlatLiquid", "hash": 2024754523, "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "AppliancePlantGeneticAnalyzer": {"name": "AppliancePlantGeneticAnalyzer", "hash": -1303038067, "desc": "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold.", "slots": [{"name": "Input", "typ": "Tool"}]}, "AppliancePlantGeneticSplicer": {"name": "AppliancePlantGeneticSplicer", "hash": -1094868323, "desc": "The Genetic Splicer can be used to copy a single gene from one 'source' plant to another 'target' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort.", "slots": [{"name": "Source Plant", "typ": "Plant"}, {"name": "Target Plant", "typ": "Plant"}]}, "AppliancePlantGeneticStabilizer": {"name": "AppliancePlantGeneticStabilizer", "hash": 871432335, "desc": "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n ", "slots": [{"name": "Plant", "typ": "Plant"}], "modes": {"0": "Stabilize", "1": "Destabilize"}}, "ItemPlantSampler": {"name": "ItemPlantSampler", "hash": 173023800, "desc": "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "StructurePlanter": {"name": "StructurePlanter", "hash": -1125641329, "desc": "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water).", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}]}, "ItemPlasticSheets": {"name": "ItemPlasticSheets", "hash": 662053345, "desc": ""}, "StructurePlinth": {"name": "StructurePlinth", "hash": 989835703, "desc": "", "slots": [{"name": "", "typ": "None"}]}, "ItemMiningDrillPneumatic": {"name": "ItemMiningDrillPneumatic", "hash": 1258187304, "desc": "0.Default\n1.Flatten", "slots": [{"name": "Gas Canister", "typ": "GasCanister"}], "modes": {"0": "Default", "1": "Flatten"}}, "DynamicAirConditioner": {"name": "DynamicAirConditioner", "hash": 519913639, "desc": "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases.", "slots": [{"name": "Battery", "typ": "Battery"}], "modes": {"0": "Cold", "1": "Hot"}}, "DynamicScrubber": {"name": "DynamicScrubber", "hash": 755048589, "desc": "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Gas Filter", "typ": "GasFilter"}]}, "PortableComposter": {"name": "PortableComposter", "hash": -1958705204, "desc": "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "Battery"}, {"name": "Liquid Canister", "typ": "LiquidCanister"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "DynamicGasCanisterEmpty": {"name": "DynamicGasCanisterEmpty", "hash": -1741267161, "desc": "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterAir": {"name": "DynamicGasCanisterAir", "hash": -1713611165, "desc": "Portable gas tanks do one thing: store gas. But there's lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterCarbonDioxide": {"name": "DynamicGasCanisterCarbonDioxide", "hash": -322413931, "desc": "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or ... boom. Once it's full, you can refill a Canister (CO2) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere ... of sorts.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterFuel": {"name": "DynamicGasCanisterFuel", "hash": -817051527, "desc": "Portable tanks store gas. They're good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It's really up to you.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterNitrogen": {"name": "DynamicGasCanisterNitrogen", "hash": 121951301, "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll end up with Nitrogen in places you weren't expecting. You can refill a Canister (Nitrogen) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterNitrousOxide": {"name": "DynamicGasCanisterNitrousOxide", "hash": 30727200, "desc": "", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterOxygen": {"name": "DynamicGasCanisterOxygen", "hash": 1360925836, "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterPollutants": {"name": "DynamicGasCanisterPollutants", "hash": 396065382, "desc": "", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasCanisterVolatiles": {"name": "DynamicGasCanisterVolatiles", "hash": 108086870, "desc": "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don't fill it above 10 MPa, unless you're the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank's striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System.", "slots": [{"name": "Gas Canister", "typ": "None"}]}, "DynamicGasTankAdvancedOxygen": {"name": "DynamicGasTankAdvancedOxygen", "hash": -1264455519, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Gas Canister", "typ": "None"}], "modes": {"0": "Mode0", "1": "Mode1"}}, "DynamicGenerator": {"name": "DynamicGenerator", "hash": -82087220, "desc": "Every Stationeer's best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It's pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference.", "slots": [{"name": "Gas Canister", "typ": "GasCanister"}, {"name": "Battery", "typ": "Battery"}]}, "DynamicHydroponics": {"name": "DynamicHydroponics", "hash": 587726607, "desc": "", "slots": [{"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Plant", "typ": "Plant"}, {"name": "Liquid Canister", "typ": "LiquidCanister"}, {"name": "Liquid Canister", "typ": "Plant"}, {"name": "Liquid Canister", "typ": "Plant"}, {"name": "Liquid Canister", "typ": "Plant"}, {"name": "Liquid Canister", "typ": "Plant"}]}, "DynamicLight": {"name": "DynamicLight", "hash": -21970188, "desc": "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination's lacking. Powered by any battery, it's a 'no-frills' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like.", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "DynamicLiquidCanisterEmpty": {"name": "DynamicLiquidCanisterEmpty", "hash": -1939209112, "desc": "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", "slots": [{"name": "Liquid Canister", "typ": "LiquidCanister"}]}, "DynamicGasCanisterWater": {"name": "DynamicGasCanisterWater", "hash": 197293625, "desc": "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", "slots": [{"name": "Gas Canister", "typ": "LiquidCanister"}]}, "DynamicMKIILiquidCanisterEmpty": {"name": "DynamicMKIILiquidCanisterEmpty", "hash": 2130739600, "desc": "An empty, insulated liquid Gas Canister.", "slots": [{"name": "Liquid Canister", "typ": "LiquidCanister"}]}, "DynamicMKIILiquidCanisterWater": {"name": "DynamicMKIILiquidCanisterWater", "hash": -319510386, "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", "slots": [{"name": "Liquid Canister", "typ": "LiquidCanister"}]}, "PortableSolarPanel": {"name": "PortableSolarPanel", "hash": 2043318949, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Open": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructurePortablesConnector": {"name": "StructurePortablesConnector", "hash": -899013427, "desc": "", "slots": [{"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Input2"]}}, "ItemPotato": {"name": "ItemPotato", "hash": 1929046963, "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."}, "SeedBag_Potato": {"name": "SeedBag_Potato", "hash": 1005571172, "desc": "Grow a Potato."}, "ItemCookedPowderedEggs": {"name": "ItemCookedPowderedEggs", "hash": -1712264413, "desc": "A high-nutrient cooked food, which can be canned."}, "StructurePowerConnector": {"name": "StructurePowerConnector", "hash": -782951720, "desc": "Attaches a Kit (Portable Generator) to a power network.", "slots": [{"name": "Portable Slot", "typ": "None"}], "logic": {"Open": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Power", "Input"]}}, "CircuitboardPowerControl": {"name": "CircuitboardPowerControl", "hash": -1923778429, "desc": "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. "}, "StructurePowerTransmitterOmni": {"name": "StructurePowerTransmitterOmni", "hash": -327468845, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureBench": {"name": "StructureBench", "hash": -2042448192, "desc": "When it's time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave.", "slots": [{"name": "Appliance 1", "typ": "Appliance"}, {"name": "Appliance 2", "typ": "Appliance"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "On": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructurePoweredVent": {"name": "StructurePoweredVent", "hash": 938836756, "desc": "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Output"], "2": ["Power", "None"]}}, "StructurePoweredVentLarge": {"name": "StructurePoweredVentLarge", "hash": -785498334, "desc": "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "PressureExternal": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Outward", "1": "Inward"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Output"], "2": ["Power", "None"]}}, "StructurePressurantValve": {"name": "StructurePressurantValve", "hash": 23052817, "desc": "Pumps gas into a liquid pipe in order to raise the pressure", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PipeLiquid", "Output"], "2": ["PowerAndData", "None"]}}, "StructurePressureFedGasEngine": {"name": "StructurePressureFedGasEngine", "hash": -624011170, "desc": "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"], "2": ["PowerAndData", "Output"]}}, "StructurePressureFedLiquidEngine": {"name": "StructurePressureFedLiquidEngine", "hash": 379750958, "desc": "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"], "2": ["PowerAndData", "Output"]}}, "StructurePressureRegulator": {"name": "StructurePressureRegulator", "hash": 209854039, "desc": "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "StructureProximitySensor": {"name": "StructureProximitySensor", "hash": 568800213, "desc": "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet.", "logic": {"Activate": "Read", "Setting": "ReadWrite", "Quantity": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureGovernedGasEngine": {"name": "StructureGovernedGasEngine", "hash": -214232602, "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructurePumpedLiquidEngine": {"name": "StructurePumpedLiquidEngine", "hash": -2031440019, "desc": "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "Throttle": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "PassedMoles": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PipeLiquid", "None"], "2": ["PowerAndData", "Output"]}}, "ItemPumpkin": {"name": "ItemPumpkin", "hash": 1277828144, "desc": "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light."}, "ItemPumpkinPie": {"name": "ItemPumpkinPie", "hash": 62768076, "desc": ""}, "SeedBag_Pumpkin": {"name": "SeedBag_Pumpkin", "hash": 1423199840, "desc": "Grow a Pumpkin."}, "ItemPumpkinSoup": {"name": "ItemPumpkinSoup", "hash": 1277979876, "desc": "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay"}, "ItemPureIceCarbonDioxide": {"name": "ItemPureIceCarbonDioxide", "hash": -1251009404, "desc": "A frozen chunk of pure Carbon Dioxide"}, "ItemPureIceHydrogen": {"name": "ItemPureIceHydrogen", "hash": 944530361, "desc": "A frozen chunk of pure Hydrogen"}, "ItemPureIceLiquidCarbonDioxide": {"name": "ItemPureIceLiquidCarbonDioxide", "hash": -1715945725, "desc": "A frozen chunk of pure Liquid Carbon Dioxide"}, "ItemPureIceLiquidHydrogen": {"name": "ItemPureIceLiquidHydrogen", "hash": -1044933269, "desc": "A frozen chunk of pure Liquid Hydrogen"}, "ItemPureIceLiquidNitrogen": {"name": "ItemPureIceLiquidNitrogen", "hash": 1674576569, "desc": "A frozen chunk of pure Liquid Nitrogen"}, "ItemPureIceLiquidNitrous": {"name": "ItemPureIceLiquidNitrous", "hash": 1428477399, "desc": "A frozen chunk of pure Liquid Nitrous Oxide"}, "ItemPureIceLiquidOxygen": {"name": "ItemPureIceLiquidOxygen", "hash": 541621589, "desc": "A frozen chunk of pure Liquid Oxygen"}, "ItemPureIceLiquidPollutant": {"name": "ItemPureIceLiquidPollutant", "hash": -1748926678, "desc": "A frozen chunk of pure Liquid Pollutant"}, "ItemPureIceLiquidVolatiles": {"name": "ItemPureIceLiquidVolatiles", "hash": -1306628937, "desc": "A frozen chunk of pure Liquid Volatiles"}, "ItemPureIceNitrogen": {"name": "ItemPureIceNitrogen", "hash": -1708395413, "desc": "A frozen chunk of pure Nitrogen"}, "ItemPureIceNitrous": {"name": "ItemPureIceNitrous", "hash": 386754635, "desc": "A frozen chunk of pure Nitrous Oxide"}, "ItemPureIceOxygen": {"name": "ItemPureIceOxygen", "hash": -1150448260, "desc": "A frozen chunk of pure Oxygen"}, "ItemPureIcePollutant": {"name": "ItemPureIcePollutant", "hash": -1755356, "desc": "A frozen chunk of pure Pollutant"}, "ItemPureIcePollutedWater": {"name": "ItemPureIcePollutedWater", "hash": -2073202179, "desc": "A frozen chunk of Polluted Water"}, "ItemPureIceSteam": {"name": "ItemPureIceSteam", "hash": -874791066, "desc": "A frozen chunk of pure Steam"}, "ItemPureIceVolatiles": {"name": "ItemPureIceVolatiles", "hash": -633723719, "desc": "A frozen chunk of pure Volatiles"}, "ItemPureIce": {"name": "ItemPureIce", "hash": -1616308158, "desc": "A frozen chunk of pure Water"}, "StructurePurgeValve": {"name": "StructurePurgeValve", "hash": -737232128, "desc": "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Output"], "2": ["PowerAndData", "None"]}}, "RailingElegant01": {"name": "RailingElegant01", "hash": 399661231, "desc": ""}, "RailingElegant02": {"name": "RailingElegant02", "hash": -1898247915, "desc": ""}, "StructureRailing": {"name": "StructureRailing", "hash": -1756913871, "desc": "\"Safety third.\""}, "RailingIndustrial02": {"name": "RailingIndustrial02", "hash": -2072792175, "desc": ""}, "ItemReagentMix": {"name": "ItemReagentMix", "hash": -1641500434, "desc": "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot."}, "ApplianceReagentProcessor": {"name": "ApplianceReagentProcessor", "hash": 1260918085, "desc": "Sitting somewhere between a high powered juicer and an alchemist's alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you're ready to go.", "slots": [{"name": "Input", "typ": "None"}, {"name": "Output", "typ": "None"}]}, "StructureLogicReagentReader": {"name": "StructureLogicReagentReader", "hash": -124308857, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureRecycler": {"name": "StructureRecycler", "hash": -1633947337, "desc": "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureRefrigeratedVendingMachine": {"name": "StructureRefrigeratedVendingMachine", "hash": -1577831321, "desc": "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit's default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. ", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RequestHash": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureReinforcedCompositeWindowSteel": {"name": "StructureReinforcedCompositeWindowSteel", "hash": -816454272, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedCompositeWindow": {"name": "StructureReinforcedCompositeWindow", "hash": 2027713511, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedWallPaddedWindow": {"name": "StructureReinforcedWallPaddedWindow", "hash": 1939061729, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "StructureReinforcedWallPaddedWindowThin": {"name": "StructureReinforcedWallPaddedWindowThin", "hash": 158502707, "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa."}, "ItemRemoteDetonator": {"name": "ItemRemoteDetonator", "hash": 678483886, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "ItemExplosive": {"name": "ItemExplosive", "hash": 235361649, "desc": ""}, "ItemResearchCapsule": {"name": "ItemResearchCapsule", "hash": 819096942, "desc": ""}, "ItemResearchCapsuleGreen": {"name": "ItemResearchCapsuleGreen", "hash": -1352732550, "desc": ""}, "ItemResearchCapsuleRed": {"name": "ItemResearchCapsuleRed", "hash": 954947943, "desc": ""}, "ItemResearchCapsuleYellow": {"name": "ItemResearchCapsuleYellow", "hash": 750952701, "desc": ""}, "StructureResearchMachine": {"name": "StructureResearchMachine", "hash": -796627526, "desc": "", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "CurrentResearchPodType": "Read", "ManualResearchRequiredPod": "Write", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"], "4": ["Pipe", "Input"]}}, "RespawnPoint": {"name": "RespawnPoint", "hash": -788672929, "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead."}, "RespawnPointWallMounted": {"name": "RespawnPointWallMounted", "hash": -491247370, "desc": ""}, "ItemRice": {"name": "ItemRice", "hash": 658916791, "desc": "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought."}, "SeedBag_Rice": {"name": "SeedBag_Rice", "hash": -1691151239, "desc": "Grow some Rice."}, "ItemRoadFlare": {"name": "ItemRoadFlare", "hash": 871811564, "desc": "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space."}, "StructureRocketAvionics": {"name": "StructureRocketAvionics", "hash": 808389066, "desc": "", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Temperature": "Read", "Reagents": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "VelocityRelativeY": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "Progress": "Read", "DestinationCode": "ReadWrite", "Acceleration": "Read", "ReferenceId": "Read", "AutoShutOff": "ReadWrite", "Mass": "Read", "DryMass": "Read", "Thrust": "Read", "Weight": "Read", "ThrustToWeight": "Read", "TimeToDestination": "Read", "BurnTimeRemaining": "Read", "AutoLand": "Write", "FlightControlRule": "Read", "ReEntryAltitude": "Read", "Apex": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read", "Discover": "Read", "Chart": "Read", "Survey": "Read", "NavPoints": "Read", "ChartedNavPoints": "Read", "Sites": "Read", "CurrentCode": "Read", "Density": "Read", "Richness": "Read", "Size": "Read", "TotalQuantity": "Read", "MinedQuantity": "Read"}, "modes": {"0": "Invalid", "1": "None", "2": "Mine", "3": "Survey", "4": "Discover", "5": "Chart"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureRocketCelestialTracker": {"name": "StructureRocketCelestialTracker", "hash": 997453927, "desc": "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned.", "logic": {"Power": "Read", "Error": "Read", "Horizontal": "Read", "Vertical": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "Index": "ReadWrite", "CelestialHash": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureRocketCircuitHousing": {"name": "StructureRocketCircuitHousing", "hash": 150135861, "desc": "", "slots": [{"name": "Programmable Chip", "typ": "ProgrammableChip"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "LineNumber": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "LineNumber": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "Input"]}}, "MotherboardRockets": {"name": "MotherboardRockets", "hash": -806986392, "desc": ""}, "StructureRocketEngineTiny": {"name": "StructureRocketEngineTiny", "hash": 178472613, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructureRocketManufactory": {"name": "StructureRocketManufactory", "hash": 1781051034, "desc": "", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureRocketMiner": {"name": "StructureRocketMiner", "hash": -2087223687, "desc": "Gathers available resources at the rocket's current space location.", "slots": [{"name": "Export", "typ": "None"}, {"name": "Drill Head Slot", "typ": "DrillHead"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "DrillCondition": "Read"}, "conn": {"0": ["Chute", "Output"], "1": ["PowerAndData", "None"]}}, "StructureRocketScanner": {"name": "StructureRocketScanner", "hash": 2014252591, "desc": "", "slots": [{"name": "Scanner Head Slot", "typ": "ScanningHead"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemRocketScanningHead": {"name": "ItemRocketScanningHead", "hash": -1198702771, "desc": ""}, "RoverCargo": {"name": "RoverCargo", "hash": 350726273, "desc": "Connects to Logic Transmitter", "slots": [{"name": "Entity", "typ": "Entity"}, {"name": "Entity", "typ": "Entity"}, {"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Gas Filter", "typ": "GasFilter"}, {"name": "Gas Canister", "typ": "GasCanister"}, {"name": "Gas Canister", "typ": "GasCanister"}, {"name": "Gas Canister", "typ": "GasCanister"}, {"name": "Gas Canister", "typ": "GasCanister"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Container Slot", "typ": "None"}, {"name": "Container Slot", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Power": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "Pressure": [5, 6, 7, 8], "Temperature": [5, 6, 7, 8], "Charge": [9, 10, 11], "ChargeRatio": [9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "FilterType": [2, 3, 4], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}}, "StructureRover": {"name": "StructureRover", "hash": 806513938, "desc": ""}, "Rover_MkI_build_states": {"name": "Rover_MkI_build_states", "hash": 861674123, "desc": ""}, "Rover_MkI": {"name": "Rover_MkI", "hash": -2049946335, "desc": "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter", "slots": [{"name": "Entity", "typ": "Entity"}, {"name": "Entity", "typ": "Entity"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "Battery", "typ": "Battery"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Power": "Read", "Pressure": "Read", "Temperature": "Read", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "RatioNitrousOxide": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Charge": [2, 3, 4], "ChargeRatio": [2, 3, 4], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}}, "StructureSDBHopper": {"name": "StructureSDBHopper", "hash": -1875856925, "desc": "", "slots": [{"name": "Import", "typ": "None"}], "logic": {"Open": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "None"]}}, "StructureSDBHopperAdvanced": {"name": "StructureSDBHopperAdvanced", "hash": 467225612, "desc": "", "slots": [{"name": "Import", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Chute", "Input"]}}, "StructureSDBSilo": {"name": "StructureSDBSilo", "hash": 1155865682, "desc": "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Mode0", "1": "Mode1"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "SMGMagazine": {"name": "SMGMagazine", "hash": -256607540, "desc": ""}, "ItemScrewdriver": {"name": "ItemScrewdriver", "hash": 687940869, "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units."}, "ItemSecurityCamera": {"name": "ItemSecurityCamera", "hash": -1981101032, "desc": "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that 'always watched' feeling."}, "StructureSecurityPrinter": {"name": "StructureSecurityPrinter", "hash": -641491515, "desc": "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ItemSensorLenses": {"name": "ItemSensorLenses", "hash": -1176140051, "desc": "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface.", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Sensor Processing Unit", "typ": "SensorProcessingUnit"}], "logic": {"Power": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}}, "ItemSensorProcessingUnitCelestialScanner": {"name": "ItemSensorProcessingUnitCelestialScanner", "hash": -1154200014, "desc": ""}, "ItemSensorProcessingUnitOreScanner": {"name": "ItemSensorProcessingUnitOreScanner", "hash": -1219128491, "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."}, "ItemSensorProcessingUnitMesonScanner": {"name": "ItemSensorProcessingUnitMesonScanner", "hash": -1730464583, "desc": "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures."}, "StructureShelf": {"name": "StructureShelf", "hash": 1172114950, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}]}, "StructureShelfMedium": {"name": "StructureShelfMedium", "hash": 182006674, "desc": "A shelf for putting things on, so you can see them.", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]}}, "CircuitboardShipDisplay": {"name": "CircuitboardShipDisplay", "hash": -2044446819, "desc": "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board."}, "StructureShortCornerLocker": {"name": "StructureShortCornerLocker", "hash": 1330754486, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}}, "StructureShortLocker": {"name": "StructureShortLocker", "hash": -554553467, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "PrefabHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "SortingClass": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "StructureShower": {"name": "StructureShower", "hash": -775128944, "desc": "", "logic": {"Open": "ReadWrite", "Activate": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Output"]}}, "StructureShowerPowered": {"name": "StructureShowerPowered", "hash": -1081797501, "desc": "", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Power", "None"]}}, "StructureSign1x1": {"name": "StructureSign1x1", "hash": 879058460, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureSign2x1": {"name": "StructureSign2x1", "hash": 908320837, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}}, "StructureSingleBed": {"name": "StructureSingleBed", "hash": -492611, "desc": "Description coming.", "slots": [{"name": "Bed", "typ": "Entity"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}}, "DynamicSkeleton": {"name": "DynamicSkeleton", "hash": 106953348, "desc": ""}, "StructureSleeper": {"name": "StructureSleeper", "hash": -1467449329, "desc": "", "slots": [{"name": "Bed", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperLeft": {"name": "StructureSleeperLeft", "hash": 1213495833, "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperRight": {"name": "StructureSleeperRight", "hash": -1812330717, "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureSleeperVertical": {"name": "StructureSleeperVertical", "hash": -1300059018, "desc": "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", "slots": [{"name": "Player", "typ": "Entity"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read", "EntityState": "Read"}, "modes": {"0": "Safe", "1": "Unsafe", "2": "Unpowered"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Power", "None"]}}, "StructureLogicSlotReader": {"name": "StructureLogicSlotReader", "hash": -767867194, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Setting": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Data", "Output"], "2": ["Power", "None"]}}, "StructureSmallTableBacklessDouble": {"name": "StructureSmallTableBacklessDouble", "hash": -1633000411, "desc": ""}, "StructureSmallTableBacklessSingle": {"name": "StructureSmallTableBacklessSingle", "hash": -1897221677, "desc": ""}, "StructureSmallTableDinnerSingle": {"name": "StructureSmallTableDinnerSingle", "hash": 1260651529, "desc": ""}, "StructureSmallTableRectangleDouble": {"name": "StructureSmallTableRectangleDouble", "hash": -660451023, "desc": ""}, "StructureSmallTableRectangleSingle": {"name": "StructureSmallTableRectangleSingle", "hash": -924678969, "desc": ""}, "StructureSmallTableThickDouble": {"name": "StructureSmallTableThickDouble", "hash": -19246131, "desc": ""}, "StructureSmallDirectHeatExchangeGastoGas": {"name": "StructureSmallDirectHeatExchangeGastoGas", "hash": 1310303582, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"], "1": ["Pipe", "Input2"]}}, "StructureSmallDirectHeatExchangeLiquidtoGas": {"name": "StructureSmallDirectHeatExchangeLiquidtoGas", "hash": 1825212016, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["Pipe", "Input2"]}}, "StructureSmallDirectHeatExchangeLiquidtoLiquid": {"name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", "hash": -507770416, "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PipeLiquid", "Input2"]}}, "StructureFlagSmall": {"name": "StructureFlagSmall", "hash": -1529819532, "desc": ""}, "StructureAirlockGate": {"name": "StructureAirlockGate", "hash": 1736080881, "desc": "1 x 1 modular door piece for building hangar doors.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSmallSatelliteDish": {"name": "StructureSmallSatelliteDish", "hash": -2138748650, "desc": "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Setting": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "SignalStrength": "Read", "SignalID": "Read", "InterrogationProgress": "Read", "TargetPadIndex": "ReadWrite", "SizeX": "Read", "SizeZ": "Read", "MinimumWattsToContact": "Read", "WattsReachingContact": "Read", "ContactTypeId": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureSmallTableThickSingle": {"name": "StructureSmallTableThickSingle", "hash": -291862981, "desc": ""}, "StructureTankSmall": {"name": "StructureTankSmall", "hash": 1013514688, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "StructureTankSmallAir": {"name": "StructureTankSmallAir", "hash": 955744474, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "StructureTankSmallFuel": {"name": "StructureTankSmallFuel", "hash": 2102454415, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "None"]}}, "CircuitboardSolarControl": {"name": "CircuitboardSolarControl", "hash": 2020180320, "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel."}, "StructureSolarPanel": {"name": "StructureSolarPanel", "hash": -2045627372, "desc": "Sinotai's standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanel45": {"name": "StructureSolarPanel45", "hash": -1554349863, "desc": "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelDual": {"name": "StructureSolarPanelDual", "hash": -539224550, "desc": "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSolarPanelFlat": {"name": "StructureSolarPanelFlat", "hash": 1968102968, "desc": "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanel45Reinforced": {"name": "StructureSolarPanel45Reinforced", "hash": 930865127, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelDualReinforced": {"name": "StructureSolarPanelDualReinforced", "hash": -1545574413, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureSolarPanelFlatReinforced": {"name": "StructureSolarPanelFlatReinforced", "hash": 1697196770, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureSolarPanelReinforced": {"name": "StructureSolarPanelReinforced", "hash": -934345724, "desc": "This solar panel is resistant to storm damage.", "logic": {"Charge": "Read", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "ItemSolidFuel": {"name": "ItemSolidFuel", "hash": -365253871, "desc": ""}, "StructureSorter": {"name": "StructureSorter", "hash": -1009150565, "desc": "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "Data Disk", "typ": "DataDisk"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3], "OccupantHash": [0, 1, 2, 3], "Quantity": [0, 1, 2, 3], "Damage": [0, 1, 2, 3], "Class": [0, 1, 2, 3], "MaxQuantity": [0, 1, 2, 3], "PrefabHash": [0, 1, 2, 3], "SortingClass": [0, 1, 2, 3], "ReferenceId": [0, 1, 2, 3]}, "modes": {"0": "Split", "1": "Filter", "2": "Logic"}, "conn": {"0": ["Chute", "Output2"], "1": ["Chute", "Input"], "2": ["Chute", "Output"], "3": ["PowerAndData", "None"]}}, "MotherboardSorter": {"name": "MotherboardSorter", "hash": -1908268220, "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass."}, "ItemSoundCartridgeBass": {"name": "ItemSoundCartridgeBass", "hash": -1883441704, "desc": ""}, "ItemSoundCartridgeDrums": {"name": "ItemSoundCartridgeDrums", "hash": -1901500508, "desc": ""}, "ItemSoundCartridgeLeads": {"name": "ItemSoundCartridgeLeads", "hash": -1174735962, "desc": ""}, "ItemSoundCartridgeSynth": {"name": "ItemSoundCartridgeSynth", "hash": -1971419310, "desc": ""}, "ItemSoyOil": {"name": "ItemSoyOil", "hash": 1387403148, "desc": ""}, "ItemSoybean": {"name": "ItemSoybean", "hash": 1924673028, "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil"}, "SeedBag_Soybean": {"name": "SeedBag_Soybean", "hash": 1783004244, "desc": "Grow some Soybean."}, "ItemSpaceCleaner": {"name": "ItemSpaceCleaner", "hash": -1737666461, "desc": "There was a time when humanity really wanted to keep space clean. That time has passed."}, "ItemSpaceHelmet": {"name": "ItemSpaceHelmet", "hash": 714830451, "desc": "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer.", "logic": {"Power": "Read", "Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Lock": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "On": "ReadWrite", "TotalMoles": "Read", "Volume": "ReadWrite", "RatioNitrousOxide": "Read", "Combustion": "Read", "Flush": "Write", "SoundAlert": "ReadWrite", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}}, "ItemSpaceIce": {"name": "ItemSpaceIce", "hash": 675686937, "desc": ""}, "SpaceShuttle": {"name": "SpaceShuttle", "hash": -1991297271, "desc": "An antiquated Sinotai transport craft, long since decommissioned.", "slots": [{"name": "Captain's Seat", "typ": "Entity"}, {"name": "Passenger Seat Left", "typ": "Entity"}, {"name": "Passenger Seat Right", "typ": "Entity"}]}, "ItemSpacepack": {"name": "ItemSpacepack", "hash": -1260618380, "desc": "The basic CHAC spacepack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", "slots": [{"name": "Propellant", "typ": "GasCanister"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "Pressure": [0], "Temperature": [0], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}}, "ItemSprayGun": {"name": "ItemSprayGun", "hash": 1289723966, "desc": "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans.", "slots": [{"name": "Spray Can", "typ": "Bottle"}]}, "ItemSprayCanBlack": {"name": "ItemSprayCanBlack", "hash": -688107795, "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses."}, "ItemSprayCanBlue": {"name": "ItemSprayCanBlue", "hash": -498464883, "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'"}, "ItemSprayCanBrown": {"name": "ItemSprayCanBrown", "hash": 845176977, "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."}, "ItemSprayCanGreen": {"name": "ItemSprayCanGreen", "hash": -1880941852, "desc": "Green is the color of life, and longing. Paradoxically, it's also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it's just what light does at around 500 billionths of a meter."}, "ItemSprayCanGrey": {"name": "ItemSprayCanGrey", "hash": -1645266981, "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do."}, "ItemSprayCanKhaki": {"name": "ItemSprayCanKhaki", "hash": 1918456047, "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode."}, "ItemSprayCanOrange": {"name": "ItemSprayCanOrange", "hash": -158007629, "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove."}, "ItemSprayCanPink": {"name": "ItemSprayCanPink", "hash": 1344257263, "desc": "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change."}, "ItemSprayCanPurple": {"name": "ItemSprayCanPurple", "hash": 30686509, "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong."}, "ItemSprayCanRed": {"name": "ItemSprayCanRed", "hash": 1514393921, "desc": "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power."}, "ItemSprayCanWhite": {"name": "ItemSprayCanWhite", "hash": 498481505, "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."}, "ItemSprayCanYellow": {"name": "ItemSprayCanYellow", "hash": 995468116, "desc": "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It's less fun than orange, but less emotionally limp than khaki. It's hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks."}, "StructureStackerReverse": {"name": "StructureStackerReverse", "hash": 1585641623, "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureStacker": {"name": "StructureStacker", "hash": -2020231820, "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Processing", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Class": [0, 1, 2], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureStairs4x2": {"name": "StructureStairs4x2", "hash": 1405018945, "desc": ""}, "StructureStairs4x2RailL": {"name": "StructureStairs4x2RailL", "hash": 155214029, "desc": ""}, "StructureStairs4x2RailR": {"name": "StructureStairs4x2RailR", "hash": -212902482, "desc": ""}, "StructureStairs4x2Rails": {"name": "StructureStairs4x2Rails", "hash": -1088008720, "desc": ""}, "StructureStairwellBackLeft": {"name": "StructureStairwellBackLeft", "hash": 505924160, "desc": ""}, "StructureStairwellBackPassthrough": {"name": "StructureStairwellBackPassthrough", "hash": -862048392, "desc": ""}, "StructureStairwellBackRight": {"name": "StructureStairwellBackRight", "hash": -2128896573, "desc": ""}, "StructureStairwellFrontLeft": {"name": "StructureStairwellFrontLeft", "hash": -37454456, "desc": ""}, "StructureStairwellFrontPassthrough": {"name": "StructureStairwellFrontPassthrough", "hash": -1625452928, "desc": ""}, "StructureStairwellFrontRight": {"name": "StructureStairwellFrontRight", "hash": 340210934, "desc": ""}, "StructureStairwellNoDoors": {"name": "StructureStairwellNoDoors", "hash": 2049879875, "desc": ""}, "StructureBattery": {"name": "StructureBattery", "hash": -400115994, "desc": "Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large).", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureBatteryLarge": {"name": "StructureBatteryLarge", "hash": -1388288459, "desc": "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai 'Da Dianchi' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). ", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Charge": "Read", "Maximum": "Read", "Ratio": "Read", "PowerPotential": "Read", "PowerActual": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureFrame": {"name": "StructureFrame", "hash": 1432512808, "desc": "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework."}, "StructureFrameCornerCut": {"name": "StructureFrameCornerCut", "hash": 271315669, "desc": "0.Mode0\n1.Mode1", "modes": {"0": "Mode0", "1": "Mode1"}}, "StructureFrameCorner": {"name": "StructureFrameCorner", "hash": -2112390778, "desc": "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame's Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on."}, "StructureFrameSide": {"name": "StructureFrameSide", "hash": -302420053, "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."}, "ItemSteelFrames": {"name": "ItemSteelFrames", "hash": -1448105779, "desc": "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand."}, "ItemSteelSheets": {"name": "ItemSteelSheets", "hash": 38555961, "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types."}, "ItemStelliteGlassSheets": {"name": "ItemStelliteGlassSheets", "hash": -2038663432, "desc": "A stronger glass substitute."}, "StructureStirlingEngine": {"name": "StructureStirlingEngine", "hash": -260316435, "desc": "Harnessing an ancient thermal exploit, the Recurso 'Libra' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room's ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have ... sub-optimal results.", "slots": [{"name": "Gas Canister", "typ": "GasCanister"}], "logic": {"Power": "Read", "Error": "Read", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PowerGeneration": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "EnvironmentEfficiency": "Read", "WorkingGasEfficiency": "Read", "RatioLiquidNitrogen": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"], "2": ["Pipe", "Output"], "3": ["Power", "None"]}}, "StopWatch": {"name": "StopWatch", "hash": -1527229051, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "Time": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "Input"], "1": ["Power", "Input"]}}, "StructureSuitStorage": {"name": "StructureSuitStorage", "hash": 255034731, "desc": "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit's batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack's pipes must be connected or the unit will show an error state, but it will still charge the battery.", "slots": [{"name": "Helmet", "typ": "Helmet"}, {"name": "Suit", "typ": "Suit"}, {"name": "Back", "typ": "Back"}], "logic": {"Power": "Read", "Error": "Read", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2], "OccupantHash": [0, 1, 2], "Quantity": [0, 1, 2], "Damage": [0, 1, 2], "Pressure": [0, 1, 2], "Charge": [0, 1, 2], "ChargeRatio": [0, 1, 2], "Class": [0, 1, 2], "PressureWaste": [1], "PressureAir": [1], "MaxQuantity": [0, 1, 2], "PrefabHash": [0, 1, 2], "Open": [0], "On": [0], "Lock": [0], "SortingClass": [0, 1, 2], "ReferenceId": [0, 1, 2]}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Pipe", "Input"], "3": ["Pipe", "Input2"], "4": ["Pipe", "Output"]}}, "StructureLogicSwitch2": {"name": "StructureLogicSwitch2", "hash": 321604921, "desc": "", "logic": {"Open": "ReadWrite", "Lock": "ReadWrite", "Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "ItemPlantSwitchGrass": {"name": "ItemPlantSwitchGrass", "hash": -532672323, "desc": ""}, "SeedBag_Switchgrass": {"name": "SeedBag_Switchgrass", "hash": 488360169, "desc": ""}, "ApplianceTabletDock": {"name": "ApplianceTabletDock", "hash": 1853941363, "desc": "", "slots": [{"name": "", "typ": "Tool"}]}, "StructureTankBigInsulated": {"name": "StructureTankBigInsulated", "hash": 1280378227, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureTankConnector": {"name": "StructureTankConnector", "hash": -1276379454, "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", "slots": [{"name": "", "typ": "None"}]}, "StructureTankSmallInsulated": {"name": "StructureTankSmallInsulated", "hash": 272136332, "desc": "", "logic": {"Open": "ReadWrite", "Pressure": "Read", "Temperature": "Read", "Setting": "ReadWrite", "RatioOxygen": "Read", "RatioCarbonDioxide": "Read", "RatioNitrogen": "Read", "RatioPollutant": "Read", "RatioVolatiles": "Read", "RatioWater": "Read", "Maximum": "Read", "Ratio": "Read", "TotalMoles": "Read", "Volume": "Read", "RatioNitrousOxide": "Read", "PrefabHash": "Read", "Combustion": "Read", "RatioLiquidNitrogen": "Read", "VolumeOfLiquid": "Read", "RatioLiquidOxygen": "Read", "RatioLiquidVolatiles": "Read", "RatioSteam": "Read", "RatioLiquidCarbonDioxide": "Read", "RatioLiquidPollutant": "Read", "RatioLiquidNitrousOxide": "Read", "ReferenceId": "Read", "RatioHydrogen": "Read", "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Pipe", "Input"]}}, "StructureGroundBasedTelescope": {"name": "StructureGroundBasedTelescope", "hash": -619745681, "desc": "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data.", "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Horizontal": "ReadWrite", "Vertical": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "HorizontalRatio": "ReadWrite", "VerticalRatio": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read", "CelestialHash": "Read", "AlignmentError": "Read", "DistanceAu": "Read", "OrbitPeriod": "Read", "Inclination": "Read", "Eccentricity": "Read", "SemiMajorAxis": "Read", "DistanceKm": "Read", "CelestialParentHash": "Read", "TrueAnomaly": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemTerrainManipulator": {"name": "ItemTerrainManipulator", "hash": 111280987, "desc": "0.Mode0\n1.Mode1", "slots": [{"name": "Battery", "typ": "Battery"}, {"name": "Dirt Canister", "typ": "Ore"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Charge": [0], "ChargeRatio": [0], "Class": [0, 1], "MaxQuantity": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Mode0", "1": "Mode1"}}, "ItemPlantThermogenic_Creative": {"name": "ItemPlantThermogenic_Creative", "hash": -1208890208, "desc": ""}, "ItemTomato": {"name": "ItemTomato", "hash": -998592080, "desc": "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace."}, "SeedBag_Tomato": {"name": "SeedBag_Tomato", "hash": -1922066841, "desc": "Grow a Tomato."}, "ItemTomatoSoup": {"name": "ItemTomatoSoup", "hash": 688734890, "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."}, "ItemToolBelt": {"name": "ItemToolBelt", "hash": -355127880, "desc": "If there's one piece of equipment that embodies Stationeer life above all else, it's the humble toolbelt (Editor's note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt's eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt.", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}]}, "ItemMkIIToolbelt": {"name": "ItemMkIIToolbelt", "hash": 1467558064, "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", "slots": [{"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "Tool", "typ": "Tool"}, {"name": "", "typ": "None"}, {"name": "", "typ": "None"}], "logic": {"ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "OccupantHash": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Quantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Damage": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "Class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "MaxQuantity": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "ReferenceId": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}}, "StructureToolManufactory": {"name": "StructureToolManufactory", "hash": -465741100, "desc": "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds.", "slots": [{"name": "Import", "typ": "Ingot"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Reagents": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RecipeHash": "ReadWrite", "CompletionRatio": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "ToolPrinterMod": {"name": "ToolPrinterMod", "hash": 1700018136, "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."}, "WeaponTorpedo": {"name": "WeaponTorpedo", "hash": -1102977898, "desc": ""}, "StructureTorpedoRack": {"name": "StructureTorpedoRack", "hash": 1473807953, "desc": "", "slots": [{"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}, {"name": "Torpedo", "typ": "Torpedo"}]}, "ToyLuna": {"name": "ToyLuna", "hash": 94730034, "desc": ""}, "CartridgeTracker": {"name": "CartridgeTracker", "hash": 81488783, "desc": ""}, "ItemBeacon": {"name": "ItemBeacon", "hash": -869869491, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureTraderWaypoint": {"name": "StructureTraderWaypoint", "hash": 1570931620, "desc": "", "logic": {"Power": "Read", "Error": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureTransformer": {"name": "StructureTransformer", "hash": -1423212473, "desc": "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"], "2": ["Power", "Output"]}}, "StructureTransformerMedium": {"name": "StructureTransformerMedium", "hash": -1065725831, "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Input"], "1": ["PowerAndData", "Output"]}}, "StructureTransformerSmall": {"name": "StructureTransformerSmall", "hash": -890946730, "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "Input"], "1": ["Power", "Output"]}}, "StructureTransformerMediumReversed": {"name": "StructureTransformerMediumReversed", "hash": 833912764, "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"], "1": ["PowerAndData", "Input"]}}, "StructureTransformerSmallReversed": {"name": "StructureTransformerSmallReversed", "hash": 1054059374, "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"], "1": ["PowerAndData", "Input"]}}, "StructureRocketTransformerSmall": {"name": "StructureRocketTransformerSmall", "hash": 518925193, "desc": "", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Input"], "1": ["Power", "Output"], "2": ["Data", "None"]}}, "StructurePressurePlateLarge": {"name": "StructurePressurePlateLarge", "hash": -2008706143, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructurePressurePlateMedium": {"name": "StructurePressurePlateMedium", "hash": 1269458680, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "StructurePressurePlateSmall": {"name": "StructurePressurePlateSmall", "hash": -1536471028, "desc": "", "logic": {"Setting": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Data", "None"]}}, "ItemTropicalPlant": {"name": "ItemTropicalPlant", "hash": -800947386, "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."}, "StructureTurbineGenerator": {"name": "StructureTurbineGenerator", "hash": 1282191063, "desc": "", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "StructureTurboVolumePump": {"name": "StructureTurboVolumePump", "hash": 1310794736, "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Right", "1": "Left"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["Pipe", "Output"], "3": ["Pipe", "Input"]}}, "StructureLiquidTurboVolumePump": {"name": "StructureLiquidTurboVolumePump", "hash": -1051805505, "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Right", "1": "Left"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"], "2": ["PipeLiquid", "Input"], "3": ["PipeLiquid", "Output"]}}, "StructureChuteUmbilicalMale": {"name": "StructureChuteUmbilicalMale", "hash": -958884053, "desc": "0.Left\n1.Center\n2.Right", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Chute", "Input"], "1": ["PowerAndData", "None"]}}, "StructureGasUmbilicalMale": {"name": "StructureGasUmbilicalMale", "hash": -1814939203, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Pipe", "Input"], "1": ["PowerAndData", "None"]}}, "StructureLiquidUmbilicalMale": {"name": "StructureLiquidUmbilicalMale", "hash": -1798420047, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "StructurePowerUmbilicalMale": {"name": "StructurePowerUmbilicalMale", "hash": 1529453938, "desc": "0.Left\n1.Center\n2.Right", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Left", "1": "Center", "2": "Right"}, "conn": {"0": ["Data", "None"], "1": ["Power", "Input"]}}, "StructureChuteUmbilicalFemale": {"name": "StructureChuteUmbilicalFemale", "hash": -1918892177, "desc": "", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"]}}, "StructureGasUmbilicalFemale": {"name": "StructureGasUmbilicalFemale", "hash": -1680477930, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"]}}, "StructureLiquidUmbilicalFemale": {"name": "StructureLiquidUmbilicalFemale", "hash": 1734723642, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructurePowerUmbilicalFemale": {"name": "StructurePowerUmbilicalFemale", "hash": 101488029, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"]}}, "StructureChuteUmbilicalFemaleSide": {"name": "StructureChuteUmbilicalFemaleSide", "hash": -659093969, "desc": "", "slots": [{"name": "Transport Slot", "typ": "None"}], "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Chute", "Input"]}}, "StructureGasUmbilicalFemaleSide": {"name": "StructureGasUmbilicalFemaleSide", "hash": -648683847, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Input"]}}, "StructureLiquidUmbilicalFemaleSide": {"name": "StructureLiquidUmbilicalFemaleSide", "hash": 1220870319, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructurePowerUmbilicalFemaleSide": {"name": "StructurePowerUmbilicalFemaleSide", "hash": 1922506192, "desc": "", "logic": {"PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "Output"]}}, "UniformCommander": {"name": "UniformCommander", "hash": -2083426457, "desc": "", "slots": [{"name": "", "typ": "None"}, {"name": "", "typ": "None"}, {"name": "Access Card", "typ": "AccessCard"}, {"name": "Access Card", "typ": "AccessCard"}, {"name": "Credit Card", "typ": "CreditCard"}]}, "StructureUnloader": {"name": "StructureUnloader", "hash": 750118160, "desc": "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}], "logic": {"Power": "Read", "Mode": "ReadWrite", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "Output": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "modes": {"0": "Automatic", "1": "Logic"}, "conn": {"0": ["PowerAndData", "None"], "1": ["Chute", "Output"], "2": ["Chute", "Input"]}}, "StructureUprightWindTurbine": {"name": "StructureUprightWindTurbine", "hash": 1622183451, "desc": "Norsec's basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind.", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"]}}, "StructureValve": {"name": "StructureValve", "hash": -692036078, "desc": "", "logic": {"Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "None"], "1": ["Pipe", "None"]}}, "StructureVendingMachine": {"name": "StructureVendingMachine", "hash": -443130773, "desc": "The Xigo-designed 'Slot Mate' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks.", "slots": [{"name": "Import", "typ": "None"}, {"name": "Export", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}, {"name": "Storage", "typ": "None"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "Ratio": "Read", "Quantity": "Read", "On": "ReadWrite", "RequiredPower": "Read", "RequestHash": "ReadWrite", "ClearMemory": "Write", "ExportCount": "Read", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Chute", "Input"], "1": ["Chute", "Output"], "2": ["Data", "None"], "3": ["Power", "None"]}}, "StructureVolumePump": {"name": "StructureVolumePump", "hash": -321403609, "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Pipe", "Output"], "1": ["Pipe", "Input"], "2": ["PowerAndData", "None"]}}, "StructureWallArchArrow": {"name": "StructureWallArchArrow", "hash": 1649708822, "desc": ""}, "StructureWallArchCornerRound": {"name": "StructureWallArchCornerRound", "hash": 1794588890, "desc": ""}, "StructureWallArchCornerSquare": {"name": "StructureWallArchCornerSquare", "hash": -1963016580, "desc": ""}, "StructureWallArchCornerTriangle": {"name": "StructureWallArchCornerTriangle", "hash": 1281911841, "desc": ""}, "StructureWallArchPlating": {"name": "StructureWallArchPlating", "hash": 1182510648, "desc": ""}, "StructureWallArchTwoTone": {"name": "StructureWallArchTwoTone", "hash": 782529714, "desc": ""}, "StructureWallArch": {"name": "StructureWallArch", "hash": -858143148, "desc": ""}, "StructureWallFlatCornerRound": {"name": "StructureWallFlatCornerRound", "hash": 898708250, "desc": ""}, "StructureWallFlatCornerSquare": {"name": "StructureWallFlatCornerSquare", "hash": 298130111, "desc": ""}, "StructureWallFlatCornerTriangleFlat": {"name": "StructureWallFlatCornerTriangleFlat", "hash": -1161662836, "desc": ""}, "StructureWallFlatCornerTriangle": {"name": "StructureWallFlatCornerTriangle", "hash": 2097419366, "desc": ""}, "StructureWallFlat": {"name": "StructureWallFlat", "hash": 1635864154, "desc": ""}, "StructureWallGeometryCorner": {"name": "StructureWallGeometryCorner", "hash": 1979212240, "desc": ""}, "StructureWallGeometryStreight": {"name": "StructureWallGeometryStreight", "hash": 1049735537, "desc": ""}, "StructureWallGeometryTMirrored": {"name": "StructureWallGeometryTMirrored", "hash": -1427845483, "desc": ""}, "StructureWallGeometryT": {"name": "StructureWallGeometryT", "hash": 1602758612, "desc": ""}, "StructureWallLargePanelArrow": {"name": "StructureWallLargePanelArrow", "hash": -776581573, "desc": ""}, "StructureWallLargePanel": {"name": "StructureWallLargePanel", "hash": 1492930217, "desc": ""}, "StructureWallPaddedArchCorner": {"name": "StructureWallPaddedArchCorner", "hash": -1126688298, "desc": ""}, "StructureWallPaddedArchLightFittingTop": {"name": "StructureWallPaddedArchLightFittingTop", "hash": 1171987947, "desc": ""}, "StructureWallPaddedArchLightsFittings": {"name": "StructureWallPaddedArchLightsFittings", "hash": -1546743960, "desc": ""}, "StructureWallPaddedArch": {"name": "StructureWallPaddedArch", "hash": 1590330637, "desc": ""}, "StructureWallPaddedCornerThin": {"name": "StructureWallPaddedCornerThin", "hash": 1183203913, "desc": ""}, "StructureWallPaddedCorner": {"name": "StructureWallPaddedCorner", "hash": -155945899, "desc": ""}, "StructureWallPaddedNoBorderCorner": {"name": "StructureWallPaddedNoBorderCorner", "hash": 179694804, "desc": ""}, "StructureWallPaddedNoBorder": {"name": "StructureWallPaddedNoBorder", "hash": 8846501, "desc": ""}, "StructureWallPaddedThinNoBorderCorner": {"name": "StructureWallPaddedThinNoBorderCorner", "hash": 1769527556, "desc": ""}, "StructureWallPaddedThinNoBorder": {"name": "StructureWallPaddedThinNoBorder", "hash": -1611559100, "desc": ""}, "StructureWallPaddedWindowThin": {"name": "StructureWallPaddedWindowThin", "hash": -37302931, "desc": ""}, "StructureWallPaddedWindow": {"name": "StructureWallPaddedWindow", "hash": 2087628940, "desc": ""}, "StructureWallPaddingArchVent": {"name": "StructureWallPaddingArchVent", "hash": -1243329828, "desc": ""}, "StructureWallPaddingLightFitting": {"name": "StructureWallPaddingLightFitting", "hash": 2024882687, "desc": ""}, "StructureWallPaddingThin": {"name": "StructureWallPaddingThin", "hash": -1102403554, "desc": ""}, "StructureWallPadding": {"name": "StructureWallPadding", "hash": 635995024, "desc": ""}, "StructureWallPlating": {"name": "StructureWallPlating", "hash": 26167457, "desc": ""}, "StructureWallSmallPanelsAndHatch": {"name": "StructureWallSmallPanelsAndHatch", "hash": 619828719, "desc": ""}, "StructureWallSmallPanelsArrow": {"name": "StructureWallSmallPanelsArrow", "hash": -639306697, "desc": ""}, "StructureWallSmallPanelsMonoChrome": {"name": "StructureWallSmallPanelsMonoChrome", "hash": 386820253, "desc": ""}, "StructureWallSmallPanelsOpen": {"name": "StructureWallSmallPanelsOpen", "hash": -1407480603, "desc": ""}, "StructureWallSmallPanelsTwoTone": {"name": "StructureWallSmallPanelsTwoTone", "hash": 1709994581, "desc": ""}, "StructureWallCooler": {"name": "StructureWallCooler", "hash": -739292323, "desc": "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas's heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page.", "slots": [{"name": "", "typ": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["Pipe", "None"], "1": ["PowerAndData", "None"]}}, "StructureWallHeater": {"name": "StructureWallHeater", "hash": 24258244, "desc": "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level.", "slots": [{"name": "", "typ": "DataDisk"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallLight": {"name": "StructureWallLight", "hash": -1860064656, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallLightBattery": {"name": "StructureWallLightBattery", "hash": -1306415132, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "PrefabHash": [0], "SortingClass": [0], "ReferenceId": [0]}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLongAngled": {"name": "StructureLightLongAngled", "hash": 1847265835, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLongWide": {"name": "StructureLightLongWide", "hash": 555215790, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureLightLong": {"name": "StructureLightLong", "hash": 797794350, "desc": "", "logic": {"Power": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["PowerAndData", "None"]}}, "StructureWallVent": {"name": "StructureWallVent", "hash": -1177469307, "desc": "Used to mix atmospheres passively between two walls."}, "ItemWaterBottle": {"name": "ItemWaterBottle", "hash": 107741229, "desc": "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler."}, "StructureWaterBottleFiller": {"name": "StructureWaterBottleFiller", "hash": -1178961954, "desc": "", "slots": [{"name": "Bottle Slot", "typ": "LiquidBottle"}, {"name": "Bottle Slot", "typ": "LiquidBottle"}], "logic": {"Error": "Read", "Activate": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructureWaterBottleFillerBottom": {"name": "StructureWaterBottleFillerBottom", "hash": 1433754995, "desc": "", "slots": [{"name": "Bottle Slot", "typ": "LiquidBottle"}, {"name": "Bottle Slot", "typ": "LiquidBottle"}], "logic": {"Error": "Read", "Activate": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"]}}, "StructureWaterPurifier": {"name": "StructureWaterPurifier", "hash": 887383294, "desc": "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe.", "slots": [{"name": "Import", "typ": "Ore"}], "logic": {"Power": "Read", "Error": "Read", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "ClearMemory": "Write", "ImportCount": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Data", "None"], "1": ["PipeLiquid", "Input"], "2": ["PipeLiquid", "Output"], "3": ["Power", "None"], "4": ["Chute", "Input"]}}, "StructureWaterBottleFillerPoweredBottom": {"name": "StructureWaterBottleFillerPoweredBottom", "hash": 1986658780, "desc": "", "slots": [{"name": "Bottle Slot", "typ": "LiquidBottle"}, {"name": "Bottle Slot", "typ": "LiquidBottle"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "None"], "1": ["PowerAndData", "None"]}}, "StructureWaterBottleFillerPowered": {"name": "StructureWaterBottleFillerPowered", "hash": -756587791, "desc": "", "slots": [{"name": "Bottle Slot", "typ": "LiquidBottle"}, {"name": "Bottle Slot", "typ": "LiquidBottle"}], "logic": {"Power": "Read", "Error": "Read", "Activate": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0, 1], "OccupantHash": [0, 1], "Quantity": [0, 1], "Damage": [0, 1], "Pressure": [0, 1], "Temperature": [0, 1], "Class": [0, 1], "MaxQuantity": [0, 1], "PrefabHash": [0, 1], "Volume": [0, 1], "Open": [0, 1], "SortingClass": [0, 1], "ReferenceId": [0, 1]}, "conn": {"0": ["PipeLiquid", "Input"], "1": ["PowerAndData", "None"]}}, "WeaponEnergy": {"name": "WeaponEnergy", "hash": 789494694, "desc": "", "slots": [{"name": "Battery", "typ": "Battery"}], "logic": {"On": "ReadWrite", "ReferenceId": "Read"}, "slotlogic": {"Occupied": [0], "OccupantHash": [0], "Quantity": [0], "Damage": [0], "Charge": [0], "ChargeRatio": [0], "Class": [0], "MaxQuantity": [0], "ReferenceId": [0]}}, "StructureWeatherStation": {"name": "StructureWeatherStation", "hash": 1997212478, "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", "logic": {"Power": "Read", "Mode": "Read", "Error": "Read", "Activate": "ReadWrite", "Lock": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "PrefabHash": "Read", "NextWeatherEventTime": "Read", "ReferenceId": "Read"}, "modes": {"0": "NoStorm", "1": "StormIncoming", "2": "InStorm"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemWeldingTorch": {"name": "ItemWeldingTorch", "hash": -2066892079, "desc": "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic 'Zairo' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells.", "slots": [{"name": "Gas Canister", "typ": "GasCanister"}]}, "ItemWheat": {"name": "ItemWheat", "hash": -1057658015, "desc": "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor."}, "SeedBag_Wheet": {"name": "SeedBag_Wheet", "hash": -654756733, "desc": "Grow some Wheat."}, "StructureWindTurbine": {"name": "StructureWindTurbine", "hash": -2082355173, "desc": "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind.", "logic": {"PowerGeneration": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "conn": {"0": ["Power", "None"], "1": ["Data", "None"]}}, "StructureWindowShutter": {"name": "StructureWindowShutter", "hash": 2056377335, "desc": "For those special, private moments, a window that can be closed to prying eyes. \n \nWhen closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems.", "logic": {"Power": "Read", "Open": "ReadWrite", "Mode": "ReadWrite", "Error": "Read", "Setting": "ReadWrite", "On": "ReadWrite", "RequiredPower": "Read", "Idle": "Read", "PrefabHash": "Read", "ReferenceId": "Read"}, "modes": {"0": "Operate", "1": "Logic"}, "conn": {"0": ["Data", "None"], "1": ["Power", "None"]}}, "ItemPlantEndothermic_Genepool1": {"name": "ItemPlantEndothermic_Genepool1", "hash": 851290561, "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius."}, "ItemPlantEndothermic_Genepool2": {"name": "ItemPlantEndothermic_Genepool2", "hash": -1414203269, "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius."}, "ItemWireCutters": {"name": "ItemWireCutters", "hash": 1535854074, "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools."}, "ItemWirelessBatteryCellExtraLarge": {"name": "ItemWirelessBatteryCellExtraLarge", "hash": -504717121, "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", "logic": {"Mode": "ReadWrite", "ReferenceId": "Read"}, "modes": {"0": "Empty", "1": "Critical", "2": "VeryLow", "3": "Low", "4": "Medium", "5": "High", "6": "Full"}}, "ItemWreckageAirConditioner1": {"name": "ItemWreckageAirConditioner1", "hash": -1826023284, "desc": ""}, "ItemWreckageAirConditioner2": {"name": "ItemWreckageAirConditioner2", "hash": 169888054, "desc": ""}, "ItemWreckageHydroponicsTray1": {"name": "ItemWreckageHydroponicsTray1", "hash": -310178617, "desc": ""}, "ItemWreckageLargeExtendableRadiator01": {"name": "ItemWreckageLargeExtendableRadiator01", "hash": -997763, "desc": ""}, "ItemWreckageStructureRTG1": {"name": "ItemWreckageStructureRTG1", "hash": 391453348, "desc": ""}, "ItemWreckageStructureWeatherStation002": {"name": "ItemWreckageStructureWeatherStation002", "hash": 1464424921, "desc": ""}, "ItemWreckageStructureWeatherStation001": {"name": "ItemWreckageStructureWeatherStation001", "hash": -834664349, "desc": ""}, "ItemWreckageStructureWeatherStation006": {"name": "ItemWreckageStructureWeatherStation006", "hash": 1344576960, "desc": ""}, "ItemWreckageStructureWeatherStation003": {"name": "ItemWreckageStructureWeatherStation003", "hash": 542009679, "desc": ""}, "ItemWreckageStructureWeatherStation008": {"name": "ItemWreckageStructureWeatherStation008", "hash": -1214467897, "desc": ""}, "ItemWreckageStructureWeatherStation007": {"name": "ItemWreckageStructureWeatherStation007", "hash": 656649558, "desc": ""}, "ItemWreckageStructureWeatherStation005": {"name": "ItemWreckageStructureWeatherStation005", "hash": -919745414, "desc": ""}, "ItemWreckageStructureWeatherStation004": {"name": "ItemWreckageStructureWeatherStation004", "hash": -1104478996, "desc": ""}, "ItemWreckageTurbineGenerator2": {"name": "ItemWreckageTurbineGenerator2", "hash": 98602599, "desc": ""}, "ItemWreckageTurbineGenerator1": {"name": "ItemWreckageTurbineGenerator1", "hash": -1662394403, "desc": ""}, "ItemWreckageTurbineGenerator3": {"name": "ItemWreckageTurbineGenerator3", "hash": 1927790321, "desc": ""}, "ItemWreckageWallCooler2": {"name": "ItemWreckageWallCooler2", "hash": 45733800, "desc": ""}, "ItemWreckageWallCooler1": {"name": "ItemWreckageWallCooler1", "hash": -1682930158, "desc": ""}, "ItemWrench": {"name": "ItemWrench", "hash": -1886261558, "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures"}, "CartridgeElectronicReader": {"name": "CartridgeElectronicReader", "hash": -1462180176, "desc": ""}}} \ No newline at end of file diff --git a/www/img/stationpedia/AccessCardBlack.png b/www/img/stationpedia/AccessCardBlack.png index a9a3ca1..9d83dd3 100644 Binary files a/www/img/stationpedia/AccessCardBlack.png and b/www/img/stationpedia/AccessCardBlack.png differ diff --git a/www/img/stationpedia/AccessCardBlue.png b/www/img/stationpedia/AccessCardBlue.png index bd88e09..65ae49a 100644 Binary files a/www/img/stationpedia/AccessCardBlue.png and b/www/img/stationpedia/AccessCardBlue.png differ diff --git a/www/img/stationpedia/AccessCardBrown.png b/www/img/stationpedia/AccessCardBrown.png index 8bf132e..b92b36a 100644 Binary files a/www/img/stationpedia/AccessCardBrown.png and b/www/img/stationpedia/AccessCardBrown.png differ diff --git a/www/img/stationpedia/AccessCardGray.png b/www/img/stationpedia/AccessCardGray.png index 7e6bd9e..7c07c35 100644 Binary files a/www/img/stationpedia/AccessCardGray.png and b/www/img/stationpedia/AccessCardGray.png differ diff --git a/www/img/stationpedia/AccessCardGreen.png b/www/img/stationpedia/AccessCardGreen.png index 84a7105..eb05b79 100644 Binary files a/www/img/stationpedia/AccessCardGreen.png and b/www/img/stationpedia/AccessCardGreen.png differ diff --git a/www/img/stationpedia/AccessCardKhaki.png b/www/img/stationpedia/AccessCardKhaki.png index b5c3733..435844f 100644 Binary files a/www/img/stationpedia/AccessCardKhaki.png and b/www/img/stationpedia/AccessCardKhaki.png differ diff --git a/www/img/stationpedia/AccessCardOrange.png b/www/img/stationpedia/AccessCardOrange.png index f4c9d3d..893ce21 100644 Binary files a/www/img/stationpedia/AccessCardOrange.png and b/www/img/stationpedia/AccessCardOrange.png differ diff --git a/www/img/stationpedia/AccessCardPink.png b/www/img/stationpedia/AccessCardPink.png index 47234f9..2dd6680 100644 Binary files a/www/img/stationpedia/AccessCardPink.png and b/www/img/stationpedia/AccessCardPink.png differ diff --git a/www/img/stationpedia/AccessCardPurple.png b/www/img/stationpedia/AccessCardPurple.png index 9401ac0..0083cbe 100644 Binary files a/www/img/stationpedia/AccessCardPurple.png and b/www/img/stationpedia/AccessCardPurple.png differ diff --git a/www/img/stationpedia/AccessCardRed.png b/www/img/stationpedia/AccessCardRed.png index b4dd68f..135c647 100644 Binary files a/www/img/stationpedia/AccessCardRed.png and b/www/img/stationpedia/AccessCardRed.png differ diff --git a/www/img/stationpedia/AccessCardWhite.png b/www/img/stationpedia/AccessCardWhite.png index 750dafb..12d722f 100644 Binary files a/www/img/stationpedia/AccessCardWhite.png and b/www/img/stationpedia/AccessCardWhite.png differ diff --git a/www/img/stationpedia/AccessCardYellow.png b/www/img/stationpedia/AccessCardYellow.png index dd8f17d..1e0a2be 100644 Binary files a/www/img/stationpedia/AccessCardYellow.png and b/www/img/stationpedia/AccessCardYellow.png differ diff --git a/www/img/stationpedia/ApplianceChemistryStation.png b/www/img/stationpedia/ApplianceChemistryStation.png index 6fbb721..90045e7 100644 Binary files a/www/img/stationpedia/ApplianceChemistryStation.png and b/www/img/stationpedia/ApplianceChemistryStation.png differ diff --git a/www/img/stationpedia/ApplianceDeskLampLeft.png b/www/img/stationpedia/ApplianceDeskLampLeft.png index a66a9e1..43b7c0a 100644 Binary files a/www/img/stationpedia/ApplianceDeskLampLeft.png and b/www/img/stationpedia/ApplianceDeskLampLeft.png differ diff --git a/www/img/stationpedia/ApplianceDeskLampRight.png b/www/img/stationpedia/ApplianceDeskLampRight.png index 2fb4ded..e318ae7 100644 Binary files a/www/img/stationpedia/ApplianceDeskLampRight.png and b/www/img/stationpedia/ApplianceDeskLampRight.png differ diff --git a/www/img/stationpedia/ApplianceMicrowave.png b/www/img/stationpedia/ApplianceMicrowave.png index 595710a..ea6ab82 100644 Binary files a/www/img/stationpedia/ApplianceMicrowave.png and b/www/img/stationpedia/ApplianceMicrowave.png differ diff --git a/www/img/stationpedia/AppliancePackagingMachine.png b/www/img/stationpedia/AppliancePackagingMachine.png index 1e71528..6aebfcf 100644 Binary files a/www/img/stationpedia/AppliancePackagingMachine.png and b/www/img/stationpedia/AppliancePackagingMachine.png differ diff --git a/www/img/stationpedia/AppliancePaintMixer.png b/www/img/stationpedia/AppliancePaintMixer.png index 3f03a83..34d9c52 100644 Binary files a/www/img/stationpedia/AppliancePaintMixer.png and b/www/img/stationpedia/AppliancePaintMixer.png differ diff --git a/www/img/stationpedia/AppliancePlantGeneticAnalyzer.png b/www/img/stationpedia/AppliancePlantGeneticAnalyzer.png index 9ea6a0c..db44bbb 100644 Binary files a/www/img/stationpedia/AppliancePlantGeneticAnalyzer.png and b/www/img/stationpedia/AppliancePlantGeneticAnalyzer.png differ diff --git a/www/img/stationpedia/AppliancePlantGeneticSplicer.png b/www/img/stationpedia/AppliancePlantGeneticSplicer.png index 2ae2147..a939fcb 100644 Binary files a/www/img/stationpedia/AppliancePlantGeneticSplicer.png and b/www/img/stationpedia/AppliancePlantGeneticSplicer.png differ diff --git a/www/img/stationpedia/AppliancePlantGeneticStabilizer.png b/www/img/stationpedia/AppliancePlantGeneticStabilizer.png index d54f217..42c47de 100644 Binary files a/www/img/stationpedia/AppliancePlantGeneticStabilizer.png and b/www/img/stationpedia/AppliancePlantGeneticStabilizer.png differ diff --git a/www/img/stationpedia/ApplianceReagentProcessor.png b/www/img/stationpedia/ApplianceReagentProcessor.png index 70663f0..463ee1a 100644 Binary files a/www/img/stationpedia/ApplianceReagentProcessor.png and b/www/img/stationpedia/ApplianceReagentProcessor.png differ diff --git a/www/img/stationpedia/ApplianceSeedTray.png b/www/img/stationpedia/ApplianceSeedTray.png index d3e534b..ae8d03d 100644 Binary files a/www/img/stationpedia/ApplianceSeedTray.png and b/www/img/stationpedia/ApplianceSeedTray.png differ diff --git a/www/img/stationpedia/ApplianceTabletDock.png b/www/img/stationpedia/ApplianceTabletDock.png index 01094d6..8b1338a 100644 Binary files a/www/img/stationpedia/ApplianceTabletDock.png and b/www/img/stationpedia/ApplianceTabletDock.png differ diff --git a/www/img/stationpedia/AutolathePrinterMod.png b/www/img/stationpedia/AutolathePrinterMod.png index 64ddd33..2d0de1c 100644 Binary files a/www/img/stationpedia/AutolathePrinterMod.png and b/www/img/stationpedia/AutolathePrinterMod.png differ diff --git a/www/img/stationpedia/Battery_Wireless_cell.png b/www/img/stationpedia/Battery_Wireless_cell.png index 39f9dd8..37ac6c7 100644 Binary files a/www/img/stationpedia/Battery_Wireless_cell.png and b/www/img/stationpedia/Battery_Wireless_cell.png differ diff --git a/www/img/stationpedia/Battery_Wireless_cell_Big.png b/www/img/stationpedia/Battery_Wireless_cell_Big.png index ffd9ec7..b02f7ba 100644 Binary files a/www/img/stationpedia/Battery_Wireless_cell_Big.png and b/www/img/stationpedia/Battery_Wireless_cell_Big.png differ diff --git a/www/img/stationpedia/CardboardBox.png b/www/img/stationpedia/CardboardBox.png index 61729e8..1d4be03 100644 Binary files a/www/img/stationpedia/CardboardBox.png and b/www/img/stationpedia/CardboardBox.png differ diff --git a/www/img/stationpedia/CartridgeAccessController.png b/www/img/stationpedia/CartridgeAccessController.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeAccessController.png and b/www/img/stationpedia/CartridgeAccessController.png differ diff --git a/www/img/stationpedia/CartridgeAtmosAnalyser.png b/www/img/stationpedia/CartridgeAtmosAnalyser.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeAtmosAnalyser.png and b/www/img/stationpedia/CartridgeAtmosAnalyser.png differ diff --git a/www/img/stationpedia/CartridgeConfiguration.png b/www/img/stationpedia/CartridgeConfiguration.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeConfiguration.png and b/www/img/stationpedia/CartridgeConfiguration.png differ diff --git a/www/img/stationpedia/CartridgeElectronicReader.png b/www/img/stationpedia/CartridgeElectronicReader.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeElectronicReader.png and b/www/img/stationpedia/CartridgeElectronicReader.png differ diff --git a/www/img/stationpedia/CartridgeGPS.png b/www/img/stationpedia/CartridgeGPS.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeGPS.png and b/www/img/stationpedia/CartridgeGPS.png differ diff --git a/www/img/stationpedia/CartridgeGuide.png b/www/img/stationpedia/CartridgeGuide.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeGuide.png and b/www/img/stationpedia/CartridgeGuide.png differ diff --git a/www/img/stationpedia/CartridgeMedicalAnalyser.png b/www/img/stationpedia/CartridgeMedicalAnalyser.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeMedicalAnalyser.png and b/www/img/stationpedia/CartridgeMedicalAnalyser.png differ diff --git a/www/img/stationpedia/CartridgeNetworkAnalyser.png b/www/img/stationpedia/CartridgeNetworkAnalyser.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeNetworkAnalyser.png and b/www/img/stationpedia/CartridgeNetworkAnalyser.png differ diff --git a/www/img/stationpedia/CartridgeOreScanner.png b/www/img/stationpedia/CartridgeOreScanner.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeOreScanner.png and b/www/img/stationpedia/CartridgeOreScanner.png differ diff --git a/www/img/stationpedia/CartridgeOreScannerColor.png b/www/img/stationpedia/CartridgeOreScannerColor.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeOreScannerColor.png and b/www/img/stationpedia/CartridgeOreScannerColor.png differ diff --git a/www/img/stationpedia/CartridgeTracker.png b/www/img/stationpedia/CartridgeTracker.png index 6a127a1..fda79b9 100644 Binary files a/www/img/stationpedia/CartridgeTracker.png and b/www/img/stationpedia/CartridgeTracker.png differ diff --git a/www/img/stationpedia/CircuitboardAdvAirlockControl.png b/www/img/stationpedia/CircuitboardAdvAirlockControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardAdvAirlockControl.png and b/www/img/stationpedia/CircuitboardAdvAirlockControl.png differ diff --git a/www/img/stationpedia/CircuitboardAirControl.png b/www/img/stationpedia/CircuitboardAirControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardAirControl.png and b/www/img/stationpedia/CircuitboardAirControl.png differ diff --git a/www/img/stationpedia/CircuitboardAirlockControl.png b/www/img/stationpedia/CircuitboardAirlockControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardAirlockControl.png and b/www/img/stationpedia/CircuitboardAirlockControl.png differ diff --git a/www/img/stationpedia/CircuitboardCameraDisplay.png b/www/img/stationpedia/CircuitboardCameraDisplay.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardCameraDisplay.png and b/www/img/stationpedia/CircuitboardCameraDisplay.png differ diff --git a/www/img/stationpedia/CircuitboardDoorControl.png b/www/img/stationpedia/CircuitboardDoorControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardDoorControl.png and b/www/img/stationpedia/CircuitboardDoorControl.png differ diff --git a/www/img/stationpedia/CircuitboardGasDisplay.png b/www/img/stationpedia/CircuitboardGasDisplay.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardGasDisplay.png and b/www/img/stationpedia/CircuitboardGasDisplay.png differ diff --git a/www/img/stationpedia/CircuitboardGraphDisplay.png b/www/img/stationpedia/CircuitboardGraphDisplay.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardGraphDisplay.png and b/www/img/stationpedia/CircuitboardGraphDisplay.png differ diff --git a/www/img/stationpedia/CircuitboardHashDisplay.png b/www/img/stationpedia/CircuitboardHashDisplay.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardHashDisplay.png and b/www/img/stationpedia/CircuitboardHashDisplay.png differ diff --git a/www/img/stationpedia/CircuitboardModeControl.png b/www/img/stationpedia/CircuitboardModeControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardModeControl.png and b/www/img/stationpedia/CircuitboardModeControl.png differ diff --git a/www/img/stationpedia/CircuitboardPowerControl.png b/www/img/stationpedia/CircuitboardPowerControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardPowerControl.png and b/www/img/stationpedia/CircuitboardPowerControl.png differ diff --git a/www/img/stationpedia/CircuitboardShipDisplay.png b/www/img/stationpedia/CircuitboardShipDisplay.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardShipDisplay.png and b/www/img/stationpedia/CircuitboardShipDisplay.png differ diff --git a/www/img/stationpedia/CircuitboardSolarControl.png b/www/img/stationpedia/CircuitboardSolarControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/CircuitboardSolarControl.png and b/www/img/stationpedia/CircuitboardSolarControl.png differ diff --git a/www/img/stationpedia/CompositeRollCover.png b/www/img/stationpedia/CompositeRollCover.png index 2ee8f0c..b9811c4 100644 Binary files a/www/img/stationpedia/CompositeRollCover.png and b/www/img/stationpedia/CompositeRollCover.png differ diff --git a/www/img/stationpedia/CrateMkII.png b/www/img/stationpedia/CrateMkII.png index 45b8847..7a07bb8 100644 Binary files a/www/img/stationpedia/CrateMkII.png and b/www/img/stationpedia/CrateMkII.png differ diff --git a/www/img/stationpedia/DecayedFood.png b/www/img/stationpedia/DecayedFood.png index e122962..ae986e5 100644 Binary files a/www/img/stationpedia/DecayedFood.png and b/www/img/stationpedia/DecayedFood.png differ diff --git a/www/img/stationpedia/DeviceLfoVolume.png b/www/img/stationpedia/DeviceLfoVolume.png index ca5af52..9a77d16 100644 Binary files a/www/img/stationpedia/DeviceLfoVolume.png and b/www/img/stationpedia/DeviceLfoVolume.png differ diff --git a/www/img/stationpedia/DeviceStepUnit.png b/www/img/stationpedia/DeviceStepUnit.png index 8e3bc56..ad45ca1 100644 Binary files a/www/img/stationpedia/DeviceStepUnit.png and b/www/img/stationpedia/DeviceStepUnit.png differ diff --git a/www/img/stationpedia/DynamicAirConditioner.png b/www/img/stationpedia/DynamicAirConditioner.png index 1623b7e..03a7d85 100644 Binary files a/www/img/stationpedia/DynamicAirConditioner.png and b/www/img/stationpedia/DynamicAirConditioner.png differ diff --git a/www/img/stationpedia/DynamicCrate.png b/www/img/stationpedia/DynamicCrate.png index d855c06..0bcb28f 100644 Binary files a/www/img/stationpedia/DynamicCrate.png and b/www/img/stationpedia/DynamicCrate.png differ diff --git a/www/img/stationpedia/DynamicGPR.png b/www/img/stationpedia/DynamicGPR.png index bd4dfbc..934ed71 100644 Binary files a/www/img/stationpedia/DynamicGPR.png and b/www/img/stationpedia/DynamicGPR.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterAir.png b/www/img/stationpedia/DynamicGasCanisterAir.png index 5fab1d7..3653658 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterAir.png and b/www/img/stationpedia/DynamicGasCanisterAir.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterCarbonDioxide.png b/www/img/stationpedia/DynamicGasCanisterCarbonDioxide.png index d534ad2..54f9a22 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterCarbonDioxide.png and b/www/img/stationpedia/DynamicGasCanisterCarbonDioxide.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterEmpty.png b/www/img/stationpedia/DynamicGasCanisterEmpty.png index 15c34c7..56d3012 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterEmpty.png and b/www/img/stationpedia/DynamicGasCanisterEmpty.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterFuel.png b/www/img/stationpedia/DynamicGasCanisterFuel.png index 4868a1c..553f394 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterFuel.png and b/www/img/stationpedia/DynamicGasCanisterFuel.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterNitrogen.png b/www/img/stationpedia/DynamicGasCanisterNitrogen.png index 27cd660..d4b7e63 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterNitrogen.png and b/www/img/stationpedia/DynamicGasCanisterNitrogen.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterNitrousOxide.png b/www/img/stationpedia/DynamicGasCanisterNitrousOxide.png index 27cd660..d4b7e63 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterNitrousOxide.png and b/www/img/stationpedia/DynamicGasCanisterNitrousOxide.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterOxygen.png b/www/img/stationpedia/DynamicGasCanisterOxygen.png index 0508c86..9166344 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterOxygen.png and b/www/img/stationpedia/DynamicGasCanisterOxygen.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterPollutants.png b/www/img/stationpedia/DynamicGasCanisterPollutants.png index d534ad2..54f9a22 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterPollutants.png and b/www/img/stationpedia/DynamicGasCanisterPollutants.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterRocketFuel.png b/www/img/stationpedia/DynamicGasCanisterRocketFuel.png index 45ea793..616b685 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterRocketFuel.png and b/www/img/stationpedia/DynamicGasCanisterRocketFuel.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterVolatiles.png b/www/img/stationpedia/DynamicGasCanisterVolatiles.png index 1871765..ee812d6 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterVolatiles.png and b/www/img/stationpedia/DynamicGasCanisterVolatiles.png differ diff --git a/www/img/stationpedia/DynamicGasCanisterWater.png b/www/img/stationpedia/DynamicGasCanisterWater.png index 6d5ae93..e5d8c7f 100644 Binary files a/www/img/stationpedia/DynamicGasCanisterWater.png and b/www/img/stationpedia/DynamicGasCanisterWater.png differ diff --git a/www/img/stationpedia/DynamicGasTankAdvanced.png b/www/img/stationpedia/DynamicGasTankAdvanced.png index 882815d..039f0b0 100644 Binary files a/www/img/stationpedia/DynamicGasTankAdvanced.png and b/www/img/stationpedia/DynamicGasTankAdvanced.png differ diff --git a/www/img/stationpedia/DynamicGasTankAdvancedOxygen.png b/www/img/stationpedia/DynamicGasTankAdvancedOxygen.png new file mode 100644 index 0000000..039f0b0 Binary files /dev/null and b/www/img/stationpedia/DynamicGasTankAdvancedOxygen.png differ diff --git a/www/img/stationpedia/DynamicGenerator.png b/www/img/stationpedia/DynamicGenerator.png index bf112f6..7abb935 100644 Binary files a/www/img/stationpedia/DynamicGenerator.png and b/www/img/stationpedia/DynamicGenerator.png differ diff --git a/www/img/stationpedia/DynamicHydroponics.png b/www/img/stationpedia/DynamicHydroponics.png index 950cfc1..a1ac882 100644 Binary files a/www/img/stationpedia/DynamicHydroponics.png and b/www/img/stationpedia/DynamicHydroponics.png differ diff --git a/www/img/stationpedia/DynamicLight.png b/www/img/stationpedia/DynamicLight.png index 7e413af..82ee201 100644 Binary files a/www/img/stationpedia/DynamicLight.png and b/www/img/stationpedia/DynamicLight.png differ diff --git a/www/img/stationpedia/DynamicLiquidCanisterEmpty.png b/www/img/stationpedia/DynamicLiquidCanisterEmpty.png index 8519adb..a3a3594 100644 Binary files a/www/img/stationpedia/DynamicLiquidCanisterEmpty.png and b/www/img/stationpedia/DynamicLiquidCanisterEmpty.png differ diff --git a/www/img/stationpedia/DynamicMKIILiquidCanisterEmpty.png b/www/img/stationpedia/DynamicMKIILiquidCanisterEmpty.png index 4d263f0..09394c6 100644 Binary files a/www/img/stationpedia/DynamicMKIILiquidCanisterEmpty.png and b/www/img/stationpedia/DynamicMKIILiquidCanisterEmpty.png differ diff --git a/www/img/stationpedia/DynamicMKIILiquidCanisterWater.png b/www/img/stationpedia/DynamicMKIILiquidCanisterWater.png index c3f252c..ab1ddd0 100644 Binary files a/www/img/stationpedia/DynamicMKIILiquidCanisterWater.png and b/www/img/stationpedia/DynamicMKIILiquidCanisterWater.png differ diff --git a/www/img/stationpedia/DynamicScrubber.png b/www/img/stationpedia/DynamicScrubber.png index a303f86..87426a6 100644 Binary files a/www/img/stationpedia/DynamicScrubber.png and b/www/img/stationpedia/DynamicScrubber.png differ diff --git a/www/img/stationpedia/DynamicSkeleton.png b/www/img/stationpedia/DynamicSkeleton.png index efa3a0a..5fd3b2e 100644 Binary files a/www/img/stationpedia/DynamicSkeleton.png and b/www/img/stationpedia/DynamicSkeleton.png differ diff --git a/www/img/stationpedia/ElectronicPrinterMod.png b/www/img/stationpedia/ElectronicPrinterMod.png index 5a1025c..a2380a8 100644 Binary files a/www/img/stationpedia/ElectronicPrinterMod.png and b/www/img/stationpedia/ElectronicPrinterMod.png differ diff --git a/www/img/stationpedia/ElevatorCarrage.png b/www/img/stationpedia/ElevatorCarrage.png index 0d4cfe4..3dd37b4 100644 Binary files a/www/img/stationpedia/ElevatorCarrage.png and b/www/img/stationpedia/ElevatorCarrage.png differ diff --git a/www/img/stationpedia/EntityChick.png b/www/img/stationpedia/EntityChick.png index a6e0ef9..baed7a7 100644 Binary files a/www/img/stationpedia/EntityChick.png and b/www/img/stationpedia/EntityChick.png differ diff --git a/www/img/stationpedia/EntityChickenBrown.png b/www/img/stationpedia/EntityChickenBrown.png index c6e23e0..3ce6d4e 100644 Binary files a/www/img/stationpedia/EntityChickenBrown.png and b/www/img/stationpedia/EntityChickenBrown.png differ diff --git a/www/img/stationpedia/EntityChickenWhite.png b/www/img/stationpedia/EntityChickenWhite.png index eccf485..8cf6319 100644 Binary files a/www/img/stationpedia/EntityChickenWhite.png and b/www/img/stationpedia/EntityChickenWhite.png differ diff --git a/www/img/stationpedia/EntityRoosterBlack.png b/www/img/stationpedia/EntityRoosterBlack.png index 47c335c..fab743d 100644 Binary files a/www/img/stationpedia/EntityRoosterBlack.png and b/www/img/stationpedia/EntityRoosterBlack.png differ diff --git a/www/img/stationpedia/EntityRoosterBrown.png b/www/img/stationpedia/EntityRoosterBrown.png index 4f21c9a..8a37bfc 100644 Binary files a/www/img/stationpedia/EntityRoosterBrown.png and b/www/img/stationpedia/EntityRoosterBrown.png differ diff --git a/www/img/stationpedia/Fertilizer.png b/www/img/stationpedia/Fertilizer.png index 4db7f1b..e02ac4b 100644 Binary files a/www/img/stationpedia/Fertilizer.png and b/www/img/stationpedia/Fertilizer.png differ diff --git a/www/img/stationpedia/FireArmSMG.png b/www/img/stationpedia/FireArmSMG.png index 9ff9cc9..038f2d8 100644 Binary files a/www/img/stationpedia/FireArmSMG.png and b/www/img/stationpedia/FireArmSMG.png differ diff --git a/www/img/stationpedia/FlareGun.png b/www/img/stationpedia/FlareGun.png index bfa7d80..9e886a0 100644 Binary files a/www/img/stationpedia/FlareGun.png and b/www/img/stationpedia/FlareGun.png differ diff --git a/www/img/stationpedia/H2Combustor.png b/www/img/stationpedia/H2Combustor.png index a588ce8..23dcf68 100644 Binary files a/www/img/stationpedia/H2Combustor.png and b/www/img/stationpedia/H2Combustor.png differ diff --git a/www/img/stationpedia/Handgun.png b/www/img/stationpedia/Handgun.png index 661dfb2..b952a58 100644 Binary files a/www/img/stationpedia/Handgun.png and b/www/img/stationpedia/Handgun.png differ diff --git a/www/img/stationpedia/HandgunMagazine.png b/www/img/stationpedia/HandgunMagazine.png index 4b64f11..0df13a4 100644 Binary files a/www/img/stationpedia/HandgunMagazine.png and b/www/img/stationpedia/HandgunMagazine.png differ diff --git a/www/img/stationpedia/HumanSkull.png b/www/img/stationpedia/HumanSkull.png index 6082c93..1cad9ed 100644 Binary files a/www/img/stationpedia/HumanSkull.png and b/www/img/stationpedia/HumanSkull.png differ diff --git a/www/img/stationpedia/ImGuiCircuitboardAirlockControl.png b/www/img/stationpedia/ImGuiCircuitboardAirlockControl.png index 5935a58..cd16532 100644 Binary files a/www/img/stationpedia/ImGuiCircuitboardAirlockControl.png and b/www/img/stationpedia/ImGuiCircuitboardAirlockControl.png differ diff --git a/www/img/stationpedia/ItemActiveVent.png b/www/img/stationpedia/ItemActiveVent.png index b5fbe55..d5456b0 100644 Binary files a/www/img/stationpedia/ItemActiveVent.png and b/www/img/stationpedia/ItemActiveVent.png differ diff --git a/www/img/stationpedia/ItemAdvancedTablet.png b/www/img/stationpedia/ItemAdvancedTablet.png index dc855cf..d8393e9 100644 Binary files a/www/img/stationpedia/ItemAdvancedTablet.png and b/www/img/stationpedia/ItemAdvancedTablet.png differ diff --git a/www/img/stationpedia/ItemAlienMushroom.png b/www/img/stationpedia/ItemAlienMushroom.png index c3f0034..db2ca20 100644 Binary files a/www/img/stationpedia/ItemAlienMushroom.png and b/www/img/stationpedia/ItemAlienMushroom.png differ diff --git a/www/img/stationpedia/ItemAmmoBox.png b/www/img/stationpedia/ItemAmmoBox.png index 86a579e..c7ffd78 100644 Binary files a/www/img/stationpedia/ItemAmmoBox.png and b/www/img/stationpedia/ItemAmmoBox.png differ diff --git a/www/img/stationpedia/ItemAngleGrinder.png b/www/img/stationpedia/ItemAngleGrinder.png index d838792..e23493e 100644 Binary files a/www/img/stationpedia/ItemAngleGrinder.png and b/www/img/stationpedia/ItemAngleGrinder.png differ diff --git a/www/img/stationpedia/ItemArcWelder.png b/www/img/stationpedia/ItemArcWelder.png index b28e4f9..f021495 100644 Binary files a/www/img/stationpedia/ItemArcWelder.png and b/www/img/stationpedia/ItemArcWelder.png differ diff --git a/www/img/stationpedia/ItemAreaPowerControl.png b/www/img/stationpedia/ItemAreaPowerControl.png index 54377db..f0e033c 100644 Binary files a/www/img/stationpedia/ItemAreaPowerControl.png and b/www/img/stationpedia/ItemAreaPowerControl.png differ diff --git a/www/img/stationpedia/ItemAstroloyIngot.png b/www/img/stationpedia/ItemAstroloyIngot.png index bb2b46d..a257b11 100644 Binary files a/www/img/stationpedia/ItemAstroloyIngot.png and b/www/img/stationpedia/ItemAstroloyIngot.png differ diff --git a/www/img/stationpedia/ItemAstroloySheets.png b/www/img/stationpedia/ItemAstroloySheets.png index 6e98134..d460d33 100644 Binary files a/www/img/stationpedia/ItemAstroloySheets.png and b/www/img/stationpedia/ItemAstroloySheets.png differ diff --git a/www/img/stationpedia/ItemAuthoringTool.png b/www/img/stationpedia/ItemAuthoringTool.png index 764cdbd..fbdcde2 100644 Binary files a/www/img/stationpedia/ItemAuthoringTool.png and b/www/img/stationpedia/ItemAuthoringTool.png differ diff --git a/www/img/stationpedia/ItemAuthoringToolRocketNetwork.png b/www/img/stationpedia/ItemAuthoringToolRocketNetwork.png new file mode 100644 index 0000000..fbdcde2 Binary files /dev/null and b/www/img/stationpedia/ItemAuthoringToolRocketNetwork.png differ diff --git a/www/img/stationpedia/ItemBasketBall.png b/www/img/stationpedia/ItemBasketBall.png index 2910ddf..892a13e 100644 Binary files a/www/img/stationpedia/ItemBasketBall.png and b/www/img/stationpedia/ItemBasketBall.png differ diff --git a/www/img/stationpedia/ItemBatteryCell.png b/www/img/stationpedia/ItemBatteryCell.png index fca4c80..bb5d933 100644 Binary files a/www/img/stationpedia/ItemBatteryCell.png and b/www/img/stationpedia/ItemBatteryCell.png differ diff --git a/www/img/stationpedia/ItemBatteryCellLarge.png b/www/img/stationpedia/ItemBatteryCellLarge.png index a6d339f..bd8efb4 100644 Binary files a/www/img/stationpedia/ItemBatteryCellLarge.png and b/www/img/stationpedia/ItemBatteryCellLarge.png differ diff --git a/www/img/stationpedia/ItemBatteryCellNuclear.png b/www/img/stationpedia/ItemBatteryCellNuclear.png index 7257cfc..7d8685a 100644 Binary files a/www/img/stationpedia/ItemBatteryCellNuclear.png and b/www/img/stationpedia/ItemBatteryCellNuclear.png differ diff --git a/www/img/stationpedia/ItemBatteryCharger.png b/www/img/stationpedia/ItemBatteryCharger.png index 89b0287..37bb5fe 100644 Binary files a/www/img/stationpedia/ItemBatteryCharger.png and b/www/img/stationpedia/ItemBatteryCharger.png differ diff --git a/www/img/stationpedia/ItemBatteryChargerSmall.png b/www/img/stationpedia/ItemBatteryChargerSmall.png index 88e4206..43e5ad7 100644 Binary files a/www/img/stationpedia/ItemBatteryChargerSmall.png and b/www/img/stationpedia/ItemBatteryChargerSmall.png differ diff --git a/www/img/stationpedia/ItemBeacon.png b/www/img/stationpedia/ItemBeacon.png index 1fa18d7..3677f87 100644 Binary files a/www/img/stationpedia/ItemBeacon.png and b/www/img/stationpedia/ItemBeacon.png differ diff --git a/www/img/stationpedia/ItemBreadLoaf.png b/www/img/stationpedia/ItemBreadLoaf.png index 7986ff7..b766ad0 100644 Binary files a/www/img/stationpedia/ItemBreadLoaf.png and b/www/img/stationpedia/ItemBreadLoaf.png differ diff --git a/www/img/stationpedia/ItemCableAnalyser.png b/www/img/stationpedia/ItemCableAnalyser.png index 8bb7c46..7116d04 100644 Binary files a/www/img/stationpedia/ItemCableAnalyser.png and b/www/img/stationpedia/ItemCableAnalyser.png differ diff --git a/www/img/stationpedia/ItemCableCoil.png b/www/img/stationpedia/ItemCableCoil.png index d6524bc..dbdddde 100644 Binary files a/www/img/stationpedia/ItemCableCoil.png and b/www/img/stationpedia/ItemCableCoil.png differ diff --git a/www/img/stationpedia/ItemCableCoilHeavy.png b/www/img/stationpedia/ItemCableCoilHeavy.png index e031528..0841937 100644 Binary files a/www/img/stationpedia/ItemCableCoilHeavy.png and b/www/img/stationpedia/ItemCableCoilHeavy.png differ diff --git a/www/img/stationpedia/ItemCableFuse.png b/www/img/stationpedia/ItemCableFuse.png index 517e58d..06f79fd 100644 Binary files a/www/img/stationpedia/ItemCableFuse.png and b/www/img/stationpedia/ItemCableFuse.png differ diff --git a/www/img/stationpedia/ItemCannedCondensedMilk.png b/www/img/stationpedia/ItemCannedCondensedMilk.png index 6fd4efd..9b90c47 100644 Binary files a/www/img/stationpedia/ItemCannedCondensedMilk.png and b/www/img/stationpedia/ItemCannedCondensedMilk.png differ diff --git a/www/img/stationpedia/ItemCannedEdamame.png b/www/img/stationpedia/ItemCannedEdamame.png index fe47397..a7e666e 100644 Binary files a/www/img/stationpedia/ItemCannedEdamame.png and b/www/img/stationpedia/ItemCannedEdamame.png differ diff --git a/www/img/stationpedia/ItemCannedMushroom.png b/www/img/stationpedia/ItemCannedMushroom.png index 2aeeee8..c2bf6d0 100644 Binary files a/www/img/stationpedia/ItemCannedMushroom.png and b/www/img/stationpedia/ItemCannedMushroom.png differ diff --git a/www/img/stationpedia/ItemCannedPowderedEggs.png b/www/img/stationpedia/ItemCannedPowderedEggs.png index 885bc9e..7192835 100644 Binary files a/www/img/stationpedia/ItemCannedPowderedEggs.png and b/www/img/stationpedia/ItemCannedPowderedEggs.png differ diff --git a/www/img/stationpedia/ItemCannedRicePudding.png b/www/img/stationpedia/ItemCannedRicePudding.png index 3c93d08..b9f4609 100644 Binary files a/www/img/stationpedia/ItemCannedRicePudding.png and b/www/img/stationpedia/ItemCannedRicePudding.png differ diff --git a/www/img/stationpedia/ItemCerealBar.png b/www/img/stationpedia/ItemCerealBar.png index ca8e7e6..3d89db6 100644 Binary files a/www/img/stationpedia/ItemCerealBar.png and b/www/img/stationpedia/ItemCerealBar.png differ diff --git a/www/img/stationpedia/ItemCharcoal.png b/www/img/stationpedia/ItemCharcoal.png index 874a6e7..54920c8 100644 Binary files a/www/img/stationpedia/ItemCharcoal.png and b/www/img/stationpedia/ItemCharcoal.png differ diff --git a/www/img/stationpedia/ItemChemLightBlue.png b/www/img/stationpedia/ItemChemLightBlue.png index 0ef417a..0f7b98d 100644 Binary files a/www/img/stationpedia/ItemChemLightBlue.png and b/www/img/stationpedia/ItemChemLightBlue.png differ diff --git a/www/img/stationpedia/ItemChemLightGreen.png b/www/img/stationpedia/ItemChemLightGreen.png index 33e4fa5..1a8e95a 100644 Binary files a/www/img/stationpedia/ItemChemLightGreen.png and b/www/img/stationpedia/ItemChemLightGreen.png differ diff --git a/www/img/stationpedia/ItemChemLightRed.png b/www/img/stationpedia/ItemChemLightRed.png index 425bb53..3f8d24a 100644 Binary files a/www/img/stationpedia/ItemChemLightRed.png and b/www/img/stationpedia/ItemChemLightRed.png differ diff --git a/www/img/stationpedia/ItemChemLightWhite.png b/www/img/stationpedia/ItemChemLightWhite.png index 47ebb2a..6a9bea5 100644 Binary files a/www/img/stationpedia/ItemChemLightWhite.png and b/www/img/stationpedia/ItemChemLightWhite.png differ diff --git a/www/img/stationpedia/ItemChemLightYellow.png b/www/img/stationpedia/ItemChemLightYellow.png index 96039cc..114ae46 100644 Binary files a/www/img/stationpedia/ItemChemLightYellow.png and b/www/img/stationpedia/ItemChemLightYellow.png differ diff --git a/www/img/stationpedia/ItemCoalOre.png b/www/img/stationpedia/ItemCoalOre.png index 7b1d5cd..b1b89fc 100644 Binary files a/www/img/stationpedia/ItemCoalOre.png and b/www/img/stationpedia/ItemCoalOre.png differ diff --git a/www/img/stationpedia/ItemCobaltOre.png b/www/img/stationpedia/ItemCobaltOre.png index b1d8e99..0ae2d28 100644 Binary files a/www/img/stationpedia/ItemCobaltOre.png and b/www/img/stationpedia/ItemCobaltOre.png differ diff --git a/www/img/stationpedia/ItemCoffeeMug.png b/www/img/stationpedia/ItemCoffeeMug.png index 476d6e7..8ab24e6 100644 Binary files a/www/img/stationpedia/ItemCoffeeMug.png and b/www/img/stationpedia/ItemCoffeeMug.png differ diff --git a/www/img/stationpedia/ItemConstantanIngot.png b/www/img/stationpedia/ItemConstantanIngot.png index 67e16fd..2a9292b 100644 Binary files a/www/img/stationpedia/ItemConstantanIngot.png and b/www/img/stationpedia/ItemConstantanIngot.png differ diff --git a/www/img/stationpedia/ItemCookedCondensedMilk.png b/www/img/stationpedia/ItemCookedCondensedMilk.png index cadf9c7..d1d1cd9 100644 Binary files a/www/img/stationpedia/ItemCookedCondensedMilk.png and b/www/img/stationpedia/ItemCookedCondensedMilk.png differ diff --git a/www/img/stationpedia/ItemCookedCorn.png b/www/img/stationpedia/ItemCookedCorn.png index 29ad69c..bfccded 100644 Binary files a/www/img/stationpedia/ItemCookedCorn.png and b/www/img/stationpedia/ItemCookedCorn.png differ diff --git a/www/img/stationpedia/ItemCookedMushroom.png b/www/img/stationpedia/ItemCookedMushroom.png index fe74e92..5a7b9b8 100644 Binary files a/www/img/stationpedia/ItemCookedMushroom.png and b/www/img/stationpedia/ItemCookedMushroom.png differ diff --git a/www/img/stationpedia/ItemCookedPowderedEggs.png b/www/img/stationpedia/ItemCookedPowderedEggs.png index 4082824..1c9825e 100644 Binary files a/www/img/stationpedia/ItemCookedPowderedEggs.png and b/www/img/stationpedia/ItemCookedPowderedEggs.png differ diff --git a/www/img/stationpedia/ItemCookedPumpkin.png b/www/img/stationpedia/ItemCookedPumpkin.png index 576a78f..15c6e47 100644 Binary files a/www/img/stationpedia/ItemCookedPumpkin.png and b/www/img/stationpedia/ItemCookedPumpkin.png differ diff --git a/www/img/stationpedia/ItemCookedRice.png b/www/img/stationpedia/ItemCookedRice.png index 57a061c..216c019 100644 Binary files a/www/img/stationpedia/ItemCookedRice.png and b/www/img/stationpedia/ItemCookedRice.png differ diff --git a/www/img/stationpedia/ItemCookedSoybean.png b/www/img/stationpedia/ItemCookedSoybean.png index b855390..327a54e 100644 Binary files a/www/img/stationpedia/ItemCookedSoybean.png and b/www/img/stationpedia/ItemCookedSoybean.png differ diff --git a/www/img/stationpedia/ItemCookedTomato.png b/www/img/stationpedia/ItemCookedTomato.png index 94859f4..84bfeab 100644 Binary files a/www/img/stationpedia/ItemCookedTomato.png and b/www/img/stationpedia/ItemCookedTomato.png differ diff --git a/www/img/stationpedia/ItemCopperIngot.png b/www/img/stationpedia/ItemCopperIngot.png index 6fe293b..4f993cc 100644 Binary files a/www/img/stationpedia/ItemCopperIngot.png and b/www/img/stationpedia/ItemCopperIngot.png differ diff --git a/www/img/stationpedia/ItemCopperOre.png b/www/img/stationpedia/ItemCopperOre.png index 43f148b..506134f 100644 Binary files a/www/img/stationpedia/ItemCopperOre.png and b/www/img/stationpedia/ItemCopperOre.png differ diff --git a/www/img/stationpedia/ItemCorn.png b/www/img/stationpedia/ItemCorn.png index bcca338..a9a801f 100644 Binary files a/www/img/stationpedia/ItemCorn.png and b/www/img/stationpedia/ItemCorn.png differ diff --git a/www/img/stationpedia/ItemCornSoup.png b/www/img/stationpedia/ItemCornSoup.png index 8097dd0..73c8d4a 100644 Binary files a/www/img/stationpedia/ItemCornSoup.png and b/www/img/stationpedia/ItemCornSoup.png differ diff --git a/www/img/stationpedia/ItemCreditCard.png b/www/img/stationpedia/ItemCreditCard.png index 3b70099..dcbb185 100644 Binary files a/www/img/stationpedia/ItemCreditCard.png and b/www/img/stationpedia/ItemCreditCard.png differ diff --git a/www/img/stationpedia/ItemCropHay.png b/www/img/stationpedia/ItemCropHay.png index 93cda1b..4da1be7 100644 Binary files a/www/img/stationpedia/ItemCropHay.png and b/www/img/stationpedia/ItemCropHay.png differ diff --git a/www/img/stationpedia/ItemCrowbar.png b/www/img/stationpedia/ItemCrowbar.png index ab1ecd7..0040d29 100644 Binary files a/www/img/stationpedia/ItemCrowbar.png and b/www/img/stationpedia/ItemCrowbar.png differ diff --git a/www/img/stationpedia/ItemDataDisk.png b/www/img/stationpedia/ItemDataDisk.png index 652b4cd..d158998 100644 Binary files a/www/img/stationpedia/ItemDataDisk.png and b/www/img/stationpedia/ItemDataDisk.png differ diff --git a/www/img/stationpedia/ItemDirtCanister.png b/www/img/stationpedia/ItemDirtCanister.png index aa19496..70e5bf4 100644 Binary files a/www/img/stationpedia/ItemDirtCanister.png and b/www/img/stationpedia/ItemDirtCanister.png differ diff --git a/www/img/stationpedia/ItemDirtyOre.png b/www/img/stationpedia/ItemDirtyOre.png index 4258d2c..3c90b21 100644 Binary files a/www/img/stationpedia/ItemDirtyOre.png and b/www/img/stationpedia/ItemDirtyOre.png differ diff --git a/www/img/stationpedia/ItemDisposableBatteryCharger.png b/www/img/stationpedia/ItemDisposableBatteryCharger.png index e79c8ff..4deeee8 100644 Binary files a/www/img/stationpedia/ItemDisposableBatteryCharger.png and b/www/img/stationpedia/ItemDisposableBatteryCharger.png differ diff --git a/www/img/stationpedia/ItemDrill.png b/www/img/stationpedia/ItemDrill.png index 6dceddd..45cb093 100644 Binary files a/www/img/stationpedia/ItemDrill.png and b/www/img/stationpedia/ItemDrill.png differ diff --git a/www/img/stationpedia/ItemDuctTape.png b/www/img/stationpedia/ItemDuctTape.png index 96331e9..13d34d2 100644 Binary files a/www/img/stationpedia/ItemDuctTape.png and b/www/img/stationpedia/ItemDuctTape.png differ diff --git a/www/img/stationpedia/ItemDynamicAirCon.png b/www/img/stationpedia/ItemDynamicAirCon.png index bccabfe..a219e8a 100644 Binary files a/www/img/stationpedia/ItemDynamicAirCon.png and b/www/img/stationpedia/ItemDynamicAirCon.png differ diff --git a/www/img/stationpedia/ItemDynamicScrubber.png b/www/img/stationpedia/ItemDynamicScrubber.png index d4d97d9..9a2b8d9 100644 Binary files a/www/img/stationpedia/ItemDynamicScrubber.png and b/www/img/stationpedia/ItemDynamicScrubber.png differ diff --git a/www/img/stationpedia/ItemEggCarton.png b/www/img/stationpedia/ItemEggCarton.png index 271a51f..926fc30 100644 Binary files a/www/img/stationpedia/ItemEggCarton.png and b/www/img/stationpedia/ItemEggCarton.png differ diff --git a/www/img/stationpedia/ItemElectronicParts.png b/www/img/stationpedia/ItemElectronicParts.png index 14eb953..720057d 100644 Binary files a/www/img/stationpedia/ItemElectronicParts.png and b/www/img/stationpedia/ItemElectronicParts.png differ diff --git a/www/img/stationpedia/ItemElectrumIngot.png b/www/img/stationpedia/ItemElectrumIngot.png index b851c01..aafba15 100644 Binary files a/www/img/stationpedia/ItemElectrumIngot.png and b/www/img/stationpedia/ItemElectrumIngot.png differ diff --git a/www/img/stationpedia/ItemEmergencyAngleGrinder.png b/www/img/stationpedia/ItemEmergencyAngleGrinder.png index 1ec171c..bb373d9 100644 Binary files a/www/img/stationpedia/ItemEmergencyAngleGrinder.png and b/www/img/stationpedia/ItemEmergencyAngleGrinder.png differ diff --git a/www/img/stationpedia/ItemEmergencyArcWelder.png b/www/img/stationpedia/ItemEmergencyArcWelder.png index 1d01b57..3c42856 100644 Binary files a/www/img/stationpedia/ItemEmergencyArcWelder.png and b/www/img/stationpedia/ItemEmergencyArcWelder.png differ diff --git a/www/img/stationpedia/ItemEmergencyCrowbar.png b/www/img/stationpedia/ItemEmergencyCrowbar.png index 071c0cc..a1988be 100644 Binary files a/www/img/stationpedia/ItemEmergencyCrowbar.png and b/www/img/stationpedia/ItemEmergencyCrowbar.png differ diff --git a/www/img/stationpedia/ItemEmergencyDrill.png b/www/img/stationpedia/ItemEmergencyDrill.png index 206baf8..d3b2c86 100644 Binary files a/www/img/stationpedia/ItemEmergencyDrill.png and b/www/img/stationpedia/ItemEmergencyDrill.png differ diff --git a/www/img/stationpedia/ItemEmergencyEvaSuit.png b/www/img/stationpedia/ItemEmergencyEvaSuit.png index 9bf6e5b..1ef3a54 100644 Binary files a/www/img/stationpedia/ItemEmergencyEvaSuit.png and b/www/img/stationpedia/ItemEmergencyEvaSuit.png differ diff --git a/www/img/stationpedia/ItemEmergencyPickaxe.png b/www/img/stationpedia/ItemEmergencyPickaxe.png index 05b4ade..205fd82 100644 Binary files a/www/img/stationpedia/ItemEmergencyPickaxe.png and b/www/img/stationpedia/ItemEmergencyPickaxe.png differ diff --git a/www/img/stationpedia/ItemEmergencyScrewdriver.png b/www/img/stationpedia/ItemEmergencyScrewdriver.png index 3555c8c..fa64640 100644 Binary files a/www/img/stationpedia/ItemEmergencyScrewdriver.png and b/www/img/stationpedia/ItemEmergencyScrewdriver.png differ diff --git a/www/img/stationpedia/ItemEmergencySpaceHelmet.png b/www/img/stationpedia/ItemEmergencySpaceHelmet.png index 4f99ece..5db8cab 100644 Binary files a/www/img/stationpedia/ItemEmergencySpaceHelmet.png and b/www/img/stationpedia/ItemEmergencySpaceHelmet.png differ diff --git a/www/img/stationpedia/ItemEmergencyToolBelt.png b/www/img/stationpedia/ItemEmergencyToolBelt.png index b7cdd3e..3398ab2 100644 Binary files a/www/img/stationpedia/ItemEmergencyToolBelt.png and b/www/img/stationpedia/ItemEmergencyToolBelt.png differ diff --git a/www/img/stationpedia/ItemEmergencyWireCutters.png b/www/img/stationpedia/ItemEmergencyWireCutters.png index 85b481a..01f0127 100644 Binary files a/www/img/stationpedia/ItemEmergencyWireCutters.png and b/www/img/stationpedia/ItemEmergencyWireCutters.png differ diff --git a/www/img/stationpedia/ItemEmergencyWrench.png b/www/img/stationpedia/ItemEmergencyWrench.png index 2391a4c..21a7593 100644 Binary files a/www/img/stationpedia/ItemEmergencyWrench.png and b/www/img/stationpedia/ItemEmergencyWrench.png differ diff --git a/www/img/stationpedia/ItemEmptyCan.png b/www/img/stationpedia/ItemEmptyCan.png index 49a1112..ff3c5fa 100644 Binary files a/www/img/stationpedia/ItemEmptyCan.png and b/www/img/stationpedia/ItemEmptyCan.png differ diff --git a/www/img/stationpedia/ItemEvaSuit.png b/www/img/stationpedia/ItemEvaSuit.png index 5edb0a3..573ce57 100644 Binary files a/www/img/stationpedia/ItemEvaSuit.png and b/www/img/stationpedia/ItemEvaSuit.png differ diff --git a/www/img/stationpedia/ItemExplosive.png b/www/img/stationpedia/ItemExplosive.png index 6d45e6a..6ece28d 100644 Binary files a/www/img/stationpedia/ItemExplosive.png and b/www/img/stationpedia/ItemExplosive.png differ diff --git a/www/img/stationpedia/ItemFern.png b/www/img/stationpedia/ItemFern.png index 2b2a9df..8ce2c4f 100644 Binary files a/www/img/stationpedia/ItemFern.png and b/www/img/stationpedia/ItemFern.png differ diff --git a/www/img/stationpedia/ItemFertilizedEgg.png b/www/img/stationpedia/ItemFertilizedEgg.png index e3a7705..ea15d89 100644 Binary files a/www/img/stationpedia/ItemFertilizedEgg.png and b/www/img/stationpedia/ItemFertilizedEgg.png differ diff --git a/www/img/stationpedia/ItemFilterFern.png b/www/img/stationpedia/ItemFilterFern.png index 65df1e3..125236a 100644 Binary files a/www/img/stationpedia/ItemFilterFern.png and b/www/img/stationpedia/ItemFilterFern.png differ diff --git a/www/img/stationpedia/ItemFlagSmall.png b/www/img/stationpedia/ItemFlagSmall.png index 7afb3f2..9797b27 100644 Binary files a/www/img/stationpedia/ItemFlagSmall.png and b/www/img/stationpedia/ItemFlagSmall.png differ diff --git a/www/img/stationpedia/ItemFlashingLight.png b/www/img/stationpedia/ItemFlashingLight.png index 9ac84fd..5dbe7a3 100644 Binary files a/www/img/stationpedia/ItemFlashingLight.png and b/www/img/stationpedia/ItemFlashingLight.png differ diff --git a/www/img/stationpedia/ItemFlashlight.png b/www/img/stationpedia/ItemFlashlight.png index 37b5903..346f0a1 100644 Binary files a/www/img/stationpedia/ItemFlashlight.png and b/www/img/stationpedia/ItemFlashlight.png differ diff --git a/www/img/stationpedia/ItemFlour.png b/www/img/stationpedia/ItemFlour.png index 1315424..31209a5 100644 Binary files a/www/img/stationpedia/ItemFlour.png and b/www/img/stationpedia/ItemFlour.png differ diff --git a/www/img/stationpedia/ItemFlowerBlue.png b/www/img/stationpedia/ItemFlowerBlue.png index 95bcd02..d260001 100644 Binary files a/www/img/stationpedia/ItemFlowerBlue.png and b/www/img/stationpedia/ItemFlowerBlue.png differ diff --git a/www/img/stationpedia/ItemFlowerGreen.png b/www/img/stationpedia/ItemFlowerGreen.png index e2564ff..0cba7c1 100644 Binary files a/www/img/stationpedia/ItemFlowerGreen.png and b/www/img/stationpedia/ItemFlowerGreen.png differ diff --git a/www/img/stationpedia/ItemFlowerOrange.png b/www/img/stationpedia/ItemFlowerOrange.png index 6d2dbcb..4b77d49 100644 Binary files a/www/img/stationpedia/ItemFlowerOrange.png and b/www/img/stationpedia/ItemFlowerOrange.png differ diff --git a/www/img/stationpedia/ItemFlowerRed.png b/www/img/stationpedia/ItemFlowerRed.png index 8305319..b1f0250 100644 Binary files a/www/img/stationpedia/ItemFlowerRed.png and b/www/img/stationpedia/ItemFlowerRed.png differ diff --git a/www/img/stationpedia/ItemFlowerYellow.png b/www/img/stationpedia/ItemFlowerYellow.png index 2422734..fc840cb 100644 Binary files a/www/img/stationpedia/ItemFlowerYellow.png and b/www/img/stationpedia/ItemFlowerYellow.png differ diff --git a/www/img/stationpedia/ItemFrenchFries.png b/www/img/stationpedia/ItemFrenchFries.png index 676f13c..af80556 100644 Binary files a/www/img/stationpedia/ItemFrenchFries.png and b/www/img/stationpedia/ItemFrenchFries.png differ diff --git a/www/img/stationpedia/ItemFries.png b/www/img/stationpedia/ItemFries.png index 83b4c80..9ea1792 100644 Binary files a/www/img/stationpedia/ItemFries.png and b/www/img/stationpedia/ItemFries.png differ diff --git a/www/img/stationpedia/ItemGasCanisterCarbonDioxide.png b/www/img/stationpedia/ItemGasCanisterCarbonDioxide.png index 236aa14..0237eab 100644 Binary files a/www/img/stationpedia/ItemGasCanisterCarbonDioxide.png and b/www/img/stationpedia/ItemGasCanisterCarbonDioxide.png differ diff --git a/www/img/stationpedia/ItemGasCanisterEmpty.png b/www/img/stationpedia/ItemGasCanisterEmpty.png index 1489585..2a5ca63 100644 Binary files a/www/img/stationpedia/ItemGasCanisterEmpty.png and b/www/img/stationpedia/ItemGasCanisterEmpty.png differ diff --git a/www/img/stationpedia/ItemGasCanisterFuel.png b/www/img/stationpedia/ItemGasCanisterFuel.png index 38654de..8299c28 100644 Binary files a/www/img/stationpedia/ItemGasCanisterFuel.png and b/www/img/stationpedia/ItemGasCanisterFuel.png differ diff --git a/www/img/stationpedia/ItemGasCanisterNitrogen.png b/www/img/stationpedia/ItemGasCanisterNitrogen.png index be669c7..d71efe0 100644 Binary files a/www/img/stationpedia/ItemGasCanisterNitrogen.png and b/www/img/stationpedia/ItemGasCanisterNitrogen.png differ diff --git a/www/img/stationpedia/ItemGasCanisterNitrousOxide.png b/www/img/stationpedia/ItemGasCanisterNitrousOxide.png index be669c7..d71efe0 100644 Binary files a/www/img/stationpedia/ItemGasCanisterNitrousOxide.png and b/www/img/stationpedia/ItemGasCanisterNitrousOxide.png differ diff --git a/www/img/stationpedia/ItemGasCanisterOxygen.png b/www/img/stationpedia/ItemGasCanisterOxygen.png index bade6eb..7663e62 100644 Binary files a/www/img/stationpedia/ItemGasCanisterOxygen.png and b/www/img/stationpedia/ItemGasCanisterOxygen.png differ diff --git a/www/img/stationpedia/ItemGasCanisterPollutants.png b/www/img/stationpedia/ItemGasCanisterPollutants.png index 236aa14..0237eab 100644 Binary files a/www/img/stationpedia/ItemGasCanisterPollutants.png and b/www/img/stationpedia/ItemGasCanisterPollutants.png differ diff --git a/www/img/stationpedia/ItemGasCanisterSmart.png b/www/img/stationpedia/ItemGasCanisterSmart.png index 8254494..eae69fa 100644 Binary files a/www/img/stationpedia/ItemGasCanisterSmart.png and b/www/img/stationpedia/ItemGasCanisterSmart.png differ diff --git a/www/img/stationpedia/ItemGasCanisterVolatiles.png b/www/img/stationpedia/ItemGasCanisterVolatiles.png index 87a01cf..8ac0d22 100644 Binary files a/www/img/stationpedia/ItemGasCanisterVolatiles.png and b/www/img/stationpedia/ItemGasCanisterVolatiles.png differ diff --git a/www/img/stationpedia/ItemGasCanisterWater.png b/www/img/stationpedia/ItemGasCanisterWater.png index 8ef75ad..015dce1 100644 Binary files a/www/img/stationpedia/ItemGasCanisterWater.png and b/www/img/stationpedia/ItemGasCanisterWater.png differ diff --git a/www/img/stationpedia/ItemGasFilterCarbonDioxide.png b/www/img/stationpedia/ItemGasFilterCarbonDioxide.png index a37cade..fc1b9c9 100644 Binary files a/www/img/stationpedia/ItemGasFilterCarbonDioxide.png and b/www/img/stationpedia/ItemGasFilterCarbonDioxide.png differ diff --git a/www/img/stationpedia/ItemGasFilterCarbonDioxideInfinite.png b/www/img/stationpedia/ItemGasFilterCarbonDioxideInfinite.png index 2a23e93..c840bfd 100644 Binary files a/www/img/stationpedia/ItemGasFilterCarbonDioxideInfinite.png and b/www/img/stationpedia/ItemGasFilterCarbonDioxideInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterCarbonDioxideL.png b/www/img/stationpedia/ItemGasFilterCarbonDioxideL.png index 4b48d59..18f4f33 100644 Binary files a/www/img/stationpedia/ItemGasFilterCarbonDioxideL.png and b/www/img/stationpedia/ItemGasFilterCarbonDioxideL.png differ diff --git a/www/img/stationpedia/ItemGasFilterCarbonDioxideM.png b/www/img/stationpedia/ItemGasFilterCarbonDioxideM.png index 9f37db1..5003551 100644 Binary files a/www/img/stationpedia/ItemGasFilterCarbonDioxideM.png and b/www/img/stationpedia/ItemGasFilterCarbonDioxideM.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrogen.png b/www/img/stationpedia/ItemGasFilterNitrogen.png index f21b1d2..d0886cc 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrogen.png and b/www/img/stationpedia/ItemGasFilterNitrogen.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrogenInfinite.png b/www/img/stationpedia/ItemGasFilterNitrogenInfinite.png index e5f8f4c..037e1f4 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrogenInfinite.png and b/www/img/stationpedia/ItemGasFilterNitrogenInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrogenL.png b/www/img/stationpedia/ItemGasFilterNitrogenL.png index f502321..1fb7c11 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrogenL.png and b/www/img/stationpedia/ItemGasFilterNitrogenL.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrogenM.png b/www/img/stationpedia/ItemGasFilterNitrogenM.png index 43524ba..8c12a77 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrogenM.png and b/www/img/stationpedia/ItemGasFilterNitrogenM.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrousOxide.png b/www/img/stationpedia/ItemGasFilterNitrousOxide.png index 6c71d33..5015b27 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrousOxide.png and b/www/img/stationpedia/ItemGasFilterNitrousOxide.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrousOxideInfinite.png b/www/img/stationpedia/ItemGasFilterNitrousOxideInfinite.png index 2f0ba9a..1185ebc 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrousOxideInfinite.png and b/www/img/stationpedia/ItemGasFilterNitrousOxideInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrousOxideL.png b/www/img/stationpedia/ItemGasFilterNitrousOxideL.png index fff0727..0602ad3 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrousOxideL.png and b/www/img/stationpedia/ItemGasFilterNitrousOxideL.png differ diff --git a/www/img/stationpedia/ItemGasFilterNitrousOxideM.png b/www/img/stationpedia/ItemGasFilterNitrousOxideM.png index c62365f..9934735 100644 Binary files a/www/img/stationpedia/ItemGasFilterNitrousOxideM.png and b/www/img/stationpedia/ItemGasFilterNitrousOxideM.png differ diff --git a/www/img/stationpedia/ItemGasFilterOxygen.png b/www/img/stationpedia/ItemGasFilterOxygen.png index 2f7c000..4578533 100644 Binary files a/www/img/stationpedia/ItemGasFilterOxygen.png and b/www/img/stationpedia/ItemGasFilterOxygen.png differ diff --git a/www/img/stationpedia/ItemGasFilterOxygenInfinite.png b/www/img/stationpedia/ItemGasFilterOxygenInfinite.png index c045a5d..a71fb87 100644 Binary files a/www/img/stationpedia/ItemGasFilterOxygenInfinite.png and b/www/img/stationpedia/ItemGasFilterOxygenInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterOxygenL.png b/www/img/stationpedia/ItemGasFilterOxygenL.png index 664f18e..86658e7 100644 Binary files a/www/img/stationpedia/ItemGasFilterOxygenL.png and b/www/img/stationpedia/ItemGasFilterOxygenL.png differ diff --git a/www/img/stationpedia/ItemGasFilterOxygenM.png b/www/img/stationpedia/ItemGasFilterOxygenM.png index 9f47359..f78f1a4 100644 Binary files a/www/img/stationpedia/ItemGasFilterOxygenM.png and b/www/img/stationpedia/ItemGasFilterOxygenM.png differ diff --git a/www/img/stationpedia/ItemGasFilterPollutants.png b/www/img/stationpedia/ItemGasFilterPollutants.png index a5568d6..c2aaa32 100644 Binary files a/www/img/stationpedia/ItemGasFilterPollutants.png and b/www/img/stationpedia/ItemGasFilterPollutants.png differ diff --git a/www/img/stationpedia/ItemGasFilterPollutantsInfinite.png b/www/img/stationpedia/ItemGasFilterPollutantsInfinite.png index bf5a9d5..8009999 100644 Binary files a/www/img/stationpedia/ItemGasFilterPollutantsInfinite.png and b/www/img/stationpedia/ItemGasFilterPollutantsInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterPollutantsL.png b/www/img/stationpedia/ItemGasFilterPollutantsL.png index 62e5434..ec2b8ff 100644 Binary files a/www/img/stationpedia/ItemGasFilterPollutantsL.png and b/www/img/stationpedia/ItemGasFilterPollutantsL.png differ diff --git a/www/img/stationpedia/ItemGasFilterPollutantsM.png b/www/img/stationpedia/ItemGasFilterPollutantsM.png index 2796a7c..82951e6 100644 Binary files a/www/img/stationpedia/ItemGasFilterPollutantsM.png and b/www/img/stationpedia/ItemGasFilterPollutantsM.png differ diff --git a/www/img/stationpedia/ItemGasFilterVolatiles.png b/www/img/stationpedia/ItemGasFilterVolatiles.png index 32c6ee1..359085e 100644 Binary files a/www/img/stationpedia/ItemGasFilterVolatiles.png and b/www/img/stationpedia/ItemGasFilterVolatiles.png differ diff --git a/www/img/stationpedia/ItemGasFilterVolatilesInfinite.png b/www/img/stationpedia/ItemGasFilterVolatilesInfinite.png index 321f29e..1d1d5c8 100644 Binary files a/www/img/stationpedia/ItemGasFilterVolatilesInfinite.png and b/www/img/stationpedia/ItemGasFilterVolatilesInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterVolatilesL.png b/www/img/stationpedia/ItemGasFilterVolatilesL.png index e94c950..e09cc43 100644 Binary files a/www/img/stationpedia/ItemGasFilterVolatilesL.png and b/www/img/stationpedia/ItemGasFilterVolatilesL.png differ diff --git a/www/img/stationpedia/ItemGasFilterVolatilesM.png b/www/img/stationpedia/ItemGasFilterVolatilesM.png index e4ffb84..8c3a7bf 100644 Binary files a/www/img/stationpedia/ItemGasFilterVolatilesM.png and b/www/img/stationpedia/ItemGasFilterVolatilesM.png differ diff --git a/www/img/stationpedia/ItemGasFilterWater.png b/www/img/stationpedia/ItemGasFilterWater.png index 24a7d4e..9795bd2 100644 Binary files a/www/img/stationpedia/ItemGasFilterWater.png and b/www/img/stationpedia/ItemGasFilterWater.png differ diff --git a/www/img/stationpedia/ItemGasFilterWaterInfinite.png b/www/img/stationpedia/ItemGasFilterWaterInfinite.png index a2f0024..27b5523 100644 Binary files a/www/img/stationpedia/ItemGasFilterWaterInfinite.png and b/www/img/stationpedia/ItemGasFilterWaterInfinite.png differ diff --git a/www/img/stationpedia/ItemGasFilterWaterL.png b/www/img/stationpedia/ItemGasFilterWaterL.png index 591cd26..52c8c35 100644 Binary files a/www/img/stationpedia/ItemGasFilterWaterL.png and b/www/img/stationpedia/ItemGasFilterWaterL.png differ diff --git a/www/img/stationpedia/ItemGasFilterWaterM.png b/www/img/stationpedia/ItemGasFilterWaterM.png index 66d04c5..f8a121c 100644 Binary files a/www/img/stationpedia/ItemGasFilterWaterM.png and b/www/img/stationpedia/ItemGasFilterWaterM.png differ diff --git a/www/img/stationpedia/ItemGasSensor.png b/www/img/stationpedia/ItemGasSensor.png index ac661ef..4ff8a6e 100644 Binary files a/www/img/stationpedia/ItemGasSensor.png and b/www/img/stationpedia/ItemGasSensor.png differ diff --git a/www/img/stationpedia/ItemGasTankStorage.png b/www/img/stationpedia/ItemGasTankStorage.png index f56348f..9efea4c 100644 Binary files a/www/img/stationpedia/ItemGasTankStorage.png and b/www/img/stationpedia/ItemGasTankStorage.png differ diff --git a/www/img/stationpedia/ItemGlassSheets.png b/www/img/stationpedia/ItemGlassSheets.png index 9a0c9b2..0f268c1 100644 Binary files a/www/img/stationpedia/ItemGlassSheets.png and b/www/img/stationpedia/ItemGlassSheets.png differ diff --git a/www/img/stationpedia/ItemGlasses.png b/www/img/stationpedia/ItemGlasses.png index 2022f2d..71ff8a6 100644 Binary files a/www/img/stationpedia/ItemGlasses.png and b/www/img/stationpedia/ItemGlasses.png differ diff --git a/www/img/stationpedia/ItemGoldIngot.png b/www/img/stationpedia/ItemGoldIngot.png index c97f761..c55218e 100644 Binary files a/www/img/stationpedia/ItemGoldIngot.png and b/www/img/stationpedia/ItemGoldIngot.png differ diff --git a/www/img/stationpedia/ItemGoldOre.png b/www/img/stationpedia/ItemGoldOre.png index e951de0..c01c480 100644 Binary files a/www/img/stationpedia/ItemGoldOre.png and b/www/img/stationpedia/ItemGoldOre.png differ diff --git a/www/img/stationpedia/ItemGrenade.png b/www/img/stationpedia/ItemGrenade.png index 140d119..868b189 100644 Binary files a/www/img/stationpedia/ItemGrenade.png and b/www/img/stationpedia/ItemGrenade.png differ diff --git a/www/img/stationpedia/ItemHEMDroidRepairKit.png b/www/img/stationpedia/ItemHEMDroidRepairKit.png index adbf138..6e92253 100644 Binary files a/www/img/stationpedia/ItemHEMDroidRepairKit.png and b/www/img/stationpedia/ItemHEMDroidRepairKit.png differ diff --git a/www/img/stationpedia/ItemHardBackpack.png b/www/img/stationpedia/ItemHardBackpack.png index 00f3450..52084ad 100644 Binary files a/www/img/stationpedia/ItemHardBackpack.png and b/www/img/stationpedia/ItemHardBackpack.png differ diff --git a/www/img/stationpedia/ItemHardJetpack.png b/www/img/stationpedia/ItemHardJetpack.png index c9a36c1..ae4a2e9 100644 Binary files a/www/img/stationpedia/ItemHardJetpack.png and b/www/img/stationpedia/ItemHardJetpack.png differ diff --git a/www/img/stationpedia/ItemHardMiningBackPack.png b/www/img/stationpedia/ItemHardMiningBackPack.png index 4d12d92..451739c 100644 Binary files a/www/img/stationpedia/ItemHardMiningBackPack.png and b/www/img/stationpedia/ItemHardMiningBackPack.png differ diff --git a/www/img/stationpedia/ItemHardSuit.png b/www/img/stationpedia/ItemHardSuit.png index 8e21566..527e9a0 100644 Binary files a/www/img/stationpedia/ItemHardSuit.png and b/www/img/stationpedia/ItemHardSuit.png differ diff --git a/www/img/stationpedia/ItemHardsuitHelmet.png b/www/img/stationpedia/ItemHardsuitHelmet.png index a1a9e1b..7944358 100644 Binary files a/www/img/stationpedia/ItemHardsuitHelmet.png and b/www/img/stationpedia/ItemHardsuitHelmet.png differ diff --git a/www/img/stationpedia/ItemHastelloyIngot.png b/www/img/stationpedia/ItemHastelloyIngot.png index 1703bc3..378d34e 100644 Binary files a/www/img/stationpedia/ItemHastelloyIngot.png and b/www/img/stationpedia/ItemHastelloyIngot.png differ diff --git a/www/img/stationpedia/ItemHat.png b/www/img/stationpedia/ItemHat.png index baf0d7a..c03dc12 100644 Binary files a/www/img/stationpedia/ItemHat.png and b/www/img/stationpedia/ItemHat.png differ diff --git a/www/img/stationpedia/ItemHighVolumeGasCanisterEmpty.png b/www/img/stationpedia/ItemHighVolumeGasCanisterEmpty.png index 2676d83..83d1206 100644 Binary files a/www/img/stationpedia/ItemHighVolumeGasCanisterEmpty.png and b/www/img/stationpedia/ItemHighVolumeGasCanisterEmpty.png differ diff --git a/www/img/stationpedia/ItemHydroponicTray.png b/www/img/stationpedia/ItemHydroponicTray.png index 8b86314..f4404df 100644 Binary files a/www/img/stationpedia/ItemHydroponicTray.png and b/www/img/stationpedia/ItemHydroponicTray.png differ diff --git a/www/img/stationpedia/ItemIce.png b/www/img/stationpedia/ItemIce.png index 1d431c7..74c36d3 100644 Binary files a/www/img/stationpedia/ItemIce.png and b/www/img/stationpedia/ItemIce.png differ diff --git a/www/img/stationpedia/ItemIgniter.png b/www/img/stationpedia/ItemIgniter.png index de8cfab..e732eae 100644 Binary files a/www/img/stationpedia/ItemIgniter.png and b/www/img/stationpedia/ItemIgniter.png differ diff --git a/www/img/stationpedia/ItemInconelIngot.png b/www/img/stationpedia/ItemInconelIngot.png index 82722e6..1e724be 100644 Binary files a/www/img/stationpedia/ItemInconelIngot.png and b/www/img/stationpedia/ItemInconelIngot.png differ diff --git a/www/img/stationpedia/ItemInsulation.png b/www/img/stationpedia/ItemInsulation.png index 699c6ce..d673f36 100644 Binary files a/www/img/stationpedia/ItemInsulation.png and b/www/img/stationpedia/ItemInsulation.png differ diff --git a/www/img/stationpedia/ItemIntegratedCircuit10.png b/www/img/stationpedia/ItemIntegratedCircuit10.png index 047c637..2597ffb 100644 Binary files a/www/img/stationpedia/ItemIntegratedCircuit10.png and b/www/img/stationpedia/ItemIntegratedCircuit10.png differ diff --git a/www/img/stationpedia/ItemInvarIngot.png b/www/img/stationpedia/ItemInvarIngot.png index 972c5c5..2514b70 100644 Binary files a/www/img/stationpedia/ItemInvarIngot.png and b/www/img/stationpedia/ItemInvarIngot.png differ diff --git a/www/img/stationpedia/ItemIronFrames.png b/www/img/stationpedia/ItemIronFrames.png index 8ae6439..059e271 100644 Binary files a/www/img/stationpedia/ItemIronFrames.png and b/www/img/stationpedia/ItemIronFrames.png differ diff --git a/www/img/stationpedia/ItemIronIngot.png b/www/img/stationpedia/ItemIronIngot.png index 72a6a25..f204ef0 100644 Binary files a/www/img/stationpedia/ItemIronIngot.png and b/www/img/stationpedia/ItemIronIngot.png differ diff --git a/www/img/stationpedia/ItemIronOre.png b/www/img/stationpedia/ItemIronOre.png index 0e448cd..eefa043 100644 Binary files a/www/img/stationpedia/ItemIronOre.png and b/www/img/stationpedia/ItemIronOre.png differ diff --git a/www/img/stationpedia/ItemIronSheets.png b/www/img/stationpedia/ItemIronSheets.png index b9d4ea3..67571fd 100644 Binary files a/www/img/stationpedia/ItemIronSheets.png and b/www/img/stationpedia/ItemIronSheets.png differ diff --git a/www/img/stationpedia/ItemJetpackBasic.png b/www/img/stationpedia/ItemJetpackBasic.png index 121465c..1f16dce 100644 Binary files a/www/img/stationpedia/ItemJetpackBasic.png and b/www/img/stationpedia/ItemJetpackBasic.png differ diff --git a/www/img/stationpedia/ItemKitAIMeE.png b/www/img/stationpedia/ItemKitAIMeE.png index c020bff..a5b920c 100644 Binary files a/www/img/stationpedia/ItemKitAIMeE.png and b/www/img/stationpedia/ItemKitAIMeE.png differ diff --git a/www/img/stationpedia/ItemKitAccessBridge.png b/www/img/stationpedia/ItemKitAccessBridge.png index 10797c4..404f3db 100644 Binary files a/www/img/stationpedia/ItemKitAccessBridge.png and b/www/img/stationpedia/ItemKitAccessBridge.png differ diff --git a/www/img/stationpedia/ItemKitAdvancedComposter.png b/www/img/stationpedia/ItemKitAdvancedComposter.png index 985c2a3..82d8634 100644 Binary files a/www/img/stationpedia/ItemKitAdvancedComposter.png and b/www/img/stationpedia/ItemKitAdvancedComposter.png differ diff --git a/www/img/stationpedia/ItemKitAdvancedFurnace.png b/www/img/stationpedia/ItemKitAdvancedFurnace.png index 8bcdc01..51f7855 100644 Binary files a/www/img/stationpedia/ItemKitAdvancedFurnace.png and b/www/img/stationpedia/ItemKitAdvancedFurnace.png differ diff --git a/www/img/stationpedia/ItemKitAdvancedPackagingMachine.png b/www/img/stationpedia/ItemKitAdvancedPackagingMachine.png index fa4c127..9e8ecba 100644 Binary files a/www/img/stationpedia/ItemKitAdvancedPackagingMachine.png and b/www/img/stationpedia/ItemKitAdvancedPackagingMachine.png differ diff --git a/www/img/stationpedia/ItemKitAirlock.png b/www/img/stationpedia/ItemKitAirlock.png index 80df3b4..1eb4bcd 100644 Binary files a/www/img/stationpedia/ItemKitAirlock.png and b/www/img/stationpedia/ItemKitAirlock.png differ diff --git a/www/img/stationpedia/ItemKitAirlockGate.png b/www/img/stationpedia/ItemKitAirlockGate.png index 2e32133..22b88af 100644 Binary files a/www/img/stationpedia/ItemKitAirlockGate.png and b/www/img/stationpedia/ItemKitAirlockGate.png differ diff --git a/www/img/stationpedia/ItemKitArcFurnace.png b/www/img/stationpedia/ItemKitArcFurnace.png index ba4980d..527cad3 100644 Binary files a/www/img/stationpedia/ItemKitArcFurnace.png and b/www/img/stationpedia/ItemKitArcFurnace.png differ diff --git a/www/img/stationpedia/ItemKitAtmospherics.png b/www/img/stationpedia/ItemKitAtmospherics.png index 82f3cf4..67938a4 100644 Binary files a/www/img/stationpedia/ItemKitAtmospherics.png and b/www/img/stationpedia/ItemKitAtmospherics.png differ diff --git a/www/img/stationpedia/ItemKitAutoMinerSmall.png b/www/img/stationpedia/ItemKitAutoMinerSmall.png index 10d969a..6787b4d 100644 Binary files a/www/img/stationpedia/ItemKitAutoMinerSmall.png and b/www/img/stationpedia/ItemKitAutoMinerSmall.png differ diff --git a/www/img/stationpedia/ItemKitAutolathe.png b/www/img/stationpedia/ItemKitAutolathe.png index e2aeb76..4359d8a 100644 Binary files a/www/img/stationpedia/ItemKitAutolathe.png and b/www/img/stationpedia/ItemKitAutolathe.png differ diff --git a/www/img/stationpedia/ItemKitAutomatedOven.png b/www/img/stationpedia/ItemKitAutomatedOven.png index 129b425..e844240 100644 Binary files a/www/img/stationpedia/ItemKitAutomatedOven.png and b/www/img/stationpedia/ItemKitAutomatedOven.png differ diff --git a/www/img/stationpedia/ItemKitBasket.png b/www/img/stationpedia/ItemKitBasket.png index 27f3abf..f4dcd5f 100644 Binary files a/www/img/stationpedia/ItemKitBasket.png and b/www/img/stationpedia/ItemKitBasket.png differ diff --git a/www/img/stationpedia/ItemKitBattery.png b/www/img/stationpedia/ItemKitBattery.png index fef3d1f..1d53da2 100644 Binary files a/www/img/stationpedia/ItemKitBattery.png and b/www/img/stationpedia/ItemKitBattery.png differ diff --git a/www/img/stationpedia/ItemKitBatteryLarge.png b/www/img/stationpedia/ItemKitBatteryLarge.png index 10f7049..4ba7020 100644 Binary files a/www/img/stationpedia/ItemKitBatteryLarge.png and b/www/img/stationpedia/ItemKitBatteryLarge.png differ diff --git a/www/img/stationpedia/ItemKitBeacon.png b/www/img/stationpedia/ItemKitBeacon.png index 2e66290..551916f 100644 Binary files a/www/img/stationpedia/ItemKitBeacon.png and b/www/img/stationpedia/ItemKitBeacon.png differ diff --git a/www/img/stationpedia/ItemKitBeds.png b/www/img/stationpedia/ItemKitBeds.png index 3a66e00..c1d4d3d 100644 Binary files a/www/img/stationpedia/ItemKitBeds.png and b/www/img/stationpedia/ItemKitBeds.png differ diff --git a/www/img/stationpedia/ItemKitBlastDoor.png b/www/img/stationpedia/ItemKitBlastDoor.png index 214a249..6a2a25b 100644 Binary files a/www/img/stationpedia/ItemKitBlastDoor.png and b/www/img/stationpedia/ItemKitBlastDoor.png differ diff --git a/www/img/stationpedia/ItemKitCentrifuge.png b/www/img/stationpedia/ItemKitCentrifuge.png index 3df6a89..6f46d14 100644 Binary files a/www/img/stationpedia/ItemKitCentrifuge.png and b/www/img/stationpedia/ItemKitCentrifuge.png differ diff --git a/www/img/stationpedia/ItemKitChairs.png b/www/img/stationpedia/ItemKitChairs.png index bc52d56..557be33 100644 Binary files a/www/img/stationpedia/ItemKitChairs.png and b/www/img/stationpedia/ItemKitChairs.png differ diff --git a/www/img/stationpedia/ItemKitChute.png b/www/img/stationpedia/ItemKitChute.png index 9dc851d..b771203 100644 Binary files a/www/img/stationpedia/ItemKitChute.png and b/www/img/stationpedia/ItemKitChute.png differ diff --git a/www/img/stationpedia/ItemKitChuteUmbilical.png b/www/img/stationpedia/ItemKitChuteUmbilical.png index a007488..3f6182b 100644 Binary files a/www/img/stationpedia/ItemKitChuteUmbilical.png and b/www/img/stationpedia/ItemKitChuteUmbilical.png differ diff --git a/www/img/stationpedia/ItemKitCompositeCladding.png b/www/img/stationpedia/ItemKitCompositeCladding.png index 8a55804..2647c0a 100644 Binary files a/www/img/stationpedia/ItemKitCompositeCladding.png and b/www/img/stationpedia/ItemKitCompositeCladding.png differ diff --git a/www/img/stationpedia/ItemKitCompositeFloorGrating.png b/www/img/stationpedia/ItemKitCompositeFloorGrating.png index 7c3e138..3c13e9e 100644 Binary files a/www/img/stationpedia/ItemKitCompositeFloorGrating.png and b/www/img/stationpedia/ItemKitCompositeFloorGrating.png differ diff --git a/www/img/stationpedia/ItemKitComputer.png b/www/img/stationpedia/ItemKitComputer.png index 0ecc5bb..2a3aa66 100644 Binary files a/www/img/stationpedia/ItemKitComputer.png and b/www/img/stationpedia/ItemKitComputer.png differ diff --git a/www/img/stationpedia/ItemKitConsole.png b/www/img/stationpedia/ItemKitConsole.png index ef05f60..b162bde 100644 Binary files a/www/img/stationpedia/ItemKitConsole.png and b/www/img/stationpedia/ItemKitConsole.png differ diff --git a/www/img/stationpedia/ItemKitCrate.png b/www/img/stationpedia/ItemKitCrate.png index bd84371..5deec54 100644 Binary files a/www/img/stationpedia/ItemKitCrate.png and b/www/img/stationpedia/ItemKitCrate.png differ diff --git a/www/img/stationpedia/ItemKitCrateMkII.png b/www/img/stationpedia/ItemKitCrateMkII.png index 4843a9e..9aad58f 100644 Binary files a/www/img/stationpedia/ItemKitCrateMkII.png and b/www/img/stationpedia/ItemKitCrateMkII.png differ diff --git a/www/img/stationpedia/ItemKitCrateMount.png b/www/img/stationpedia/ItemKitCrateMount.png index f52d9c0..5f94488 100644 Binary files a/www/img/stationpedia/ItemKitCrateMount.png and b/www/img/stationpedia/ItemKitCrateMount.png differ diff --git a/www/img/stationpedia/ItemKitCryoTube.png b/www/img/stationpedia/ItemKitCryoTube.png index 5846bd0..4754b2e 100644 Binary files a/www/img/stationpedia/ItemKitCryoTube.png and b/www/img/stationpedia/ItemKitCryoTube.png differ diff --git a/www/img/stationpedia/ItemKitDeepMiner.png b/www/img/stationpedia/ItemKitDeepMiner.png index 5797cc3..4b4bdd6 100644 Binary files a/www/img/stationpedia/ItemKitDeepMiner.png and b/www/img/stationpedia/ItemKitDeepMiner.png differ diff --git a/www/img/stationpedia/ItemKitDockingPort.png b/www/img/stationpedia/ItemKitDockingPort.png index 80df3b4..1eb4bcd 100644 Binary files a/www/img/stationpedia/ItemKitDockingPort.png and b/www/img/stationpedia/ItemKitDockingPort.png differ diff --git a/www/img/stationpedia/ItemKitDoor.png b/www/img/stationpedia/ItemKitDoor.png index bf8046f..aea2d3c 100644 Binary files a/www/img/stationpedia/ItemKitDoor.png and b/www/img/stationpedia/ItemKitDoor.png differ diff --git a/www/img/stationpedia/ItemKitDrinkingFountain.png b/www/img/stationpedia/ItemKitDrinkingFountain.png index 25c25b3..18fdbf9 100644 Binary files a/www/img/stationpedia/ItemKitDrinkingFountain.png and b/www/img/stationpedia/ItemKitDrinkingFountain.png differ diff --git a/www/img/stationpedia/ItemKitDynamicCanister.png b/www/img/stationpedia/ItemKitDynamicCanister.png index 29a0eb9..7594033 100644 Binary files a/www/img/stationpedia/ItemKitDynamicCanister.png and b/www/img/stationpedia/ItemKitDynamicCanister.png differ diff --git a/www/img/stationpedia/ItemKitDynamicGasTankAdvanced.png b/www/img/stationpedia/ItemKitDynamicGasTankAdvanced.png index 4a46bff..e4b8513 100644 Binary files a/www/img/stationpedia/ItemKitDynamicGasTankAdvanced.png and b/www/img/stationpedia/ItemKitDynamicGasTankAdvanced.png differ diff --git a/www/img/stationpedia/ItemKitDynamicGenerator.png b/www/img/stationpedia/ItemKitDynamicGenerator.png index 78747ce..b8b91fa 100644 Binary files a/www/img/stationpedia/ItemKitDynamicGenerator.png and b/www/img/stationpedia/ItemKitDynamicGenerator.png differ diff --git a/www/img/stationpedia/ItemKitDynamicHydroponics.png b/www/img/stationpedia/ItemKitDynamicHydroponics.png index 9878494..45f5fb2 100644 Binary files a/www/img/stationpedia/ItemKitDynamicHydroponics.png and b/www/img/stationpedia/ItemKitDynamicHydroponics.png differ diff --git a/www/img/stationpedia/ItemKitDynamicLiquidCanister.png b/www/img/stationpedia/ItemKitDynamicLiquidCanister.png index 966961c..73fe9e1 100644 Binary files a/www/img/stationpedia/ItemKitDynamicLiquidCanister.png and b/www/img/stationpedia/ItemKitDynamicLiquidCanister.png differ diff --git a/www/img/stationpedia/ItemKitDynamicMKIILiquidCanister.png b/www/img/stationpedia/ItemKitDynamicMKIILiquidCanister.png index 55e159f..1bcfa95 100644 Binary files a/www/img/stationpedia/ItemKitDynamicMKIILiquidCanister.png and b/www/img/stationpedia/ItemKitDynamicMKIILiquidCanister.png differ diff --git a/www/img/stationpedia/ItemKitElectricUmbilical.png b/www/img/stationpedia/ItemKitElectricUmbilical.png index 764d94d..9b08d3b 100644 Binary files a/www/img/stationpedia/ItemKitElectricUmbilical.png and b/www/img/stationpedia/ItemKitElectricUmbilical.png differ diff --git a/www/img/stationpedia/ItemKitElectronicsPrinter.png b/www/img/stationpedia/ItemKitElectronicsPrinter.png index 7b8bf95..06f22d6 100644 Binary files a/www/img/stationpedia/ItemKitElectronicsPrinter.png and b/www/img/stationpedia/ItemKitElectronicsPrinter.png differ diff --git a/www/img/stationpedia/ItemKitElevator.png b/www/img/stationpedia/ItemKitElevator.png index 3624b2b..fd70a5a 100644 Binary files a/www/img/stationpedia/ItemKitElevator.png and b/www/img/stationpedia/ItemKitElevator.png differ diff --git a/www/img/stationpedia/ItemKitEngineLarge.png b/www/img/stationpedia/ItemKitEngineLarge.png index 17ff73f..31227b7 100644 Binary files a/www/img/stationpedia/ItemKitEngineLarge.png and b/www/img/stationpedia/ItemKitEngineLarge.png differ diff --git a/www/img/stationpedia/ItemKitEngineMedium.png b/www/img/stationpedia/ItemKitEngineMedium.png index 39da111..dd9e18b 100644 Binary files a/www/img/stationpedia/ItemKitEngineMedium.png and b/www/img/stationpedia/ItemKitEngineMedium.png differ diff --git a/www/img/stationpedia/ItemKitEngineSmall.png b/www/img/stationpedia/ItemKitEngineSmall.png index c84f52d..3a149c3 100644 Binary files a/www/img/stationpedia/ItemKitEngineSmall.png and b/www/img/stationpedia/ItemKitEngineSmall.png differ diff --git a/www/img/stationpedia/ItemKitEvaporationChamber.png b/www/img/stationpedia/ItemKitEvaporationChamber.png index 90d1001..1c50369 100644 Binary files a/www/img/stationpedia/ItemKitEvaporationChamber.png and b/www/img/stationpedia/ItemKitEvaporationChamber.png differ diff --git a/www/img/stationpedia/ItemKitFlagODA.png b/www/img/stationpedia/ItemKitFlagODA.png index 1a8b337..eed4eef 100644 Binary files a/www/img/stationpedia/ItemKitFlagODA.png and b/www/img/stationpedia/ItemKitFlagODA.png differ diff --git a/www/img/stationpedia/ItemKitFridgeBig.png b/www/img/stationpedia/ItemKitFridgeBig.png index a8976b9..3fd9978 100644 Binary files a/www/img/stationpedia/ItemKitFridgeBig.png and b/www/img/stationpedia/ItemKitFridgeBig.png differ diff --git a/www/img/stationpedia/ItemKitFridgeSmall.png b/www/img/stationpedia/ItemKitFridgeSmall.png index 16a3a6d..f2f7c38 100644 Binary files a/www/img/stationpedia/ItemKitFridgeSmall.png and b/www/img/stationpedia/ItemKitFridgeSmall.png differ diff --git a/www/img/stationpedia/ItemKitFurnace.png b/www/img/stationpedia/ItemKitFurnace.png index 277d8fb..1e27c1a 100644 Binary files a/www/img/stationpedia/ItemKitFurnace.png and b/www/img/stationpedia/ItemKitFurnace.png differ diff --git a/www/img/stationpedia/ItemKitFurniture.png b/www/img/stationpedia/ItemKitFurniture.png index 6a73fc3..8cd4ce1 100644 Binary files a/www/img/stationpedia/ItemKitFurniture.png and b/www/img/stationpedia/ItemKitFurniture.png differ diff --git a/www/img/stationpedia/ItemKitFuselage.png b/www/img/stationpedia/ItemKitFuselage.png index 0a1bff8..528f80e 100644 Binary files a/www/img/stationpedia/ItemKitFuselage.png and b/www/img/stationpedia/ItemKitFuselage.png differ diff --git a/www/img/stationpedia/ItemKitGasGenerator.png b/www/img/stationpedia/ItemKitGasGenerator.png index 908f299..fba7cb3 100644 Binary files a/www/img/stationpedia/ItemKitGasGenerator.png and b/www/img/stationpedia/ItemKitGasGenerator.png differ diff --git a/www/img/stationpedia/ItemKitGasUmbilical.png b/www/img/stationpedia/ItemKitGasUmbilical.png index 35a0131..0c58548 100644 Binary files a/www/img/stationpedia/ItemKitGasUmbilical.png and b/www/img/stationpedia/ItemKitGasUmbilical.png differ diff --git a/www/img/stationpedia/ItemKitGovernedGasRocketEngine.png b/www/img/stationpedia/ItemKitGovernedGasRocketEngine.png index c34a52d..5f1ac56 100644 Binary files a/www/img/stationpedia/ItemKitGovernedGasRocketEngine.png and b/www/img/stationpedia/ItemKitGovernedGasRocketEngine.png differ diff --git a/www/img/stationpedia/ItemKitGroundTelescope.png b/www/img/stationpedia/ItemKitGroundTelescope.png index e6c51fc..1da5e1a 100644 Binary files a/www/img/stationpedia/ItemKitGroundTelescope.png and b/www/img/stationpedia/ItemKitGroundTelescope.png differ diff --git a/www/img/stationpedia/ItemKitGrowLight.png b/www/img/stationpedia/ItemKitGrowLight.png index 10a0c25..2bc23b5 100644 Binary files a/www/img/stationpedia/ItemKitGrowLight.png and b/www/img/stationpedia/ItemKitGrowLight.png differ diff --git a/www/img/stationpedia/ItemKitHarvie.png b/www/img/stationpedia/ItemKitHarvie.png index 4db94f7..bd9eb76 100644 Binary files a/www/img/stationpedia/ItemKitHarvie.png and b/www/img/stationpedia/ItemKitHarvie.png differ diff --git a/www/img/stationpedia/ItemKitHeatExchanger.png b/www/img/stationpedia/ItemKitHeatExchanger.png index 569b433..acdad25 100644 Binary files a/www/img/stationpedia/ItemKitHeatExchanger.png and b/www/img/stationpedia/ItemKitHeatExchanger.png differ diff --git a/www/img/stationpedia/ItemKitHorizontalAutoMiner.png b/www/img/stationpedia/ItemKitHorizontalAutoMiner.png index 887a1e0..c0183b7 100644 Binary files a/www/img/stationpedia/ItemKitHorizontalAutoMiner.png and b/www/img/stationpedia/ItemKitHorizontalAutoMiner.png differ diff --git a/www/img/stationpedia/ItemKitHydraulicPipeBender.png b/www/img/stationpedia/ItemKitHydraulicPipeBender.png index 8c07a7d..de74293 100644 Binary files a/www/img/stationpedia/ItemKitHydraulicPipeBender.png and b/www/img/stationpedia/ItemKitHydraulicPipeBender.png differ diff --git a/www/img/stationpedia/ItemKitHydroponicAutomated.png b/www/img/stationpedia/ItemKitHydroponicAutomated.png index 409034c..5cf0b63 100644 Binary files a/www/img/stationpedia/ItemKitHydroponicAutomated.png and b/www/img/stationpedia/ItemKitHydroponicAutomated.png differ diff --git a/www/img/stationpedia/ItemKitHydroponicStation.png b/www/img/stationpedia/ItemKitHydroponicStation.png index 409034c..5cf0b63 100644 Binary files a/www/img/stationpedia/ItemKitHydroponicStation.png and b/www/img/stationpedia/ItemKitHydroponicStation.png differ diff --git a/www/img/stationpedia/ItemKitIceCrusher.png b/www/img/stationpedia/ItemKitIceCrusher.png index ad62908..c9d32b1 100644 Binary files a/www/img/stationpedia/ItemKitIceCrusher.png and b/www/img/stationpedia/ItemKitIceCrusher.png differ diff --git a/www/img/stationpedia/ItemKitInsulatedLiquidPipe.png b/www/img/stationpedia/ItemKitInsulatedLiquidPipe.png index 1bc01bc..20f36fe 100644 Binary files a/www/img/stationpedia/ItemKitInsulatedLiquidPipe.png and b/www/img/stationpedia/ItemKitInsulatedLiquidPipe.png differ diff --git a/www/img/stationpedia/ItemKitInsulatedPipe.png b/www/img/stationpedia/ItemKitInsulatedPipe.png index e57df98..091df35 100644 Binary files a/www/img/stationpedia/ItemKitInsulatedPipe.png and b/www/img/stationpedia/ItemKitInsulatedPipe.png differ diff --git a/www/img/stationpedia/ItemKitInteriorDoors.png b/www/img/stationpedia/ItemKitInteriorDoors.png index 6501347..981d833 100644 Binary files a/www/img/stationpedia/ItemKitInteriorDoors.png and b/www/img/stationpedia/ItemKitInteriorDoors.png differ diff --git a/www/img/stationpedia/ItemKitLadder.png b/www/img/stationpedia/ItemKitLadder.png index 4583a3a..120499b 100644 Binary files a/www/img/stationpedia/ItemKitLadder.png and b/www/img/stationpedia/ItemKitLadder.png differ diff --git a/www/img/stationpedia/ItemKitLandingPadAtmos.png b/www/img/stationpedia/ItemKitLandingPadAtmos.png index 78d294e..c002e5b 100644 Binary files a/www/img/stationpedia/ItemKitLandingPadAtmos.png and b/www/img/stationpedia/ItemKitLandingPadAtmos.png differ diff --git a/www/img/stationpedia/ItemKitLandingPadBasic.png b/www/img/stationpedia/ItemKitLandingPadBasic.png index 0a16d2f..ed0bf84 100644 Binary files a/www/img/stationpedia/ItemKitLandingPadBasic.png and b/www/img/stationpedia/ItemKitLandingPadBasic.png differ diff --git a/www/img/stationpedia/ItemKitLandingPadWaypoint.png b/www/img/stationpedia/ItemKitLandingPadWaypoint.png index fa9b2ab..14444a9 100644 Binary files a/www/img/stationpedia/ItemKitLandingPadWaypoint.png and b/www/img/stationpedia/ItemKitLandingPadWaypoint.png differ diff --git a/www/img/stationpedia/ItemKitLargeDirectHeatExchanger.png b/www/img/stationpedia/ItemKitLargeDirectHeatExchanger.png index 2776a64..61bfb61 100644 Binary files a/www/img/stationpedia/ItemKitLargeDirectHeatExchanger.png and b/www/img/stationpedia/ItemKitLargeDirectHeatExchanger.png differ diff --git a/www/img/stationpedia/ItemKitLargeExtendableRadiator.png b/www/img/stationpedia/ItemKitLargeExtendableRadiator.png index ff1395e..25a76a8 100644 Binary files a/www/img/stationpedia/ItemKitLargeExtendableRadiator.png and b/www/img/stationpedia/ItemKitLargeExtendableRadiator.png differ diff --git a/www/img/stationpedia/ItemKitLargeSatelliteDish.png b/www/img/stationpedia/ItemKitLargeSatelliteDish.png index 106a54f..b0dc85d 100644 Binary files a/www/img/stationpedia/ItemKitLargeSatelliteDish.png and b/www/img/stationpedia/ItemKitLargeSatelliteDish.png differ diff --git a/www/img/stationpedia/ItemKitLaunchMount.png b/www/img/stationpedia/ItemKitLaunchMount.png index 16974f5..6fa0725 100644 Binary files a/www/img/stationpedia/ItemKitLaunchMount.png and b/www/img/stationpedia/ItemKitLaunchMount.png differ diff --git a/www/img/stationpedia/ItemKitLaunchTower.png b/www/img/stationpedia/ItemKitLaunchTower.png index b59a949..4052985 100644 Binary files a/www/img/stationpedia/ItemKitLaunchTower.png and b/www/img/stationpedia/ItemKitLaunchTower.png differ diff --git a/www/img/stationpedia/ItemKitLiquidTank.png b/www/img/stationpedia/ItemKitLiquidTank.png index 6f837a2..17b0897 100644 Binary files a/www/img/stationpedia/ItemKitLiquidTank.png and b/www/img/stationpedia/ItemKitLiquidTank.png differ diff --git a/www/img/stationpedia/ItemKitLiquidTankInsulated.png b/www/img/stationpedia/ItemKitLiquidTankInsulated.png index 04b9c05..bae095f 100644 Binary files a/www/img/stationpedia/ItemKitLiquidTankInsulated.png and b/www/img/stationpedia/ItemKitLiquidTankInsulated.png differ diff --git a/www/img/stationpedia/ItemKitLiquidTurboVolumePump.png b/www/img/stationpedia/ItemKitLiquidTurboVolumePump.png index e1613c6..9bae7b1 100644 Binary files a/www/img/stationpedia/ItemKitLiquidTurboVolumePump.png and b/www/img/stationpedia/ItemKitLiquidTurboVolumePump.png differ diff --git a/www/img/stationpedia/ItemKitLiquidUmbilical.png b/www/img/stationpedia/ItemKitLiquidUmbilical.png index 56b6e92..fb5fbd6 100644 Binary files a/www/img/stationpedia/ItemKitLiquidUmbilical.png and b/www/img/stationpedia/ItemKitLiquidUmbilical.png differ diff --git a/www/img/stationpedia/ItemKitLocker.png b/www/img/stationpedia/ItemKitLocker.png index 5cd3f0f..8a97646 100644 Binary files a/www/img/stationpedia/ItemKitLocker.png and b/www/img/stationpedia/ItemKitLocker.png differ diff --git a/www/img/stationpedia/ItemKitLogicCircuit.png b/www/img/stationpedia/ItemKitLogicCircuit.png index 984de0e..e8edcf4 100644 Binary files a/www/img/stationpedia/ItemKitLogicCircuit.png and b/www/img/stationpedia/ItemKitLogicCircuit.png differ diff --git a/www/img/stationpedia/ItemKitLogicInputOutput.png b/www/img/stationpedia/ItemKitLogicInputOutput.png index 23eca7e..a91ebaf 100644 Binary files a/www/img/stationpedia/ItemKitLogicInputOutput.png and b/www/img/stationpedia/ItemKitLogicInputOutput.png differ diff --git a/www/img/stationpedia/ItemKitLogicMemory.png b/www/img/stationpedia/ItemKitLogicMemory.png index 6f64d09..a305f12 100644 Binary files a/www/img/stationpedia/ItemKitLogicMemory.png and b/www/img/stationpedia/ItemKitLogicMemory.png differ diff --git a/www/img/stationpedia/ItemKitLogicProcessor.png b/www/img/stationpedia/ItemKitLogicProcessor.png index ddf3bab..4749ec3 100644 Binary files a/www/img/stationpedia/ItemKitLogicProcessor.png and b/www/img/stationpedia/ItemKitLogicProcessor.png differ diff --git a/www/img/stationpedia/ItemKitLogicSwitch.png b/www/img/stationpedia/ItemKitLogicSwitch.png index 362cc9e..ce3b477 100644 Binary files a/www/img/stationpedia/ItemKitLogicSwitch.png and b/www/img/stationpedia/ItemKitLogicSwitch.png differ diff --git a/www/img/stationpedia/ItemKitLogicTransmitter.png b/www/img/stationpedia/ItemKitLogicTransmitter.png index 48a357d..2382c6b 100644 Binary files a/www/img/stationpedia/ItemKitLogicTransmitter.png and b/www/img/stationpedia/ItemKitLogicTransmitter.png differ diff --git a/www/img/stationpedia/ItemKitMotherShipCore.png b/www/img/stationpedia/ItemKitMotherShipCore.png index bd84371..5deec54 100644 Binary files a/www/img/stationpedia/ItemKitMotherShipCore.png and b/www/img/stationpedia/ItemKitMotherShipCore.png differ diff --git a/www/img/stationpedia/ItemKitMusicMachines.png b/www/img/stationpedia/ItemKitMusicMachines.png index 0ecc5bb..2a3aa66 100644 Binary files a/www/img/stationpedia/ItemKitMusicMachines.png and b/www/img/stationpedia/ItemKitMusicMachines.png differ diff --git a/www/img/stationpedia/ItemKitPassiveLargeRadiatorGas.png b/www/img/stationpedia/ItemKitPassiveLargeRadiatorGas.png index cb5a558..7e17312 100644 Binary files a/www/img/stationpedia/ItemKitPassiveLargeRadiatorGas.png and b/www/img/stationpedia/ItemKitPassiveLargeRadiatorGas.png differ diff --git a/www/img/stationpedia/ItemKitPassiveLargeRadiatorLiquid.png b/www/img/stationpedia/ItemKitPassiveLargeRadiatorLiquid.png index 5bb3afa..827097e 100644 Binary files a/www/img/stationpedia/ItemKitPassiveLargeRadiatorLiquid.png and b/www/img/stationpedia/ItemKitPassiveLargeRadiatorLiquid.png differ diff --git a/www/img/stationpedia/ItemKitPassthroughHeatExchanger.png b/www/img/stationpedia/ItemKitPassthroughHeatExchanger.png index a59440b..8845814 100644 Binary files a/www/img/stationpedia/ItemKitPassthroughHeatExchanger.png and b/www/img/stationpedia/ItemKitPassthroughHeatExchanger.png differ diff --git a/www/img/stationpedia/ItemKitPictureFrame.png b/www/img/stationpedia/ItemKitPictureFrame.png index 6e5899c..4df8f1b 100644 Binary files a/www/img/stationpedia/ItemKitPictureFrame.png and b/www/img/stationpedia/ItemKitPictureFrame.png differ diff --git a/www/img/stationpedia/ItemKitPipe.png b/www/img/stationpedia/ItemKitPipe.png index 09bc10a..308afeb 100644 Binary files a/www/img/stationpedia/ItemKitPipe.png and b/www/img/stationpedia/ItemKitPipe.png differ diff --git a/www/img/stationpedia/ItemKitPipeLiquid.png b/www/img/stationpedia/ItemKitPipeLiquid.png index ced7950..6a55e6f 100644 Binary files a/www/img/stationpedia/ItemKitPipeLiquid.png and b/www/img/stationpedia/ItemKitPipeLiquid.png differ diff --git a/www/img/stationpedia/ItemKitPipeOrgan.png b/www/img/stationpedia/ItemKitPipeOrgan.png index cb8f2cb..2473405 100644 Binary files a/www/img/stationpedia/ItemKitPipeOrgan.png and b/www/img/stationpedia/ItemKitPipeOrgan.png differ diff --git a/www/img/stationpedia/ItemKitPipeRadiator.png b/www/img/stationpedia/ItemKitPipeRadiator.png index 59d5d25..c765a07 100644 Binary files a/www/img/stationpedia/ItemKitPipeRadiator.png and b/www/img/stationpedia/ItemKitPipeRadiator.png differ diff --git a/www/img/stationpedia/ItemKitPipeRadiatorLiquid.png b/www/img/stationpedia/ItemKitPipeRadiatorLiquid.png index 6bed4c3..d0c4c48 100644 Binary files a/www/img/stationpedia/ItemKitPipeRadiatorLiquid.png and b/www/img/stationpedia/ItemKitPipeRadiatorLiquid.png differ diff --git a/www/img/stationpedia/ItemKitPipeUtility.png b/www/img/stationpedia/ItemKitPipeUtility.png index 2943fec..9eedbde 100644 Binary files a/www/img/stationpedia/ItemKitPipeUtility.png and b/www/img/stationpedia/ItemKitPipeUtility.png differ diff --git a/www/img/stationpedia/ItemKitPipeUtilityLiquid.png b/www/img/stationpedia/ItemKitPipeUtilityLiquid.png index 0c68a77..53c055a 100644 Binary files a/www/img/stationpedia/ItemKitPipeUtilityLiquid.png and b/www/img/stationpedia/ItemKitPipeUtilityLiquid.png differ diff --git a/www/img/stationpedia/ItemKitPlanter.png b/www/img/stationpedia/ItemKitPlanter.png index 0306605..534a210 100644 Binary files a/www/img/stationpedia/ItemKitPlanter.png and b/www/img/stationpedia/ItemKitPlanter.png differ diff --git a/www/img/stationpedia/ItemKitPowerTransmitter.png b/www/img/stationpedia/ItemKitPowerTransmitter.png index b8834dc..f515732 100644 Binary files a/www/img/stationpedia/ItemKitPowerTransmitter.png and b/www/img/stationpedia/ItemKitPowerTransmitter.png differ diff --git a/www/img/stationpedia/ItemKitPowerTransmitterOmni.png b/www/img/stationpedia/ItemKitPowerTransmitterOmni.png index 838bc53..6ed47ca 100644 Binary files a/www/img/stationpedia/ItemKitPowerTransmitterOmni.png and b/www/img/stationpedia/ItemKitPowerTransmitterOmni.png differ diff --git a/www/img/stationpedia/ItemKitPoweredVent.png b/www/img/stationpedia/ItemKitPoweredVent.png index 30d6b17..764dfd4 100644 Binary files a/www/img/stationpedia/ItemKitPoweredVent.png and b/www/img/stationpedia/ItemKitPoweredVent.png differ diff --git a/www/img/stationpedia/ItemKitPressureFedGasEngine.png b/www/img/stationpedia/ItemKitPressureFedGasEngine.png index bc206c0..686698b 100644 Binary files a/www/img/stationpedia/ItemKitPressureFedGasEngine.png and b/www/img/stationpedia/ItemKitPressureFedGasEngine.png differ diff --git a/www/img/stationpedia/ItemKitPressureFedLiquidEngine.png b/www/img/stationpedia/ItemKitPressureFedLiquidEngine.png index 8f1d68c..337345a 100644 Binary files a/www/img/stationpedia/ItemKitPressureFedLiquidEngine.png and b/www/img/stationpedia/ItemKitPressureFedLiquidEngine.png differ diff --git a/www/img/stationpedia/ItemKitPressurePlate.png b/www/img/stationpedia/ItemKitPressurePlate.png index fe8e6a2..594c04d 100644 Binary files a/www/img/stationpedia/ItemKitPressurePlate.png and b/www/img/stationpedia/ItemKitPressurePlate.png differ diff --git a/www/img/stationpedia/ItemKitPumpedLiquidEngine.png b/www/img/stationpedia/ItemKitPumpedLiquidEngine.png index 2e67246..4985807 100644 Binary files a/www/img/stationpedia/ItemKitPumpedLiquidEngine.png and b/www/img/stationpedia/ItemKitPumpedLiquidEngine.png differ diff --git a/www/img/stationpedia/ItemKitRailing.png b/www/img/stationpedia/ItemKitRailing.png index 386b4d6..6bf1bc8 100644 Binary files a/www/img/stationpedia/ItemKitRailing.png and b/www/img/stationpedia/ItemKitRailing.png differ diff --git a/www/img/stationpedia/ItemKitRecycler.png b/www/img/stationpedia/ItemKitRecycler.png index 12900ef..2c56563 100644 Binary files a/www/img/stationpedia/ItemKitRecycler.png and b/www/img/stationpedia/ItemKitRecycler.png differ diff --git a/www/img/stationpedia/ItemKitRegulator.png b/www/img/stationpedia/ItemKitRegulator.png index 6791986..52a0790 100644 Binary files a/www/img/stationpedia/ItemKitRegulator.png and b/www/img/stationpedia/ItemKitRegulator.png differ diff --git a/www/img/stationpedia/ItemKitReinforcedWindows.png b/www/img/stationpedia/ItemKitReinforcedWindows.png index 3e33c33..c9a7147 100644 Binary files a/www/img/stationpedia/ItemKitReinforcedWindows.png and b/www/img/stationpedia/ItemKitReinforcedWindows.png differ diff --git a/www/img/stationpedia/ItemKitResearchMachine.png b/www/img/stationpedia/ItemKitResearchMachine.png index 3c2895b..f8c2b11 100644 Binary files a/www/img/stationpedia/ItemKitResearchMachine.png and b/www/img/stationpedia/ItemKitResearchMachine.png differ diff --git a/www/img/stationpedia/ItemKitRespawnPointWallMounted.png b/www/img/stationpedia/ItemKitRespawnPointWallMounted.png index 1ae5df6..5b4de86 100644 Binary files a/www/img/stationpedia/ItemKitRespawnPointWallMounted.png and b/www/img/stationpedia/ItemKitRespawnPointWallMounted.png differ diff --git a/www/img/stationpedia/ItemKitRocketAvionics.png b/www/img/stationpedia/ItemKitRocketAvionics.png index 8b68101..fb855b5 100644 Binary files a/www/img/stationpedia/ItemKitRocketAvionics.png and b/www/img/stationpedia/ItemKitRocketAvionics.png differ diff --git a/www/img/stationpedia/ItemKitRocketBattery.png b/www/img/stationpedia/ItemKitRocketBattery.png index 4009b84..00a4168 100644 Binary files a/www/img/stationpedia/ItemKitRocketBattery.png and b/www/img/stationpedia/ItemKitRocketBattery.png differ diff --git a/www/img/stationpedia/ItemKitRocketCargoStorage.png b/www/img/stationpedia/ItemKitRocketCargoStorage.png index ed3696c..3428b6e 100644 Binary files a/www/img/stationpedia/ItemKitRocketCargoStorage.png and b/www/img/stationpedia/ItemKitRocketCargoStorage.png differ diff --git a/www/img/stationpedia/ItemKitRocketCelestialTracker.png b/www/img/stationpedia/ItemKitRocketCelestialTracker.png index b42135f..75f6aef 100644 Binary files a/www/img/stationpedia/ItemKitRocketCelestialTracker.png and b/www/img/stationpedia/ItemKitRocketCelestialTracker.png differ diff --git a/www/img/stationpedia/ItemKitRocketCircuitHousing.png b/www/img/stationpedia/ItemKitRocketCircuitHousing.png index 40e818b..c9b0cf2 100644 Binary files a/www/img/stationpedia/ItemKitRocketCircuitHousing.png and b/www/img/stationpedia/ItemKitRocketCircuitHousing.png differ diff --git a/www/img/stationpedia/ItemKitRocketDatalink.png b/www/img/stationpedia/ItemKitRocketDatalink.png index f984e59..75cded6 100644 Binary files a/www/img/stationpedia/ItemKitRocketDatalink.png and b/www/img/stationpedia/ItemKitRocketDatalink.png differ diff --git a/www/img/stationpedia/ItemKitRocketGasFuelTank.png b/www/img/stationpedia/ItemKitRocketGasFuelTank.png index d84a52d..38391a8 100644 Binary files a/www/img/stationpedia/ItemKitRocketGasFuelTank.png and b/www/img/stationpedia/ItemKitRocketGasFuelTank.png differ diff --git a/www/img/stationpedia/ItemKitRocketLiquidFuelTank.png b/www/img/stationpedia/ItemKitRocketLiquidFuelTank.png index aa2233b..fa98675 100644 Binary files a/www/img/stationpedia/ItemKitRocketLiquidFuelTank.png and b/www/img/stationpedia/ItemKitRocketLiquidFuelTank.png differ diff --git a/www/img/stationpedia/ItemKitRocketManufactory.png b/www/img/stationpedia/ItemKitRocketManufactory.png index 2639972..ba4f3ee 100644 Binary files a/www/img/stationpedia/ItemKitRocketManufactory.png and b/www/img/stationpedia/ItemKitRocketManufactory.png differ diff --git a/www/img/stationpedia/ItemKitRocketMiner.png b/www/img/stationpedia/ItemKitRocketMiner.png index e59d1e8..01b1b47 100644 Binary files a/www/img/stationpedia/ItemKitRocketMiner.png and b/www/img/stationpedia/ItemKitRocketMiner.png differ diff --git a/www/img/stationpedia/ItemKitRocketScanner.png b/www/img/stationpedia/ItemKitRocketScanner.png index 1169ce4..cd74db1 100644 Binary files a/www/img/stationpedia/ItemKitRocketScanner.png and b/www/img/stationpedia/ItemKitRocketScanner.png differ diff --git a/www/img/stationpedia/ItemKitRocketTransformerSmall.png b/www/img/stationpedia/ItemKitRocketTransformerSmall.png index b18ab12..0a2a5fd 100644 Binary files a/www/img/stationpedia/ItemKitRocketTransformerSmall.png and b/www/img/stationpedia/ItemKitRocketTransformerSmall.png differ diff --git a/www/img/stationpedia/ItemKitRoverFrame.png b/www/img/stationpedia/ItemKitRoverFrame.png index 17ff73f..31227b7 100644 Binary files a/www/img/stationpedia/ItemKitRoverFrame.png and b/www/img/stationpedia/ItemKitRoverFrame.png differ diff --git a/www/img/stationpedia/ItemKitRoverMKI.png b/www/img/stationpedia/ItemKitRoverMKI.png index 8bc246d..f7449bd 100644 Binary files a/www/img/stationpedia/ItemKitRoverMKI.png and b/www/img/stationpedia/ItemKitRoverMKI.png differ diff --git a/www/img/stationpedia/ItemKitSDBHopper.png b/www/img/stationpedia/ItemKitSDBHopper.png index 40fa7d7..d50ac6b 100644 Binary files a/www/img/stationpedia/ItemKitSDBHopper.png and b/www/img/stationpedia/ItemKitSDBHopper.png differ diff --git a/www/img/stationpedia/ItemKitSatelliteDish.png b/www/img/stationpedia/ItemKitSatelliteDish.png index 085f3e1..d85d9b9 100644 Binary files a/www/img/stationpedia/ItemKitSatelliteDish.png and b/www/img/stationpedia/ItemKitSatelliteDish.png differ diff --git a/www/img/stationpedia/ItemKitSecurityPrinter.png b/www/img/stationpedia/ItemKitSecurityPrinter.png index 7b8bf95..06f22d6 100644 Binary files a/www/img/stationpedia/ItemKitSecurityPrinter.png and b/www/img/stationpedia/ItemKitSecurityPrinter.png differ diff --git a/www/img/stationpedia/ItemKitSensor.png b/www/img/stationpedia/ItemKitSensor.png index ad7b187..f9a02ba 100644 Binary files a/www/img/stationpedia/ItemKitSensor.png and b/www/img/stationpedia/ItemKitSensor.png differ diff --git a/www/img/stationpedia/ItemKitShower.png b/www/img/stationpedia/ItemKitShower.png index 0e89ee6..0d44706 100644 Binary files a/www/img/stationpedia/ItemKitShower.png and b/www/img/stationpedia/ItemKitShower.png differ diff --git a/www/img/stationpedia/ItemKitSign.png b/www/img/stationpedia/ItemKitSign.png index 11ce63c..b3571bb 100644 Binary files a/www/img/stationpedia/ItemKitSign.png and b/www/img/stationpedia/ItemKitSign.png differ diff --git a/www/img/stationpedia/ItemKitSleeper.png b/www/img/stationpedia/ItemKitSleeper.png index 1063c1d..1da2b3e 100644 Binary files a/www/img/stationpedia/ItemKitSleeper.png and b/www/img/stationpedia/ItemKitSleeper.png differ diff --git a/www/img/stationpedia/ItemKitSmallDirectHeatExchanger.png b/www/img/stationpedia/ItemKitSmallDirectHeatExchanger.png index 2c1bccd..208f18a 100644 Binary files a/www/img/stationpedia/ItemKitSmallDirectHeatExchanger.png and b/www/img/stationpedia/ItemKitSmallDirectHeatExchanger.png differ diff --git a/www/img/stationpedia/ItemKitSmallSatelliteDish.png b/www/img/stationpedia/ItemKitSmallSatelliteDish.png index 5902994..df49115 100644 Binary files a/www/img/stationpedia/ItemKitSmallSatelliteDish.png and b/www/img/stationpedia/ItemKitSmallSatelliteDish.png differ diff --git a/www/img/stationpedia/ItemKitSolarPanel.png b/www/img/stationpedia/ItemKitSolarPanel.png index bb0c3e8..fbfaf8c 100644 Binary files a/www/img/stationpedia/ItemKitSolarPanel.png and b/www/img/stationpedia/ItemKitSolarPanel.png differ diff --git a/www/img/stationpedia/ItemKitSolarPanelBasic.png b/www/img/stationpedia/ItemKitSolarPanelBasic.png index 46eafe5..8341685 100644 Binary files a/www/img/stationpedia/ItemKitSolarPanelBasic.png and b/www/img/stationpedia/ItemKitSolarPanelBasic.png differ diff --git a/www/img/stationpedia/ItemKitSolarPanelBasicReinforced.png b/www/img/stationpedia/ItemKitSolarPanelBasicReinforced.png index 176a0b2..3e1469c 100644 Binary files a/www/img/stationpedia/ItemKitSolarPanelBasicReinforced.png and b/www/img/stationpedia/ItemKitSolarPanelBasicReinforced.png differ diff --git a/www/img/stationpedia/ItemKitSolarPanelReinforced.png b/www/img/stationpedia/ItemKitSolarPanelReinforced.png index 8d067c7..5759006 100644 Binary files a/www/img/stationpedia/ItemKitSolarPanelReinforced.png and b/www/img/stationpedia/ItemKitSolarPanelReinforced.png differ diff --git a/www/img/stationpedia/ItemKitSolidGenerator.png b/www/img/stationpedia/ItemKitSolidGenerator.png index 21eeea5..6e9307d 100644 Binary files a/www/img/stationpedia/ItemKitSolidGenerator.png and b/www/img/stationpedia/ItemKitSolidGenerator.png differ diff --git a/www/img/stationpedia/ItemKitSorter.png b/www/img/stationpedia/ItemKitSorter.png index d3488d5..38cc9c3 100644 Binary files a/www/img/stationpedia/ItemKitSorter.png and b/www/img/stationpedia/ItemKitSorter.png differ diff --git a/www/img/stationpedia/ItemKitSpeaker.png b/www/img/stationpedia/ItemKitSpeaker.png index 0e2359a..ad4ba43 100644 Binary files a/www/img/stationpedia/ItemKitSpeaker.png and b/www/img/stationpedia/ItemKitSpeaker.png differ diff --git a/www/img/stationpedia/ItemKitStacker.png b/www/img/stationpedia/ItemKitStacker.png index 5685f7b..b08529d 100644 Binary files a/www/img/stationpedia/ItemKitStacker.png and b/www/img/stationpedia/ItemKitStacker.png differ diff --git a/www/img/stationpedia/ItemKitStairs.png b/www/img/stationpedia/ItemKitStairs.png index e7670b7..765a21a 100644 Binary files a/www/img/stationpedia/ItemKitStairs.png and b/www/img/stationpedia/ItemKitStairs.png differ diff --git a/www/img/stationpedia/ItemKitStairwell.png b/www/img/stationpedia/ItemKitStairwell.png index f212dd2..d0485e8 100644 Binary files a/www/img/stationpedia/ItemKitStairwell.png and b/www/img/stationpedia/ItemKitStairwell.png differ diff --git a/www/img/stationpedia/ItemKitStandardChute.png b/www/img/stationpedia/ItemKitStandardChute.png index b3ba3f9..ddd8928 100644 Binary files a/www/img/stationpedia/ItemKitStandardChute.png and b/www/img/stationpedia/ItemKitStandardChute.png differ diff --git a/www/img/stationpedia/ItemKitStirlingEngine.png b/www/img/stationpedia/ItemKitStirlingEngine.png index acb4a69..44a8ada 100644 Binary files a/www/img/stationpedia/ItemKitStirlingEngine.png and b/www/img/stationpedia/ItemKitStirlingEngine.png differ diff --git a/www/img/stationpedia/ItemKitSuitStorage.png b/www/img/stationpedia/ItemKitSuitStorage.png index 3d1e304..a45c047 100644 Binary files a/www/img/stationpedia/ItemKitSuitStorage.png and b/www/img/stationpedia/ItemKitSuitStorage.png differ diff --git a/www/img/stationpedia/ItemKitTables.png b/www/img/stationpedia/ItemKitTables.png index 67120a2..cceab47 100644 Binary files a/www/img/stationpedia/ItemKitTables.png and b/www/img/stationpedia/ItemKitTables.png differ diff --git a/www/img/stationpedia/ItemKitTank.png b/www/img/stationpedia/ItemKitTank.png index 56f7f5a..bb87a3f 100644 Binary files a/www/img/stationpedia/ItemKitTank.png and b/www/img/stationpedia/ItemKitTank.png differ diff --git a/www/img/stationpedia/ItemKitTankInsulated.png b/www/img/stationpedia/ItemKitTankInsulated.png index 49aad1a..f59ec01 100644 Binary files a/www/img/stationpedia/ItemKitTankInsulated.png and b/www/img/stationpedia/ItemKitTankInsulated.png differ diff --git a/www/img/stationpedia/ItemKitToolManufactory.png b/www/img/stationpedia/ItemKitToolManufactory.png index 5279a67..24f2517 100644 Binary files a/www/img/stationpedia/ItemKitToolManufactory.png and b/www/img/stationpedia/ItemKitToolManufactory.png differ diff --git a/www/img/stationpedia/ItemKitTransformer.png b/www/img/stationpedia/ItemKitTransformer.png index 678d892..3a62e15 100644 Binary files a/www/img/stationpedia/ItemKitTransformer.png and b/www/img/stationpedia/ItemKitTransformer.png differ diff --git a/www/img/stationpedia/ItemKitTransformerSmall.png b/www/img/stationpedia/ItemKitTransformerSmall.png index 7586ced..32d4b80 100644 Binary files a/www/img/stationpedia/ItemKitTransformerSmall.png and b/www/img/stationpedia/ItemKitTransformerSmall.png differ diff --git a/www/img/stationpedia/ItemKitTurbineGenerator.png b/www/img/stationpedia/ItemKitTurbineGenerator.png index 39da111..dd9e18b 100644 Binary files a/www/img/stationpedia/ItemKitTurbineGenerator.png and b/www/img/stationpedia/ItemKitTurbineGenerator.png differ diff --git a/www/img/stationpedia/ItemKitTurboVolumePump.png b/www/img/stationpedia/ItemKitTurboVolumePump.png index 80c7f8d..8605c10 100644 Binary files a/www/img/stationpedia/ItemKitTurboVolumePump.png and b/www/img/stationpedia/ItemKitTurboVolumePump.png differ diff --git a/www/img/stationpedia/ItemKitUprightWindTurbine.png b/www/img/stationpedia/ItemKitUprightWindTurbine.png index 3657622..7da1bf9 100644 Binary files a/www/img/stationpedia/ItemKitUprightWindTurbine.png and b/www/img/stationpedia/ItemKitUprightWindTurbine.png differ diff --git a/www/img/stationpedia/ItemKitVendingMachine.png b/www/img/stationpedia/ItemKitVendingMachine.png index a30cd6a..5fc1335 100644 Binary files a/www/img/stationpedia/ItemKitVendingMachine.png and b/www/img/stationpedia/ItemKitVendingMachine.png differ diff --git a/www/img/stationpedia/ItemKitVendingMachineRefrigerated.png b/www/img/stationpedia/ItemKitVendingMachineRefrigerated.png index 409f25c..0101746 100644 Binary files a/www/img/stationpedia/ItemKitVendingMachineRefrigerated.png and b/www/img/stationpedia/ItemKitVendingMachineRefrigerated.png differ diff --git a/www/img/stationpedia/ItemKitWall.png b/www/img/stationpedia/ItemKitWall.png index e54d81d..1da1a16 100644 Binary files a/www/img/stationpedia/ItemKitWall.png and b/www/img/stationpedia/ItemKitWall.png differ diff --git a/www/img/stationpedia/ItemKitWallArch.png b/www/img/stationpedia/ItemKitWallArch.png index e54d81d..1da1a16 100644 Binary files a/www/img/stationpedia/ItemKitWallArch.png and b/www/img/stationpedia/ItemKitWallArch.png differ diff --git a/www/img/stationpedia/ItemKitWallFlat.png b/www/img/stationpedia/ItemKitWallFlat.png index d25d88c..3114f4d 100644 Binary files a/www/img/stationpedia/ItemKitWallFlat.png and b/www/img/stationpedia/ItemKitWallFlat.png differ diff --git a/www/img/stationpedia/ItemKitWallGeometry.png b/www/img/stationpedia/ItemKitWallGeometry.png index d25d88c..3114f4d 100644 Binary files a/www/img/stationpedia/ItemKitWallGeometry.png and b/www/img/stationpedia/ItemKitWallGeometry.png differ diff --git a/www/img/stationpedia/ItemKitWallIron.png b/www/img/stationpedia/ItemKitWallIron.png index c1770d2..dc54ac8 100644 Binary files a/www/img/stationpedia/ItemKitWallIron.png and b/www/img/stationpedia/ItemKitWallIron.png differ diff --git a/www/img/stationpedia/ItemKitWallPadded.png b/www/img/stationpedia/ItemKitWallPadded.png index e54d81d..1da1a16 100644 Binary files a/www/img/stationpedia/ItemKitWallPadded.png and b/www/img/stationpedia/ItemKitWallPadded.png differ diff --git a/www/img/stationpedia/ItemKitWaterBottleFiller.png b/www/img/stationpedia/ItemKitWaterBottleFiller.png index 8decd0e..7cf9639 100644 Binary files a/www/img/stationpedia/ItemKitWaterBottleFiller.png and b/www/img/stationpedia/ItemKitWaterBottleFiller.png differ diff --git a/www/img/stationpedia/ItemKitWaterPurifier.png b/www/img/stationpedia/ItemKitWaterPurifier.png index f83dafa..6aeef4c 100644 Binary files a/www/img/stationpedia/ItemKitWaterPurifier.png and b/www/img/stationpedia/ItemKitWaterPurifier.png differ diff --git a/www/img/stationpedia/ItemKitWeatherStation.png b/www/img/stationpedia/ItemKitWeatherStation.png index b224445..87908e0 100644 Binary files a/www/img/stationpedia/ItemKitWeatherStation.png and b/www/img/stationpedia/ItemKitWeatherStation.png differ diff --git a/www/img/stationpedia/ItemKitWindTurbine.png b/www/img/stationpedia/ItemKitWindTurbine.png index f560c12..d191350 100644 Binary files a/www/img/stationpedia/ItemKitWindTurbine.png and b/www/img/stationpedia/ItemKitWindTurbine.png differ diff --git a/www/img/stationpedia/ItemKitWindowShutter.png b/www/img/stationpedia/ItemKitWindowShutter.png index a88e4a0..592cd5a 100644 Binary files a/www/img/stationpedia/ItemKitWindowShutter.png and b/www/img/stationpedia/ItemKitWindowShutter.png differ diff --git a/www/img/stationpedia/ItemLabeller.png b/www/img/stationpedia/ItemLabeller.png index 3b6f1c7..fcca53f 100644 Binary files a/www/img/stationpedia/ItemLabeller.png and b/www/img/stationpedia/ItemLabeller.png differ diff --git a/www/img/stationpedia/ItemLaptop.png b/www/img/stationpedia/ItemLaptop.png index ef8d769..912d858 100644 Binary files a/www/img/stationpedia/ItemLaptop.png and b/www/img/stationpedia/ItemLaptop.png differ diff --git a/www/img/stationpedia/ItemLeadIngot.png b/www/img/stationpedia/ItemLeadIngot.png index e4aedc5..2fb4465 100644 Binary files a/www/img/stationpedia/ItemLeadIngot.png and b/www/img/stationpedia/ItemLeadIngot.png differ diff --git a/www/img/stationpedia/ItemLeadOre.png b/www/img/stationpedia/ItemLeadOre.png index 1c4f2c4..300c5f9 100644 Binary files a/www/img/stationpedia/ItemLeadOre.png and b/www/img/stationpedia/ItemLeadOre.png differ diff --git a/www/img/stationpedia/ItemLightSword.png b/www/img/stationpedia/ItemLightSword.png index 7c3de6c..e652305 100644 Binary files a/www/img/stationpedia/ItemLightSword.png and b/www/img/stationpedia/ItemLightSword.png differ diff --git a/www/img/stationpedia/ItemLiquidCanisterEmpty.png b/www/img/stationpedia/ItemLiquidCanisterEmpty.png index 187b60a..d8bf8b5 100644 Binary files a/www/img/stationpedia/ItemLiquidCanisterEmpty.png and b/www/img/stationpedia/ItemLiquidCanisterEmpty.png differ diff --git a/www/img/stationpedia/ItemLiquidCanisterSmart.png b/www/img/stationpedia/ItemLiquidCanisterSmart.png index 46507c4..5ac465d 100644 Binary files a/www/img/stationpedia/ItemLiquidCanisterSmart.png and b/www/img/stationpedia/ItemLiquidCanisterSmart.png differ diff --git a/www/img/stationpedia/ItemLiquidDrain.png b/www/img/stationpedia/ItemLiquidDrain.png index f8905d2..c943a76 100644 Binary files a/www/img/stationpedia/ItemLiquidDrain.png and b/www/img/stationpedia/ItemLiquidDrain.png differ diff --git a/www/img/stationpedia/ItemLiquidPipeAnalyzer.png b/www/img/stationpedia/ItemLiquidPipeAnalyzer.png index 81f5019..8a698d0 100644 Binary files a/www/img/stationpedia/ItemLiquidPipeAnalyzer.png and b/www/img/stationpedia/ItemLiquidPipeAnalyzer.png differ diff --git a/www/img/stationpedia/ItemLiquidPipeHeater.png b/www/img/stationpedia/ItemLiquidPipeHeater.png index e73bef8..154989f 100644 Binary files a/www/img/stationpedia/ItemLiquidPipeHeater.png and b/www/img/stationpedia/ItemLiquidPipeHeater.png differ diff --git a/www/img/stationpedia/ItemLiquidPipeValve.png b/www/img/stationpedia/ItemLiquidPipeValve.png index 26c08c8..9d9d06b 100644 Binary files a/www/img/stationpedia/ItemLiquidPipeValve.png and b/www/img/stationpedia/ItemLiquidPipeValve.png differ diff --git a/www/img/stationpedia/ItemLiquidPipeVolumePump.png b/www/img/stationpedia/ItemLiquidPipeVolumePump.png index 2843efa..4741e5b 100644 Binary files a/www/img/stationpedia/ItemLiquidPipeVolumePump.png and b/www/img/stationpedia/ItemLiquidPipeVolumePump.png differ diff --git a/www/img/stationpedia/ItemLiquidTankStorage.png b/www/img/stationpedia/ItemLiquidTankStorage.png index b8ee79a..ace028d 100644 Binary files a/www/img/stationpedia/ItemLiquidTankStorage.png and b/www/img/stationpedia/ItemLiquidTankStorage.png differ diff --git a/www/img/stationpedia/ItemMKIIAngleGrinder.png b/www/img/stationpedia/ItemMKIIAngleGrinder.png index 1dd4bab..9a37eca 100644 Binary files a/www/img/stationpedia/ItemMKIIAngleGrinder.png and b/www/img/stationpedia/ItemMKIIAngleGrinder.png differ diff --git a/www/img/stationpedia/ItemMKIIArcWelder.png b/www/img/stationpedia/ItemMKIIArcWelder.png index d02912e..b2e2a7d 100644 Binary files a/www/img/stationpedia/ItemMKIIArcWelder.png and b/www/img/stationpedia/ItemMKIIArcWelder.png differ diff --git a/www/img/stationpedia/ItemMKIICrowbar.png b/www/img/stationpedia/ItemMKIICrowbar.png index e18b4ac..b48eb0b 100644 Binary files a/www/img/stationpedia/ItemMKIICrowbar.png and b/www/img/stationpedia/ItemMKIICrowbar.png differ diff --git a/www/img/stationpedia/ItemMKIIDrill.png b/www/img/stationpedia/ItemMKIIDrill.png index 801de49..ef70013 100644 Binary files a/www/img/stationpedia/ItemMKIIDrill.png and b/www/img/stationpedia/ItemMKIIDrill.png differ diff --git a/www/img/stationpedia/ItemMKIIDuctTape.png b/www/img/stationpedia/ItemMKIIDuctTape.png index 451576e..046998b 100644 Binary files a/www/img/stationpedia/ItemMKIIDuctTape.png and b/www/img/stationpedia/ItemMKIIDuctTape.png differ diff --git a/www/img/stationpedia/ItemMKIIMiningDrill.png b/www/img/stationpedia/ItemMKIIMiningDrill.png index 0e9f117..ea27d04 100644 Binary files a/www/img/stationpedia/ItemMKIIMiningDrill.png and b/www/img/stationpedia/ItemMKIIMiningDrill.png differ diff --git a/www/img/stationpedia/ItemMKIIScrewdriver.png b/www/img/stationpedia/ItemMKIIScrewdriver.png index 18f7252..a0c763e 100644 Binary files a/www/img/stationpedia/ItemMKIIScrewdriver.png and b/www/img/stationpedia/ItemMKIIScrewdriver.png differ diff --git a/www/img/stationpedia/ItemMKIIWireCutters.png b/www/img/stationpedia/ItemMKIIWireCutters.png index 7571d6c..bed8918 100644 Binary files a/www/img/stationpedia/ItemMKIIWireCutters.png and b/www/img/stationpedia/ItemMKIIWireCutters.png differ diff --git a/www/img/stationpedia/ItemMKIIWrench.png b/www/img/stationpedia/ItemMKIIWrench.png index 37012be..db77b86 100644 Binary files a/www/img/stationpedia/ItemMKIIWrench.png and b/www/img/stationpedia/ItemMKIIWrench.png differ diff --git a/www/img/stationpedia/ItemMarineBodyArmor.png b/www/img/stationpedia/ItemMarineBodyArmor.png index a594243..19f9533 100644 Binary files a/www/img/stationpedia/ItemMarineBodyArmor.png and b/www/img/stationpedia/ItemMarineBodyArmor.png differ diff --git a/www/img/stationpedia/ItemMarineHelmet.png b/www/img/stationpedia/ItemMarineHelmet.png index 54db6e7..8047587 100644 Binary files a/www/img/stationpedia/ItemMarineHelmet.png and b/www/img/stationpedia/ItemMarineHelmet.png differ diff --git a/www/img/stationpedia/ItemMilk.png b/www/img/stationpedia/ItemMilk.png index 3f2fa87..c382f57 100644 Binary files a/www/img/stationpedia/ItemMilk.png and b/www/img/stationpedia/ItemMilk.png differ diff --git a/www/img/stationpedia/ItemMiningBackPack.png b/www/img/stationpedia/ItemMiningBackPack.png index 9fa63c0..30d9383 100644 Binary files a/www/img/stationpedia/ItemMiningBackPack.png and b/www/img/stationpedia/ItemMiningBackPack.png differ diff --git a/www/img/stationpedia/ItemMiningBelt.png b/www/img/stationpedia/ItemMiningBelt.png index 94cf1e8..81ed02b 100644 Binary files a/www/img/stationpedia/ItemMiningBelt.png and b/www/img/stationpedia/ItemMiningBelt.png differ diff --git a/www/img/stationpedia/ItemMiningBeltMKII.png b/www/img/stationpedia/ItemMiningBeltMKII.png index bde8334..b157177 100644 Binary files a/www/img/stationpedia/ItemMiningBeltMKII.png and b/www/img/stationpedia/ItemMiningBeltMKII.png differ diff --git a/www/img/stationpedia/ItemMiningCharge.png b/www/img/stationpedia/ItemMiningCharge.png index 4607c5b..46e17ae 100644 Binary files a/www/img/stationpedia/ItemMiningCharge.png and b/www/img/stationpedia/ItemMiningCharge.png differ diff --git a/www/img/stationpedia/ItemMiningDrill.png b/www/img/stationpedia/ItemMiningDrill.png index 7d65d50..ab72ee2 100644 Binary files a/www/img/stationpedia/ItemMiningDrill.png and b/www/img/stationpedia/ItemMiningDrill.png differ diff --git a/www/img/stationpedia/ItemMiningDrillHeavy.png b/www/img/stationpedia/ItemMiningDrillHeavy.png index 80e1f85..9e2baed 100644 Binary files a/www/img/stationpedia/ItemMiningDrillHeavy.png and b/www/img/stationpedia/ItemMiningDrillHeavy.png differ diff --git a/www/img/stationpedia/ItemMiningDrillPneumatic.png b/www/img/stationpedia/ItemMiningDrillPneumatic.png index 66da096..8089ea6 100644 Binary files a/www/img/stationpedia/ItemMiningDrillPneumatic.png and b/www/img/stationpedia/ItemMiningDrillPneumatic.png differ diff --git a/www/img/stationpedia/ItemMkIIToolbelt.png b/www/img/stationpedia/ItemMkIIToolbelt.png index 036e5e1..c8b358d 100644 Binary files a/www/img/stationpedia/ItemMkIIToolbelt.png and b/www/img/stationpedia/ItemMkIIToolbelt.png differ diff --git a/www/img/stationpedia/ItemMuffin.png b/www/img/stationpedia/ItemMuffin.png index 4a526a6..ba9866c 100644 Binary files a/www/img/stationpedia/ItemMuffin.png and b/www/img/stationpedia/ItemMuffin.png differ diff --git a/www/img/stationpedia/ItemMushroom.png b/www/img/stationpedia/ItemMushroom.png index d41322e..ae6391a 100644 Binary files a/www/img/stationpedia/ItemMushroom.png and b/www/img/stationpedia/ItemMushroom.png differ diff --git a/www/img/stationpedia/ItemNVG.png b/www/img/stationpedia/ItemNVG.png index 535b9f1..fb835f2 100644 Binary files a/www/img/stationpedia/ItemNVG.png and b/www/img/stationpedia/ItemNVG.png differ diff --git a/www/img/stationpedia/ItemNickelIngot.png b/www/img/stationpedia/ItemNickelIngot.png index b761931..193284a 100644 Binary files a/www/img/stationpedia/ItemNickelIngot.png and b/www/img/stationpedia/ItemNickelIngot.png differ diff --git a/www/img/stationpedia/ItemNickelOre.png b/www/img/stationpedia/ItemNickelOre.png index 8bc5084..7428052 100644 Binary files a/www/img/stationpedia/ItemNickelOre.png and b/www/img/stationpedia/ItemNickelOre.png differ diff --git a/www/img/stationpedia/ItemNitrice.png b/www/img/stationpedia/ItemNitrice.png index ab604e3..8ee8e5f 100644 Binary files a/www/img/stationpedia/ItemNitrice.png and b/www/img/stationpedia/ItemNitrice.png differ diff --git a/www/img/stationpedia/ItemOxite.png b/www/img/stationpedia/ItemOxite.png index f184c9e..41a1898 100644 Binary files a/www/img/stationpedia/ItemOxite.png and b/www/img/stationpedia/ItemOxite.png differ diff --git a/www/img/stationpedia/ItemPassiveVent.png b/www/img/stationpedia/ItemPassiveVent.png index 494cc95..0f75fe7 100644 Binary files a/www/img/stationpedia/ItemPassiveVent.png and b/www/img/stationpedia/ItemPassiveVent.png differ diff --git a/www/img/stationpedia/ItemPassiveVentInsulated.png b/www/img/stationpedia/ItemPassiveVentInsulated.png index b7a8e1f..40ea805 100644 Binary files a/www/img/stationpedia/ItemPassiveVentInsulated.png and b/www/img/stationpedia/ItemPassiveVentInsulated.png differ diff --git a/www/img/stationpedia/ItemPeaceLily.png b/www/img/stationpedia/ItemPeaceLily.png index 0129ace..6c13d7d 100644 Binary files a/www/img/stationpedia/ItemPeaceLily.png and b/www/img/stationpedia/ItemPeaceLily.png differ diff --git a/www/img/stationpedia/ItemPickaxe.png b/www/img/stationpedia/ItemPickaxe.png index f945643..c9c129d 100644 Binary files a/www/img/stationpedia/ItemPickaxe.png and b/www/img/stationpedia/ItemPickaxe.png differ diff --git a/www/img/stationpedia/ItemPillHeal.png b/www/img/stationpedia/ItemPillHeal.png index da7b638..c796f3c 100644 Binary files a/www/img/stationpedia/ItemPillHeal.png and b/www/img/stationpedia/ItemPillHeal.png differ diff --git a/www/img/stationpedia/ItemPillStun.png b/www/img/stationpedia/ItemPillStun.png index 91c0d3b..656af80 100644 Binary files a/www/img/stationpedia/ItemPillStun.png and b/www/img/stationpedia/ItemPillStun.png differ diff --git a/www/img/stationpedia/ItemPipeAnalyizer.png b/www/img/stationpedia/ItemPipeAnalyizer.png index eec3f49..a6a2060 100644 Binary files a/www/img/stationpedia/ItemPipeAnalyizer.png and b/www/img/stationpedia/ItemPipeAnalyizer.png differ diff --git a/www/img/stationpedia/ItemPipeCowl.png b/www/img/stationpedia/ItemPipeCowl.png index 426237b..b6e95c8 100644 Binary files a/www/img/stationpedia/ItemPipeCowl.png and b/www/img/stationpedia/ItemPipeCowl.png differ diff --git a/www/img/stationpedia/ItemPipeDigitalValve.png b/www/img/stationpedia/ItemPipeDigitalValve.png index 9b35592..ade3624 100644 Binary files a/www/img/stationpedia/ItemPipeDigitalValve.png and b/www/img/stationpedia/ItemPipeDigitalValve.png differ diff --git a/www/img/stationpedia/ItemPipeGasMixer.png b/www/img/stationpedia/ItemPipeGasMixer.png index e9172b8..14ef5f5 100644 Binary files a/www/img/stationpedia/ItemPipeGasMixer.png and b/www/img/stationpedia/ItemPipeGasMixer.png differ diff --git a/www/img/stationpedia/ItemPipeHeater.png b/www/img/stationpedia/ItemPipeHeater.png index ae2c2b4..997b961 100644 Binary files a/www/img/stationpedia/ItemPipeHeater.png and b/www/img/stationpedia/ItemPipeHeater.png differ diff --git a/www/img/stationpedia/ItemPipeIgniter.png b/www/img/stationpedia/ItemPipeIgniter.png new file mode 100644 index 0000000..33a4c7e Binary files /dev/null and b/www/img/stationpedia/ItemPipeIgniter.png differ diff --git a/www/img/stationpedia/ItemPipeLabel.png b/www/img/stationpedia/ItemPipeLabel.png index 3abd592..ccd7fe2 100644 Binary files a/www/img/stationpedia/ItemPipeLabel.png and b/www/img/stationpedia/ItemPipeLabel.png differ diff --git a/www/img/stationpedia/ItemPipeLiquidRadiator.png b/www/img/stationpedia/ItemPipeLiquidRadiator.png index 31c156c..a68c99c 100644 Binary files a/www/img/stationpedia/ItemPipeLiquidRadiator.png and b/www/img/stationpedia/ItemPipeLiquidRadiator.png differ diff --git a/www/img/stationpedia/ItemPipeMeter.png b/www/img/stationpedia/ItemPipeMeter.png index 67bd629..ea46dd3 100644 Binary files a/www/img/stationpedia/ItemPipeMeter.png and b/www/img/stationpedia/ItemPipeMeter.png differ diff --git a/www/img/stationpedia/ItemPipeRadiator.png b/www/img/stationpedia/ItemPipeRadiator.png index 16f1a3a..f47a704 100644 Binary files a/www/img/stationpedia/ItemPipeRadiator.png and b/www/img/stationpedia/ItemPipeRadiator.png differ diff --git a/www/img/stationpedia/ItemPipeValve.png b/www/img/stationpedia/ItemPipeValve.png index 6c19d01..348e21f 100644 Binary files a/www/img/stationpedia/ItemPipeValve.png and b/www/img/stationpedia/ItemPipeValve.png differ diff --git a/www/img/stationpedia/ItemPipeVolumePump.png b/www/img/stationpedia/ItemPipeVolumePump.png index a1a48e3..368630d 100644 Binary files a/www/img/stationpedia/ItemPipeVolumePump.png and b/www/img/stationpedia/ItemPipeVolumePump.png differ diff --git a/www/img/stationpedia/ItemPlantEndothermic_Genepool1.png b/www/img/stationpedia/ItemPlantEndothermic_Genepool1.png index ea946b1..31adff2 100644 Binary files a/www/img/stationpedia/ItemPlantEndothermic_Genepool1.png and b/www/img/stationpedia/ItemPlantEndothermic_Genepool1.png differ diff --git a/www/img/stationpedia/ItemPlantEndothermic_Genepool2.png b/www/img/stationpedia/ItemPlantEndothermic_Genepool2.png index acff744..9caa45f 100644 Binary files a/www/img/stationpedia/ItemPlantEndothermic_Genepool2.png and b/www/img/stationpedia/ItemPlantEndothermic_Genepool2.png differ diff --git a/www/img/stationpedia/ItemPlantSampler.png b/www/img/stationpedia/ItemPlantSampler.png index 819a145..6c52bd2 100644 Binary files a/www/img/stationpedia/ItemPlantSampler.png and b/www/img/stationpedia/ItemPlantSampler.png differ diff --git a/www/img/stationpedia/ItemPlantSwitchGrass.png b/www/img/stationpedia/ItemPlantSwitchGrass.png index 9b66e7b..9da6ff6 100644 Binary files a/www/img/stationpedia/ItemPlantSwitchGrass.png and b/www/img/stationpedia/ItemPlantSwitchGrass.png differ diff --git a/www/img/stationpedia/ItemPlantThermogenic_Genepool1.png b/www/img/stationpedia/ItemPlantThermogenic_Genepool1.png index b044773..0b5618f 100644 Binary files a/www/img/stationpedia/ItemPlantThermogenic_Genepool1.png and b/www/img/stationpedia/ItemPlantThermogenic_Genepool1.png differ diff --git a/www/img/stationpedia/ItemPlantThermogenic_Genepool2.png b/www/img/stationpedia/ItemPlantThermogenic_Genepool2.png index afe184d..bd1062b 100644 Binary files a/www/img/stationpedia/ItemPlantThermogenic_Genepool2.png and b/www/img/stationpedia/ItemPlantThermogenic_Genepool2.png differ diff --git a/www/img/stationpedia/ItemPlasticSheets.png b/www/img/stationpedia/ItemPlasticSheets.png index 780b1f5..23ac5a0 100644 Binary files a/www/img/stationpedia/ItemPlasticSheets.png and b/www/img/stationpedia/ItemPlasticSheets.png differ diff --git a/www/img/stationpedia/ItemPotato.png b/www/img/stationpedia/ItemPotato.png index 863c914..54e2891 100644 Binary files a/www/img/stationpedia/ItemPotato.png and b/www/img/stationpedia/ItemPotato.png differ diff --git a/www/img/stationpedia/ItemPotatoBaked.png b/www/img/stationpedia/ItemPotatoBaked.png index df7c899..2ab49c7 100644 Binary files a/www/img/stationpedia/ItemPotatoBaked.png and b/www/img/stationpedia/ItemPotatoBaked.png differ diff --git a/www/img/stationpedia/ItemPowerConnector.png b/www/img/stationpedia/ItemPowerConnector.png index 83653ba..48eca0f 100644 Binary files a/www/img/stationpedia/ItemPowerConnector.png and b/www/img/stationpedia/ItemPowerConnector.png differ diff --git a/www/img/stationpedia/ItemPumpkin.png b/www/img/stationpedia/ItemPumpkin.png index d42f87e..dde9526 100644 Binary files a/www/img/stationpedia/ItemPumpkin.png and b/www/img/stationpedia/ItemPumpkin.png differ diff --git a/www/img/stationpedia/ItemPumpkinPie.png b/www/img/stationpedia/ItemPumpkinPie.png index 6e2f4bb..6d9b960 100644 Binary files a/www/img/stationpedia/ItemPumpkinPie.png and b/www/img/stationpedia/ItemPumpkinPie.png differ diff --git a/www/img/stationpedia/ItemPumpkinSoup.png b/www/img/stationpedia/ItemPumpkinSoup.png index 6ebe3a6..691b501 100644 Binary files a/www/img/stationpedia/ItemPumpkinSoup.png and b/www/img/stationpedia/ItemPumpkinSoup.png differ diff --git a/www/img/stationpedia/ItemPureIce.png b/www/img/stationpedia/ItemPureIce.png index c81d457..2d1c521 100644 Binary files a/www/img/stationpedia/ItemPureIce.png and b/www/img/stationpedia/ItemPureIce.png differ diff --git a/www/img/stationpedia/ItemPureIceCarbonDioxide.png b/www/img/stationpedia/ItemPureIceCarbonDioxide.png index 6db82d9..864cf1d 100644 Binary files a/www/img/stationpedia/ItemPureIceCarbonDioxide.png and b/www/img/stationpedia/ItemPureIceCarbonDioxide.png differ diff --git a/www/img/stationpedia/ItemPureIceHydrogen.png b/www/img/stationpedia/ItemPureIceHydrogen.png index 41a0b06..d144349 100644 Binary files a/www/img/stationpedia/ItemPureIceHydrogen.png and b/www/img/stationpedia/ItemPureIceHydrogen.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidCarbonDioxide.png b/www/img/stationpedia/ItemPureIceLiquidCarbonDioxide.png index 3be355b..438de77 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidCarbonDioxide.png and b/www/img/stationpedia/ItemPureIceLiquidCarbonDioxide.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidHydrogen.png b/www/img/stationpedia/ItemPureIceLiquidHydrogen.png index 41a0b06..d144349 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidHydrogen.png and b/www/img/stationpedia/ItemPureIceLiquidHydrogen.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidNitrogen.png b/www/img/stationpedia/ItemPureIceLiquidNitrogen.png index 5975f9d..4f462e1 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidNitrogen.png and b/www/img/stationpedia/ItemPureIceLiquidNitrogen.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidNitrous.png b/www/img/stationpedia/ItemPureIceLiquidNitrous.png index 8f38859..c8dc40f 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidNitrous.png and b/www/img/stationpedia/ItemPureIceLiquidNitrous.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidOxygen.png b/www/img/stationpedia/ItemPureIceLiquidOxygen.png index 2ee21df..2da2d81 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidOxygen.png and b/www/img/stationpedia/ItemPureIceLiquidOxygen.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidPollutant.png b/www/img/stationpedia/ItemPureIceLiquidPollutant.png index 9267ed6..cbb91ca 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidPollutant.png and b/www/img/stationpedia/ItemPureIceLiquidPollutant.png differ diff --git a/www/img/stationpedia/ItemPureIceLiquidVolatiles.png b/www/img/stationpedia/ItemPureIceLiquidVolatiles.png index 0655155..7fa0278 100644 Binary files a/www/img/stationpedia/ItemPureIceLiquidVolatiles.png and b/www/img/stationpedia/ItemPureIceLiquidVolatiles.png differ diff --git a/www/img/stationpedia/ItemPureIceNitrogen.png b/www/img/stationpedia/ItemPureIceNitrogen.png index f43763c..ce8eb11 100644 Binary files a/www/img/stationpedia/ItemPureIceNitrogen.png and b/www/img/stationpedia/ItemPureIceNitrogen.png differ diff --git a/www/img/stationpedia/ItemPureIceNitrous.png b/www/img/stationpedia/ItemPureIceNitrous.png index e642de1..d313271 100644 Binary files a/www/img/stationpedia/ItemPureIceNitrous.png and b/www/img/stationpedia/ItemPureIceNitrous.png differ diff --git a/www/img/stationpedia/ItemPureIceOxygen.png b/www/img/stationpedia/ItemPureIceOxygen.png index f863283..cce0bd2 100644 Binary files a/www/img/stationpedia/ItemPureIceOxygen.png and b/www/img/stationpedia/ItemPureIceOxygen.png differ diff --git a/www/img/stationpedia/ItemPureIcePollutant.png b/www/img/stationpedia/ItemPureIcePollutant.png index a3ee561..676f80e 100644 Binary files a/www/img/stationpedia/ItemPureIcePollutant.png and b/www/img/stationpedia/ItemPureIcePollutant.png differ diff --git a/www/img/stationpedia/ItemPureIcePollutedWater.png b/www/img/stationpedia/ItemPureIcePollutedWater.png index 6da6f06..238539c 100644 Binary files a/www/img/stationpedia/ItemPureIcePollutedWater.png and b/www/img/stationpedia/ItemPureIcePollutedWater.png differ diff --git a/www/img/stationpedia/ItemPureIceSteam.png b/www/img/stationpedia/ItemPureIceSteam.png index 37f90fd..f41c085 100644 Binary files a/www/img/stationpedia/ItemPureIceSteam.png and b/www/img/stationpedia/ItemPureIceSteam.png differ diff --git a/www/img/stationpedia/ItemPureIceVolatiles.png b/www/img/stationpedia/ItemPureIceVolatiles.png index 48095b6..d322f36 100644 Binary files a/www/img/stationpedia/ItemPureIceVolatiles.png and b/www/img/stationpedia/ItemPureIceVolatiles.png differ diff --git a/www/img/stationpedia/ItemRTG.png b/www/img/stationpedia/ItemRTG.png index a4cee9c..b7777e9 100644 Binary files a/www/img/stationpedia/ItemRTG.png and b/www/img/stationpedia/ItemRTG.png differ diff --git a/www/img/stationpedia/ItemRTGSurvival.png b/www/img/stationpedia/ItemRTGSurvival.png index 83a928b..90dbd5b 100644 Binary files a/www/img/stationpedia/ItemRTGSurvival.png and b/www/img/stationpedia/ItemRTGSurvival.png differ diff --git a/www/img/stationpedia/ItemReagentMix.png b/www/img/stationpedia/ItemReagentMix.png index 4646cb6..cee32f6 100644 Binary files a/www/img/stationpedia/ItemReagentMix.png and b/www/img/stationpedia/ItemReagentMix.png differ diff --git a/www/img/stationpedia/ItemRemoteDetonator.png b/www/img/stationpedia/ItemRemoteDetonator.png index 16d0b74..0deb98f 100644 Binary files a/www/img/stationpedia/ItemRemoteDetonator.png and b/www/img/stationpedia/ItemRemoteDetonator.png differ diff --git a/www/img/stationpedia/ItemResearchCapsule.png b/www/img/stationpedia/ItemResearchCapsule.png index c339189..af62253 100644 Binary files a/www/img/stationpedia/ItemResearchCapsule.png and b/www/img/stationpedia/ItemResearchCapsule.png differ diff --git a/www/img/stationpedia/ItemResearchCapsuleGreen.png b/www/img/stationpedia/ItemResearchCapsuleGreen.png index ca1a0ca..6a2b2f0 100644 Binary files a/www/img/stationpedia/ItemResearchCapsuleGreen.png and b/www/img/stationpedia/ItemResearchCapsuleGreen.png differ diff --git a/www/img/stationpedia/ItemResearchCapsuleRed.png b/www/img/stationpedia/ItemResearchCapsuleRed.png index a1cd486..ff34866 100644 Binary files a/www/img/stationpedia/ItemResearchCapsuleRed.png and b/www/img/stationpedia/ItemResearchCapsuleRed.png differ diff --git a/www/img/stationpedia/ItemResearchCapsuleYellow.png b/www/img/stationpedia/ItemResearchCapsuleYellow.png index 119a329..0ba7a3b 100644 Binary files a/www/img/stationpedia/ItemResearchCapsuleYellow.png and b/www/img/stationpedia/ItemResearchCapsuleYellow.png differ diff --git a/www/img/stationpedia/ItemReusableFireExtinguisher.png b/www/img/stationpedia/ItemReusableFireExtinguisher.png index dac6590..651cba7 100644 Binary files a/www/img/stationpedia/ItemReusableFireExtinguisher.png and b/www/img/stationpedia/ItemReusableFireExtinguisher.png differ diff --git a/www/img/stationpedia/ItemRice.png b/www/img/stationpedia/ItemRice.png index f399de4..7407537 100644 Binary files a/www/img/stationpedia/ItemRice.png and b/www/img/stationpedia/ItemRice.png differ diff --git a/www/img/stationpedia/ItemRoadFlare.png b/www/img/stationpedia/ItemRoadFlare.png index 36b37f9..7001fca 100644 Binary files a/www/img/stationpedia/ItemRoadFlare.png and b/www/img/stationpedia/ItemRoadFlare.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHead.png b/www/img/stationpedia/ItemRocketMiningDrillHead.png index e124c06..856c073 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHead.png and b/www/img/stationpedia/ItemRocketMiningDrillHead.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadDurable.png b/www/img/stationpedia/ItemRocketMiningDrillHeadDurable.png index fb6fdbb..eee4f6d 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadDurable.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadDurable.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedIce.png b/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedIce.png index 633abfa..bacfacb 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedIce.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedIce.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedMineral.png b/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedMineral.png index 83b77bc..1658422 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedMineral.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadHighSpeedMineral.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadIce.png b/www/img/stationpedia/ItemRocketMiningDrillHeadIce.png index 2ff332c..3404f09 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadIce.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadIce.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadLongTerm.png b/www/img/stationpedia/ItemRocketMiningDrillHeadLongTerm.png index ff330a6..e3fe408 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadLongTerm.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadLongTerm.png differ diff --git a/www/img/stationpedia/ItemRocketMiningDrillHeadMineral.png b/www/img/stationpedia/ItemRocketMiningDrillHeadMineral.png index a0957d5..216109d 100644 Binary files a/www/img/stationpedia/ItemRocketMiningDrillHeadMineral.png and b/www/img/stationpedia/ItemRocketMiningDrillHeadMineral.png differ diff --git a/www/img/stationpedia/ItemRocketScanningHead.png b/www/img/stationpedia/ItemRocketScanningHead.png index 767bbbf..b1d4980 100644 Binary files a/www/img/stationpedia/ItemRocketScanningHead.png and b/www/img/stationpedia/ItemRocketScanningHead.png differ diff --git a/www/img/stationpedia/ItemScanner.png b/www/img/stationpedia/ItemScanner.png index ca257b0..41a7d6e 100644 Binary files a/www/img/stationpedia/ItemScanner.png and b/www/img/stationpedia/ItemScanner.png differ diff --git a/www/img/stationpedia/ItemScrewdriver.png b/www/img/stationpedia/ItemScrewdriver.png index 69916b8..b6bcb8d 100644 Binary files a/www/img/stationpedia/ItemScrewdriver.png and b/www/img/stationpedia/ItemScrewdriver.png differ diff --git a/www/img/stationpedia/ItemSecurityCamera.png b/www/img/stationpedia/ItemSecurityCamera.png index 6f8a38d..2d4db85 100644 Binary files a/www/img/stationpedia/ItemSecurityCamera.png and b/www/img/stationpedia/ItemSecurityCamera.png differ diff --git a/www/img/stationpedia/ItemSensorLenses.png b/www/img/stationpedia/ItemSensorLenses.png index d06d4ab..4dd57f6 100644 Binary files a/www/img/stationpedia/ItemSensorLenses.png and b/www/img/stationpedia/ItemSensorLenses.png differ diff --git a/www/img/stationpedia/ItemSensorProcessingUnitCelestialScanner.png b/www/img/stationpedia/ItemSensorProcessingUnitCelestialScanner.png index d598781..82eeead 100644 Binary files a/www/img/stationpedia/ItemSensorProcessingUnitCelestialScanner.png and b/www/img/stationpedia/ItemSensorProcessingUnitCelestialScanner.png differ diff --git a/www/img/stationpedia/ItemSensorProcessingUnitMesonScanner.png b/www/img/stationpedia/ItemSensorProcessingUnitMesonScanner.png index 312b839..3363d34 100644 Binary files a/www/img/stationpedia/ItemSensorProcessingUnitMesonScanner.png and b/www/img/stationpedia/ItemSensorProcessingUnitMesonScanner.png differ diff --git a/www/img/stationpedia/ItemSensorProcessingUnitOreScanner.png b/www/img/stationpedia/ItemSensorProcessingUnitOreScanner.png index 6063340..3a7d1d7 100644 Binary files a/www/img/stationpedia/ItemSensorProcessingUnitOreScanner.png and b/www/img/stationpedia/ItemSensorProcessingUnitOreScanner.png differ diff --git a/www/img/stationpedia/ItemSiliconIngot.png b/www/img/stationpedia/ItemSiliconIngot.png index bea993f..84099b0 100644 Binary files a/www/img/stationpedia/ItemSiliconIngot.png and b/www/img/stationpedia/ItemSiliconIngot.png differ diff --git a/www/img/stationpedia/ItemSiliconOre.png b/www/img/stationpedia/ItemSiliconOre.png index f354a5e..698dc6c 100644 Binary files a/www/img/stationpedia/ItemSiliconOre.png and b/www/img/stationpedia/ItemSiliconOre.png differ diff --git a/www/img/stationpedia/ItemSilverIngot.png b/www/img/stationpedia/ItemSilverIngot.png index 84267a9..80e4097 100644 Binary files a/www/img/stationpedia/ItemSilverIngot.png and b/www/img/stationpedia/ItemSilverIngot.png differ diff --git a/www/img/stationpedia/ItemSilverOre.png b/www/img/stationpedia/ItemSilverOre.png index 2236be3..46580a2 100644 Binary files a/www/img/stationpedia/ItemSilverOre.png and b/www/img/stationpedia/ItemSilverOre.png differ diff --git a/www/img/stationpedia/ItemSolderIngot.png b/www/img/stationpedia/ItemSolderIngot.png index 80ebdd5..a0ad4f8 100644 Binary files a/www/img/stationpedia/ItemSolderIngot.png and b/www/img/stationpedia/ItemSolderIngot.png differ diff --git a/www/img/stationpedia/ItemSolidFuel.png b/www/img/stationpedia/ItemSolidFuel.png index 5d8cc8e..5878bc3 100644 Binary files a/www/img/stationpedia/ItemSolidFuel.png and b/www/img/stationpedia/ItemSolidFuel.png differ diff --git a/www/img/stationpedia/ItemSoundCartridgeBass.png b/www/img/stationpedia/ItemSoundCartridgeBass.png index 3743623..5266a84 100644 Binary files a/www/img/stationpedia/ItemSoundCartridgeBass.png and b/www/img/stationpedia/ItemSoundCartridgeBass.png differ diff --git a/www/img/stationpedia/ItemSoundCartridgeDrums.png b/www/img/stationpedia/ItemSoundCartridgeDrums.png index 4e745b3..f160bc0 100644 Binary files a/www/img/stationpedia/ItemSoundCartridgeDrums.png and b/www/img/stationpedia/ItemSoundCartridgeDrums.png differ diff --git a/www/img/stationpedia/ItemSoundCartridgeLeads.png b/www/img/stationpedia/ItemSoundCartridgeLeads.png index 315fffe..4e29fca 100644 Binary files a/www/img/stationpedia/ItemSoundCartridgeLeads.png and b/www/img/stationpedia/ItemSoundCartridgeLeads.png differ diff --git a/www/img/stationpedia/ItemSoundCartridgeSynth.png b/www/img/stationpedia/ItemSoundCartridgeSynth.png index cf58122..501b457 100644 Binary files a/www/img/stationpedia/ItemSoundCartridgeSynth.png and b/www/img/stationpedia/ItemSoundCartridgeSynth.png differ diff --git a/www/img/stationpedia/ItemSoyOil.png b/www/img/stationpedia/ItemSoyOil.png index 0b4b1fd..5fb0845 100644 Binary files a/www/img/stationpedia/ItemSoyOil.png and b/www/img/stationpedia/ItemSoyOil.png differ diff --git a/www/img/stationpedia/ItemSoybean.png b/www/img/stationpedia/ItemSoybean.png index b853ddf..2bea921 100644 Binary files a/www/img/stationpedia/ItemSoybean.png and b/www/img/stationpedia/ItemSoybean.png differ diff --git a/www/img/stationpedia/ItemSpaceCleaner.png b/www/img/stationpedia/ItemSpaceCleaner.png index 3c9e78e..5ffb4da 100644 Binary files a/www/img/stationpedia/ItemSpaceCleaner.png and b/www/img/stationpedia/ItemSpaceCleaner.png differ diff --git a/www/img/stationpedia/ItemSpaceHelmet.png b/www/img/stationpedia/ItemSpaceHelmet.png index 6e3c0a9..8edbe16 100644 Binary files a/www/img/stationpedia/ItemSpaceHelmet.png and b/www/img/stationpedia/ItemSpaceHelmet.png differ diff --git a/www/img/stationpedia/ItemSpaceIce.png b/www/img/stationpedia/ItemSpaceIce.png index 6b4d39a..3b97991 100644 Binary files a/www/img/stationpedia/ItemSpaceIce.png and b/www/img/stationpedia/ItemSpaceIce.png differ diff --git a/www/img/stationpedia/ItemSpaceOre.png b/www/img/stationpedia/ItemSpaceOre.png index 2eefd48..45cc100 100644 Binary files a/www/img/stationpedia/ItemSpaceOre.png and b/www/img/stationpedia/ItemSpaceOre.png differ diff --git a/www/img/stationpedia/ItemSpacepack.png b/www/img/stationpedia/ItemSpacepack.png index a660928..15bace0 100644 Binary files a/www/img/stationpedia/ItemSpacepack.png and b/www/img/stationpedia/ItemSpacepack.png differ diff --git a/www/img/stationpedia/ItemSprayCanBlack.png b/www/img/stationpedia/ItemSprayCanBlack.png index bd9c41f..1a2420c 100644 Binary files a/www/img/stationpedia/ItemSprayCanBlack.png and b/www/img/stationpedia/ItemSprayCanBlack.png differ diff --git a/www/img/stationpedia/ItemSprayCanBlue.png b/www/img/stationpedia/ItemSprayCanBlue.png index 3f1b297..5fed3ab 100644 Binary files a/www/img/stationpedia/ItemSprayCanBlue.png and b/www/img/stationpedia/ItemSprayCanBlue.png differ diff --git a/www/img/stationpedia/ItemSprayCanBrown.png b/www/img/stationpedia/ItemSprayCanBrown.png index e680e3d..ec2b140 100644 Binary files a/www/img/stationpedia/ItemSprayCanBrown.png and b/www/img/stationpedia/ItemSprayCanBrown.png differ diff --git a/www/img/stationpedia/ItemSprayCanGreen.png b/www/img/stationpedia/ItemSprayCanGreen.png index 8e82bdc..762d782 100644 Binary files a/www/img/stationpedia/ItemSprayCanGreen.png and b/www/img/stationpedia/ItemSprayCanGreen.png differ diff --git a/www/img/stationpedia/ItemSprayCanGrey.png b/www/img/stationpedia/ItemSprayCanGrey.png index 3a5182c..dacc108 100644 Binary files a/www/img/stationpedia/ItemSprayCanGrey.png and b/www/img/stationpedia/ItemSprayCanGrey.png differ diff --git a/www/img/stationpedia/ItemSprayCanKhaki.png b/www/img/stationpedia/ItemSprayCanKhaki.png index 6ad00a3..b901603 100644 Binary files a/www/img/stationpedia/ItemSprayCanKhaki.png and b/www/img/stationpedia/ItemSprayCanKhaki.png differ diff --git a/www/img/stationpedia/ItemSprayCanOrange.png b/www/img/stationpedia/ItemSprayCanOrange.png index 4734a29..6b90b3b 100644 Binary files a/www/img/stationpedia/ItemSprayCanOrange.png and b/www/img/stationpedia/ItemSprayCanOrange.png differ diff --git a/www/img/stationpedia/ItemSprayCanPink.png b/www/img/stationpedia/ItemSprayCanPink.png index dd68462..d0fb865 100644 Binary files a/www/img/stationpedia/ItemSprayCanPink.png and b/www/img/stationpedia/ItemSprayCanPink.png differ diff --git a/www/img/stationpedia/ItemSprayCanPurple.png b/www/img/stationpedia/ItemSprayCanPurple.png index 771fce9..c45f6d0 100644 Binary files a/www/img/stationpedia/ItemSprayCanPurple.png and b/www/img/stationpedia/ItemSprayCanPurple.png differ diff --git a/www/img/stationpedia/ItemSprayCanRed.png b/www/img/stationpedia/ItemSprayCanRed.png index bbc88cb..cc9729d 100644 Binary files a/www/img/stationpedia/ItemSprayCanRed.png and b/www/img/stationpedia/ItemSprayCanRed.png differ diff --git a/www/img/stationpedia/ItemSprayCanWhite.png b/www/img/stationpedia/ItemSprayCanWhite.png index ef40aab..559c153 100644 Binary files a/www/img/stationpedia/ItemSprayCanWhite.png and b/www/img/stationpedia/ItemSprayCanWhite.png differ diff --git a/www/img/stationpedia/ItemSprayCanYellow.png b/www/img/stationpedia/ItemSprayCanYellow.png index 6a27163..5695a49 100644 Binary files a/www/img/stationpedia/ItemSprayCanYellow.png and b/www/img/stationpedia/ItemSprayCanYellow.png differ diff --git a/www/img/stationpedia/ItemSprayGun.png b/www/img/stationpedia/ItemSprayGun.png index dad18d3..9878724 100644 Binary files a/www/img/stationpedia/ItemSprayGun.png and b/www/img/stationpedia/ItemSprayGun.png differ diff --git a/www/img/stationpedia/ItemSteelFrames.png b/www/img/stationpedia/ItemSteelFrames.png index 60108a0..c049d3a 100644 Binary files a/www/img/stationpedia/ItemSteelFrames.png and b/www/img/stationpedia/ItemSteelFrames.png differ diff --git a/www/img/stationpedia/ItemSteelIngot.png b/www/img/stationpedia/ItemSteelIngot.png index e93767d..a0f6d86 100644 Binary files a/www/img/stationpedia/ItemSteelIngot.png and b/www/img/stationpedia/ItemSteelIngot.png differ diff --git a/www/img/stationpedia/ItemSteelSheets.png b/www/img/stationpedia/ItemSteelSheets.png index 01ae1f0..b0212b2 100644 Binary files a/www/img/stationpedia/ItemSteelSheets.png and b/www/img/stationpedia/ItemSteelSheets.png differ diff --git a/www/img/stationpedia/ItemStelliteGlassSheets.png b/www/img/stationpedia/ItemStelliteGlassSheets.png index 4e56e7e..32b7f2f 100644 Binary files a/www/img/stationpedia/ItemStelliteGlassSheets.png and b/www/img/stationpedia/ItemStelliteGlassSheets.png differ diff --git a/www/img/stationpedia/ItemStelliteIngot.png b/www/img/stationpedia/ItemStelliteIngot.png index dc55891..c7d3269 100644 Binary files a/www/img/stationpedia/ItemStelliteIngot.png and b/www/img/stationpedia/ItemStelliteIngot.png differ diff --git a/www/img/stationpedia/ItemTablet.png b/www/img/stationpedia/ItemTablet.png index 777a9f7..19cb6fc 100644 Binary files a/www/img/stationpedia/ItemTablet.png and b/www/img/stationpedia/ItemTablet.png differ diff --git a/www/img/stationpedia/ItemTerrainManipulator.png b/www/img/stationpedia/ItemTerrainManipulator.png index d98bc31..d5dee57 100644 Binary files a/www/img/stationpedia/ItemTerrainManipulator.png and b/www/img/stationpedia/ItemTerrainManipulator.png differ diff --git a/www/img/stationpedia/ItemTomato.png b/www/img/stationpedia/ItemTomato.png index cb6fca4..4b8a295 100644 Binary files a/www/img/stationpedia/ItemTomato.png and b/www/img/stationpedia/ItemTomato.png differ diff --git a/www/img/stationpedia/ItemTomatoSoup.png b/www/img/stationpedia/ItemTomatoSoup.png index 185635c..2ffc875 100644 Binary files a/www/img/stationpedia/ItemTomatoSoup.png and b/www/img/stationpedia/ItemTomatoSoup.png differ diff --git a/www/img/stationpedia/ItemToolBelt.png b/www/img/stationpedia/ItemToolBelt.png index dbc25d1..a0571b9 100644 Binary files a/www/img/stationpedia/ItemToolBelt.png and b/www/img/stationpedia/ItemToolBelt.png differ diff --git a/www/img/stationpedia/ItemTropicalPlant.png b/www/img/stationpedia/ItemTropicalPlant.png index b84bc60..1172f34 100644 Binary files a/www/img/stationpedia/ItemTropicalPlant.png and b/www/img/stationpedia/ItemTropicalPlant.png differ diff --git a/www/img/stationpedia/ItemUraniumOre.png b/www/img/stationpedia/ItemUraniumOre.png index 26cdc84..321bb3c 100644 Binary files a/www/img/stationpedia/ItemUraniumOre.png and b/www/img/stationpedia/ItemUraniumOre.png differ diff --git a/www/img/stationpedia/ItemVolatiles.png b/www/img/stationpedia/ItemVolatiles.png index e9b9ea8..2e061e1 100644 Binary files a/www/img/stationpedia/ItemVolatiles.png and b/www/img/stationpedia/ItemVolatiles.png differ diff --git a/www/img/stationpedia/ItemWallCooler.png b/www/img/stationpedia/ItemWallCooler.png index dccfd70..3049c72 100644 Binary files a/www/img/stationpedia/ItemWallCooler.png and b/www/img/stationpedia/ItemWallCooler.png differ diff --git a/www/img/stationpedia/ItemWallHeater.png b/www/img/stationpedia/ItemWallHeater.png index 977849a..f0a05af 100644 Binary files a/www/img/stationpedia/ItemWallHeater.png and b/www/img/stationpedia/ItemWallHeater.png differ diff --git a/www/img/stationpedia/ItemWallLight.png b/www/img/stationpedia/ItemWallLight.png index f3f33aa..36649e1 100644 Binary files a/www/img/stationpedia/ItemWallLight.png and b/www/img/stationpedia/ItemWallLight.png differ diff --git a/www/img/stationpedia/ItemWaspaloyIngot.png b/www/img/stationpedia/ItemWaspaloyIngot.png index 4047185..89e4727 100644 Binary files a/www/img/stationpedia/ItemWaspaloyIngot.png and b/www/img/stationpedia/ItemWaspaloyIngot.png differ diff --git a/www/img/stationpedia/ItemWaterBottle.png b/www/img/stationpedia/ItemWaterBottle.png index 4fc0d24..9562d55 100644 Binary files a/www/img/stationpedia/ItemWaterBottle.png and b/www/img/stationpedia/ItemWaterBottle.png differ diff --git a/www/img/stationpedia/ItemWaterPipeDigitalValve.png b/www/img/stationpedia/ItemWaterPipeDigitalValve.png index c221767..e278391 100644 Binary files a/www/img/stationpedia/ItemWaterPipeDigitalValve.png and b/www/img/stationpedia/ItemWaterPipeDigitalValve.png differ diff --git a/www/img/stationpedia/ItemWaterPipeMeter.png b/www/img/stationpedia/ItemWaterPipeMeter.png index 78fbf62..7bd31d9 100644 Binary files a/www/img/stationpedia/ItemWaterPipeMeter.png and b/www/img/stationpedia/ItemWaterPipeMeter.png differ diff --git a/www/img/stationpedia/ItemWaterWallCooler.png b/www/img/stationpedia/ItemWaterWallCooler.png index 64af855..c43e4fb 100644 Binary files a/www/img/stationpedia/ItemWaterWallCooler.png and b/www/img/stationpedia/ItemWaterWallCooler.png differ diff --git a/www/img/stationpedia/ItemWearLamp.png b/www/img/stationpedia/ItemWearLamp.png index e653077..4e9764f 100644 Binary files a/www/img/stationpedia/ItemWearLamp.png and b/www/img/stationpedia/ItemWearLamp.png differ diff --git a/www/img/stationpedia/ItemWeldingTorch.png b/www/img/stationpedia/ItemWeldingTorch.png index a68b311..2cb973c 100644 Binary files a/www/img/stationpedia/ItemWeldingTorch.png and b/www/img/stationpedia/ItemWeldingTorch.png differ diff --git a/www/img/stationpedia/ItemWheat.png b/www/img/stationpedia/ItemWheat.png index dfebe15..3d4e470 100644 Binary files a/www/img/stationpedia/ItemWheat.png and b/www/img/stationpedia/ItemWheat.png differ diff --git a/www/img/stationpedia/ItemWireCutters.png b/www/img/stationpedia/ItemWireCutters.png index 518cff7..b716bd2 100644 Binary files a/www/img/stationpedia/ItemWireCutters.png and b/www/img/stationpedia/ItemWireCutters.png differ diff --git a/www/img/stationpedia/ItemWirelessBatteryCellExtraLarge.png b/www/img/stationpedia/ItemWirelessBatteryCellExtraLarge.png index a85ea5a..0cc6e9a 100644 Binary files a/www/img/stationpedia/ItemWirelessBatteryCellExtraLarge.png and b/www/img/stationpedia/ItemWirelessBatteryCellExtraLarge.png differ diff --git a/www/img/stationpedia/ItemWreckageAirConditioner1.png b/www/img/stationpedia/ItemWreckageAirConditioner1.png index bec447d..bfd0dbf 100644 Binary files a/www/img/stationpedia/ItemWreckageAirConditioner1.png and b/www/img/stationpedia/ItemWreckageAirConditioner1.png differ diff --git a/www/img/stationpedia/ItemWreckageAirConditioner2.png b/www/img/stationpedia/ItemWreckageAirConditioner2.png index 3a57c8d..ff0a250 100644 Binary files a/www/img/stationpedia/ItemWreckageAirConditioner2.png and b/www/img/stationpedia/ItemWreckageAirConditioner2.png differ diff --git a/www/img/stationpedia/ItemWreckageHydroponicsTray1.png b/www/img/stationpedia/ItemWreckageHydroponicsTray1.png index 649dc04..2d30322 100644 Binary files a/www/img/stationpedia/ItemWreckageHydroponicsTray1.png and b/www/img/stationpedia/ItemWreckageHydroponicsTray1.png differ diff --git a/www/img/stationpedia/ItemWreckageLargeExtendableRadiator01.png b/www/img/stationpedia/ItemWreckageLargeExtendableRadiator01.png index 5932f1f..45084ff 100644 Binary files a/www/img/stationpedia/ItemWreckageLargeExtendableRadiator01.png and b/www/img/stationpedia/ItemWreckageLargeExtendableRadiator01.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureRTG1.png b/www/img/stationpedia/ItemWreckageStructureRTG1.png index 092c819..a238e91 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureRTG1.png and b/www/img/stationpedia/ItemWreckageStructureRTG1.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation001.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation001.png index 0e37d43..608411e 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation001.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation001.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation002.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation002.png index 0b53224..7c9c451 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation002.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation002.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation003.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation003.png index adfd15b..987f388 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation003.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation003.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation004.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation004.png index f4e49e6..271eb8b 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation004.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation004.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation005.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation005.png index 62991e8..fc9ad6e 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation005.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation005.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation006.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation006.png index e342338..c329185 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation006.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation006.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation007.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation007.png index cf72ba1..f54335e 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation007.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation007.png differ diff --git a/www/img/stationpedia/ItemWreckageStructureWeatherStation008.png b/www/img/stationpedia/ItemWreckageStructureWeatherStation008.png index b046c75..6d2ee94 100644 Binary files a/www/img/stationpedia/ItemWreckageStructureWeatherStation008.png and b/www/img/stationpedia/ItemWreckageStructureWeatherStation008.png differ diff --git a/www/img/stationpedia/ItemWreckageTurbineGenerator1.png b/www/img/stationpedia/ItemWreckageTurbineGenerator1.png index 038d837..c4ae28d 100644 Binary files a/www/img/stationpedia/ItemWreckageTurbineGenerator1.png and b/www/img/stationpedia/ItemWreckageTurbineGenerator1.png differ diff --git a/www/img/stationpedia/ItemWreckageTurbineGenerator2.png b/www/img/stationpedia/ItemWreckageTurbineGenerator2.png index fa0c81b..860c764 100644 Binary files a/www/img/stationpedia/ItemWreckageTurbineGenerator2.png and b/www/img/stationpedia/ItemWreckageTurbineGenerator2.png differ diff --git a/www/img/stationpedia/ItemWreckageTurbineGenerator3.png b/www/img/stationpedia/ItemWreckageTurbineGenerator3.png index 830a5fc..5449156 100644 Binary files a/www/img/stationpedia/ItemWreckageTurbineGenerator3.png and b/www/img/stationpedia/ItemWreckageTurbineGenerator3.png differ diff --git a/www/img/stationpedia/ItemWreckageWallCooler1.png b/www/img/stationpedia/ItemWreckageWallCooler1.png index cd1b89b..cb2b0e5 100644 Binary files a/www/img/stationpedia/ItemWreckageWallCooler1.png and b/www/img/stationpedia/ItemWreckageWallCooler1.png differ diff --git a/www/img/stationpedia/ItemWreckageWallCooler2.png b/www/img/stationpedia/ItemWreckageWallCooler2.png index c7ce024..721328d 100644 Binary files a/www/img/stationpedia/ItemWreckageWallCooler2.png and b/www/img/stationpedia/ItemWreckageWallCooler2.png differ diff --git a/www/img/stationpedia/ItemWrench.png b/www/img/stationpedia/ItemWrench.png index 53a2a94..4711424 100644 Binary files a/www/img/stationpedia/ItemWrench.png and b/www/img/stationpedia/ItemWrench.png differ diff --git a/www/img/stationpedia/KitSDBSilo.png b/www/img/stationpedia/KitSDBSilo.png index 53ce7b4..1208204 100644 Binary files a/www/img/stationpedia/KitSDBSilo.png and b/www/img/stationpedia/KitSDBSilo.png differ diff --git a/www/img/stationpedia/KitStructureCombustionCentrifuge.png b/www/img/stationpedia/KitStructureCombustionCentrifuge.png index 7b3b04c..9a675a8 100644 Binary files a/www/img/stationpedia/KitStructureCombustionCentrifuge.png and b/www/img/stationpedia/KitStructureCombustionCentrifuge.png differ diff --git a/www/img/stationpedia/KitchenTableShort.png b/www/img/stationpedia/KitchenTableShort.png index 094921e..bf856a0 100644 Binary files a/www/img/stationpedia/KitchenTableShort.png and b/www/img/stationpedia/KitchenTableShort.png differ diff --git a/www/img/stationpedia/KitchenTableSimpleShort.png b/www/img/stationpedia/KitchenTableSimpleShort.png index f3a8aa4..cbf75b6 100644 Binary files a/www/img/stationpedia/KitchenTableSimpleShort.png and b/www/img/stationpedia/KitchenTableSimpleShort.png differ diff --git a/www/img/stationpedia/KitchenTableSimpleTall.png b/www/img/stationpedia/KitchenTableSimpleTall.png index 61d67e5..e31299d 100644 Binary files a/www/img/stationpedia/KitchenTableSimpleTall.png and b/www/img/stationpedia/KitchenTableSimpleTall.png differ diff --git a/www/img/stationpedia/KitchenTableTall.png b/www/img/stationpedia/KitchenTableTall.png index a2986e4..a93cadb 100644 Binary files a/www/img/stationpedia/KitchenTableTall.png and b/www/img/stationpedia/KitchenTableTall.png differ diff --git a/www/img/stationpedia/Lander.png b/www/img/stationpedia/Lander.png index f9e6dd3..afbadb7 100644 Binary files a/www/img/stationpedia/Lander.png and b/www/img/stationpedia/Lander.png differ diff --git a/www/img/stationpedia/Landingpad_2x2CenterPiece01.png b/www/img/stationpedia/Landingpad_2x2CenterPiece01.png index df3e2e0..a532419 100644 Binary files a/www/img/stationpedia/Landingpad_2x2CenterPiece01.png and b/www/img/stationpedia/Landingpad_2x2CenterPiece01.png differ diff --git a/www/img/stationpedia/Landingpad_BlankPiece.png b/www/img/stationpedia/Landingpad_BlankPiece.png index 198ae23..a27ece8 100644 Binary files a/www/img/stationpedia/Landingpad_BlankPiece.png and b/www/img/stationpedia/Landingpad_BlankPiece.png differ diff --git a/www/img/stationpedia/Landingpad_CenterPiece01.png b/www/img/stationpedia/Landingpad_CenterPiece01.png index 9c6b7d2..e30003b 100644 Binary files a/www/img/stationpedia/Landingpad_CenterPiece01.png and b/www/img/stationpedia/Landingpad_CenterPiece01.png differ diff --git a/www/img/stationpedia/Landingpad_CrossPiece.png b/www/img/stationpedia/Landingpad_CrossPiece.png index 6039e23..87391d5 100644 Binary files a/www/img/stationpedia/Landingpad_CrossPiece.png and b/www/img/stationpedia/Landingpad_CrossPiece.png differ diff --git a/www/img/stationpedia/Landingpad_DataConnectionPiece.png b/www/img/stationpedia/Landingpad_DataConnectionPiece.png index 731b807..63a60ee 100644 Binary files a/www/img/stationpedia/Landingpad_DataConnectionPiece.png and b/www/img/stationpedia/Landingpad_DataConnectionPiece.png differ diff --git a/www/img/stationpedia/Landingpad_DiagonalPiece01.png b/www/img/stationpedia/Landingpad_DiagonalPiece01.png index 45991f3..39ebc88 100644 Binary files a/www/img/stationpedia/Landingpad_DiagonalPiece01.png and b/www/img/stationpedia/Landingpad_DiagonalPiece01.png differ diff --git a/www/img/stationpedia/Landingpad_GasConnectorOutwardPiece.png b/www/img/stationpedia/Landingpad_GasConnectorOutwardPiece.png index d0721ff..6adeb00 100644 Binary files a/www/img/stationpedia/Landingpad_GasConnectorOutwardPiece.png and b/www/img/stationpedia/Landingpad_GasConnectorOutwardPiece.png differ diff --git a/www/img/stationpedia/Landingpad_GasCylinderTankPiece.png b/www/img/stationpedia/Landingpad_GasCylinderTankPiece.png index e9a3488..bcbab0c 100644 Binary files a/www/img/stationpedia/Landingpad_GasCylinderTankPiece.png and b/www/img/stationpedia/Landingpad_GasCylinderTankPiece.png differ diff --git a/www/img/stationpedia/Landingpad_LiquidConnectorOutwardPiece.png b/www/img/stationpedia/Landingpad_LiquidConnectorOutwardPiece.png index b9fc0a7..75d7313 100644 Binary files a/www/img/stationpedia/Landingpad_LiquidConnectorOutwardPiece.png and b/www/img/stationpedia/Landingpad_LiquidConnectorOutwardPiece.png differ diff --git a/www/img/stationpedia/Landingpad_StraightPiece01.png b/www/img/stationpedia/Landingpad_StraightPiece01.png index e2b8734..bad46f7 100644 Binary files a/www/img/stationpedia/Landingpad_StraightPiece01.png and b/www/img/stationpedia/Landingpad_StraightPiece01.png differ diff --git a/www/img/stationpedia/Landingpad_TaxiPieceCorner.png b/www/img/stationpedia/Landingpad_TaxiPieceCorner.png index 5cb9812..64b545e 100644 Binary files a/www/img/stationpedia/Landingpad_TaxiPieceCorner.png and b/www/img/stationpedia/Landingpad_TaxiPieceCorner.png differ diff --git a/www/img/stationpedia/Landingpad_TaxiPieceHold.png b/www/img/stationpedia/Landingpad_TaxiPieceHold.png index 29e369d..e5a5e0c 100644 Binary files a/www/img/stationpedia/Landingpad_TaxiPieceHold.png and b/www/img/stationpedia/Landingpad_TaxiPieceHold.png differ diff --git a/www/img/stationpedia/Landingpad_TaxiPieceStraight.png b/www/img/stationpedia/Landingpad_TaxiPieceStraight.png index 7d6dbb0..75758ba 100644 Binary files a/www/img/stationpedia/Landingpad_TaxiPieceStraight.png and b/www/img/stationpedia/Landingpad_TaxiPieceStraight.png differ diff --git a/www/img/stationpedia/Landingpad_ThreshholdPiece.png b/www/img/stationpedia/Landingpad_ThreshholdPiece.png index 047e061..8b06f87 100644 Binary files a/www/img/stationpedia/Landingpad_ThreshholdPiece.png and b/www/img/stationpedia/Landingpad_ThreshholdPiece.png differ diff --git a/www/img/stationpedia/LogicStepSequencer8.png b/www/img/stationpedia/LogicStepSequencer8.png index 1de1dce..ecb4686 100644 Binary files a/www/img/stationpedia/LogicStepSequencer8.png and b/www/img/stationpedia/LogicStepSequencer8.png differ diff --git a/www/img/stationpedia/Meteorite.png b/www/img/stationpedia/Meteorite.png index e1bc56c..b0a0f8b 100644 Binary files a/www/img/stationpedia/Meteorite.png and b/www/img/stationpedia/Meteorite.png differ diff --git a/www/img/stationpedia/MonsterEgg.png b/www/img/stationpedia/MonsterEgg.png index 91564aa..a7edc59 100644 Binary files a/www/img/stationpedia/MonsterEgg.png and b/www/img/stationpedia/MonsterEgg.png differ diff --git a/www/img/stationpedia/MotherboardComms.png b/www/img/stationpedia/MotherboardComms.png index 0611d72..ea2f693 100644 Binary files a/www/img/stationpedia/MotherboardComms.png and b/www/img/stationpedia/MotherboardComms.png differ diff --git a/www/img/stationpedia/MotherboardLogic.png b/www/img/stationpedia/MotherboardLogic.png index 0611d72..ea2f693 100644 Binary files a/www/img/stationpedia/MotherboardLogic.png and b/www/img/stationpedia/MotherboardLogic.png differ diff --git a/www/img/stationpedia/MotherboardMissionControl.png b/www/img/stationpedia/MotherboardMissionControl.png index 96e54f0..aed36b7 100644 Binary files a/www/img/stationpedia/MotherboardMissionControl.png and b/www/img/stationpedia/MotherboardMissionControl.png differ diff --git a/www/img/stationpedia/MotherboardProgrammableChip.png b/www/img/stationpedia/MotherboardProgrammableChip.png index 0611d72..ea2f693 100644 Binary files a/www/img/stationpedia/MotherboardProgrammableChip.png and b/www/img/stationpedia/MotherboardProgrammableChip.png differ diff --git a/www/img/stationpedia/MotherboardRockets.png b/www/img/stationpedia/MotherboardRockets.png index 0611d72..ea2f693 100644 Binary files a/www/img/stationpedia/MotherboardRockets.png and b/www/img/stationpedia/MotherboardRockets.png differ diff --git a/www/img/stationpedia/MotherboardSorter.png b/www/img/stationpedia/MotherboardSorter.png index 0611d72..ea2f693 100644 Binary files a/www/img/stationpedia/MotherboardSorter.png and b/www/img/stationpedia/MotherboardSorter.png differ diff --git a/www/img/stationpedia/MothershipCore.png b/www/img/stationpedia/MothershipCore.png index e1bc56c..b0a0f8b 100644 Binary files a/www/img/stationpedia/MothershipCore.png and b/www/img/stationpedia/MothershipCore.png differ diff --git a/www/img/stationpedia/NpcChick.png b/www/img/stationpedia/NpcChick.png index 52f6e3f..5e9a390 100644 Binary files a/www/img/stationpedia/NpcChick.png and b/www/img/stationpedia/NpcChick.png differ diff --git a/www/img/stationpedia/NpcChicken.png b/www/img/stationpedia/NpcChicken.png index 12132ca..cbe95fb 100644 Binary files a/www/img/stationpedia/NpcChicken.png and b/www/img/stationpedia/NpcChicken.png differ diff --git a/www/img/stationpedia/PassiveSpeaker.png b/www/img/stationpedia/PassiveSpeaker.png index e7433fa..a18ac3c 100644 Binary files a/www/img/stationpedia/PassiveSpeaker.png and b/www/img/stationpedia/PassiveSpeaker.png differ diff --git a/www/img/stationpedia/PipeBenderMod.png b/www/img/stationpedia/PipeBenderMod.png index 5548ab2..2a9c98a 100644 Binary files a/www/img/stationpedia/PipeBenderMod.png and b/www/img/stationpedia/PipeBenderMod.png differ diff --git a/www/img/stationpedia/PortableComposter.png b/www/img/stationpedia/PortableComposter.png index bbc8f6f..478c367 100644 Binary files a/www/img/stationpedia/PortableComposter.png and b/www/img/stationpedia/PortableComposter.png differ diff --git a/www/img/stationpedia/PortableSolarPanel.png b/www/img/stationpedia/PortableSolarPanel.png index 60ba401..f5f508e 100644 Binary files a/www/img/stationpedia/PortableSolarPanel.png and b/www/img/stationpedia/PortableSolarPanel.png differ diff --git a/www/img/stationpedia/RailingElegant01.png b/www/img/stationpedia/RailingElegant01.png index c4a7b46..4d56952 100644 Binary files a/www/img/stationpedia/RailingElegant01.png and b/www/img/stationpedia/RailingElegant01.png differ diff --git a/www/img/stationpedia/RailingElegant02.png b/www/img/stationpedia/RailingElegant02.png index 65df135..1d970ea 100644 Binary files a/www/img/stationpedia/RailingElegant02.png and b/www/img/stationpedia/RailingElegant02.png differ diff --git a/www/img/stationpedia/RailingIndustrial02.png b/www/img/stationpedia/RailingIndustrial02.png index c4684f7..899515a 100644 Binary files a/www/img/stationpedia/RailingIndustrial02.png and b/www/img/stationpedia/RailingIndustrial02.png differ diff --git a/www/img/stationpedia/ReagentColorBlue.png b/www/img/stationpedia/ReagentColorBlue.png index a53f804..163270b 100644 Binary files a/www/img/stationpedia/ReagentColorBlue.png and b/www/img/stationpedia/ReagentColorBlue.png differ diff --git a/www/img/stationpedia/ReagentColorGreen.png b/www/img/stationpedia/ReagentColorGreen.png index 811de31..87e2694 100644 Binary files a/www/img/stationpedia/ReagentColorGreen.png and b/www/img/stationpedia/ReagentColorGreen.png differ diff --git a/www/img/stationpedia/ReagentColorOrange.png b/www/img/stationpedia/ReagentColorOrange.png index 98fd48b..50bb460 100644 Binary files a/www/img/stationpedia/ReagentColorOrange.png and b/www/img/stationpedia/ReagentColorOrange.png differ diff --git a/www/img/stationpedia/ReagentColorRed.png b/www/img/stationpedia/ReagentColorRed.png index 3515e47..06329f9 100644 Binary files a/www/img/stationpedia/ReagentColorRed.png and b/www/img/stationpedia/ReagentColorRed.png differ diff --git a/www/img/stationpedia/ReagentColorYellow.png b/www/img/stationpedia/ReagentColorYellow.png index 07489da..a5e632f 100644 Binary files a/www/img/stationpedia/ReagentColorYellow.png and b/www/img/stationpedia/ReagentColorYellow.png differ diff --git a/www/img/stationpedia/RespawnPoint.png b/www/img/stationpedia/RespawnPoint.png index ab4d763..495538b 100644 Binary files a/www/img/stationpedia/RespawnPoint.png and b/www/img/stationpedia/RespawnPoint.png differ diff --git a/www/img/stationpedia/RespawnPointWallMounted.png b/www/img/stationpedia/RespawnPointWallMounted.png index 75958a6..f820849 100644 Binary files a/www/img/stationpedia/RespawnPointWallMounted.png and b/www/img/stationpedia/RespawnPointWallMounted.png differ diff --git a/www/img/stationpedia/Robot.png b/www/img/stationpedia/Robot.png index 017a5d7..91e8e60 100644 Binary files a/www/img/stationpedia/Robot.png and b/www/img/stationpedia/Robot.png differ diff --git a/www/img/stationpedia/RoverCargo.png b/www/img/stationpedia/RoverCargo.png index 169268a..faf50b4 100644 Binary files a/www/img/stationpedia/RoverCargo.png and b/www/img/stationpedia/RoverCargo.png differ diff --git a/www/img/stationpedia/Rover_MkI.png b/www/img/stationpedia/Rover_MkI.png index 169268a..bf90e78 100644 Binary files a/www/img/stationpedia/Rover_MkI.png and b/www/img/stationpedia/Rover_MkI.png differ diff --git a/www/img/stationpedia/Rover_MkI_build_states.png b/www/img/stationpedia/Rover_MkI_build_states.png new file mode 100644 index 0000000..bf90e78 Binary files /dev/null and b/www/img/stationpedia/Rover_MkI_build_states.png differ diff --git a/www/img/stationpedia/SMGMagazine.png b/www/img/stationpedia/SMGMagazine.png index 58fc4f9..a25c0e4 100644 Binary files a/www/img/stationpedia/SMGMagazine.png and b/www/img/stationpedia/SMGMagazine.png differ diff --git a/www/img/stationpedia/SeedBag_Corn.png b/www/img/stationpedia/SeedBag_Corn.png index 08ee6e0..3e50ef8 100644 Binary files a/www/img/stationpedia/SeedBag_Corn.png and b/www/img/stationpedia/SeedBag_Corn.png differ diff --git a/www/img/stationpedia/SeedBag_Fern.png b/www/img/stationpedia/SeedBag_Fern.png index 8cd6b2f..3d705e9 100644 Binary files a/www/img/stationpedia/SeedBag_Fern.png and b/www/img/stationpedia/SeedBag_Fern.png differ diff --git a/www/img/stationpedia/SeedBag_Mushroom.png b/www/img/stationpedia/SeedBag_Mushroom.png index 7d3daeb..bbae613 100644 Binary files a/www/img/stationpedia/SeedBag_Mushroom.png and b/www/img/stationpedia/SeedBag_Mushroom.png differ diff --git a/www/img/stationpedia/SeedBag_Potato.png b/www/img/stationpedia/SeedBag_Potato.png index 5abab8a..824f020 100644 Binary files a/www/img/stationpedia/SeedBag_Potato.png and b/www/img/stationpedia/SeedBag_Potato.png differ diff --git a/www/img/stationpedia/SeedBag_Pumpkin.png b/www/img/stationpedia/SeedBag_Pumpkin.png index e747aa8..91ee1c5 100644 Binary files a/www/img/stationpedia/SeedBag_Pumpkin.png and b/www/img/stationpedia/SeedBag_Pumpkin.png differ diff --git a/www/img/stationpedia/SeedBag_Rice.png b/www/img/stationpedia/SeedBag_Rice.png index 05d0110..01d6d79 100644 Binary files a/www/img/stationpedia/SeedBag_Rice.png and b/www/img/stationpedia/SeedBag_Rice.png differ diff --git a/www/img/stationpedia/SeedBag_Soybean.png b/www/img/stationpedia/SeedBag_Soybean.png index e749c7f..985d73a 100644 Binary files a/www/img/stationpedia/SeedBag_Soybean.png and b/www/img/stationpedia/SeedBag_Soybean.png differ diff --git a/www/img/stationpedia/SeedBag_Switchgrass.png b/www/img/stationpedia/SeedBag_Switchgrass.png index 87dff2d..588b1e1 100644 Binary files a/www/img/stationpedia/SeedBag_Switchgrass.png and b/www/img/stationpedia/SeedBag_Switchgrass.png differ diff --git a/www/img/stationpedia/SeedBag_Tomato.png b/www/img/stationpedia/SeedBag_Tomato.png index be69439..a44a8ce 100644 Binary files a/www/img/stationpedia/SeedBag_Tomato.png and b/www/img/stationpedia/SeedBag_Tomato.png differ diff --git a/www/img/stationpedia/SeedBag_Wheet.png b/www/img/stationpedia/SeedBag_Wheet.png index f46a622..1482d99 100644 Binary files a/www/img/stationpedia/SeedBag_Wheet.png and b/www/img/stationpedia/SeedBag_Wheet.png differ diff --git a/www/img/stationpedia/SpaceShuttle.png b/www/img/stationpedia/SpaceShuttle.png index 4705712..edb6b2f 100644 Binary files a/www/img/stationpedia/SpaceShuttle.png and b/www/img/stationpedia/SpaceShuttle.png differ diff --git a/www/img/stationpedia/StopWatch.png b/www/img/stationpedia/StopWatch.png index 817f474..1568c09 100644 Binary files a/www/img/stationpedia/StopWatch.png and b/www/img/stationpedia/StopWatch.png differ diff --git a/www/img/stationpedia/StructureAccessBridge.png b/www/img/stationpedia/StructureAccessBridge.png index 7c998b0..42d5fba 100644 Binary files a/www/img/stationpedia/StructureAccessBridge.png and b/www/img/stationpedia/StructureAccessBridge.png differ diff --git a/www/img/stationpedia/StructureActiveVent.png b/www/img/stationpedia/StructureActiveVent.png index c70400f..b23c96a 100644 Binary files a/www/img/stationpedia/StructureActiveVent.png and b/www/img/stationpedia/StructureActiveVent.png differ diff --git a/www/img/stationpedia/StructureAdvancedComposter.png b/www/img/stationpedia/StructureAdvancedComposter.png index 63f7895..b5cb66a 100644 Binary files a/www/img/stationpedia/StructureAdvancedComposter.png and b/www/img/stationpedia/StructureAdvancedComposter.png differ diff --git a/www/img/stationpedia/StructureAdvancedFurnace.png b/www/img/stationpedia/StructureAdvancedFurnace.png index f56b158..cd659f4 100644 Binary files a/www/img/stationpedia/StructureAdvancedFurnace.png and b/www/img/stationpedia/StructureAdvancedFurnace.png differ diff --git a/www/img/stationpedia/StructureAdvancedPackagingMachine.png b/www/img/stationpedia/StructureAdvancedPackagingMachine.png index aaf47e1..2b3cd5b 100644 Binary files a/www/img/stationpedia/StructureAdvancedPackagingMachine.png and b/www/img/stationpedia/StructureAdvancedPackagingMachine.png differ diff --git a/www/img/stationpedia/StructureAirConditioner.png b/www/img/stationpedia/StructureAirConditioner.png index d475ab7..f1905a9 100644 Binary files a/www/img/stationpedia/StructureAirConditioner.png and b/www/img/stationpedia/StructureAirConditioner.png differ diff --git a/www/img/stationpedia/StructureAirlock.png b/www/img/stationpedia/StructureAirlock.png index b42ae62..015d39e 100644 Binary files a/www/img/stationpedia/StructureAirlock.png and b/www/img/stationpedia/StructureAirlock.png differ diff --git a/www/img/stationpedia/StructureAirlockGate.png b/www/img/stationpedia/StructureAirlockGate.png index 6945742..b391873 100644 Binary files a/www/img/stationpedia/StructureAirlockGate.png and b/www/img/stationpedia/StructureAirlockGate.png differ diff --git a/www/img/stationpedia/StructureAngledBench.png b/www/img/stationpedia/StructureAngledBench.png index 4f960ec..a37fcd0 100644 Binary files a/www/img/stationpedia/StructureAngledBench.png and b/www/img/stationpedia/StructureAngledBench.png differ diff --git a/www/img/stationpedia/StructureArcFurnace.png b/www/img/stationpedia/StructureArcFurnace.png index a8657b1..c5c5391 100644 Binary files a/www/img/stationpedia/StructureArcFurnace.png and b/www/img/stationpedia/StructureArcFurnace.png differ diff --git a/www/img/stationpedia/StructureAreaPowerControl.png b/www/img/stationpedia/StructureAreaPowerControl.png index 3d489a3..936b1c2 100644 Binary files a/www/img/stationpedia/StructureAreaPowerControl.png and b/www/img/stationpedia/StructureAreaPowerControl.png differ diff --git a/www/img/stationpedia/StructureAreaPowerControlReversed.png b/www/img/stationpedia/StructureAreaPowerControlReversed.png index a8adfc9..307b981 100644 Binary files a/www/img/stationpedia/StructureAreaPowerControlReversed.png and b/www/img/stationpedia/StructureAreaPowerControlReversed.png differ diff --git a/www/img/stationpedia/StructureAutoMinerSmall.png b/www/img/stationpedia/StructureAutoMinerSmall.png index ec9f38e..be2d9c3 100644 Binary files a/www/img/stationpedia/StructureAutoMinerSmall.png and b/www/img/stationpedia/StructureAutoMinerSmall.png differ diff --git a/www/img/stationpedia/StructureAutolathe.png b/www/img/stationpedia/StructureAutolathe.png index 1fb6501..e02847d 100644 Binary files a/www/img/stationpedia/StructureAutolathe.png and b/www/img/stationpedia/StructureAutolathe.png differ diff --git a/www/img/stationpedia/StructureAutomatedOven.png b/www/img/stationpedia/StructureAutomatedOven.png index df9a234..b061156 100644 Binary files a/www/img/stationpedia/StructureAutomatedOven.png and b/www/img/stationpedia/StructureAutomatedOven.png differ diff --git a/www/img/stationpedia/StructureBackLiquidPressureRegulator.png b/www/img/stationpedia/StructureBackLiquidPressureRegulator.png index 8d00815..4ad9287 100644 Binary files a/www/img/stationpedia/StructureBackLiquidPressureRegulator.png and b/www/img/stationpedia/StructureBackLiquidPressureRegulator.png differ diff --git a/www/img/stationpedia/StructureBackPressureRegulator.png b/www/img/stationpedia/StructureBackPressureRegulator.png index 533e929..a697250 100644 Binary files a/www/img/stationpedia/StructureBackPressureRegulator.png and b/www/img/stationpedia/StructureBackPressureRegulator.png differ diff --git a/www/img/stationpedia/StructureBasketHoop.png b/www/img/stationpedia/StructureBasketHoop.png index 2ef2e48..2e5c348 100644 Binary files a/www/img/stationpedia/StructureBasketHoop.png and b/www/img/stationpedia/StructureBasketHoop.png differ diff --git a/www/img/stationpedia/StructureBattery.png b/www/img/stationpedia/StructureBattery.png index 38a9356..2d6460e 100644 Binary files a/www/img/stationpedia/StructureBattery.png and b/www/img/stationpedia/StructureBattery.png differ diff --git a/www/img/stationpedia/StructureBatteryCharger.png b/www/img/stationpedia/StructureBatteryCharger.png index 97ac523..55528b4 100644 Binary files a/www/img/stationpedia/StructureBatteryCharger.png and b/www/img/stationpedia/StructureBatteryCharger.png differ diff --git a/www/img/stationpedia/StructureBatteryChargerSmall.png b/www/img/stationpedia/StructureBatteryChargerSmall.png index 242786f..3bdc745 100644 Binary files a/www/img/stationpedia/StructureBatteryChargerSmall.png and b/www/img/stationpedia/StructureBatteryChargerSmall.png differ diff --git a/www/img/stationpedia/StructureBatteryLarge.png b/www/img/stationpedia/StructureBatteryLarge.png index 4bf7e9e..d2b4a2f 100644 Binary files a/www/img/stationpedia/StructureBatteryLarge.png and b/www/img/stationpedia/StructureBatteryLarge.png differ diff --git a/www/img/stationpedia/StructureBatteryMedium.png b/www/img/stationpedia/StructureBatteryMedium.png index 0829826..d1175ac 100644 Binary files a/www/img/stationpedia/StructureBatteryMedium.png and b/www/img/stationpedia/StructureBatteryMedium.png differ diff --git a/www/img/stationpedia/StructureBatterySmall.png b/www/img/stationpedia/StructureBatterySmall.png index fe21139..7469e73 100644 Binary files a/www/img/stationpedia/StructureBatterySmall.png and b/www/img/stationpedia/StructureBatterySmall.png differ diff --git a/www/img/stationpedia/StructureBeacon.png b/www/img/stationpedia/StructureBeacon.png index 3acea4d..7a07539 100644 Binary files a/www/img/stationpedia/StructureBeacon.png and b/www/img/stationpedia/StructureBeacon.png differ diff --git a/www/img/stationpedia/StructureBench.png b/www/img/stationpedia/StructureBench.png index 81418f0..60164d5 100644 Binary files a/www/img/stationpedia/StructureBench.png and b/www/img/stationpedia/StructureBench.png differ diff --git a/www/img/stationpedia/StructureBench1.png b/www/img/stationpedia/StructureBench1.png index 9fadeb7..7d38698 100644 Binary files a/www/img/stationpedia/StructureBench1.png and b/www/img/stationpedia/StructureBench1.png differ diff --git a/www/img/stationpedia/StructureBench2.png b/www/img/stationpedia/StructureBench2.png index b178cce..098ed52 100644 Binary files a/www/img/stationpedia/StructureBench2.png and b/www/img/stationpedia/StructureBench2.png differ diff --git a/www/img/stationpedia/StructureBench3.png b/www/img/stationpedia/StructureBench3.png index 5d7ef07..4894b49 100644 Binary files a/www/img/stationpedia/StructureBench3.png and b/www/img/stationpedia/StructureBench3.png differ diff --git a/www/img/stationpedia/StructureBench4.png b/www/img/stationpedia/StructureBench4.png index e205c62..0a02844 100644 Binary files a/www/img/stationpedia/StructureBench4.png and b/www/img/stationpedia/StructureBench4.png differ diff --git a/www/img/stationpedia/StructureBlastDoor.png b/www/img/stationpedia/StructureBlastDoor.png index 70b244d..b3a1980 100644 Binary files a/www/img/stationpedia/StructureBlastDoor.png and b/www/img/stationpedia/StructureBlastDoor.png differ diff --git a/www/img/stationpedia/StructureBlockBed.png b/www/img/stationpedia/StructureBlockBed.png index 6834df5..dc38daf 100644 Binary files a/www/img/stationpedia/StructureBlockBed.png and b/www/img/stationpedia/StructureBlockBed.png differ diff --git a/www/img/stationpedia/StructureCableAnalysizer.png b/www/img/stationpedia/StructureCableAnalysizer.png index 800f675..4d54b12 100644 Binary files a/www/img/stationpedia/StructureCableAnalysizer.png and b/www/img/stationpedia/StructureCableAnalysizer.png differ diff --git a/www/img/stationpedia/StructureCableCorner.png b/www/img/stationpedia/StructureCableCorner.png index 4f0c0d2..15a3e1d 100644 Binary files a/www/img/stationpedia/StructureCableCorner.png and b/www/img/stationpedia/StructureCableCorner.png differ diff --git a/www/img/stationpedia/StructureCableCorner3.png b/www/img/stationpedia/StructureCableCorner3.png index 61dbaae..0eae8f5 100644 Binary files a/www/img/stationpedia/StructureCableCorner3.png and b/www/img/stationpedia/StructureCableCorner3.png differ diff --git a/www/img/stationpedia/StructureCableCorner3Burnt.png b/www/img/stationpedia/StructureCableCorner3Burnt.png index 98bcbd5..315239b 100644 Binary files a/www/img/stationpedia/StructureCableCorner3Burnt.png and b/www/img/stationpedia/StructureCableCorner3Burnt.png differ diff --git a/www/img/stationpedia/StructureCableCorner3HBurnt.png b/www/img/stationpedia/StructureCableCorner3HBurnt.png index c77e5af..0ccd1a2 100644 Binary files a/www/img/stationpedia/StructureCableCorner3HBurnt.png and b/www/img/stationpedia/StructureCableCorner3HBurnt.png differ diff --git a/www/img/stationpedia/StructureCableCorner4.png b/www/img/stationpedia/StructureCableCorner4.png index 6e12bda..8b44e6b 100644 Binary files a/www/img/stationpedia/StructureCableCorner4.png and b/www/img/stationpedia/StructureCableCorner4.png differ diff --git a/www/img/stationpedia/StructureCableCorner4Burnt.png b/www/img/stationpedia/StructureCableCorner4Burnt.png index b3b3ae0..931972f 100644 Binary files a/www/img/stationpedia/StructureCableCorner4Burnt.png and b/www/img/stationpedia/StructureCableCorner4Burnt.png differ diff --git a/www/img/stationpedia/StructureCableCorner4HBurnt.png b/www/img/stationpedia/StructureCableCorner4HBurnt.png index 9c6b489..d005724 100644 Binary files a/www/img/stationpedia/StructureCableCorner4HBurnt.png and b/www/img/stationpedia/StructureCableCorner4HBurnt.png differ diff --git a/www/img/stationpedia/StructureCableCornerBurnt.png b/www/img/stationpedia/StructureCableCornerBurnt.png index efb33b0..e9a8834 100644 Binary files a/www/img/stationpedia/StructureCableCornerBurnt.png and b/www/img/stationpedia/StructureCableCornerBurnt.png differ diff --git a/www/img/stationpedia/StructureCableCornerH.png b/www/img/stationpedia/StructureCableCornerH.png index 6e4bd81..f1d3c69 100644 Binary files a/www/img/stationpedia/StructureCableCornerH.png and b/www/img/stationpedia/StructureCableCornerH.png differ diff --git a/www/img/stationpedia/StructureCableCornerH3.png b/www/img/stationpedia/StructureCableCornerH3.png index 2b0d624..88cbf94 100644 Binary files a/www/img/stationpedia/StructureCableCornerH3.png and b/www/img/stationpedia/StructureCableCornerH3.png differ diff --git a/www/img/stationpedia/StructureCableCornerH4.png b/www/img/stationpedia/StructureCableCornerH4.png index c74e533..32d56ce 100644 Binary files a/www/img/stationpedia/StructureCableCornerH4.png and b/www/img/stationpedia/StructureCableCornerH4.png differ diff --git a/www/img/stationpedia/StructureCableCornerHBurnt.png b/www/img/stationpedia/StructureCableCornerHBurnt.png index 5640e91..3e09463 100644 Binary files a/www/img/stationpedia/StructureCableCornerHBurnt.png and b/www/img/stationpedia/StructureCableCornerHBurnt.png differ diff --git a/www/img/stationpedia/StructureCableFuse100k.png b/www/img/stationpedia/StructureCableFuse100k.png index 0b39e4d..b0e3c76 100644 Binary files a/www/img/stationpedia/StructureCableFuse100k.png and b/www/img/stationpedia/StructureCableFuse100k.png differ diff --git a/www/img/stationpedia/StructureCableFuse1k.png b/www/img/stationpedia/StructureCableFuse1k.png index 4259833..b1c8a60 100644 Binary files a/www/img/stationpedia/StructureCableFuse1k.png and b/www/img/stationpedia/StructureCableFuse1k.png differ diff --git a/www/img/stationpedia/StructureCableFuse50k.png b/www/img/stationpedia/StructureCableFuse50k.png index 8527a9f..0f5e27c 100644 Binary files a/www/img/stationpedia/StructureCableFuse50k.png and b/www/img/stationpedia/StructureCableFuse50k.png differ diff --git a/www/img/stationpedia/StructureCableFuse5k.png b/www/img/stationpedia/StructureCableFuse5k.png index cca73cf..bd6d1b5 100644 Binary files a/www/img/stationpedia/StructureCableFuse5k.png and b/www/img/stationpedia/StructureCableFuse5k.png differ diff --git a/www/img/stationpedia/StructureCableJunction.png b/www/img/stationpedia/StructureCableJunction.png index 8503a57..ddd6770 100644 Binary files a/www/img/stationpedia/StructureCableJunction.png and b/www/img/stationpedia/StructureCableJunction.png differ diff --git a/www/img/stationpedia/StructureCableJunction4.png b/www/img/stationpedia/StructureCableJunction4.png index 44c9b93..a015cb0 100644 Binary files a/www/img/stationpedia/StructureCableJunction4.png and b/www/img/stationpedia/StructureCableJunction4.png differ diff --git a/www/img/stationpedia/StructureCableJunction4Burnt.png b/www/img/stationpedia/StructureCableJunction4Burnt.png index a9ad573..33689c4 100644 Binary files a/www/img/stationpedia/StructureCableJunction4Burnt.png and b/www/img/stationpedia/StructureCableJunction4Burnt.png differ diff --git a/www/img/stationpedia/StructureCableJunction4HBurnt.png b/www/img/stationpedia/StructureCableJunction4HBurnt.png index 0c4f9e3..999602c 100644 Binary files a/www/img/stationpedia/StructureCableJunction4HBurnt.png and b/www/img/stationpedia/StructureCableJunction4HBurnt.png differ diff --git a/www/img/stationpedia/StructureCableJunction5.png b/www/img/stationpedia/StructureCableJunction5.png index 1721f23..173d8be 100644 Binary files a/www/img/stationpedia/StructureCableJunction5.png and b/www/img/stationpedia/StructureCableJunction5.png differ diff --git a/www/img/stationpedia/StructureCableJunction5Burnt.png b/www/img/stationpedia/StructureCableJunction5Burnt.png index 005413d..3918995 100644 Binary files a/www/img/stationpedia/StructureCableJunction5Burnt.png and b/www/img/stationpedia/StructureCableJunction5Burnt.png differ diff --git a/www/img/stationpedia/StructureCableJunction6.png b/www/img/stationpedia/StructureCableJunction6.png index 45c2959..a4622ec 100644 Binary files a/www/img/stationpedia/StructureCableJunction6.png and b/www/img/stationpedia/StructureCableJunction6.png differ diff --git a/www/img/stationpedia/StructureCableJunction6Burnt.png b/www/img/stationpedia/StructureCableJunction6Burnt.png index c4ccf9f..fd22571 100644 Binary files a/www/img/stationpedia/StructureCableJunction6Burnt.png and b/www/img/stationpedia/StructureCableJunction6Burnt.png differ diff --git a/www/img/stationpedia/StructureCableJunction6HBurnt.png b/www/img/stationpedia/StructureCableJunction6HBurnt.png index 1232927..c396556 100644 Binary files a/www/img/stationpedia/StructureCableJunction6HBurnt.png and b/www/img/stationpedia/StructureCableJunction6HBurnt.png differ diff --git a/www/img/stationpedia/StructureCableJunctionBurnt.png b/www/img/stationpedia/StructureCableJunctionBurnt.png index 3334d0d..7386ca9 100644 Binary files a/www/img/stationpedia/StructureCableJunctionBurnt.png and b/www/img/stationpedia/StructureCableJunctionBurnt.png differ diff --git a/www/img/stationpedia/StructureCableJunctionH.png b/www/img/stationpedia/StructureCableJunctionH.png index 58ab88f..b136843 100644 Binary files a/www/img/stationpedia/StructureCableJunctionH.png and b/www/img/stationpedia/StructureCableJunctionH.png differ diff --git a/www/img/stationpedia/StructureCableJunctionH4.png b/www/img/stationpedia/StructureCableJunctionH4.png index 04e9f7f..1a6c255 100644 Binary files a/www/img/stationpedia/StructureCableJunctionH4.png and b/www/img/stationpedia/StructureCableJunctionH4.png differ diff --git a/www/img/stationpedia/StructureCableJunctionH5.png b/www/img/stationpedia/StructureCableJunctionH5.png index 33950aa..970fce1 100644 Binary files a/www/img/stationpedia/StructureCableJunctionH5.png and b/www/img/stationpedia/StructureCableJunctionH5.png differ diff --git a/www/img/stationpedia/StructureCableJunctionH5Burnt.png b/www/img/stationpedia/StructureCableJunctionH5Burnt.png index 8c0e157..77dabbe 100644 Binary files a/www/img/stationpedia/StructureCableJunctionH5Burnt.png and b/www/img/stationpedia/StructureCableJunctionH5Burnt.png differ diff --git a/www/img/stationpedia/StructureCableJunctionH6.png b/www/img/stationpedia/StructureCableJunctionH6.png index 02d504d..c770492 100644 Binary files a/www/img/stationpedia/StructureCableJunctionH6.png and b/www/img/stationpedia/StructureCableJunctionH6.png differ diff --git a/www/img/stationpedia/StructureCableJunctionHBurnt.png b/www/img/stationpedia/StructureCableJunctionHBurnt.png index 70e714c..4600288 100644 Binary files a/www/img/stationpedia/StructureCableJunctionHBurnt.png and b/www/img/stationpedia/StructureCableJunctionHBurnt.png differ diff --git a/www/img/stationpedia/StructureCableStraight.png b/www/img/stationpedia/StructureCableStraight.png index 354069e..4d888b0 100644 Binary files a/www/img/stationpedia/StructureCableStraight.png and b/www/img/stationpedia/StructureCableStraight.png differ diff --git a/www/img/stationpedia/StructureCableStraightBurnt.png b/www/img/stationpedia/StructureCableStraightBurnt.png index 74fe0fe..2c2e6cb 100644 Binary files a/www/img/stationpedia/StructureCableStraightBurnt.png and b/www/img/stationpedia/StructureCableStraightBurnt.png differ diff --git a/www/img/stationpedia/StructureCableStraightH.png b/www/img/stationpedia/StructureCableStraightH.png index a5a80a3..43609ee 100644 Binary files a/www/img/stationpedia/StructureCableStraightH.png and b/www/img/stationpedia/StructureCableStraightH.png differ diff --git a/www/img/stationpedia/StructureCableStraightHBurnt.png b/www/img/stationpedia/StructureCableStraightHBurnt.png index 4436382..477370e 100644 Binary files a/www/img/stationpedia/StructureCableStraightHBurnt.png and b/www/img/stationpedia/StructureCableStraightHBurnt.png differ diff --git a/www/img/stationpedia/StructureCamera.png b/www/img/stationpedia/StructureCamera.png index 201f13a..f1198a3 100644 Binary files a/www/img/stationpedia/StructureCamera.png and b/www/img/stationpedia/StructureCamera.png differ diff --git a/www/img/stationpedia/StructureCapsuleTankGas.png b/www/img/stationpedia/StructureCapsuleTankGas.png index 2a87e3a..1cd8658 100644 Binary files a/www/img/stationpedia/StructureCapsuleTankGas.png and b/www/img/stationpedia/StructureCapsuleTankGas.png differ diff --git a/www/img/stationpedia/StructureCapsuleTankLiquid.png b/www/img/stationpedia/StructureCapsuleTankLiquid.png index d081e8d..79bdaed 100644 Binary files a/www/img/stationpedia/StructureCapsuleTankLiquid.png and b/www/img/stationpedia/StructureCapsuleTankLiquid.png differ diff --git a/www/img/stationpedia/StructureCargoStorageMedium.png b/www/img/stationpedia/StructureCargoStorageMedium.png index e8167b8..bd0dfbf 100644 Binary files a/www/img/stationpedia/StructureCargoStorageMedium.png and b/www/img/stationpedia/StructureCargoStorageMedium.png differ diff --git a/www/img/stationpedia/StructureCargoStorageSmall.png b/www/img/stationpedia/StructureCargoStorageSmall.png index cc4ff7f..1dd4a57 100644 Binary files a/www/img/stationpedia/StructureCargoStorageSmall.png and b/www/img/stationpedia/StructureCargoStorageSmall.png differ diff --git a/www/img/stationpedia/StructureCentrifuge.png b/www/img/stationpedia/StructureCentrifuge.png index d2e1c5e..c70c8ce 100644 Binary files a/www/img/stationpedia/StructureCentrifuge.png and b/www/img/stationpedia/StructureCentrifuge.png differ diff --git a/www/img/stationpedia/StructureChair.png b/www/img/stationpedia/StructureChair.png index 407ac6d..086ff7c 100644 Binary files a/www/img/stationpedia/StructureChair.png and b/www/img/stationpedia/StructureChair.png differ diff --git a/www/img/stationpedia/StructureChairBacklessDouble.png b/www/img/stationpedia/StructureChairBacklessDouble.png index ca24573..6dd70e3 100644 Binary files a/www/img/stationpedia/StructureChairBacklessDouble.png and b/www/img/stationpedia/StructureChairBacklessDouble.png differ diff --git a/www/img/stationpedia/StructureChairBacklessSingle.png b/www/img/stationpedia/StructureChairBacklessSingle.png index aed39b9..6aa2160 100644 Binary files a/www/img/stationpedia/StructureChairBacklessSingle.png and b/www/img/stationpedia/StructureChairBacklessSingle.png differ diff --git a/www/img/stationpedia/StructureChairBoothCornerLeft.png b/www/img/stationpedia/StructureChairBoothCornerLeft.png index 0cfa5da..5f03c48 100644 Binary files a/www/img/stationpedia/StructureChairBoothCornerLeft.png and b/www/img/stationpedia/StructureChairBoothCornerLeft.png differ diff --git a/www/img/stationpedia/StructureChairBoothMiddle.png b/www/img/stationpedia/StructureChairBoothMiddle.png index 81c0b5e..cd270d1 100644 Binary files a/www/img/stationpedia/StructureChairBoothMiddle.png and b/www/img/stationpedia/StructureChairBoothMiddle.png differ diff --git a/www/img/stationpedia/StructureChairRectangleDouble.png b/www/img/stationpedia/StructureChairRectangleDouble.png index ffee36f..d06cf01 100644 Binary files a/www/img/stationpedia/StructureChairRectangleDouble.png and b/www/img/stationpedia/StructureChairRectangleDouble.png differ diff --git a/www/img/stationpedia/StructureChairRectangleSingle.png b/www/img/stationpedia/StructureChairRectangleSingle.png index b0c8ea2..e5dbb6b 100644 Binary files a/www/img/stationpedia/StructureChairRectangleSingle.png and b/www/img/stationpedia/StructureChairRectangleSingle.png differ diff --git a/www/img/stationpedia/StructureChairThickDouble.png b/www/img/stationpedia/StructureChairThickDouble.png index 2f3052a..54969a3 100644 Binary files a/www/img/stationpedia/StructureChairThickDouble.png and b/www/img/stationpedia/StructureChairThickDouble.png differ diff --git a/www/img/stationpedia/StructureChairThickSingle.png b/www/img/stationpedia/StructureChairThickSingle.png index e1183f7..05f3188 100644 Binary files a/www/img/stationpedia/StructureChairThickSingle.png and b/www/img/stationpedia/StructureChairThickSingle.png differ diff --git a/www/img/stationpedia/StructureChuteBin.png b/www/img/stationpedia/StructureChuteBin.png index 179a3c8..4910d4a 100644 Binary files a/www/img/stationpedia/StructureChuteBin.png and b/www/img/stationpedia/StructureChuteBin.png differ diff --git a/www/img/stationpedia/StructureChuteCorner.png b/www/img/stationpedia/StructureChuteCorner.png index 8c53966..68553bf 100644 Binary files a/www/img/stationpedia/StructureChuteCorner.png and b/www/img/stationpedia/StructureChuteCorner.png differ diff --git a/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterLeft.png b/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterLeft.png index f3533ab..e1cd521 100644 Binary files a/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterLeft.png and b/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterLeft.png differ diff --git a/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterRight.png b/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterRight.png index 69bb61a..1e16e1e 100644 Binary files a/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterRight.png and b/www/img/stationpedia/StructureChuteDigitalFlipFlopSplitterRight.png differ diff --git a/www/img/stationpedia/StructureChuteDigitalValveLeft.png b/www/img/stationpedia/StructureChuteDigitalValveLeft.png index 4064ec8..06549f6 100644 Binary files a/www/img/stationpedia/StructureChuteDigitalValveLeft.png and b/www/img/stationpedia/StructureChuteDigitalValveLeft.png differ diff --git a/www/img/stationpedia/StructureChuteDigitalValveRight.png b/www/img/stationpedia/StructureChuteDigitalValveRight.png index 9972b8f..a72e632 100644 Binary files a/www/img/stationpedia/StructureChuteDigitalValveRight.png and b/www/img/stationpedia/StructureChuteDigitalValveRight.png differ diff --git a/www/img/stationpedia/StructureChuteFlipFlopSplitter.png b/www/img/stationpedia/StructureChuteFlipFlopSplitter.png index f916ef9..826d747 100644 Binary files a/www/img/stationpedia/StructureChuteFlipFlopSplitter.png and b/www/img/stationpedia/StructureChuteFlipFlopSplitter.png differ diff --git a/www/img/stationpedia/StructureChuteInlet.png b/www/img/stationpedia/StructureChuteInlet.png index 70ceac1..991742c 100644 Binary files a/www/img/stationpedia/StructureChuteInlet.png and b/www/img/stationpedia/StructureChuteInlet.png differ diff --git a/www/img/stationpedia/StructureChuteJunction.png b/www/img/stationpedia/StructureChuteJunction.png index 3fc9f68..424521e 100644 Binary files a/www/img/stationpedia/StructureChuteJunction.png and b/www/img/stationpedia/StructureChuteJunction.png differ diff --git a/www/img/stationpedia/StructureChuteOutlet.png b/www/img/stationpedia/StructureChuteOutlet.png index cc07efd..892e4ff 100644 Binary files a/www/img/stationpedia/StructureChuteOutlet.png and b/www/img/stationpedia/StructureChuteOutlet.png differ diff --git a/www/img/stationpedia/StructureChuteOverflow.png b/www/img/stationpedia/StructureChuteOverflow.png index f8d5fef..3dd6404 100644 Binary files a/www/img/stationpedia/StructureChuteOverflow.png and b/www/img/stationpedia/StructureChuteOverflow.png differ diff --git a/www/img/stationpedia/StructureChuteStraight.png b/www/img/stationpedia/StructureChuteStraight.png index b72760b..6665cfd 100644 Binary files a/www/img/stationpedia/StructureChuteStraight.png and b/www/img/stationpedia/StructureChuteStraight.png differ diff --git a/www/img/stationpedia/StructureChuteUmbilicalFemale.png b/www/img/stationpedia/StructureChuteUmbilicalFemale.png index 7a48b77..424d15f 100644 Binary files a/www/img/stationpedia/StructureChuteUmbilicalFemale.png and b/www/img/stationpedia/StructureChuteUmbilicalFemale.png differ diff --git a/www/img/stationpedia/StructureChuteUmbilicalFemaleSide.png b/www/img/stationpedia/StructureChuteUmbilicalFemaleSide.png index 350eec2..0d07d68 100644 Binary files a/www/img/stationpedia/StructureChuteUmbilicalFemaleSide.png and b/www/img/stationpedia/StructureChuteUmbilicalFemaleSide.png differ diff --git a/www/img/stationpedia/StructureChuteUmbilicalMale.png b/www/img/stationpedia/StructureChuteUmbilicalMale.png index 4c04f18..eff4563 100644 Binary files a/www/img/stationpedia/StructureChuteUmbilicalMale.png and b/www/img/stationpedia/StructureChuteUmbilicalMale.png differ diff --git a/www/img/stationpedia/StructureChuteValve.png b/www/img/stationpedia/StructureChuteValve.png index b1e745f..251804b 100644 Binary files a/www/img/stationpedia/StructureChuteValve.png and b/www/img/stationpedia/StructureChuteValve.png differ diff --git a/www/img/stationpedia/StructureChuteWindow.png b/www/img/stationpedia/StructureChuteWindow.png index f9673a9..b7cc0fc 100644 Binary files a/www/img/stationpedia/StructureChuteWindow.png and b/www/img/stationpedia/StructureChuteWindow.png differ diff --git a/www/img/stationpedia/StructureCircuitHousing.png b/www/img/stationpedia/StructureCircuitHousing.png index fcccbcf..a434213 100644 Binary files a/www/img/stationpedia/StructureCircuitHousing.png and b/www/img/stationpedia/StructureCircuitHousing.png differ diff --git a/www/img/stationpedia/StructureCombustionCentrifuge.png b/www/img/stationpedia/StructureCombustionCentrifuge.png index f73b134..a06ef47 100644 Binary files a/www/img/stationpedia/StructureCombustionCentrifuge.png and b/www/img/stationpedia/StructureCombustionCentrifuge.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngled.png b/www/img/stationpedia/StructureCompositeCladdingAngled.png index 78b54ad..f8d95af 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngled.png and b/www/img/stationpedia/StructureCompositeCladdingAngled.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCorner.png b/www/img/stationpedia/StructureCompositeCladdingAngledCorner.png index 2c8013f..81ba79c 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCorner.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCorner.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInner.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInner.png index 113980a..aa62d1b 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInner.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInner.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLong.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLong.png index 8750dba..d281550 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLong.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLong.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongL.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongL.png index 2fc871e..a399bb8 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongL.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongL.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongR.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongR.png index 44ffb9c..ba3dd9a 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongR.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerInnerLongR.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerLong.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerLong.png index 71dde81..8418369 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerLong.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerLong.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledCornerLongR.png b/www/img/stationpedia/StructureCompositeCladdingAngledCornerLongR.png index dbed89c..2b2b2f2 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledCornerLongR.png and b/www/img/stationpedia/StructureCompositeCladdingAngledCornerLongR.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingAngledLong.png b/www/img/stationpedia/StructureCompositeCladdingAngledLong.png index 6c994c5..4689dbe 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingAngledLong.png and b/www/img/stationpedia/StructureCompositeCladdingAngledLong.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingCylindrical.png b/www/img/stationpedia/StructureCompositeCladdingCylindrical.png index 0414c1e..8dc835b 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingCylindrical.png and b/www/img/stationpedia/StructureCompositeCladdingCylindrical.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingCylindricalPanel.png b/www/img/stationpedia/StructureCompositeCladdingCylindricalPanel.png index 67c1b07..6076101 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingCylindricalPanel.png and b/www/img/stationpedia/StructureCompositeCladdingCylindricalPanel.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingPanel.png b/www/img/stationpedia/StructureCompositeCladdingPanel.png index aff5eef..863f5df 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingPanel.png and b/www/img/stationpedia/StructureCompositeCladdingPanel.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingRounded.png b/www/img/stationpedia/StructureCompositeCladdingRounded.png index 9085d63..68acb8d 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingRounded.png and b/www/img/stationpedia/StructureCompositeCladdingRounded.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingRoundedCorner.png b/www/img/stationpedia/StructureCompositeCladdingRoundedCorner.png index 9f4d820..fb478ba 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingRoundedCorner.png and b/www/img/stationpedia/StructureCompositeCladdingRoundedCorner.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingRoundedCornerInner.png b/www/img/stationpedia/StructureCompositeCladdingRoundedCornerInner.png index 74c9d13..bbae012 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingRoundedCornerInner.png and b/www/img/stationpedia/StructureCompositeCladdingRoundedCornerInner.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingSpherical.png b/www/img/stationpedia/StructureCompositeCladdingSpherical.png index adbccd1..750505d 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingSpherical.png and b/www/img/stationpedia/StructureCompositeCladdingSpherical.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingSphericalCap.png b/www/img/stationpedia/StructureCompositeCladdingSphericalCap.png index 80c6a21..fd8c3f8 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingSphericalCap.png and b/www/img/stationpedia/StructureCompositeCladdingSphericalCap.png differ diff --git a/www/img/stationpedia/StructureCompositeCladdingSphericalCorner.png b/www/img/stationpedia/StructureCompositeCladdingSphericalCorner.png index efb93d7..8313303 100644 Binary files a/www/img/stationpedia/StructureCompositeCladdingSphericalCorner.png and b/www/img/stationpedia/StructureCompositeCladdingSphericalCorner.png differ diff --git a/www/img/stationpedia/StructureCompositeDoor.png b/www/img/stationpedia/StructureCompositeDoor.png index 5d83e2d..a1a05ab 100644 Binary files a/www/img/stationpedia/StructureCompositeDoor.png and b/www/img/stationpedia/StructureCompositeDoor.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGrating.png b/www/img/stationpedia/StructureCompositeFloorGrating.png index 444e38f..d506ce2 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGrating.png and b/www/img/stationpedia/StructureCompositeFloorGrating.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGrating2.png b/www/img/stationpedia/StructureCompositeFloorGrating2.png index dc0f95e..ff84b67 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGrating2.png and b/www/img/stationpedia/StructureCompositeFloorGrating2.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGrating3.png b/www/img/stationpedia/StructureCompositeFloorGrating3.png index c0ffa68..5a0d93a 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGrating3.png and b/www/img/stationpedia/StructureCompositeFloorGrating3.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGrating4.png b/www/img/stationpedia/StructureCompositeFloorGrating4.png index 7d2734f..e734d9c 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGrating4.png and b/www/img/stationpedia/StructureCompositeFloorGrating4.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGratingOpen.png b/www/img/stationpedia/StructureCompositeFloorGratingOpen.png index 4794231..1f042ce 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGratingOpen.png and b/www/img/stationpedia/StructureCompositeFloorGratingOpen.png differ diff --git a/www/img/stationpedia/StructureCompositeFloorGratingOpenRotated.png b/www/img/stationpedia/StructureCompositeFloorGratingOpenRotated.png index ea8a645..e5af100 100644 Binary files a/www/img/stationpedia/StructureCompositeFloorGratingOpenRotated.png and b/www/img/stationpedia/StructureCompositeFloorGratingOpenRotated.png differ diff --git a/www/img/stationpedia/StructureCompositeWall.png b/www/img/stationpedia/StructureCompositeWall.png index 2957e28..66109d5 100644 Binary files a/www/img/stationpedia/StructureCompositeWall.png and b/www/img/stationpedia/StructureCompositeWall.png differ diff --git a/www/img/stationpedia/StructureCompositeWall02.png b/www/img/stationpedia/StructureCompositeWall02.png index bb753f7..209bf4d 100644 Binary files a/www/img/stationpedia/StructureCompositeWall02.png and b/www/img/stationpedia/StructureCompositeWall02.png differ diff --git a/www/img/stationpedia/StructureCompositeWall03.png b/www/img/stationpedia/StructureCompositeWall03.png index fd3cdfc..1ae09fc 100644 Binary files a/www/img/stationpedia/StructureCompositeWall03.png and b/www/img/stationpedia/StructureCompositeWall03.png differ diff --git a/www/img/stationpedia/StructureCompositeWall04.png b/www/img/stationpedia/StructureCompositeWall04.png index dc08370..72667d7 100644 Binary files a/www/img/stationpedia/StructureCompositeWall04.png and b/www/img/stationpedia/StructureCompositeWall04.png differ diff --git a/www/img/stationpedia/StructureCompositeWindow.png b/www/img/stationpedia/StructureCompositeWindow.png index d09c62d..3809589 100644 Binary files a/www/img/stationpedia/StructureCompositeWindow.png and b/www/img/stationpedia/StructureCompositeWindow.png differ diff --git a/www/img/stationpedia/StructureCompositeWindowIron.png b/www/img/stationpedia/StructureCompositeWindowIron.png index e4b53f7..2329af5 100644 Binary files a/www/img/stationpedia/StructureCompositeWindowIron.png and b/www/img/stationpedia/StructureCompositeWindowIron.png differ diff --git a/www/img/stationpedia/StructureComputer.png b/www/img/stationpedia/StructureComputer.png index 8ff12f5..ad26d81 100644 Binary files a/www/img/stationpedia/StructureComputer.png and b/www/img/stationpedia/StructureComputer.png differ diff --git a/www/img/stationpedia/StructureCondensationChamber.png b/www/img/stationpedia/StructureCondensationChamber.png index 8333903..22767de 100644 Binary files a/www/img/stationpedia/StructureCondensationChamber.png and b/www/img/stationpedia/StructureCondensationChamber.png differ diff --git a/www/img/stationpedia/StructureCondensationValve.png b/www/img/stationpedia/StructureCondensationValve.png index 763abe2..9cc94c9 100644 Binary files a/www/img/stationpedia/StructureCondensationValve.png and b/www/img/stationpedia/StructureCondensationValve.png differ diff --git a/www/img/stationpedia/StructureConsole.png b/www/img/stationpedia/StructureConsole.png index 623da3b..88f50d9 100644 Binary files a/www/img/stationpedia/StructureConsole.png and b/www/img/stationpedia/StructureConsole.png differ diff --git a/www/img/stationpedia/StructureConsoleDual.png b/www/img/stationpedia/StructureConsoleDual.png index d198d1d..b6fe609 100644 Binary files a/www/img/stationpedia/StructureConsoleDual.png and b/www/img/stationpedia/StructureConsoleDual.png differ diff --git a/www/img/stationpedia/StructureConsoleLED1x2.png b/www/img/stationpedia/StructureConsoleLED1x2.png index ba0517c..88e8354 100644 Binary files a/www/img/stationpedia/StructureConsoleLED1x2.png and b/www/img/stationpedia/StructureConsoleLED1x2.png differ diff --git a/www/img/stationpedia/StructureConsoleLED1x3.png b/www/img/stationpedia/StructureConsoleLED1x3.png index f30e8a7..8b6a7a2 100644 Binary files a/www/img/stationpedia/StructureConsoleLED1x3.png and b/www/img/stationpedia/StructureConsoleLED1x3.png differ diff --git a/www/img/stationpedia/StructureConsoleLED5.png b/www/img/stationpedia/StructureConsoleLED5.png index a25fcf3..f2fcf8a 100644 Binary files a/www/img/stationpedia/StructureConsoleLED5.png and b/www/img/stationpedia/StructureConsoleLED5.png differ diff --git a/www/img/stationpedia/StructureConsoleMonitor.png b/www/img/stationpedia/StructureConsoleMonitor.png index 39be852..a759c1f 100644 Binary files a/www/img/stationpedia/StructureConsoleMonitor.png and b/www/img/stationpedia/StructureConsoleMonitor.png differ diff --git a/www/img/stationpedia/StructureControlChair.png b/www/img/stationpedia/StructureControlChair.png index e41b6d1..aea9157 100644 Binary files a/www/img/stationpedia/StructureControlChair.png and b/www/img/stationpedia/StructureControlChair.png differ diff --git a/www/img/stationpedia/StructureCornerLocker.png b/www/img/stationpedia/StructureCornerLocker.png index 7affacf..8a83d2c 100644 Binary files a/www/img/stationpedia/StructureCornerLocker.png and b/www/img/stationpedia/StructureCornerLocker.png differ diff --git a/www/img/stationpedia/StructureCrateMount.png b/www/img/stationpedia/StructureCrateMount.png index 1d33c62..7b36e60 100644 Binary files a/www/img/stationpedia/StructureCrateMount.png and b/www/img/stationpedia/StructureCrateMount.png differ diff --git a/www/img/stationpedia/StructureCryoTube.png b/www/img/stationpedia/StructureCryoTube.png index 7ef4a59..804cf5f 100644 Binary files a/www/img/stationpedia/StructureCryoTube.png and b/www/img/stationpedia/StructureCryoTube.png differ diff --git a/www/img/stationpedia/StructureCryoTubeHorizontal.png b/www/img/stationpedia/StructureCryoTubeHorizontal.png index 88da1a3..159342b 100644 Binary files a/www/img/stationpedia/StructureCryoTubeHorizontal.png and b/www/img/stationpedia/StructureCryoTubeHorizontal.png differ diff --git a/www/img/stationpedia/StructureCryoTubeVertical.png b/www/img/stationpedia/StructureCryoTubeVertical.png index e4bfbfc..b103cbc 100644 Binary files a/www/img/stationpedia/StructureCryoTubeVertical.png and b/www/img/stationpedia/StructureCryoTubeVertical.png differ diff --git a/www/img/stationpedia/StructureDaylightSensor.png b/www/img/stationpedia/StructureDaylightSensor.png index cffc76b..eee3227 100644 Binary files a/www/img/stationpedia/StructureDaylightSensor.png and b/www/img/stationpedia/StructureDaylightSensor.png differ diff --git a/www/img/stationpedia/StructureDeepMiner.png b/www/img/stationpedia/StructureDeepMiner.png index b7ad685..24cf375 100644 Binary files a/www/img/stationpedia/StructureDeepMiner.png and b/www/img/stationpedia/StructureDeepMiner.png differ diff --git a/www/img/stationpedia/StructureDigitalValve.png b/www/img/stationpedia/StructureDigitalValve.png index ce23200..94dd03f 100644 Binary files a/www/img/stationpedia/StructureDigitalValve.png and b/www/img/stationpedia/StructureDigitalValve.png differ diff --git a/www/img/stationpedia/StructureDiode.png b/www/img/stationpedia/StructureDiode.png index 3cd8040..db04a4c 100644 Binary files a/www/img/stationpedia/StructureDiode.png and b/www/img/stationpedia/StructureDiode.png differ diff --git a/www/img/stationpedia/StructureDiodeSlide.png b/www/img/stationpedia/StructureDiodeSlide.png index 63e048e..40b3e04 100644 Binary files a/www/img/stationpedia/StructureDiodeSlide.png and b/www/img/stationpedia/StructureDiodeSlide.png differ diff --git a/www/img/stationpedia/StructureDockPortSide.png b/www/img/stationpedia/StructureDockPortSide.png index 4b8972c..302dc0c 100644 Binary files a/www/img/stationpedia/StructureDockPortSide.png and b/www/img/stationpedia/StructureDockPortSide.png differ diff --git a/www/img/stationpedia/StructureDrinkingFountain.png b/www/img/stationpedia/StructureDrinkingFountain.png index bf971c6..6ceae02 100644 Binary files a/www/img/stationpedia/StructureDrinkingFountain.png and b/www/img/stationpedia/StructureDrinkingFountain.png differ diff --git a/www/img/stationpedia/StructureElectrolyzer.png b/www/img/stationpedia/StructureElectrolyzer.png index 8d44c7f..2783738 100644 Binary files a/www/img/stationpedia/StructureElectrolyzer.png and b/www/img/stationpedia/StructureElectrolyzer.png differ diff --git a/www/img/stationpedia/StructureElectronicsPrinter.png b/www/img/stationpedia/StructureElectronicsPrinter.png index 3960777..a7c86ea 100644 Binary files a/www/img/stationpedia/StructureElectronicsPrinter.png and b/www/img/stationpedia/StructureElectronicsPrinter.png differ diff --git a/www/img/stationpedia/StructureElevatorLevelFront.png b/www/img/stationpedia/StructureElevatorLevelFront.png index b0dec41..628317a 100644 Binary files a/www/img/stationpedia/StructureElevatorLevelFront.png and b/www/img/stationpedia/StructureElevatorLevelFront.png differ diff --git a/www/img/stationpedia/StructureElevatorShaft.png b/www/img/stationpedia/StructureElevatorShaft.png index 0f42b15..c08353c 100644 Binary files a/www/img/stationpedia/StructureElevatorShaft.png and b/www/img/stationpedia/StructureElevatorShaft.png differ diff --git a/www/img/stationpedia/StructureElevatorShaftIndustrial.png b/www/img/stationpedia/StructureElevatorShaftIndustrial.png index 0f42b15..87ca40e 100644 Binary files a/www/img/stationpedia/StructureElevatorShaftIndustrial.png and b/www/img/stationpedia/StructureElevatorShaftIndustrial.png differ diff --git a/www/img/stationpedia/StructureEmergencyButton.png b/www/img/stationpedia/StructureEmergencyButton.png index c5ec89b..cd79eb4 100644 Binary files a/www/img/stationpedia/StructureEmergencyButton.png and b/www/img/stationpedia/StructureEmergencyButton.png differ diff --git a/www/img/stationpedia/StructureEngineMountTypeA1.png b/www/img/stationpedia/StructureEngineMountTypeA1.png index 0d2cc0a..210aaeb 100644 Binary files a/www/img/stationpedia/StructureEngineMountTypeA1.png and b/www/img/stationpedia/StructureEngineMountTypeA1.png differ diff --git a/www/img/stationpedia/StructureEvaporationChamber.png b/www/img/stationpedia/StructureEvaporationChamber.png index 4d8ef0d..33fe848 100644 Binary files a/www/img/stationpedia/StructureEvaporationChamber.png and b/www/img/stationpedia/StructureEvaporationChamber.png differ diff --git a/www/img/stationpedia/StructureExpansionValve.png b/www/img/stationpedia/StructureExpansionValve.png index e2b5289..bfbdfbe 100644 Binary files a/www/img/stationpedia/StructureExpansionValve.png and b/www/img/stationpedia/StructureExpansionValve.png differ diff --git a/www/img/stationpedia/StructureFairingTypeA1.png b/www/img/stationpedia/StructureFairingTypeA1.png index ccf44ec..c5a3804 100644 Binary files a/www/img/stationpedia/StructureFairingTypeA1.png and b/www/img/stationpedia/StructureFairingTypeA1.png differ diff --git a/www/img/stationpedia/StructureFairingTypeA2.png b/www/img/stationpedia/StructureFairingTypeA2.png index 4a0b07e..0b82b4d 100644 Binary files a/www/img/stationpedia/StructureFairingTypeA2.png and b/www/img/stationpedia/StructureFairingTypeA2.png differ diff --git a/www/img/stationpedia/StructureFairingTypeA3.png b/www/img/stationpedia/StructureFairingTypeA3.png index d86ddf9..2841654 100644 Binary files a/www/img/stationpedia/StructureFairingTypeA3.png and b/www/img/stationpedia/StructureFairingTypeA3.png differ diff --git a/www/img/stationpedia/StructureFiltration.png b/www/img/stationpedia/StructureFiltration.png index 1d9945d..30fa345 100644 Binary files a/www/img/stationpedia/StructureFiltration.png and b/www/img/stationpedia/StructureFiltration.png differ diff --git a/www/img/stationpedia/StructureFlagSmall.png b/www/img/stationpedia/StructureFlagSmall.png index 3f63219..bb4bf85 100644 Binary files a/www/img/stationpedia/StructureFlagSmall.png and b/www/img/stationpedia/StructureFlagSmall.png differ diff --git a/www/img/stationpedia/StructureFlashingLight.png b/www/img/stationpedia/StructureFlashingLight.png index 7661779..9a5005a 100644 Binary files a/www/img/stationpedia/StructureFlashingLight.png and b/www/img/stationpedia/StructureFlashingLight.png differ diff --git a/www/img/stationpedia/StructureFlatBench.png b/www/img/stationpedia/StructureFlatBench.png index b14e496..62edf2b 100644 Binary files a/www/img/stationpedia/StructureFlatBench.png and b/www/img/stationpedia/StructureFlatBench.png differ diff --git a/www/img/stationpedia/StructureFloorDrain.png b/www/img/stationpedia/StructureFloorDrain.png index 2f5de98..5e71813 100644 Binary files a/www/img/stationpedia/StructureFloorDrain.png and b/www/img/stationpedia/StructureFloorDrain.png differ diff --git a/www/img/stationpedia/StructureFrame.png b/www/img/stationpedia/StructureFrame.png index ee4c217..33f95fb 100644 Binary files a/www/img/stationpedia/StructureFrame.png and b/www/img/stationpedia/StructureFrame.png differ diff --git a/www/img/stationpedia/StructureFrameCorner.png b/www/img/stationpedia/StructureFrameCorner.png index 36aa345..fce834a 100644 Binary files a/www/img/stationpedia/StructureFrameCorner.png and b/www/img/stationpedia/StructureFrameCorner.png differ diff --git a/www/img/stationpedia/StructureFrameCornerCut.png b/www/img/stationpedia/StructureFrameCornerCut.png index 01712c7..56161e4 100644 Binary files a/www/img/stationpedia/StructureFrameCornerCut.png and b/www/img/stationpedia/StructureFrameCornerCut.png differ diff --git a/www/img/stationpedia/StructureFrameIron.png b/www/img/stationpedia/StructureFrameIron.png index c61c4a3..e4fc3a4 100644 Binary files a/www/img/stationpedia/StructureFrameIron.png and b/www/img/stationpedia/StructureFrameIron.png differ diff --git a/www/img/stationpedia/StructureFrameSide.png b/www/img/stationpedia/StructureFrameSide.png index a61c4c9..9a38ca3 100644 Binary files a/www/img/stationpedia/StructureFrameSide.png and b/www/img/stationpedia/StructureFrameSide.png differ diff --git a/www/img/stationpedia/StructureFridgeBig.png b/www/img/stationpedia/StructureFridgeBig.png index 11b8a53..c6262d8 100644 Binary files a/www/img/stationpedia/StructureFridgeBig.png and b/www/img/stationpedia/StructureFridgeBig.png differ diff --git a/www/img/stationpedia/StructureFridgeSmall.png b/www/img/stationpedia/StructureFridgeSmall.png index c03c4e8..811ed9f 100644 Binary files a/www/img/stationpedia/StructureFridgeSmall.png and b/www/img/stationpedia/StructureFridgeSmall.png differ diff --git a/www/img/stationpedia/StructureFurnace.png b/www/img/stationpedia/StructureFurnace.png index 8db7e1e..41e732f 100644 Binary files a/www/img/stationpedia/StructureFurnace.png and b/www/img/stationpedia/StructureFurnace.png differ diff --git a/www/img/stationpedia/StructureFuselageTypeA1.png b/www/img/stationpedia/StructureFuselageTypeA1.png index 862a68c..255ffd8 100644 Binary files a/www/img/stationpedia/StructureFuselageTypeA1.png and b/www/img/stationpedia/StructureFuselageTypeA1.png differ diff --git a/www/img/stationpedia/StructureFuselageTypeA2.png b/www/img/stationpedia/StructureFuselageTypeA2.png index 8cef372..0d3be53 100644 Binary files a/www/img/stationpedia/StructureFuselageTypeA2.png and b/www/img/stationpedia/StructureFuselageTypeA2.png differ diff --git a/www/img/stationpedia/StructureFuselageTypeA4.png b/www/img/stationpedia/StructureFuselageTypeA4.png index 8ff7aa4..d7c81f6 100644 Binary files a/www/img/stationpedia/StructureFuselageTypeA4.png and b/www/img/stationpedia/StructureFuselageTypeA4.png differ diff --git a/www/img/stationpedia/StructureFuselageTypeC5.png b/www/img/stationpedia/StructureFuselageTypeC5.png index 353dd8f..839ffa9 100644 Binary files a/www/img/stationpedia/StructureFuselageTypeC5.png and b/www/img/stationpedia/StructureFuselageTypeC5.png differ diff --git a/www/img/stationpedia/StructureGasGenerator.png b/www/img/stationpedia/StructureGasGenerator.png index 1191b52..aa48c81 100644 Binary files a/www/img/stationpedia/StructureGasGenerator.png and b/www/img/stationpedia/StructureGasGenerator.png differ diff --git a/www/img/stationpedia/StructureGasMixer.png b/www/img/stationpedia/StructureGasMixer.png index 71902a8..ca15f21 100644 Binary files a/www/img/stationpedia/StructureGasMixer.png and b/www/img/stationpedia/StructureGasMixer.png differ diff --git a/www/img/stationpedia/StructureGasSensor.png b/www/img/stationpedia/StructureGasSensor.png index 52a28f9..c878dd3 100644 Binary files a/www/img/stationpedia/StructureGasSensor.png and b/www/img/stationpedia/StructureGasSensor.png differ diff --git a/www/img/stationpedia/StructureGasTankStorage.png b/www/img/stationpedia/StructureGasTankStorage.png index 5129e08..cc2ad73 100644 Binary files a/www/img/stationpedia/StructureGasTankStorage.png and b/www/img/stationpedia/StructureGasTankStorage.png differ diff --git a/www/img/stationpedia/StructureGasUmbilicalFemale.png b/www/img/stationpedia/StructureGasUmbilicalFemale.png index 6b53eee..d728b18 100644 Binary files a/www/img/stationpedia/StructureGasUmbilicalFemale.png and b/www/img/stationpedia/StructureGasUmbilicalFemale.png differ diff --git a/www/img/stationpedia/StructureGasUmbilicalFemaleSide.png b/www/img/stationpedia/StructureGasUmbilicalFemaleSide.png index 64cf781..8504e4a 100644 Binary files a/www/img/stationpedia/StructureGasUmbilicalFemaleSide.png and b/www/img/stationpedia/StructureGasUmbilicalFemaleSide.png differ diff --git a/www/img/stationpedia/StructureGasUmbilicalMale.png b/www/img/stationpedia/StructureGasUmbilicalMale.png index faf09f5..fae6d48 100644 Binary files a/www/img/stationpedia/StructureGasUmbilicalMale.png and b/www/img/stationpedia/StructureGasUmbilicalMale.png differ diff --git a/www/img/stationpedia/StructureGlassDoor.png b/www/img/stationpedia/StructureGlassDoor.png index c720164..1da178c 100644 Binary files a/www/img/stationpedia/StructureGlassDoor.png and b/www/img/stationpedia/StructureGlassDoor.png differ diff --git a/www/img/stationpedia/StructureGovernedGasEngine.png b/www/img/stationpedia/StructureGovernedGasEngine.png index 63adc74..9401c97 100644 Binary files a/www/img/stationpedia/StructureGovernedGasEngine.png and b/www/img/stationpedia/StructureGovernedGasEngine.png differ diff --git a/www/img/stationpedia/StructureGroundBasedTelescope.png b/www/img/stationpedia/StructureGroundBasedTelescope.png index 7a31430..83efd5e 100644 Binary files a/www/img/stationpedia/StructureGroundBasedTelescope.png and b/www/img/stationpedia/StructureGroundBasedTelescope.png differ diff --git a/www/img/stationpedia/StructureGrowLight.png b/www/img/stationpedia/StructureGrowLight.png index b2e0747..701fbb5 100644 Binary files a/www/img/stationpedia/StructureGrowLight.png and b/www/img/stationpedia/StructureGrowLight.png differ diff --git a/www/img/stationpedia/StructureHarvie.png b/www/img/stationpedia/StructureHarvie.png index 1a7ec76..5f5f9d4 100644 Binary files a/www/img/stationpedia/StructureHarvie.png and b/www/img/stationpedia/StructureHarvie.png differ diff --git a/www/img/stationpedia/StructureHeatExchangeLiquidtoGas.png b/www/img/stationpedia/StructureHeatExchangeLiquidtoGas.png index eabf22c..585207d 100644 Binary files a/www/img/stationpedia/StructureHeatExchangeLiquidtoGas.png and b/www/img/stationpedia/StructureHeatExchangeLiquidtoGas.png differ diff --git a/www/img/stationpedia/StructureHeatExchangerGastoGas.png b/www/img/stationpedia/StructureHeatExchangerGastoGas.png index 64baad3..bca965a 100644 Binary files a/www/img/stationpedia/StructureHeatExchangerGastoGas.png and b/www/img/stationpedia/StructureHeatExchangerGastoGas.png differ diff --git a/www/img/stationpedia/StructureHeatExchangerLiquidtoLiquid.png b/www/img/stationpedia/StructureHeatExchangerLiquidtoLiquid.png index 521becd..7adc112 100644 Binary files a/www/img/stationpedia/StructureHeatExchangerLiquidtoLiquid.png and b/www/img/stationpedia/StructureHeatExchangerLiquidtoLiquid.png differ diff --git a/www/img/stationpedia/StructureHorizontalAutoMiner.png b/www/img/stationpedia/StructureHorizontalAutoMiner.png index 48a01da..a416bfd 100644 Binary files a/www/img/stationpedia/StructureHorizontalAutoMiner.png and b/www/img/stationpedia/StructureHorizontalAutoMiner.png differ diff --git a/www/img/stationpedia/StructureHydraulicPipeBender.png b/www/img/stationpedia/StructureHydraulicPipeBender.png index 3720f7b..254db00 100644 Binary files a/www/img/stationpedia/StructureHydraulicPipeBender.png and b/www/img/stationpedia/StructureHydraulicPipeBender.png differ diff --git a/www/img/stationpedia/StructureHydroponicsStation.png b/www/img/stationpedia/StructureHydroponicsStation.png index 9a634c9..67b544e 100644 Binary files a/www/img/stationpedia/StructureHydroponicsStation.png and b/www/img/stationpedia/StructureHydroponicsStation.png differ diff --git a/www/img/stationpedia/StructureHydroponicsTray.png b/www/img/stationpedia/StructureHydroponicsTray.png index 8b86314..f4404df 100644 Binary files a/www/img/stationpedia/StructureHydroponicsTray.png and b/www/img/stationpedia/StructureHydroponicsTray.png differ diff --git a/www/img/stationpedia/StructureHydroponicsTrayData.png b/www/img/stationpedia/StructureHydroponicsTrayData.png index 8b86314..f4404df 100644 Binary files a/www/img/stationpedia/StructureHydroponicsTrayData.png and b/www/img/stationpedia/StructureHydroponicsTrayData.png differ diff --git a/www/img/stationpedia/StructureIceCrusher.png b/www/img/stationpedia/StructureIceCrusher.png index eb0720f..b98045e 100644 Binary files a/www/img/stationpedia/StructureIceCrusher.png and b/www/img/stationpedia/StructureIceCrusher.png differ diff --git a/www/img/stationpedia/StructureIgniter.png b/www/img/stationpedia/StructureIgniter.png index fbd4e4a..182d79b 100644 Binary files a/www/img/stationpedia/StructureIgniter.png and b/www/img/stationpedia/StructureIgniter.png differ diff --git a/www/img/stationpedia/StructureInLineTankGas1x1.png b/www/img/stationpedia/StructureInLineTankGas1x1.png index 8d79281..e95b760 100644 Binary files a/www/img/stationpedia/StructureInLineTankGas1x1.png and b/www/img/stationpedia/StructureInLineTankGas1x1.png differ diff --git a/www/img/stationpedia/StructureInLineTankGas1x2.png b/www/img/stationpedia/StructureInLineTankGas1x2.png index 05587f9..7787c70 100644 Binary files a/www/img/stationpedia/StructureInLineTankGas1x2.png and b/www/img/stationpedia/StructureInLineTankGas1x2.png differ diff --git a/www/img/stationpedia/StructureInLineTankLiquid1x1.png b/www/img/stationpedia/StructureInLineTankLiquid1x1.png index c3ad57a..80a6452 100644 Binary files a/www/img/stationpedia/StructureInLineTankLiquid1x1.png and b/www/img/stationpedia/StructureInLineTankLiquid1x1.png differ diff --git a/www/img/stationpedia/StructureInLineTankLiquid1x2.png b/www/img/stationpedia/StructureInLineTankLiquid1x2.png index 33d0cb8..d47a704 100644 Binary files a/www/img/stationpedia/StructureInLineTankLiquid1x2.png and b/www/img/stationpedia/StructureInLineTankLiquid1x2.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCorner.png b/www/img/stationpedia/StructureInsulatedPipeCorner.png index 9356b85..065be06 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCorner.png and b/www/img/stationpedia/StructureInsulatedPipeCorner.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCrossJunction.png b/www/img/stationpedia/StructureInsulatedPipeCrossJunction.png index 5be84bf..d2da2c6 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCrossJunction.png and b/www/img/stationpedia/StructureInsulatedPipeCrossJunction.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCrossJunction3.png b/www/img/stationpedia/StructureInsulatedPipeCrossJunction3.png index 0c58033..ad6c591 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCrossJunction3.png and b/www/img/stationpedia/StructureInsulatedPipeCrossJunction3.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCrossJunction4.png b/www/img/stationpedia/StructureInsulatedPipeCrossJunction4.png index 3934469..7d3bff6 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCrossJunction4.png and b/www/img/stationpedia/StructureInsulatedPipeCrossJunction4.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCrossJunction5.png b/www/img/stationpedia/StructureInsulatedPipeCrossJunction5.png index 5726316..09bb593 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCrossJunction5.png and b/www/img/stationpedia/StructureInsulatedPipeCrossJunction5.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeCrossJunction6.png b/www/img/stationpedia/StructureInsulatedPipeCrossJunction6.png index 0d8f621..b678b9a 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeCrossJunction6.png and b/www/img/stationpedia/StructureInsulatedPipeCrossJunction6.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidCorner.png b/www/img/stationpedia/StructureInsulatedPipeLiquidCorner.png index 8d608b3..3dd6323 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidCorner.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidCorner.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction.png b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction.png index bacef47..0b79d5e 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction4.png b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction4.png index 478f0d6..0b6ec63 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction4.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction4.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction5.png b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction5.png index 8988e6c..39da02f 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction5.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction5.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction6.png b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction6.png index 6cc2daf..76680b7 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction6.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidCrossJunction6.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidStraight.png b/www/img/stationpedia/StructureInsulatedPipeLiquidStraight.png index 073c51c..b80751d 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidStraight.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidStraight.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeLiquidTJunction.png b/www/img/stationpedia/StructureInsulatedPipeLiquidTJunction.png index 536849f..095d2e7 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeLiquidTJunction.png and b/www/img/stationpedia/StructureInsulatedPipeLiquidTJunction.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeStraight.png b/www/img/stationpedia/StructureInsulatedPipeStraight.png index 6ed9d2d..e062893 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeStraight.png and b/www/img/stationpedia/StructureInsulatedPipeStraight.png differ diff --git a/www/img/stationpedia/StructureInsulatedPipeTJunction.png b/www/img/stationpedia/StructureInsulatedPipeTJunction.png index a63e82c..a7434ef 100644 Binary files a/www/img/stationpedia/StructureInsulatedPipeTJunction.png and b/www/img/stationpedia/StructureInsulatedPipeTJunction.png differ diff --git a/www/img/stationpedia/StructureInsulatedTankConnector.png b/www/img/stationpedia/StructureInsulatedTankConnector.png index 12e5087..90d8c54 100644 Binary files a/www/img/stationpedia/StructureInsulatedTankConnector.png and b/www/img/stationpedia/StructureInsulatedTankConnector.png differ diff --git a/www/img/stationpedia/StructureInsulatedTankConnectorLiquid.png b/www/img/stationpedia/StructureInsulatedTankConnectorLiquid.png index 2a37473..8228cb8 100644 Binary files a/www/img/stationpedia/StructureInsulatedTankConnectorLiquid.png and b/www/img/stationpedia/StructureInsulatedTankConnectorLiquid.png differ diff --git a/www/img/stationpedia/StructureInteriorDoorGlass.png b/www/img/stationpedia/StructureInteriorDoorGlass.png index 06efcb3..67fe627 100644 Binary files a/www/img/stationpedia/StructureInteriorDoorGlass.png and b/www/img/stationpedia/StructureInteriorDoorGlass.png differ diff --git a/www/img/stationpedia/StructureInteriorDoorPadded.png b/www/img/stationpedia/StructureInteriorDoorPadded.png index e65c7f4..0469c7b 100644 Binary files a/www/img/stationpedia/StructureInteriorDoorPadded.png and b/www/img/stationpedia/StructureInteriorDoorPadded.png differ diff --git a/www/img/stationpedia/StructureInteriorDoorPaddedThin.png b/www/img/stationpedia/StructureInteriorDoorPaddedThin.png index c8e1f6b..45ab150 100644 Binary files a/www/img/stationpedia/StructureInteriorDoorPaddedThin.png and b/www/img/stationpedia/StructureInteriorDoorPaddedThin.png differ diff --git a/www/img/stationpedia/StructureInteriorDoorTriangle.png b/www/img/stationpedia/StructureInteriorDoorTriangle.png index f071829..ddffda3 100644 Binary files a/www/img/stationpedia/StructureInteriorDoorTriangle.png and b/www/img/stationpedia/StructureInteriorDoorTriangle.png differ diff --git a/www/img/stationpedia/StructureKlaxon.png b/www/img/stationpedia/StructureKlaxon.png index 51b7bfd..a895936 100644 Binary files a/www/img/stationpedia/StructureKlaxon.png and b/www/img/stationpedia/StructureKlaxon.png differ diff --git a/www/img/stationpedia/StructureLadder.png b/www/img/stationpedia/StructureLadder.png index 548455a..610dd5c 100644 Binary files a/www/img/stationpedia/StructureLadder.png and b/www/img/stationpedia/StructureLadder.png differ diff --git a/www/img/stationpedia/StructureLadderEnd.png b/www/img/stationpedia/StructureLadderEnd.png index ff8e120..ce3d937 100644 Binary files a/www/img/stationpedia/StructureLadderEnd.png and b/www/img/stationpedia/StructureLadderEnd.png differ diff --git a/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoGas.png b/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoGas.png index 2a3b17d..e1c71e8 100644 Binary files a/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoGas.png and b/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoGas.png differ diff --git a/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoLiquid.png b/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoLiquid.png index ea9fc73..6b02ee9 100644 Binary files a/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoLiquid.png and b/www/img/stationpedia/StructureLargeDirectHeatExchangeGastoLiquid.png differ diff --git a/www/img/stationpedia/StructureLargeDirectHeatExchangeLiquidtoLiquid.png b/www/img/stationpedia/StructureLargeDirectHeatExchangeLiquidtoLiquid.png index 97438ee..37e9a1f 100644 Binary files a/www/img/stationpedia/StructureLargeDirectHeatExchangeLiquidtoLiquid.png and b/www/img/stationpedia/StructureLargeDirectHeatExchangeLiquidtoLiquid.png differ diff --git a/www/img/stationpedia/StructureLargeExtendableRadiator.png b/www/img/stationpedia/StructureLargeExtendableRadiator.png index 3db606a..7a10fe8 100644 Binary files a/www/img/stationpedia/StructureLargeExtendableRadiator.png and b/www/img/stationpedia/StructureLargeExtendableRadiator.png differ diff --git a/www/img/stationpedia/StructureLargeHangerDoor.png b/www/img/stationpedia/StructureLargeHangerDoor.png index 36279f7..d8aea7a 100644 Binary files a/www/img/stationpedia/StructureLargeHangerDoor.png and b/www/img/stationpedia/StructureLargeHangerDoor.png differ diff --git a/www/img/stationpedia/StructureLargeSatelliteDish.png b/www/img/stationpedia/StructureLargeSatelliteDish.png index 8bb4d1d..0ff993c 100644 Binary files a/www/img/stationpedia/StructureLargeSatelliteDish.png and b/www/img/stationpedia/StructureLargeSatelliteDish.png differ diff --git a/www/img/stationpedia/StructureLaunchMount.png b/www/img/stationpedia/StructureLaunchMount.png index 9ecfb40..c781568 100644 Binary files a/www/img/stationpedia/StructureLaunchMount.png and b/www/img/stationpedia/StructureLaunchMount.png differ diff --git a/www/img/stationpedia/StructureLightLong.png b/www/img/stationpedia/StructureLightLong.png index ef7e65b..5bb52a9 100644 Binary files a/www/img/stationpedia/StructureLightLong.png and b/www/img/stationpedia/StructureLightLong.png differ diff --git a/www/img/stationpedia/StructureLightLongAngled.png b/www/img/stationpedia/StructureLightLongAngled.png index eac4915..59c060f 100644 Binary files a/www/img/stationpedia/StructureLightLongAngled.png and b/www/img/stationpedia/StructureLightLongAngled.png differ diff --git a/www/img/stationpedia/StructureLightLongWide.png b/www/img/stationpedia/StructureLightLongWide.png index 43f2b55..3e1dd57 100644 Binary files a/www/img/stationpedia/StructureLightLongWide.png and b/www/img/stationpedia/StructureLightLongWide.png differ diff --git a/www/img/stationpedia/StructureLightRound.png b/www/img/stationpedia/StructureLightRound.png index db5bd14..a331ae1 100644 Binary files a/www/img/stationpedia/StructureLightRound.png and b/www/img/stationpedia/StructureLightRound.png differ diff --git a/www/img/stationpedia/StructureLightRoundAngled.png b/www/img/stationpedia/StructureLightRoundAngled.png index 0a6a046..1cf5994 100644 Binary files a/www/img/stationpedia/StructureLightRoundAngled.png and b/www/img/stationpedia/StructureLightRoundAngled.png differ diff --git a/www/img/stationpedia/StructureLightRoundSmall.png b/www/img/stationpedia/StructureLightRoundSmall.png index 1ea6677..b5e3b20 100644 Binary files a/www/img/stationpedia/StructureLightRoundSmall.png and b/www/img/stationpedia/StructureLightRoundSmall.png differ diff --git a/www/img/stationpedia/StructureLiquidDrain.png b/www/img/stationpedia/StructureLiquidDrain.png index b722274..e8e18da 100644 Binary files a/www/img/stationpedia/StructureLiquidDrain.png and b/www/img/stationpedia/StructureLiquidDrain.png differ diff --git a/www/img/stationpedia/StructureLiquidPipeAnalyzer.png b/www/img/stationpedia/StructureLiquidPipeAnalyzer.png index c87abd6..0aa30d7 100644 Binary files a/www/img/stationpedia/StructureLiquidPipeAnalyzer.png and b/www/img/stationpedia/StructureLiquidPipeAnalyzer.png differ diff --git a/www/img/stationpedia/StructureLiquidPipeHeater.png b/www/img/stationpedia/StructureLiquidPipeHeater.png index e73bef8..154989f 100644 Binary files a/www/img/stationpedia/StructureLiquidPipeHeater.png and b/www/img/stationpedia/StructureLiquidPipeHeater.png differ diff --git a/www/img/stationpedia/StructureLiquidPipeOneWayValve.png b/www/img/stationpedia/StructureLiquidPipeOneWayValve.png index 6233ff5..ab6555f 100644 Binary files a/www/img/stationpedia/StructureLiquidPipeOneWayValve.png and b/www/img/stationpedia/StructureLiquidPipeOneWayValve.png differ diff --git a/www/img/stationpedia/StructureLiquidPipeRadiator.png b/www/img/stationpedia/StructureLiquidPipeRadiator.png index 31c156c..a68c99c 100644 Binary files a/www/img/stationpedia/StructureLiquidPipeRadiator.png and b/www/img/stationpedia/StructureLiquidPipeRadiator.png differ diff --git a/www/img/stationpedia/StructureLiquidPressureRegulator.png b/www/img/stationpedia/StructureLiquidPressureRegulator.png index fbc2509..276c2ae 100644 Binary files a/www/img/stationpedia/StructureLiquidPressureRegulator.png and b/www/img/stationpedia/StructureLiquidPressureRegulator.png differ diff --git a/www/img/stationpedia/StructureLiquidTankBig.png b/www/img/stationpedia/StructureLiquidTankBig.png index 08bbcbf..61bceca 100644 Binary files a/www/img/stationpedia/StructureLiquidTankBig.png and b/www/img/stationpedia/StructureLiquidTankBig.png differ diff --git a/www/img/stationpedia/StructureLiquidTankBigInsulated.png b/www/img/stationpedia/StructureLiquidTankBigInsulated.png index f9ae0bb..5f2f106 100644 Binary files a/www/img/stationpedia/StructureLiquidTankBigInsulated.png and b/www/img/stationpedia/StructureLiquidTankBigInsulated.png differ diff --git a/www/img/stationpedia/StructureLiquidTankSmall.png b/www/img/stationpedia/StructureLiquidTankSmall.png index ad1875e..9c4f0d1 100644 Binary files a/www/img/stationpedia/StructureLiquidTankSmall.png and b/www/img/stationpedia/StructureLiquidTankSmall.png differ diff --git a/www/img/stationpedia/StructureLiquidTankSmallInsulated.png b/www/img/stationpedia/StructureLiquidTankSmallInsulated.png index 6359827..9086250 100644 Binary files a/www/img/stationpedia/StructureLiquidTankSmallInsulated.png and b/www/img/stationpedia/StructureLiquidTankSmallInsulated.png differ diff --git a/www/img/stationpedia/StructureLiquidTankStorage.png b/www/img/stationpedia/StructureLiquidTankStorage.png index 090fa7f..8ca1982 100644 Binary files a/www/img/stationpedia/StructureLiquidTankStorage.png and b/www/img/stationpedia/StructureLiquidTankStorage.png differ diff --git a/www/img/stationpedia/StructureLiquidTurboVolumePump.png b/www/img/stationpedia/StructureLiquidTurboVolumePump.png index 0b2da40..c9dabdc 100644 Binary files a/www/img/stationpedia/StructureLiquidTurboVolumePump.png and b/www/img/stationpedia/StructureLiquidTurboVolumePump.png differ diff --git a/www/img/stationpedia/StructureLiquidUmbilicalFemale.png b/www/img/stationpedia/StructureLiquidUmbilicalFemale.png index c987bf1..96dd530 100644 Binary files a/www/img/stationpedia/StructureLiquidUmbilicalFemale.png and b/www/img/stationpedia/StructureLiquidUmbilicalFemale.png differ diff --git a/www/img/stationpedia/StructureLiquidUmbilicalFemaleSide.png b/www/img/stationpedia/StructureLiquidUmbilicalFemaleSide.png index 26c3e64..1bc8bcc 100644 Binary files a/www/img/stationpedia/StructureLiquidUmbilicalFemaleSide.png and b/www/img/stationpedia/StructureLiquidUmbilicalFemaleSide.png differ diff --git a/www/img/stationpedia/StructureLiquidUmbilicalMale.png b/www/img/stationpedia/StructureLiquidUmbilicalMale.png index 2acf347..0f3d7de 100644 Binary files a/www/img/stationpedia/StructureLiquidUmbilicalMale.png and b/www/img/stationpedia/StructureLiquidUmbilicalMale.png differ diff --git a/www/img/stationpedia/StructureLiquidValve.png b/www/img/stationpedia/StructureLiquidValve.png index 9cd4333..21f89c3 100644 Binary files a/www/img/stationpedia/StructureLiquidValve.png and b/www/img/stationpedia/StructureLiquidValve.png differ diff --git a/www/img/stationpedia/StructureLiquidVolumePump.png b/www/img/stationpedia/StructureLiquidVolumePump.png index 0f5d06b..788fd0b 100644 Binary files a/www/img/stationpedia/StructureLiquidVolumePump.png and b/www/img/stationpedia/StructureLiquidVolumePump.png differ diff --git a/www/img/stationpedia/StructureLockerSmall.png b/www/img/stationpedia/StructureLockerSmall.png index 6ca8823..929708e 100644 Binary files a/www/img/stationpedia/StructureLockerSmall.png and b/www/img/stationpedia/StructureLockerSmall.png differ diff --git a/www/img/stationpedia/StructureLogicBatchReader.png b/www/img/stationpedia/StructureLogicBatchReader.png index a908e03..15263c2 100644 Binary files a/www/img/stationpedia/StructureLogicBatchReader.png and b/www/img/stationpedia/StructureLogicBatchReader.png differ diff --git a/www/img/stationpedia/StructureLogicBatchSlotReader.png b/www/img/stationpedia/StructureLogicBatchSlotReader.png index eb7eb29..5c254a1 100644 Binary files a/www/img/stationpedia/StructureLogicBatchSlotReader.png and b/www/img/stationpedia/StructureLogicBatchSlotReader.png differ diff --git a/www/img/stationpedia/StructureLogicBatchWriter.png b/www/img/stationpedia/StructureLogicBatchWriter.png index 38ba46c..e5f3a4f 100644 Binary files a/www/img/stationpedia/StructureLogicBatchWriter.png and b/www/img/stationpedia/StructureLogicBatchWriter.png differ diff --git a/www/img/stationpedia/StructureLogicButton.png b/www/img/stationpedia/StructureLogicButton.png index 7f360d0..0744d5a 100644 Binary files a/www/img/stationpedia/StructureLogicButton.png and b/www/img/stationpedia/StructureLogicButton.png differ diff --git a/www/img/stationpedia/StructureLogicCompare.png b/www/img/stationpedia/StructureLogicCompare.png index 641771c..36fca0b 100644 Binary files a/www/img/stationpedia/StructureLogicCompare.png and b/www/img/stationpedia/StructureLogicCompare.png differ diff --git a/www/img/stationpedia/StructureLogicDial.png b/www/img/stationpedia/StructureLogicDial.png index e67fd9b..a0b0660 100644 Binary files a/www/img/stationpedia/StructureLogicDial.png and b/www/img/stationpedia/StructureLogicDial.png differ diff --git a/www/img/stationpedia/StructureLogicGate.png b/www/img/stationpedia/StructureLogicGate.png index f5830aa..0c625d0 100644 Binary files a/www/img/stationpedia/StructureLogicGate.png and b/www/img/stationpedia/StructureLogicGate.png differ diff --git a/www/img/stationpedia/StructureLogicHashGen.png b/www/img/stationpedia/StructureLogicHashGen.png index 610956f..0578e87 100644 Binary files a/www/img/stationpedia/StructureLogicHashGen.png and b/www/img/stationpedia/StructureLogicHashGen.png differ diff --git a/www/img/stationpedia/StructureLogicMath.png b/www/img/stationpedia/StructureLogicMath.png index 6913400..8847b3c 100644 Binary files a/www/img/stationpedia/StructureLogicMath.png and b/www/img/stationpedia/StructureLogicMath.png differ diff --git a/www/img/stationpedia/StructureLogicMathUnary.png b/www/img/stationpedia/StructureLogicMathUnary.png index 7f381ef..02c6d3a 100644 Binary files a/www/img/stationpedia/StructureLogicMathUnary.png and b/www/img/stationpedia/StructureLogicMathUnary.png differ diff --git a/www/img/stationpedia/StructureLogicMemory.png b/www/img/stationpedia/StructureLogicMemory.png index 4b5d825..dc1ad1c 100644 Binary files a/www/img/stationpedia/StructureLogicMemory.png and b/www/img/stationpedia/StructureLogicMemory.png differ diff --git a/www/img/stationpedia/StructureLogicMinMax.png b/www/img/stationpedia/StructureLogicMinMax.png index fe55472..c485239 100644 Binary files a/www/img/stationpedia/StructureLogicMinMax.png and b/www/img/stationpedia/StructureLogicMinMax.png differ diff --git a/www/img/stationpedia/StructureLogicMirror.png b/www/img/stationpedia/StructureLogicMirror.png index 5378ef6..88b3be0 100644 Binary files a/www/img/stationpedia/StructureLogicMirror.png and b/www/img/stationpedia/StructureLogicMirror.png differ diff --git a/www/img/stationpedia/StructureLogicReader.png b/www/img/stationpedia/StructureLogicReader.png index c1c800f..156024e 100644 Binary files a/www/img/stationpedia/StructureLogicReader.png and b/www/img/stationpedia/StructureLogicReader.png differ diff --git a/www/img/stationpedia/StructureLogicReagentReader.png b/www/img/stationpedia/StructureLogicReagentReader.png index 4920745..56137e5 100644 Binary files a/www/img/stationpedia/StructureLogicReagentReader.png and b/www/img/stationpedia/StructureLogicReagentReader.png differ diff --git a/www/img/stationpedia/StructureLogicRocketDownlink.png b/www/img/stationpedia/StructureLogicRocketDownlink.png index 5979383..5b54e13 100644 Binary files a/www/img/stationpedia/StructureLogicRocketDownlink.png and b/www/img/stationpedia/StructureLogicRocketDownlink.png differ diff --git a/www/img/stationpedia/StructureLogicRocketUplink.png b/www/img/stationpedia/StructureLogicRocketUplink.png index 0062c1a..d4e8857 100644 Binary files a/www/img/stationpedia/StructureLogicRocketUplink.png and b/www/img/stationpedia/StructureLogicRocketUplink.png differ diff --git a/www/img/stationpedia/StructureLogicSelect.png b/www/img/stationpedia/StructureLogicSelect.png index 9b30b29..1ea886f 100644 Binary files a/www/img/stationpedia/StructureLogicSelect.png and b/www/img/stationpedia/StructureLogicSelect.png differ diff --git a/www/img/stationpedia/StructureLogicSlotReader.png b/www/img/stationpedia/StructureLogicSlotReader.png index 0e5d5af..d366ed4 100644 Binary files a/www/img/stationpedia/StructureLogicSlotReader.png and b/www/img/stationpedia/StructureLogicSlotReader.png differ diff --git a/www/img/stationpedia/StructureLogicSwitch.png b/www/img/stationpedia/StructureLogicSwitch.png index 6c3e2bd..db78bd5 100644 Binary files a/www/img/stationpedia/StructureLogicSwitch.png and b/www/img/stationpedia/StructureLogicSwitch.png differ diff --git a/www/img/stationpedia/StructureLogicSwitch2.png b/www/img/stationpedia/StructureLogicSwitch2.png index 1801a40..efd12cd 100644 Binary files a/www/img/stationpedia/StructureLogicSwitch2.png and b/www/img/stationpedia/StructureLogicSwitch2.png differ diff --git a/www/img/stationpedia/StructureLogicTransmitter.png b/www/img/stationpedia/StructureLogicTransmitter.png index 36ddb8a..a7cddfa 100644 Binary files a/www/img/stationpedia/StructureLogicTransmitter.png and b/www/img/stationpedia/StructureLogicTransmitter.png differ diff --git a/www/img/stationpedia/StructureLogicWriter.png b/www/img/stationpedia/StructureLogicWriter.png index f4b1566..ed2b4dc 100644 Binary files a/www/img/stationpedia/StructureLogicWriter.png and b/www/img/stationpedia/StructureLogicWriter.png differ diff --git a/www/img/stationpedia/StructureLogicWriterSwitch.png b/www/img/stationpedia/StructureLogicWriterSwitch.png index 036638c..132d2fc 100644 Binary files a/www/img/stationpedia/StructureLogicWriterSwitch.png and b/www/img/stationpedia/StructureLogicWriterSwitch.png differ diff --git a/www/img/stationpedia/StructureManualHatch.png b/www/img/stationpedia/StructureManualHatch.png index 03ad0c8..f0a10e1 100644 Binary files a/www/img/stationpedia/StructureManualHatch.png and b/www/img/stationpedia/StructureManualHatch.png differ diff --git a/www/img/stationpedia/StructureMediumConvectionRadiator.png b/www/img/stationpedia/StructureMediumConvectionRadiator.png index a5709eb..3db4e5b 100644 Binary files a/www/img/stationpedia/StructureMediumConvectionRadiator.png and b/www/img/stationpedia/StructureMediumConvectionRadiator.png differ diff --git a/www/img/stationpedia/StructureMediumConvectionRadiatorLiquid.png b/www/img/stationpedia/StructureMediumConvectionRadiatorLiquid.png index 4791d11..a216b80 100644 Binary files a/www/img/stationpedia/StructureMediumConvectionRadiatorLiquid.png and b/www/img/stationpedia/StructureMediumConvectionRadiatorLiquid.png differ diff --git a/www/img/stationpedia/StructureMediumHangerDoor.png b/www/img/stationpedia/StructureMediumHangerDoor.png index 128dd04..af0cfa7 100644 Binary files a/www/img/stationpedia/StructureMediumHangerDoor.png and b/www/img/stationpedia/StructureMediumHangerDoor.png differ diff --git a/www/img/stationpedia/StructureMediumRadiator.png b/www/img/stationpedia/StructureMediumRadiator.png index 8ed9b34..9e80b92 100644 Binary files a/www/img/stationpedia/StructureMediumRadiator.png and b/www/img/stationpedia/StructureMediumRadiator.png differ diff --git a/www/img/stationpedia/StructureMediumRadiatorLiquid.png b/www/img/stationpedia/StructureMediumRadiatorLiquid.png index 19a8285..2a85cb5 100644 Binary files a/www/img/stationpedia/StructureMediumRadiatorLiquid.png and b/www/img/stationpedia/StructureMediumRadiatorLiquid.png differ diff --git a/www/img/stationpedia/StructureMediumRocketGasFuelTank.png b/www/img/stationpedia/StructureMediumRocketGasFuelTank.png index 6b9f411..96b7161 100644 Binary files a/www/img/stationpedia/StructureMediumRocketGasFuelTank.png and b/www/img/stationpedia/StructureMediumRocketGasFuelTank.png differ diff --git a/www/img/stationpedia/StructureMediumRocketLiquidFuelTank.png b/www/img/stationpedia/StructureMediumRocketLiquidFuelTank.png index e3d9851..6211b35 100644 Binary files a/www/img/stationpedia/StructureMediumRocketLiquidFuelTank.png and b/www/img/stationpedia/StructureMediumRocketLiquidFuelTank.png differ diff --git a/www/img/stationpedia/StructureMotionSensor.png b/www/img/stationpedia/StructureMotionSensor.png index 909f387..2121b87 100644 Binary files a/www/img/stationpedia/StructureMotionSensor.png and b/www/img/stationpedia/StructureMotionSensor.png differ diff --git a/www/img/stationpedia/StructureNitrolyzer.png b/www/img/stationpedia/StructureNitrolyzer.png index 9bdeab0..c63e25b 100644 Binary files a/www/img/stationpedia/StructureNitrolyzer.png and b/www/img/stationpedia/StructureNitrolyzer.png differ diff --git a/www/img/stationpedia/StructureOccupancySensor.png b/www/img/stationpedia/StructureOccupancySensor.png index 61a2845..3f677c3 100644 Binary files a/www/img/stationpedia/StructureOccupancySensor.png and b/www/img/stationpedia/StructureOccupancySensor.png differ diff --git a/www/img/stationpedia/StructureOverheadShortCornerLocker.png b/www/img/stationpedia/StructureOverheadShortCornerLocker.png index 84e7282..14272d4 100644 Binary files a/www/img/stationpedia/StructureOverheadShortCornerLocker.png and b/www/img/stationpedia/StructureOverheadShortCornerLocker.png differ diff --git a/www/img/stationpedia/StructureOverheadShortLocker.png b/www/img/stationpedia/StructureOverheadShortLocker.png index 1f76c6e..0907d83 100644 Binary files a/www/img/stationpedia/StructureOverheadShortLocker.png and b/www/img/stationpedia/StructureOverheadShortLocker.png differ diff --git a/www/img/stationpedia/StructurePassiveLargeRadiatorGas.png b/www/img/stationpedia/StructurePassiveLargeRadiatorGas.png index 9694a54..847b712 100644 Binary files a/www/img/stationpedia/StructurePassiveLargeRadiatorGas.png and b/www/img/stationpedia/StructurePassiveLargeRadiatorGas.png differ diff --git a/www/img/stationpedia/StructurePassiveLargeRadiatorLiquid.png b/www/img/stationpedia/StructurePassiveLargeRadiatorLiquid.png index e086d23..76f7464 100644 Binary files a/www/img/stationpedia/StructurePassiveLargeRadiatorLiquid.png and b/www/img/stationpedia/StructurePassiveLargeRadiatorLiquid.png differ diff --git a/www/img/stationpedia/StructurePassiveLiquidDrain.png b/www/img/stationpedia/StructurePassiveLiquidDrain.png index af16f13..a6647c1 100644 Binary files a/www/img/stationpedia/StructurePassiveLiquidDrain.png and b/www/img/stationpedia/StructurePassiveLiquidDrain.png differ diff --git a/www/img/stationpedia/StructurePassiveVent.png b/www/img/stationpedia/StructurePassiveVent.png index d6adea4..52aa933 100644 Binary files a/www/img/stationpedia/StructurePassiveVent.png and b/www/img/stationpedia/StructurePassiveVent.png differ diff --git a/www/img/stationpedia/StructurePassiveVentInsulated.png b/www/img/stationpedia/StructurePassiveVentInsulated.png index b5fbaeb..7d2d056 100644 Binary files a/www/img/stationpedia/StructurePassiveVentInsulated.png and b/www/img/stationpedia/StructurePassiveVentInsulated.png differ diff --git a/www/img/stationpedia/StructurePassthroughHeatExchangerGasToGas.png b/www/img/stationpedia/StructurePassthroughHeatExchangerGasToGas.png index 2eab7af..0e3a614 100644 Binary files a/www/img/stationpedia/StructurePassthroughHeatExchangerGasToGas.png and b/www/img/stationpedia/StructurePassthroughHeatExchangerGasToGas.png differ diff --git a/www/img/stationpedia/StructurePassthroughHeatExchangerGasToLiquid.png b/www/img/stationpedia/StructurePassthroughHeatExchangerGasToLiquid.png index e67cd98..feb2cf2 100644 Binary files a/www/img/stationpedia/StructurePassthroughHeatExchangerGasToLiquid.png and b/www/img/stationpedia/StructurePassthroughHeatExchangerGasToLiquid.png differ diff --git a/www/img/stationpedia/StructurePassthroughHeatExchangerLiquidToLiquid.png b/www/img/stationpedia/StructurePassthroughHeatExchangerLiquidToLiquid.png index cf40e5f..10936cc 100644 Binary files a/www/img/stationpedia/StructurePassthroughHeatExchangerLiquidToLiquid.png and b/www/img/stationpedia/StructurePassthroughHeatExchangerLiquidToLiquid.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickLandscapeLarge.png b/www/img/stationpedia/StructurePictureFrameThickLandscapeLarge.png index 557aeaa..eed3e13 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickLandscapeLarge.png and b/www/img/stationpedia/StructurePictureFrameThickLandscapeLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickLandscapeSmall.png b/www/img/stationpedia/StructurePictureFrameThickLandscapeSmall.png index 37bc774..ede0e48 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickLandscapeSmall.png and b/www/img/stationpedia/StructurePictureFrameThickLandscapeSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickMountLandscapeLarge.png b/www/img/stationpedia/StructurePictureFrameThickMountLandscapeLarge.png index fbcd2e3..0da9d9a 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickMountLandscapeLarge.png and b/www/img/stationpedia/StructurePictureFrameThickMountLandscapeLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickMountLandscapeSmall.png b/www/img/stationpedia/StructurePictureFrameThickMountLandscapeSmall.png index e4623f0..47a93ee 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickMountLandscapeSmall.png and b/www/img/stationpedia/StructurePictureFrameThickMountLandscapeSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickMountPortraitLarge.png b/www/img/stationpedia/StructurePictureFrameThickMountPortraitLarge.png index 6faece1..fb47f7c 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickMountPortraitLarge.png and b/www/img/stationpedia/StructurePictureFrameThickMountPortraitLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickMountPortraitSmall.png b/www/img/stationpedia/StructurePictureFrameThickMountPortraitSmall.png index 76d2786..fefc26d 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickMountPortraitSmall.png and b/www/img/stationpedia/StructurePictureFrameThickMountPortraitSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickPortraitLarge.png b/www/img/stationpedia/StructurePictureFrameThickPortraitLarge.png index 1ccd3ff..66957a3 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickPortraitLarge.png and b/www/img/stationpedia/StructurePictureFrameThickPortraitLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThickPortraitSmall.png b/www/img/stationpedia/StructurePictureFrameThickPortraitSmall.png index 645c7ab..7aaa8f7 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThickPortraitSmall.png and b/www/img/stationpedia/StructurePictureFrameThickPortraitSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinLandscapeLarge.png b/www/img/stationpedia/StructurePictureFrameThinLandscapeLarge.png index 4a4daf9..ea3b10d 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinLandscapeLarge.png and b/www/img/stationpedia/StructurePictureFrameThinLandscapeLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinLandscapeSmall.png b/www/img/stationpedia/StructurePictureFrameThinLandscapeSmall.png index 8be25bd..3444f52 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinLandscapeSmall.png and b/www/img/stationpedia/StructurePictureFrameThinLandscapeSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinMountLandscapeLarge.png b/www/img/stationpedia/StructurePictureFrameThinMountLandscapeLarge.png index 01556f9..7075e3a 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinMountLandscapeLarge.png and b/www/img/stationpedia/StructurePictureFrameThinMountLandscapeLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinMountLandscapeSmall.png b/www/img/stationpedia/StructurePictureFrameThinMountLandscapeSmall.png index 011c6fa..e4a252a 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinMountLandscapeSmall.png and b/www/img/stationpedia/StructurePictureFrameThinMountLandscapeSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinMountPortraitLarge.png b/www/img/stationpedia/StructurePictureFrameThinMountPortraitLarge.png index 7b11f30..092fac0 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinMountPortraitLarge.png and b/www/img/stationpedia/StructurePictureFrameThinMountPortraitLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinMountPortraitSmall.png b/www/img/stationpedia/StructurePictureFrameThinMountPortraitSmall.png index 311686a..a30183c 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinMountPortraitSmall.png and b/www/img/stationpedia/StructurePictureFrameThinMountPortraitSmall.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinPortraitLarge.png b/www/img/stationpedia/StructurePictureFrameThinPortraitLarge.png index ca5e235..1680cce 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinPortraitLarge.png and b/www/img/stationpedia/StructurePictureFrameThinPortraitLarge.png differ diff --git a/www/img/stationpedia/StructurePictureFrameThinPortraitSmall.png b/www/img/stationpedia/StructurePictureFrameThinPortraitSmall.png index a721a8a..eef6d1a 100644 Binary files a/www/img/stationpedia/StructurePictureFrameThinPortraitSmall.png and b/www/img/stationpedia/StructurePictureFrameThinPortraitSmall.png differ diff --git a/www/img/stationpedia/StructurePipeAnalysizer.png b/www/img/stationpedia/StructurePipeAnalysizer.png index dbb5d28..cb830c8 100644 Binary files a/www/img/stationpedia/StructurePipeAnalysizer.png and b/www/img/stationpedia/StructurePipeAnalysizer.png differ diff --git a/www/img/stationpedia/StructurePipeCorner.png b/www/img/stationpedia/StructurePipeCorner.png index aa944ac..bcc1f1d 100644 Binary files a/www/img/stationpedia/StructurePipeCorner.png and b/www/img/stationpedia/StructurePipeCorner.png differ diff --git a/www/img/stationpedia/StructurePipeCowl.png b/www/img/stationpedia/StructurePipeCowl.png index b33209b..fd16b79 100644 Binary files a/www/img/stationpedia/StructurePipeCowl.png and b/www/img/stationpedia/StructurePipeCowl.png differ diff --git a/www/img/stationpedia/StructurePipeCrossJunction.png b/www/img/stationpedia/StructurePipeCrossJunction.png index 26f3d07..989aed1 100644 Binary files a/www/img/stationpedia/StructurePipeCrossJunction.png and b/www/img/stationpedia/StructurePipeCrossJunction.png differ diff --git a/www/img/stationpedia/StructurePipeCrossJunction3.png b/www/img/stationpedia/StructurePipeCrossJunction3.png index f4c2f09..06023ae 100644 Binary files a/www/img/stationpedia/StructurePipeCrossJunction3.png and b/www/img/stationpedia/StructurePipeCrossJunction3.png differ diff --git a/www/img/stationpedia/StructurePipeCrossJunction4.png b/www/img/stationpedia/StructurePipeCrossJunction4.png index e0d964e..8ae82d4 100644 Binary files a/www/img/stationpedia/StructurePipeCrossJunction4.png and b/www/img/stationpedia/StructurePipeCrossJunction4.png differ diff --git a/www/img/stationpedia/StructurePipeCrossJunction5.png b/www/img/stationpedia/StructurePipeCrossJunction5.png index a5d1910..0da5d2d 100644 Binary files a/www/img/stationpedia/StructurePipeCrossJunction5.png and b/www/img/stationpedia/StructurePipeCrossJunction5.png differ diff --git a/www/img/stationpedia/StructurePipeCrossJunction6.png b/www/img/stationpedia/StructurePipeCrossJunction6.png index e25c97e..6304614 100644 Binary files a/www/img/stationpedia/StructurePipeCrossJunction6.png and b/www/img/stationpedia/StructurePipeCrossJunction6.png differ diff --git a/www/img/stationpedia/StructurePipeHeater.png b/www/img/stationpedia/StructurePipeHeater.png index ae2c2b4..997b961 100644 Binary files a/www/img/stationpedia/StructurePipeHeater.png and b/www/img/stationpedia/StructurePipeHeater.png differ diff --git a/www/img/stationpedia/StructurePipeIgniter.png b/www/img/stationpedia/StructurePipeIgniter.png new file mode 100644 index 0000000..33a4c7e Binary files /dev/null and b/www/img/stationpedia/StructurePipeIgniter.png differ diff --git a/www/img/stationpedia/StructurePipeInsulatedLiquidCrossJunction.png b/www/img/stationpedia/StructurePipeInsulatedLiquidCrossJunction.png index da4a7e4..e32f44a 100644 Binary files a/www/img/stationpedia/StructurePipeInsulatedLiquidCrossJunction.png and b/www/img/stationpedia/StructurePipeInsulatedLiquidCrossJunction.png differ diff --git a/www/img/stationpedia/StructurePipeLabel.png b/www/img/stationpedia/StructurePipeLabel.png index 1f34030..531539f 100644 Binary files a/www/img/stationpedia/StructurePipeLabel.png and b/www/img/stationpedia/StructurePipeLabel.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCorner.png b/www/img/stationpedia/StructurePipeLiquidCorner.png index 83fc7b9..1bf1bec 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCorner.png and b/www/img/stationpedia/StructurePipeLiquidCorner.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCrossJunction.png b/www/img/stationpedia/StructurePipeLiquidCrossJunction.png index 228c7e9..c9ce8ac 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCrossJunction.png and b/www/img/stationpedia/StructurePipeLiquidCrossJunction.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCrossJunction3.png b/www/img/stationpedia/StructurePipeLiquidCrossJunction3.png index 1cb050a..b6fa2be 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCrossJunction3.png and b/www/img/stationpedia/StructurePipeLiquidCrossJunction3.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCrossJunction4.png b/www/img/stationpedia/StructurePipeLiquidCrossJunction4.png index e0926af..4911d8e 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCrossJunction4.png and b/www/img/stationpedia/StructurePipeLiquidCrossJunction4.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCrossJunction5.png b/www/img/stationpedia/StructurePipeLiquidCrossJunction5.png index 71af3a0..88a2b5a 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCrossJunction5.png and b/www/img/stationpedia/StructurePipeLiquidCrossJunction5.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidCrossJunction6.png b/www/img/stationpedia/StructurePipeLiquidCrossJunction6.png index c133f58..5a63eb1 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidCrossJunction6.png and b/www/img/stationpedia/StructurePipeLiquidCrossJunction6.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidStraight.png b/www/img/stationpedia/StructurePipeLiquidStraight.png index 6e92e7e..a55c898 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidStraight.png and b/www/img/stationpedia/StructurePipeLiquidStraight.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidTJunction.png b/www/img/stationpedia/StructurePipeLiquidTJunction.png index 0aa46c0..3537244 100644 Binary files a/www/img/stationpedia/StructurePipeLiquidTJunction.png and b/www/img/stationpedia/StructurePipeLiquidTJunction.png differ diff --git a/www/img/stationpedia/StructurePipeMeter.png b/www/img/stationpedia/StructurePipeMeter.png index 96115a4..0f05ecb 100644 Binary files a/www/img/stationpedia/StructurePipeMeter.png and b/www/img/stationpedia/StructurePipeMeter.png differ diff --git a/www/img/stationpedia/StructurePipeOneWayValve.png b/www/img/stationpedia/StructurePipeOneWayValve.png index b7f3fe1..3ae21f2 100644 Binary files a/www/img/stationpedia/StructurePipeOneWayValve.png and b/www/img/stationpedia/StructurePipeOneWayValve.png differ diff --git a/www/img/stationpedia/StructurePipeOrgan.png b/www/img/stationpedia/StructurePipeOrgan.png index 6d56fa7..bdd5082 100644 Binary files a/www/img/stationpedia/StructurePipeOrgan.png and b/www/img/stationpedia/StructurePipeOrgan.png differ diff --git a/www/img/stationpedia/StructurePipeRadiator.png b/www/img/stationpedia/StructurePipeRadiator.png index d13c4bc..fc76a7f 100644 Binary files a/www/img/stationpedia/StructurePipeRadiator.png and b/www/img/stationpedia/StructurePipeRadiator.png differ diff --git a/www/img/stationpedia/StructurePipeRadiatorFlat.png b/www/img/stationpedia/StructurePipeRadiatorFlat.png index 60d3f05..f241a9b 100644 Binary files a/www/img/stationpedia/StructurePipeRadiatorFlat.png and b/www/img/stationpedia/StructurePipeRadiatorFlat.png differ diff --git a/www/img/stationpedia/StructurePipeRadiatorFlatLiquid.png b/www/img/stationpedia/StructurePipeRadiatorFlatLiquid.png index da2432a..3210a2b 100644 Binary files a/www/img/stationpedia/StructurePipeRadiatorFlatLiquid.png and b/www/img/stationpedia/StructurePipeRadiatorFlatLiquid.png differ diff --git a/www/img/stationpedia/StructurePipeStraight.png b/www/img/stationpedia/StructurePipeStraight.png index 46183ec..1037f96 100644 Binary files a/www/img/stationpedia/StructurePipeStraight.png and b/www/img/stationpedia/StructurePipeStraight.png differ diff --git a/www/img/stationpedia/StructurePipeTJunction.png b/www/img/stationpedia/StructurePipeTJunction.png index 2ab1d52..9057187 100644 Binary files a/www/img/stationpedia/StructurePipeTJunction.png and b/www/img/stationpedia/StructurePipeTJunction.png differ diff --git a/www/img/stationpedia/StructurePlanter.png b/www/img/stationpedia/StructurePlanter.png index 6592697..77d0250 100644 Binary files a/www/img/stationpedia/StructurePlanter.png and b/www/img/stationpedia/StructurePlanter.png differ diff --git a/www/img/stationpedia/StructurePlatformLadderOpen.png b/www/img/stationpedia/StructurePlatformLadderOpen.png index 8d80a36..2cdf54e 100644 Binary files a/www/img/stationpedia/StructurePlatformLadderOpen.png and b/www/img/stationpedia/StructurePlatformLadderOpen.png differ diff --git a/www/img/stationpedia/StructurePortablesConnector.png b/www/img/stationpedia/StructurePortablesConnector.png index dfa9ea6..ed0af0d 100644 Binary files a/www/img/stationpedia/StructurePortablesConnector.png and b/www/img/stationpedia/StructurePortablesConnector.png differ diff --git a/www/img/stationpedia/StructurePowerConnector.png b/www/img/stationpedia/StructurePowerConnector.png index b865856..b87c5fe 100644 Binary files a/www/img/stationpedia/StructurePowerConnector.png and b/www/img/stationpedia/StructurePowerConnector.png differ diff --git a/www/img/stationpedia/StructurePowerTransmitter.png b/www/img/stationpedia/StructurePowerTransmitter.png index f2c5a71..cf906a1 100644 Binary files a/www/img/stationpedia/StructurePowerTransmitter.png and b/www/img/stationpedia/StructurePowerTransmitter.png differ diff --git a/www/img/stationpedia/StructurePowerTransmitterOmni.png b/www/img/stationpedia/StructurePowerTransmitterOmni.png index f2c5a71..6ed47ca 100644 Binary files a/www/img/stationpedia/StructurePowerTransmitterOmni.png and b/www/img/stationpedia/StructurePowerTransmitterOmni.png differ diff --git a/www/img/stationpedia/StructurePowerTransmitterReceiver.png b/www/img/stationpedia/StructurePowerTransmitterReceiver.png index 2d7469b..c32f894 100644 Binary files a/www/img/stationpedia/StructurePowerTransmitterReceiver.png and b/www/img/stationpedia/StructurePowerTransmitterReceiver.png differ diff --git a/www/img/stationpedia/StructurePowerUmbilicalFemale.png b/www/img/stationpedia/StructurePowerUmbilicalFemale.png index 07a86a4..ae8cd05 100644 Binary files a/www/img/stationpedia/StructurePowerUmbilicalFemale.png and b/www/img/stationpedia/StructurePowerUmbilicalFemale.png differ diff --git a/www/img/stationpedia/StructurePowerUmbilicalFemaleSide.png b/www/img/stationpedia/StructurePowerUmbilicalFemaleSide.png index 56d554d..ad6b4b5 100644 Binary files a/www/img/stationpedia/StructurePowerUmbilicalFemaleSide.png and b/www/img/stationpedia/StructurePowerUmbilicalFemaleSide.png differ diff --git a/www/img/stationpedia/StructurePowerUmbilicalMale.png b/www/img/stationpedia/StructurePowerUmbilicalMale.png index 4267f22..0c6ca17 100644 Binary files a/www/img/stationpedia/StructurePowerUmbilicalMale.png and b/www/img/stationpedia/StructurePowerUmbilicalMale.png differ diff --git a/www/img/stationpedia/StructurePoweredVent.png b/www/img/stationpedia/StructurePoweredVent.png index c24f5cc..56a77ed 100644 Binary files a/www/img/stationpedia/StructurePoweredVent.png and b/www/img/stationpedia/StructurePoweredVent.png differ diff --git a/www/img/stationpedia/StructurePoweredVentLarge.png b/www/img/stationpedia/StructurePoweredVentLarge.png index 065caec..32588ec 100644 Binary files a/www/img/stationpedia/StructurePoweredVentLarge.png and b/www/img/stationpedia/StructurePoweredVentLarge.png differ diff --git a/www/img/stationpedia/StructurePressurantValve.png b/www/img/stationpedia/StructurePressurantValve.png index 7db1810..a215ac9 100644 Binary files a/www/img/stationpedia/StructurePressurantValve.png and b/www/img/stationpedia/StructurePressurantValve.png differ diff --git a/www/img/stationpedia/StructurePressureFedGasEngine.png b/www/img/stationpedia/StructurePressureFedGasEngine.png index 06dca4d..3b332d3 100644 Binary files a/www/img/stationpedia/StructurePressureFedGasEngine.png and b/www/img/stationpedia/StructurePressureFedGasEngine.png differ diff --git a/www/img/stationpedia/StructurePressureFedLiquidEngine.png b/www/img/stationpedia/StructurePressureFedLiquidEngine.png index 560ed81..e06bd7f 100644 Binary files a/www/img/stationpedia/StructurePressureFedLiquidEngine.png and b/www/img/stationpedia/StructurePressureFedLiquidEngine.png differ diff --git a/www/img/stationpedia/StructurePressurePlateLarge.png b/www/img/stationpedia/StructurePressurePlateLarge.png index 589c18f..805b50c 100644 Binary files a/www/img/stationpedia/StructurePressurePlateLarge.png and b/www/img/stationpedia/StructurePressurePlateLarge.png differ diff --git a/www/img/stationpedia/StructurePressurePlateMedium.png b/www/img/stationpedia/StructurePressurePlateMedium.png index 9fd8ee6..f62c88d 100644 Binary files a/www/img/stationpedia/StructurePressurePlateMedium.png and b/www/img/stationpedia/StructurePressurePlateMedium.png differ diff --git a/www/img/stationpedia/StructurePressurePlateSmall.png b/www/img/stationpedia/StructurePressurePlateSmall.png index 16c0d27..0176e26 100644 Binary files a/www/img/stationpedia/StructurePressurePlateSmall.png and b/www/img/stationpedia/StructurePressurePlateSmall.png differ diff --git a/www/img/stationpedia/StructurePressureRegulator.png b/www/img/stationpedia/StructurePressureRegulator.png index 283e237..ffa14fe 100644 Binary files a/www/img/stationpedia/StructurePressureRegulator.png and b/www/img/stationpedia/StructurePressureRegulator.png differ diff --git a/www/img/stationpedia/StructureProximitySensor.png b/www/img/stationpedia/StructureProximitySensor.png index ac5215f..ad470bb 100644 Binary files a/www/img/stationpedia/StructureProximitySensor.png and b/www/img/stationpedia/StructureProximitySensor.png differ diff --git a/www/img/stationpedia/StructurePumpedLiquidEngine.png b/www/img/stationpedia/StructurePumpedLiquidEngine.png index 3d80d82..c3ff7ec 100644 Binary files a/www/img/stationpedia/StructurePumpedLiquidEngine.png and b/www/img/stationpedia/StructurePumpedLiquidEngine.png differ diff --git a/www/img/stationpedia/StructurePurgeValve.png b/www/img/stationpedia/StructurePurgeValve.png index 8ff19dd..f7999e4 100644 Binary files a/www/img/stationpedia/StructurePurgeValve.png and b/www/img/stationpedia/StructurePurgeValve.png differ diff --git a/www/img/stationpedia/StructureRailing.png b/www/img/stationpedia/StructureRailing.png index c31305d..034f9a6 100644 Binary files a/www/img/stationpedia/StructureRailing.png and b/www/img/stationpedia/StructureRailing.png differ diff --git a/www/img/stationpedia/StructureRecycler.png b/www/img/stationpedia/StructureRecycler.png index 6879496..1960419 100644 Binary files a/www/img/stationpedia/StructureRecycler.png and b/www/img/stationpedia/StructureRecycler.png differ diff --git a/www/img/stationpedia/StructureRefrigeratedVendingMachine.png b/www/img/stationpedia/StructureRefrigeratedVendingMachine.png index 409cf1b..f6ac463 100644 Binary files a/www/img/stationpedia/StructureRefrigeratedVendingMachine.png and b/www/img/stationpedia/StructureRefrigeratedVendingMachine.png differ diff --git a/www/img/stationpedia/StructureReinforcedCompositeWindow.png b/www/img/stationpedia/StructureReinforcedCompositeWindow.png index 99febab..7b623d2 100644 Binary files a/www/img/stationpedia/StructureReinforcedCompositeWindow.png and b/www/img/stationpedia/StructureReinforcedCompositeWindow.png differ diff --git a/www/img/stationpedia/StructureReinforcedCompositeWindowSteel.png b/www/img/stationpedia/StructureReinforcedCompositeWindowSteel.png index a0896ca..8fed5de 100644 Binary files a/www/img/stationpedia/StructureReinforcedCompositeWindowSteel.png and b/www/img/stationpedia/StructureReinforcedCompositeWindowSteel.png differ diff --git a/www/img/stationpedia/StructureReinforcedWallPaddedWindow.png b/www/img/stationpedia/StructureReinforcedWallPaddedWindow.png index bc34f2b..fce4f47 100644 Binary files a/www/img/stationpedia/StructureReinforcedWallPaddedWindow.png and b/www/img/stationpedia/StructureReinforcedWallPaddedWindow.png differ diff --git a/www/img/stationpedia/StructureReinforcedWallPaddedWindowThin.png b/www/img/stationpedia/StructureReinforcedWallPaddedWindowThin.png index b847117..863db96 100644 Binary files a/www/img/stationpedia/StructureReinforcedWallPaddedWindowThin.png and b/www/img/stationpedia/StructureReinforcedWallPaddedWindowThin.png differ diff --git a/www/img/stationpedia/StructureResearchMachine.png b/www/img/stationpedia/StructureResearchMachine.png index 6960605..aca98c8 100644 Binary files a/www/img/stationpedia/StructureResearchMachine.png and b/www/img/stationpedia/StructureResearchMachine.png differ diff --git a/www/img/stationpedia/StructureRocketAvionics.png b/www/img/stationpedia/StructureRocketAvionics.png index 450b425..2ea6200 100644 Binary files a/www/img/stationpedia/StructureRocketAvionics.png and b/www/img/stationpedia/StructureRocketAvionics.png differ diff --git a/www/img/stationpedia/StructureRocketCelestialTracker.png b/www/img/stationpedia/StructureRocketCelestialTracker.png index 422963e..b663043 100644 Binary files a/www/img/stationpedia/StructureRocketCelestialTracker.png and b/www/img/stationpedia/StructureRocketCelestialTracker.png differ diff --git a/www/img/stationpedia/StructureRocketCircuitHousing.png b/www/img/stationpedia/StructureRocketCircuitHousing.png index 981cb22..7003a2c 100644 Binary files a/www/img/stationpedia/StructureRocketCircuitHousing.png and b/www/img/stationpedia/StructureRocketCircuitHousing.png differ diff --git a/www/img/stationpedia/StructureRocketEngineTiny.png b/www/img/stationpedia/StructureRocketEngineTiny.png index 62f8210..7273aad 100644 Binary files a/www/img/stationpedia/StructureRocketEngineTiny.png and b/www/img/stationpedia/StructureRocketEngineTiny.png differ diff --git a/www/img/stationpedia/StructureRocketManufactory.png b/www/img/stationpedia/StructureRocketManufactory.png index 4548ce3..6c686dc 100644 Binary files a/www/img/stationpedia/StructureRocketManufactory.png and b/www/img/stationpedia/StructureRocketManufactory.png differ diff --git a/www/img/stationpedia/StructureRocketMiner.png b/www/img/stationpedia/StructureRocketMiner.png index 5e84d56..bad30ac 100644 Binary files a/www/img/stationpedia/StructureRocketMiner.png and b/www/img/stationpedia/StructureRocketMiner.png differ diff --git a/www/img/stationpedia/StructureRocketScanner.png b/www/img/stationpedia/StructureRocketScanner.png index a3278dc..f8beda7 100644 Binary files a/www/img/stationpedia/StructureRocketScanner.png and b/www/img/stationpedia/StructureRocketScanner.png differ diff --git a/www/img/stationpedia/StructureRocketTower.png b/www/img/stationpedia/StructureRocketTower.png index 5e89527..cb4669d 100644 Binary files a/www/img/stationpedia/StructureRocketTower.png and b/www/img/stationpedia/StructureRocketTower.png differ diff --git a/www/img/stationpedia/StructureRocketTransformerSmall.png b/www/img/stationpedia/StructureRocketTransformerSmall.png index d75c5fc..998ce63 100644 Binary files a/www/img/stationpedia/StructureRocketTransformerSmall.png and b/www/img/stationpedia/StructureRocketTransformerSmall.png differ diff --git a/www/img/stationpedia/StructureRover.png b/www/img/stationpedia/StructureRover.png index 08ec9f8..a578dc7 100644 Binary files a/www/img/stationpedia/StructureRover.png and b/www/img/stationpedia/StructureRover.png differ diff --git a/www/img/stationpedia/StructureSDBHopper.png b/www/img/stationpedia/StructureSDBHopper.png index e8afee9..8186be2 100644 Binary files a/www/img/stationpedia/StructureSDBHopper.png and b/www/img/stationpedia/StructureSDBHopper.png differ diff --git a/www/img/stationpedia/StructureSDBHopperAdvanced.png b/www/img/stationpedia/StructureSDBHopperAdvanced.png index 9b203aa..fcfc561 100644 Binary files a/www/img/stationpedia/StructureSDBHopperAdvanced.png and b/www/img/stationpedia/StructureSDBHopperAdvanced.png differ diff --git a/www/img/stationpedia/StructureSDBSilo.png b/www/img/stationpedia/StructureSDBSilo.png index 4198000..bf35465 100644 Binary files a/www/img/stationpedia/StructureSDBSilo.png and b/www/img/stationpedia/StructureSDBSilo.png differ diff --git a/www/img/stationpedia/StructureSatelliteDish.png b/www/img/stationpedia/StructureSatelliteDish.png index a0f061e..528dc7f 100644 Binary files a/www/img/stationpedia/StructureSatelliteDish.png and b/www/img/stationpedia/StructureSatelliteDish.png differ diff --git a/www/img/stationpedia/StructureSecurityPrinter.png b/www/img/stationpedia/StructureSecurityPrinter.png index 7c183f7..5241367 100644 Binary files a/www/img/stationpedia/StructureSecurityPrinter.png and b/www/img/stationpedia/StructureSecurityPrinter.png differ diff --git a/www/img/stationpedia/StructureShelf.png b/www/img/stationpedia/StructureShelf.png index 50f0c11..8e47077 100644 Binary files a/www/img/stationpedia/StructureShelf.png and b/www/img/stationpedia/StructureShelf.png differ diff --git a/www/img/stationpedia/StructureShelfMedium.png b/www/img/stationpedia/StructureShelfMedium.png index c49bdbb..1a5e9f2 100644 Binary files a/www/img/stationpedia/StructureShelfMedium.png and b/www/img/stationpedia/StructureShelfMedium.png differ diff --git a/www/img/stationpedia/StructureShortCornerLocker.png b/www/img/stationpedia/StructureShortCornerLocker.png index fad41c1..f7ef0c0 100644 Binary files a/www/img/stationpedia/StructureShortCornerLocker.png and b/www/img/stationpedia/StructureShortCornerLocker.png differ diff --git a/www/img/stationpedia/StructureShortLocker.png b/www/img/stationpedia/StructureShortLocker.png index 10e7264..fb0e796 100644 Binary files a/www/img/stationpedia/StructureShortLocker.png and b/www/img/stationpedia/StructureShortLocker.png differ diff --git a/www/img/stationpedia/StructureShower.png b/www/img/stationpedia/StructureShower.png index b0f1368..a690609 100644 Binary files a/www/img/stationpedia/StructureShower.png and b/www/img/stationpedia/StructureShower.png differ diff --git a/www/img/stationpedia/StructureShowerPowered.png b/www/img/stationpedia/StructureShowerPowered.png index 4f93e59..674f4ff 100644 Binary files a/www/img/stationpedia/StructureShowerPowered.png and b/www/img/stationpedia/StructureShowerPowered.png differ diff --git a/www/img/stationpedia/StructureSign1x1.png b/www/img/stationpedia/StructureSign1x1.png index 17834c1..4368958 100644 Binary files a/www/img/stationpedia/StructureSign1x1.png and b/www/img/stationpedia/StructureSign1x1.png differ diff --git a/www/img/stationpedia/StructureSign2x1.png b/www/img/stationpedia/StructureSign2x1.png index 40a80a8..f5ecb31 100644 Binary files a/www/img/stationpedia/StructureSign2x1.png and b/www/img/stationpedia/StructureSign2x1.png differ diff --git a/www/img/stationpedia/StructureSingleBed.png b/www/img/stationpedia/StructureSingleBed.png index 020501b..181f1e9 100644 Binary files a/www/img/stationpedia/StructureSingleBed.png and b/www/img/stationpedia/StructureSingleBed.png differ diff --git a/www/img/stationpedia/StructureSleeper.png b/www/img/stationpedia/StructureSleeper.png index 5960117..971c3ec 100644 Binary files a/www/img/stationpedia/StructureSleeper.png and b/www/img/stationpedia/StructureSleeper.png differ diff --git a/www/img/stationpedia/StructureSleeperLeft.png b/www/img/stationpedia/StructureSleeperLeft.png index 2354a96..34a92ea 100644 Binary files a/www/img/stationpedia/StructureSleeperLeft.png and b/www/img/stationpedia/StructureSleeperLeft.png differ diff --git a/www/img/stationpedia/StructureSleeperRight.png b/www/img/stationpedia/StructureSleeperRight.png index 207590d..df0700f 100644 Binary files a/www/img/stationpedia/StructureSleeperRight.png and b/www/img/stationpedia/StructureSleeperRight.png differ diff --git a/www/img/stationpedia/StructureSleeperVertical.png b/www/img/stationpedia/StructureSleeperVertical.png index 905d22e..e78f2f4 100644 Binary files a/www/img/stationpedia/StructureSleeperVertical.png and b/www/img/stationpedia/StructureSleeperVertical.png differ diff --git a/www/img/stationpedia/StructureSleeperVerticalDroid.png b/www/img/stationpedia/StructureSleeperVerticalDroid.png index 054394f..c148513 100644 Binary files a/www/img/stationpedia/StructureSleeperVerticalDroid.png and b/www/img/stationpedia/StructureSleeperVerticalDroid.png differ diff --git a/www/img/stationpedia/StructureSmallDirectHeatExchangeGastoGas.png b/www/img/stationpedia/StructureSmallDirectHeatExchangeGastoGas.png index 683a991..d607334 100644 Binary files a/www/img/stationpedia/StructureSmallDirectHeatExchangeGastoGas.png and b/www/img/stationpedia/StructureSmallDirectHeatExchangeGastoGas.png differ diff --git a/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoGas.png b/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoGas.png index fdb7d03..2869c4a 100644 Binary files a/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoGas.png and b/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoGas.png differ diff --git a/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoLiquid.png b/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoLiquid.png index 81eed37..b2d27d9 100644 Binary files a/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoLiquid.png and b/www/img/stationpedia/StructureSmallDirectHeatExchangeLiquidtoLiquid.png differ diff --git a/www/img/stationpedia/StructureSmallSatelliteDish.png b/www/img/stationpedia/StructureSmallSatelliteDish.png index 7597c83..8b99059 100644 Binary files a/www/img/stationpedia/StructureSmallSatelliteDish.png and b/www/img/stationpedia/StructureSmallSatelliteDish.png differ diff --git a/www/img/stationpedia/StructureSmallTableBacklessDouble.png b/www/img/stationpedia/StructureSmallTableBacklessDouble.png index b536bda..17d10c9 100644 Binary files a/www/img/stationpedia/StructureSmallTableBacklessDouble.png and b/www/img/stationpedia/StructureSmallTableBacklessDouble.png differ diff --git a/www/img/stationpedia/StructureSmallTableBacklessSingle.png b/www/img/stationpedia/StructureSmallTableBacklessSingle.png index b9b5fa1..f914a00 100644 Binary files a/www/img/stationpedia/StructureSmallTableBacklessSingle.png and b/www/img/stationpedia/StructureSmallTableBacklessSingle.png differ diff --git a/www/img/stationpedia/StructureSmallTableDinnerSingle.png b/www/img/stationpedia/StructureSmallTableDinnerSingle.png index 0eb264e..dbd6eea 100644 Binary files a/www/img/stationpedia/StructureSmallTableDinnerSingle.png and b/www/img/stationpedia/StructureSmallTableDinnerSingle.png differ diff --git a/www/img/stationpedia/StructureSmallTableRectangleDouble.png b/www/img/stationpedia/StructureSmallTableRectangleDouble.png index c04787b..33f7324 100644 Binary files a/www/img/stationpedia/StructureSmallTableRectangleDouble.png and b/www/img/stationpedia/StructureSmallTableRectangleDouble.png differ diff --git a/www/img/stationpedia/StructureSmallTableRectangleSingle.png b/www/img/stationpedia/StructureSmallTableRectangleSingle.png index a08a3f1..3085f6e 100644 Binary files a/www/img/stationpedia/StructureSmallTableRectangleSingle.png and b/www/img/stationpedia/StructureSmallTableRectangleSingle.png differ diff --git a/www/img/stationpedia/StructureSmallTableThickDouble.png b/www/img/stationpedia/StructureSmallTableThickDouble.png index 9703d62..5f4092b 100644 Binary files a/www/img/stationpedia/StructureSmallTableThickDouble.png and b/www/img/stationpedia/StructureSmallTableThickDouble.png differ diff --git a/www/img/stationpedia/StructureSmallTableThickSingle.png b/www/img/stationpedia/StructureSmallTableThickSingle.png index 7b125a7..b948428 100644 Binary files a/www/img/stationpedia/StructureSmallTableThickSingle.png and b/www/img/stationpedia/StructureSmallTableThickSingle.png differ diff --git a/www/img/stationpedia/StructureSolarPanel.png b/www/img/stationpedia/StructureSolarPanel.png index 282424b..3114a74 100644 Binary files a/www/img/stationpedia/StructureSolarPanel.png and b/www/img/stationpedia/StructureSolarPanel.png differ diff --git a/www/img/stationpedia/StructureSolarPanel45.png b/www/img/stationpedia/StructureSolarPanel45.png index 0d490f8..43f0c85 100644 Binary files a/www/img/stationpedia/StructureSolarPanel45.png and b/www/img/stationpedia/StructureSolarPanel45.png differ diff --git a/www/img/stationpedia/StructureSolarPanel45Reinforced.png b/www/img/stationpedia/StructureSolarPanel45Reinforced.png index a7248eb..949e0ed 100644 Binary files a/www/img/stationpedia/StructureSolarPanel45Reinforced.png and b/www/img/stationpedia/StructureSolarPanel45Reinforced.png differ diff --git a/www/img/stationpedia/StructureSolarPanelDual.png b/www/img/stationpedia/StructureSolarPanelDual.png index 595af1f..9d9c975 100644 Binary files a/www/img/stationpedia/StructureSolarPanelDual.png and b/www/img/stationpedia/StructureSolarPanelDual.png differ diff --git a/www/img/stationpedia/StructureSolarPanelDualReinforced.png b/www/img/stationpedia/StructureSolarPanelDualReinforced.png index 17a95b6..a6a0732 100644 Binary files a/www/img/stationpedia/StructureSolarPanelDualReinforced.png and b/www/img/stationpedia/StructureSolarPanelDualReinforced.png differ diff --git a/www/img/stationpedia/StructureSolarPanelFlat.png b/www/img/stationpedia/StructureSolarPanelFlat.png index e737146..3b4738c 100644 Binary files a/www/img/stationpedia/StructureSolarPanelFlat.png and b/www/img/stationpedia/StructureSolarPanelFlat.png differ diff --git a/www/img/stationpedia/StructureSolarPanelFlatReinforced.png b/www/img/stationpedia/StructureSolarPanelFlatReinforced.png index 7d7f3ff..44e52d1 100644 Binary files a/www/img/stationpedia/StructureSolarPanelFlatReinforced.png and b/www/img/stationpedia/StructureSolarPanelFlatReinforced.png differ diff --git a/www/img/stationpedia/StructureSolarPanelReinforced.png b/www/img/stationpedia/StructureSolarPanelReinforced.png index 2e04436..85bd9cf 100644 Binary files a/www/img/stationpedia/StructureSolarPanelReinforced.png and b/www/img/stationpedia/StructureSolarPanelReinforced.png differ diff --git a/www/img/stationpedia/StructureSolidFuelGenerator.png b/www/img/stationpedia/StructureSolidFuelGenerator.png index a3d5df8..4153de9 100644 Binary files a/www/img/stationpedia/StructureSolidFuelGenerator.png and b/www/img/stationpedia/StructureSolidFuelGenerator.png differ diff --git a/www/img/stationpedia/StructureSorter.png b/www/img/stationpedia/StructureSorter.png index cb9e7f7..7508168 100644 Binary files a/www/img/stationpedia/StructureSorter.png and b/www/img/stationpedia/StructureSorter.png differ diff --git a/www/img/stationpedia/StructureStacker.png b/www/img/stationpedia/StructureStacker.png index 2581438..0d782f8 100644 Binary files a/www/img/stationpedia/StructureStacker.png and b/www/img/stationpedia/StructureStacker.png differ diff --git a/www/img/stationpedia/StructureStackerReverse.png b/www/img/stationpedia/StructureStackerReverse.png index 0a2f507..c6a4f40 100644 Binary files a/www/img/stationpedia/StructureStackerReverse.png and b/www/img/stationpedia/StructureStackerReverse.png differ diff --git a/www/img/stationpedia/StructureStairs4x2.png b/www/img/stationpedia/StructureStairs4x2.png index 65d5c46..31ac77f 100644 Binary files a/www/img/stationpedia/StructureStairs4x2.png and b/www/img/stationpedia/StructureStairs4x2.png differ diff --git a/www/img/stationpedia/StructureStairs4x2RailL.png b/www/img/stationpedia/StructureStairs4x2RailL.png index b4a3847..27ef17a 100644 Binary files a/www/img/stationpedia/StructureStairs4x2RailL.png and b/www/img/stationpedia/StructureStairs4x2RailL.png differ diff --git a/www/img/stationpedia/StructureStairs4x2RailR.png b/www/img/stationpedia/StructureStairs4x2RailR.png index 5c0666e..42e9ca2 100644 Binary files a/www/img/stationpedia/StructureStairs4x2RailR.png and b/www/img/stationpedia/StructureStairs4x2RailR.png differ diff --git a/www/img/stationpedia/StructureStairs4x2Rails.png b/www/img/stationpedia/StructureStairs4x2Rails.png index d47e194..8474baa 100644 Binary files a/www/img/stationpedia/StructureStairs4x2Rails.png and b/www/img/stationpedia/StructureStairs4x2Rails.png differ diff --git a/www/img/stationpedia/StructureStairwellBackLeft.png b/www/img/stationpedia/StructureStairwellBackLeft.png index 27dc4e1..7258cfb 100644 Binary files a/www/img/stationpedia/StructureStairwellBackLeft.png and b/www/img/stationpedia/StructureStairwellBackLeft.png differ diff --git a/www/img/stationpedia/StructureStairwellBackPassthrough.png b/www/img/stationpedia/StructureStairwellBackPassthrough.png index 88ce0fa..6717a12 100644 Binary files a/www/img/stationpedia/StructureStairwellBackPassthrough.png and b/www/img/stationpedia/StructureStairwellBackPassthrough.png differ diff --git a/www/img/stationpedia/StructureStairwellBackRight.png b/www/img/stationpedia/StructureStairwellBackRight.png index aba08ed..bb024d4 100644 Binary files a/www/img/stationpedia/StructureStairwellBackRight.png and b/www/img/stationpedia/StructureStairwellBackRight.png differ diff --git a/www/img/stationpedia/StructureStairwellFrontLeft.png b/www/img/stationpedia/StructureStairwellFrontLeft.png index b1b22a6..5a77b20 100644 Binary files a/www/img/stationpedia/StructureStairwellFrontLeft.png and b/www/img/stationpedia/StructureStairwellFrontLeft.png differ diff --git a/www/img/stationpedia/StructureStairwellFrontPassthrough.png b/www/img/stationpedia/StructureStairwellFrontPassthrough.png index 1f5bcdb..58c798b 100644 Binary files a/www/img/stationpedia/StructureStairwellFrontPassthrough.png and b/www/img/stationpedia/StructureStairwellFrontPassthrough.png differ diff --git a/www/img/stationpedia/StructureStairwellFrontRight.png b/www/img/stationpedia/StructureStairwellFrontRight.png index 2ba3cfa..8312813 100644 Binary files a/www/img/stationpedia/StructureStairwellFrontRight.png and b/www/img/stationpedia/StructureStairwellFrontRight.png differ diff --git a/www/img/stationpedia/StructureStairwellNoDoors.png b/www/img/stationpedia/StructureStairwellNoDoors.png index 92dbc9e..a82d0c4 100644 Binary files a/www/img/stationpedia/StructureStairwellNoDoors.png and b/www/img/stationpedia/StructureStairwellNoDoors.png differ diff --git a/www/img/stationpedia/StructureStirlingEngine.png b/www/img/stationpedia/StructureStirlingEngine.png index bf2f21e..3382633 100644 Binary files a/www/img/stationpedia/StructureStirlingEngine.png and b/www/img/stationpedia/StructureStirlingEngine.png differ diff --git a/www/img/stationpedia/StructureStorageLocker.png b/www/img/stationpedia/StructureStorageLocker.png index fec0273..be96814 100644 Binary files a/www/img/stationpedia/StructureStorageLocker.png and b/www/img/stationpedia/StructureStorageLocker.png differ diff --git a/www/img/stationpedia/StructureSuitStorage.png b/www/img/stationpedia/StructureSuitStorage.png index 01d8006..04869ba 100644 Binary files a/www/img/stationpedia/StructureSuitStorage.png and b/www/img/stationpedia/StructureSuitStorage.png differ diff --git a/www/img/stationpedia/StructureTankBig.png b/www/img/stationpedia/StructureTankBig.png index f8b7505..577b351 100644 Binary files a/www/img/stationpedia/StructureTankBig.png and b/www/img/stationpedia/StructureTankBig.png differ diff --git a/www/img/stationpedia/StructureTankBigInsulated.png b/www/img/stationpedia/StructureTankBigInsulated.png index 5742c2c..47ecfb3 100644 Binary files a/www/img/stationpedia/StructureTankBigInsulated.png and b/www/img/stationpedia/StructureTankBigInsulated.png differ diff --git a/www/img/stationpedia/StructureTankConnector.png b/www/img/stationpedia/StructureTankConnector.png index a03626e..ddad51e 100644 Binary files a/www/img/stationpedia/StructureTankConnector.png and b/www/img/stationpedia/StructureTankConnector.png differ diff --git a/www/img/stationpedia/StructureTankConnectorLiquid.png b/www/img/stationpedia/StructureTankConnectorLiquid.png index 13811c7..dd5e48d 100644 Binary files a/www/img/stationpedia/StructureTankConnectorLiquid.png and b/www/img/stationpedia/StructureTankConnectorLiquid.png differ diff --git a/www/img/stationpedia/StructureTankSmall.png b/www/img/stationpedia/StructureTankSmall.png index fae742b..7f82e03 100644 Binary files a/www/img/stationpedia/StructureTankSmall.png and b/www/img/stationpedia/StructureTankSmall.png differ diff --git a/www/img/stationpedia/StructureTankSmallAir.png b/www/img/stationpedia/StructureTankSmallAir.png index 71a28f4..458be04 100644 Binary files a/www/img/stationpedia/StructureTankSmallAir.png and b/www/img/stationpedia/StructureTankSmallAir.png differ diff --git a/www/img/stationpedia/StructureTankSmallFuel.png b/www/img/stationpedia/StructureTankSmallFuel.png index 98c1597..8520d9f 100644 Binary files a/www/img/stationpedia/StructureTankSmallFuel.png and b/www/img/stationpedia/StructureTankSmallFuel.png differ diff --git a/www/img/stationpedia/StructureTankSmallInsulated.png b/www/img/stationpedia/StructureTankSmallInsulated.png index 42fd4e4..5bfa446 100644 Binary files a/www/img/stationpedia/StructureTankSmallInsulated.png and b/www/img/stationpedia/StructureTankSmallInsulated.png differ diff --git a/www/img/stationpedia/StructureToolManufactory.png b/www/img/stationpedia/StructureToolManufactory.png index e394597..63058c6 100644 Binary files a/www/img/stationpedia/StructureToolManufactory.png and b/www/img/stationpedia/StructureToolManufactory.png differ diff --git a/www/img/stationpedia/StructureTorpedoRack.png b/www/img/stationpedia/StructureTorpedoRack.png index 596c69d..244f240 100644 Binary files a/www/img/stationpedia/StructureTorpedoRack.png and b/www/img/stationpedia/StructureTorpedoRack.png differ diff --git a/www/img/stationpedia/StructureTraderWaypoint.png b/www/img/stationpedia/StructureTraderWaypoint.png index 3cfefa2..4ed32aa 100644 Binary files a/www/img/stationpedia/StructureTraderWaypoint.png and b/www/img/stationpedia/StructureTraderWaypoint.png differ diff --git a/www/img/stationpedia/StructureTransformer.png b/www/img/stationpedia/StructureTransformer.png index 915323d..871cf85 100644 Binary files a/www/img/stationpedia/StructureTransformer.png and b/www/img/stationpedia/StructureTransformer.png differ diff --git a/www/img/stationpedia/StructureTransformerMedium.png b/www/img/stationpedia/StructureTransformerMedium.png index e24ce40..18ff29b 100644 Binary files a/www/img/stationpedia/StructureTransformerMedium.png and b/www/img/stationpedia/StructureTransformerMedium.png differ diff --git a/www/img/stationpedia/StructureTransformerMediumReversed.png b/www/img/stationpedia/StructureTransformerMediumReversed.png index 319fbad..acab88c 100644 Binary files a/www/img/stationpedia/StructureTransformerMediumReversed.png and b/www/img/stationpedia/StructureTransformerMediumReversed.png differ diff --git a/www/img/stationpedia/StructureTransformerSmall.png b/www/img/stationpedia/StructureTransformerSmall.png index 446a745..3a9cae2 100644 Binary files a/www/img/stationpedia/StructureTransformerSmall.png and b/www/img/stationpedia/StructureTransformerSmall.png differ diff --git a/www/img/stationpedia/StructureTransformerSmallReversed.png b/www/img/stationpedia/StructureTransformerSmallReversed.png index 446a745..3a9cae2 100644 Binary files a/www/img/stationpedia/StructureTransformerSmallReversed.png and b/www/img/stationpedia/StructureTransformerSmallReversed.png differ diff --git a/www/img/stationpedia/StructureTurbineGenerator.png b/www/img/stationpedia/StructureTurbineGenerator.png index 461d042..9511c1e 100644 Binary files a/www/img/stationpedia/StructureTurbineGenerator.png and b/www/img/stationpedia/StructureTurbineGenerator.png differ diff --git a/www/img/stationpedia/StructureTurboVolumePump.png b/www/img/stationpedia/StructureTurboVolumePump.png index e656c4c..a6961b0 100644 Binary files a/www/img/stationpedia/StructureTurboVolumePump.png and b/www/img/stationpedia/StructureTurboVolumePump.png differ diff --git a/www/img/stationpedia/StructureUnloader.png b/www/img/stationpedia/StructureUnloader.png index 2ab1164..a6cece0 100644 Binary files a/www/img/stationpedia/StructureUnloader.png and b/www/img/stationpedia/StructureUnloader.png differ diff --git a/www/img/stationpedia/StructureUprightWindTurbine.png b/www/img/stationpedia/StructureUprightWindTurbine.png index 9336aea..73afa83 100644 Binary files a/www/img/stationpedia/StructureUprightWindTurbine.png and b/www/img/stationpedia/StructureUprightWindTurbine.png differ diff --git a/www/img/stationpedia/StructureValve.png b/www/img/stationpedia/StructureValve.png index 724b6f2..1043752 100644 Binary files a/www/img/stationpedia/StructureValve.png and b/www/img/stationpedia/StructureValve.png differ diff --git a/www/img/stationpedia/StructureVendingMachine.png b/www/img/stationpedia/StructureVendingMachine.png index 36fb5cd..c1cc9b5 100644 Binary files a/www/img/stationpedia/StructureVendingMachine.png and b/www/img/stationpedia/StructureVendingMachine.png differ diff --git a/www/img/stationpedia/StructureVolumePump.png b/www/img/stationpedia/StructureVolumePump.png index eba204d..ee84659 100644 Binary files a/www/img/stationpedia/StructureVolumePump.png and b/www/img/stationpedia/StructureVolumePump.png differ diff --git a/www/img/stationpedia/StructureWallArch.png b/www/img/stationpedia/StructureWallArch.png index bdf2def..c5e7aa2 100644 Binary files a/www/img/stationpedia/StructureWallArch.png and b/www/img/stationpedia/StructureWallArch.png differ diff --git a/www/img/stationpedia/StructureWallArchArrow.png b/www/img/stationpedia/StructureWallArchArrow.png index 3b543f8..9bb7cd6 100644 Binary files a/www/img/stationpedia/StructureWallArchArrow.png and b/www/img/stationpedia/StructureWallArchArrow.png differ diff --git a/www/img/stationpedia/StructureWallArchCornerRound.png b/www/img/stationpedia/StructureWallArchCornerRound.png index bd5c0be..f668fe3 100644 Binary files a/www/img/stationpedia/StructureWallArchCornerRound.png and b/www/img/stationpedia/StructureWallArchCornerRound.png differ diff --git a/www/img/stationpedia/StructureWallArchCornerSquare.png b/www/img/stationpedia/StructureWallArchCornerSquare.png index f4426af..5cc3cbd 100644 Binary files a/www/img/stationpedia/StructureWallArchCornerSquare.png and b/www/img/stationpedia/StructureWallArchCornerSquare.png differ diff --git a/www/img/stationpedia/StructureWallArchCornerTriangle.png b/www/img/stationpedia/StructureWallArchCornerTriangle.png index 41ee561..1dcbd07 100644 Binary files a/www/img/stationpedia/StructureWallArchCornerTriangle.png and b/www/img/stationpedia/StructureWallArchCornerTriangle.png differ diff --git a/www/img/stationpedia/StructureWallArchPlating.png b/www/img/stationpedia/StructureWallArchPlating.png index 194059e..ea9f582 100644 Binary files a/www/img/stationpedia/StructureWallArchPlating.png and b/www/img/stationpedia/StructureWallArchPlating.png differ diff --git a/www/img/stationpedia/StructureWallArchTwoTone.png b/www/img/stationpedia/StructureWallArchTwoTone.png index 66b9248..fe9b9be 100644 Binary files a/www/img/stationpedia/StructureWallArchTwoTone.png and b/www/img/stationpedia/StructureWallArchTwoTone.png differ diff --git a/www/img/stationpedia/StructureWallCooler.png b/www/img/stationpedia/StructureWallCooler.png index 129e707..05ef774 100644 Binary files a/www/img/stationpedia/StructureWallCooler.png and b/www/img/stationpedia/StructureWallCooler.png differ diff --git a/www/img/stationpedia/StructureWallFlat.png b/www/img/stationpedia/StructureWallFlat.png index 11e6476..e11bf6f 100644 Binary files a/www/img/stationpedia/StructureWallFlat.png and b/www/img/stationpedia/StructureWallFlat.png differ diff --git a/www/img/stationpedia/StructureWallFlatCornerRound.png b/www/img/stationpedia/StructureWallFlatCornerRound.png index 89d6a7d..fad1613 100644 Binary files a/www/img/stationpedia/StructureWallFlatCornerRound.png and b/www/img/stationpedia/StructureWallFlatCornerRound.png differ diff --git a/www/img/stationpedia/StructureWallFlatCornerSquare.png b/www/img/stationpedia/StructureWallFlatCornerSquare.png index bca0038..9002264 100644 Binary files a/www/img/stationpedia/StructureWallFlatCornerSquare.png and b/www/img/stationpedia/StructureWallFlatCornerSquare.png differ diff --git a/www/img/stationpedia/StructureWallFlatCornerTriangle.png b/www/img/stationpedia/StructureWallFlatCornerTriangle.png index 5d575de..7943c25 100644 Binary files a/www/img/stationpedia/StructureWallFlatCornerTriangle.png and b/www/img/stationpedia/StructureWallFlatCornerTriangle.png differ diff --git a/www/img/stationpedia/StructureWallFlatCornerTriangleFlat.png b/www/img/stationpedia/StructureWallFlatCornerTriangleFlat.png index 40d1b45..a22c70b 100644 Binary files a/www/img/stationpedia/StructureWallFlatCornerTriangleFlat.png and b/www/img/stationpedia/StructureWallFlatCornerTriangleFlat.png differ diff --git a/www/img/stationpedia/StructureWallGeometryCorner.png b/www/img/stationpedia/StructureWallGeometryCorner.png index f3530fe..0ee362b 100644 Binary files a/www/img/stationpedia/StructureWallGeometryCorner.png and b/www/img/stationpedia/StructureWallGeometryCorner.png differ diff --git a/www/img/stationpedia/StructureWallGeometryStreight.png b/www/img/stationpedia/StructureWallGeometryStreight.png index d3d247f..18f8c36 100644 Binary files a/www/img/stationpedia/StructureWallGeometryStreight.png and b/www/img/stationpedia/StructureWallGeometryStreight.png differ diff --git a/www/img/stationpedia/StructureWallGeometryT.png b/www/img/stationpedia/StructureWallGeometryT.png index 863fe53..018c7b5 100644 Binary files a/www/img/stationpedia/StructureWallGeometryT.png and b/www/img/stationpedia/StructureWallGeometryT.png differ diff --git a/www/img/stationpedia/StructureWallGeometryTMirrored.png b/www/img/stationpedia/StructureWallGeometryTMirrored.png index bd11c5a..d732847 100644 Binary files a/www/img/stationpedia/StructureWallGeometryTMirrored.png and b/www/img/stationpedia/StructureWallGeometryTMirrored.png differ diff --git a/www/img/stationpedia/StructureWallHeater.png b/www/img/stationpedia/StructureWallHeater.png index f81e95e..f987cda 100644 Binary files a/www/img/stationpedia/StructureWallHeater.png and b/www/img/stationpedia/StructureWallHeater.png differ diff --git a/www/img/stationpedia/StructureWallIron.png b/www/img/stationpedia/StructureWallIron.png index a320121..e09af58 100644 Binary files a/www/img/stationpedia/StructureWallIron.png and b/www/img/stationpedia/StructureWallIron.png differ diff --git a/www/img/stationpedia/StructureWallIron02.png b/www/img/stationpedia/StructureWallIron02.png index 9f95344..f8250f7 100644 Binary files a/www/img/stationpedia/StructureWallIron02.png and b/www/img/stationpedia/StructureWallIron02.png differ diff --git a/www/img/stationpedia/StructureWallIron03.png b/www/img/stationpedia/StructureWallIron03.png index 74687f3..454d353 100644 Binary files a/www/img/stationpedia/StructureWallIron03.png and b/www/img/stationpedia/StructureWallIron03.png differ diff --git a/www/img/stationpedia/StructureWallIron04.png b/www/img/stationpedia/StructureWallIron04.png index 51981dc..dd46e72 100644 Binary files a/www/img/stationpedia/StructureWallIron04.png and b/www/img/stationpedia/StructureWallIron04.png differ diff --git a/www/img/stationpedia/StructureWallLargePanel.png b/www/img/stationpedia/StructureWallLargePanel.png index 18451af..82f8fa1 100644 Binary files a/www/img/stationpedia/StructureWallLargePanel.png and b/www/img/stationpedia/StructureWallLargePanel.png differ diff --git a/www/img/stationpedia/StructureWallLargePanelArrow.png b/www/img/stationpedia/StructureWallLargePanelArrow.png index 4f0f3ce..526ee4b 100644 Binary files a/www/img/stationpedia/StructureWallLargePanelArrow.png and b/www/img/stationpedia/StructureWallLargePanelArrow.png differ diff --git a/www/img/stationpedia/StructureWallLight.png b/www/img/stationpedia/StructureWallLight.png index ed4996e..7dfe93c 100644 Binary files a/www/img/stationpedia/StructureWallLight.png and b/www/img/stationpedia/StructureWallLight.png differ diff --git a/www/img/stationpedia/StructureWallLightBattery.png b/www/img/stationpedia/StructureWallLightBattery.png index 9de6c71..98963b2 100644 Binary files a/www/img/stationpedia/StructureWallLightBattery.png and b/www/img/stationpedia/StructureWallLightBattery.png differ diff --git a/www/img/stationpedia/StructureWallPaddedArch.png b/www/img/stationpedia/StructureWallPaddedArch.png index f96790c..501b1ca 100644 Binary files a/www/img/stationpedia/StructureWallPaddedArch.png and b/www/img/stationpedia/StructureWallPaddedArch.png differ diff --git a/www/img/stationpedia/StructureWallPaddedArchCorner.png b/www/img/stationpedia/StructureWallPaddedArchCorner.png index 0df130b..6ef781f 100644 Binary files a/www/img/stationpedia/StructureWallPaddedArchCorner.png and b/www/img/stationpedia/StructureWallPaddedArchCorner.png differ diff --git a/www/img/stationpedia/StructureWallPaddedArchLightFittingTop.png b/www/img/stationpedia/StructureWallPaddedArchLightFittingTop.png index d24d08e..c4985c4 100644 Binary files a/www/img/stationpedia/StructureWallPaddedArchLightFittingTop.png and b/www/img/stationpedia/StructureWallPaddedArchLightFittingTop.png differ diff --git a/www/img/stationpedia/StructureWallPaddedArchLightsFittings.png b/www/img/stationpedia/StructureWallPaddedArchLightsFittings.png index aee6424..04e8de8 100644 Binary files a/www/img/stationpedia/StructureWallPaddedArchLightsFittings.png and b/www/img/stationpedia/StructureWallPaddedArchLightsFittings.png differ diff --git a/www/img/stationpedia/StructureWallPaddedCorner.png b/www/img/stationpedia/StructureWallPaddedCorner.png index 1a345ba..06b5379 100644 Binary files a/www/img/stationpedia/StructureWallPaddedCorner.png and b/www/img/stationpedia/StructureWallPaddedCorner.png differ diff --git a/www/img/stationpedia/StructureWallPaddedCornerThin.png b/www/img/stationpedia/StructureWallPaddedCornerThin.png index cb1582d..0ff9e4d 100644 Binary files a/www/img/stationpedia/StructureWallPaddedCornerThin.png and b/www/img/stationpedia/StructureWallPaddedCornerThin.png differ diff --git a/www/img/stationpedia/StructureWallPaddedNoBorder.png b/www/img/stationpedia/StructureWallPaddedNoBorder.png index 0921311..507a372 100644 Binary files a/www/img/stationpedia/StructureWallPaddedNoBorder.png and b/www/img/stationpedia/StructureWallPaddedNoBorder.png differ diff --git a/www/img/stationpedia/StructureWallPaddedNoBorderCorner.png b/www/img/stationpedia/StructureWallPaddedNoBorderCorner.png index 81036cc..fec6010 100644 Binary files a/www/img/stationpedia/StructureWallPaddedNoBorderCorner.png and b/www/img/stationpedia/StructureWallPaddedNoBorderCorner.png differ diff --git a/www/img/stationpedia/StructureWallPaddedThinNoBorder.png b/www/img/stationpedia/StructureWallPaddedThinNoBorder.png index ed61c31..45eaceb 100644 Binary files a/www/img/stationpedia/StructureWallPaddedThinNoBorder.png and b/www/img/stationpedia/StructureWallPaddedThinNoBorder.png differ diff --git a/www/img/stationpedia/StructureWallPaddedThinNoBorderCorner.png b/www/img/stationpedia/StructureWallPaddedThinNoBorderCorner.png index 2ba33f3..8d5996b 100644 Binary files a/www/img/stationpedia/StructureWallPaddedThinNoBorderCorner.png and b/www/img/stationpedia/StructureWallPaddedThinNoBorderCorner.png differ diff --git a/www/img/stationpedia/StructureWallPaddedWindow.png b/www/img/stationpedia/StructureWallPaddedWindow.png index 032effb..484e8ca 100644 Binary files a/www/img/stationpedia/StructureWallPaddedWindow.png and b/www/img/stationpedia/StructureWallPaddedWindow.png differ diff --git a/www/img/stationpedia/StructureWallPaddedWindowThin.png b/www/img/stationpedia/StructureWallPaddedWindowThin.png index 9fa1767..ca3395c 100644 Binary files a/www/img/stationpedia/StructureWallPaddedWindowThin.png and b/www/img/stationpedia/StructureWallPaddedWindowThin.png differ diff --git a/www/img/stationpedia/StructureWallPadding.png b/www/img/stationpedia/StructureWallPadding.png index f3a8ca1..b97eb25 100644 Binary files a/www/img/stationpedia/StructureWallPadding.png and b/www/img/stationpedia/StructureWallPadding.png differ diff --git a/www/img/stationpedia/StructureWallPaddingArchVent.png b/www/img/stationpedia/StructureWallPaddingArchVent.png index fa29ca0..63c8933 100644 Binary files a/www/img/stationpedia/StructureWallPaddingArchVent.png and b/www/img/stationpedia/StructureWallPaddingArchVent.png differ diff --git a/www/img/stationpedia/StructureWallPaddingLightFitting.png b/www/img/stationpedia/StructureWallPaddingLightFitting.png index 15e586a..ed95670 100644 Binary files a/www/img/stationpedia/StructureWallPaddingLightFitting.png and b/www/img/stationpedia/StructureWallPaddingLightFitting.png differ diff --git a/www/img/stationpedia/StructureWallPaddingThin.png b/www/img/stationpedia/StructureWallPaddingThin.png index 3ed6b2d..e906084 100644 Binary files a/www/img/stationpedia/StructureWallPaddingThin.png and b/www/img/stationpedia/StructureWallPaddingThin.png differ diff --git a/www/img/stationpedia/StructureWallPlating.png b/www/img/stationpedia/StructureWallPlating.png index bdadb5e..4936165 100644 Binary files a/www/img/stationpedia/StructureWallPlating.png and b/www/img/stationpedia/StructureWallPlating.png differ diff --git a/www/img/stationpedia/StructureWallSmallPanelsAndHatch.png b/www/img/stationpedia/StructureWallSmallPanelsAndHatch.png index 94cb16a..b6b4842 100644 Binary files a/www/img/stationpedia/StructureWallSmallPanelsAndHatch.png and b/www/img/stationpedia/StructureWallSmallPanelsAndHatch.png differ diff --git a/www/img/stationpedia/StructureWallSmallPanelsArrow.png b/www/img/stationpedia/StructureWallSmallPanelsArrow.png index 5a1cfea..945ffbe 100644 Binary files a/www/img/stationpedia/StructureWallSmallPanelsArrow.png and b/www/img/stationpedia/StructureWallSmallPanelsArrow.png differ diff --git a/www/img/stationpedia/StructureWallSmallPanelsMonoChrome.png b/www/img/stationpedia/StructureWallSmallPanelsMonoChrome.png index 2af32ae..c0cf854 100644 Binary files a/www/img/stationpedia/StructureWallSmallPanelsMonoChrome.png and b/www/img/stationpedia/StructureWallSmallPanelsMonoChrome.png differ diff --git a/www/img/stationpedia/StructureWallSmallPanelsOpen.png b/www/img/stationpedia/StructureWallSmallPanelsOpen.png index cd24145..19acec9 100644 Binary files a/www/img/stationpedia/StructureWallSmallPanelsOpen.png and b/www/img/stationpedia/StructureWallSmallPanelsOpen.png differ diff --git a/www/img/stationpedia/StructureWallSmallPanelsTwoTone.png b/www/img/stationpedia/StructureWallSmallPanelsTwoTone.png index 22ed97b..b5a4066 100644 Binary files a/www/img/stationpedia/StructureWallSmallPanelsTwoTone.png and b/www/img/stationpedia/StructureWallSmallPanelsTwoTone.png differ diff --git a/www/img/stationpedia/StructureWallVent.png b/www/img/stationpedia/StructureWallVent.png index b20e4e7..57f477b 100644 Binary files a/www/img/stationpedia/StructureWallVent.png and b/www/img/stationpedia/StructureWallVent.png differ diff --git a/www/img/stationpedia/StructureWaterBottleFiller.png b/www/img/stationpedia/StructureWaterBottleFiller.png index 7db94b4..d6f384e 100644 Binary files a/www/img/stationpedia/StructureWaterBottleFiller.png and b/www/img/stationpedia/StructureWaterBottleFiller.png differ diff --git a/www/img/stationpedia/StructureWaterBottleFillerBottom.png b/www/img/stationpedia/StructureWaterBottleFillerBottom.png index 7db94b4..d6f384e 100644 Binary files a/www/img/stationpedia/StructureWaterBottleFillerBottom.png and b/www/img/stationpedia/StructureWaterBottleFillerBottom.png differ diff --git a/www/img/stationpedia/StructureWaterBottleFillerPowered.png b/www/img/stationpedia/StructureWaterBottleFillerPowered.png index 7db94b4..d6f384e 100644 Binary files a/www/img/stationpedia/StructureWaterBottleFillerPowered.png and b/www/img/stationpedia/StructureWaterBottleFillerPowered.png differ diff --git a/www/img/stationpedia/StructureWaterBottleFillerPoweredBottom.png b/www/img/stationpedia/StructureWaterBottleFillerPoweredBottom.png index 7db94b4..d6f384e 100644 Binary files a/www/img/stationpedia/StructureWaterBottleFillerPoweredBottom.png and b/www/img/stationpedia/StructureWaterBottleFillerPoweredBottom.png differ diff --git a/www/img/stationpedia/StructureWaterDigitalValve.png b/www/img/stationpedia/StructureWaterDigitalValve.png index c221767..e278391 100644 Binary files a/www/img/stationpedia/StructureWaterDigitalValve.png and b/www/img/stationpedia/StructureWaterDigitalValve.png differ diff --git a/www/img/stationpedia/StructureWaterPipeMeter.png b/www/img/stationpedia/StructureWaterPipeMeter.png index 78fbf62..7bd31d9 100644 Binary files a/www/img/stationpedia/StructureWaterPipeMeter.png and b/www/img/stationpedia/StructureWaterPipeMeter.png differ diff --git a/www/img/stationpedia/StructureWaterPurifier.png b/www/img/stationpedia/StructureWaterPurifier.png index 382a816..955f43b 100644 Binary files a/www/img/stationpedia/StructureWaterPurifier.png and b/www/img/stationpedia/StructureWaterPurifier.png differ diff --git a/www/img/stationpedia/StructureWaterWallCooler.png b/www/img/stationpedia/StructureWaterWallCooler.png index 8031f3d..9f34e3d 100644 Binary files a/www/img/stationpedia/StructureWaterWallCooler.png and b/www/img/stationpedia/StructureWaterWallCooler.png differ diff --git a/www/img/stationpedia/StructureWeatherStation.png b/www/img/stationpedia/StructureWeatherStation.png index 2e9cc78..55e400d 100644 Binary files a/www/img/stationpedia/StructureWeatherStation.png and b/www/img/stationpedia/StructureWeatherStation.png differ diff --git a/www/img/stationpedia/StructureWindTurbine.png b/www/img/stationpedia/StructureWindTurbine.png index a043f51..4702b1d 100644 Binary files a/www/img/stationpedia/StructureWindTurbine.png and b/www/img/stationpedia/StructureWindTurbine.png differ diff --git a/www/img/stationpedia/StructureWindowShutter.png b/www/img/stationpedia/StructureWindowShutter.png index 86258b3..256b423 100644 Binary files a/www/img/stationpedia/StructureWindowShutter.png and b/www/img/stationpedia/StructureWindowShutter.png differ diff --git a/www/img/stationpedia/ToolPrinterMod.png b/www/img/stationpedia/ToolPrinterMod.png index 31f7568..d6ea995 100644 Binary files a/www/img/stationpedia/ToolPrinterMod.png and b/www/img/stationpedia/ToolPrinterMod.png differ diff --git a/www/img/stationpedia/ToyLuna.png b/www/img/stationpedia/ToyLuna.png index c25e686..9aeca6e 100644 Binary files a/www/img/stationpedia/ToyLuna.png and b/www/img/stationpedia/ToyLuna.png differ diff --git a/www/img/stationpedia/UniformCommander.png b/www/img/stationpedia/UniformCommander.png index 7878b2f..90e742a 100644 Binary files a/www/img/stationpedia/UniformCommander.png and b/www/img/stationpedia/UniformCommander.png differ diff --git a/www/img/stationpedia/UniformMarine.png b/www/img/stationpedia/UniformMarine.png index 3d9b184..ebb7402 100644 Binary files a/www/img/stationpedia/UniformMarine.png and b/www/img/stationpedia/UniformMarine.png differ diff --git a/www/img/stationpedia/UniformOrangeJumpSuit.png b/www/img/stationpedia/UniformOrangeJumpSuit.png index 05ad01b..aa1b7aa 100644 Binary files a/www/img/stationpedia/UniformOrangeJumpSuit.png and b/www/img/stationpedia/UniformOrangeJumpSuit.png differ diff --git a/www/img/stationpedia/WeaponEnergy.png b/www/img/stationpedia/WeaponEnergy.png index b3ee44a..bed8652 100644 Binary files a/www/img/stationpedia/WeaponEnergy.png and b/www/img/stationpedia/WeaponEnergy.png differ diff --git a/www/img/stationpedia/WeaponPistolEnergy.png b/www/img/stationpedia/WeaponPistolEnergy.png index 53fe091..d30019b 100644 Binary files a/www/img/stationpedia/WeaponPistolEnergy.png and b/www/img/stationpedia/WeaponPistolEnergy.png differ diff --git a/www/img/stationpedia/WeaponRifleEnergy.png b/www/img/stationpedia/WeaponRifleEnergy.png index ca2b093..6814a0d 100644 Binary files a/www/img/stationpedia/WeaponRifleEnergy.png and b/www/img/stationpedia/WeaponRifleEnergy.png differ diff --git a/www/img/stationpedia/WeaponTorpedo.png b/www/img/stationpedia/WeaponTorpedo.png index 37b6bd1..5082f94 100644 Binary files a/www/img/stationpedia/WeaponTorpedo.png and b/www/img/stationpedia/WeaponTorpedo.png differ diff --git a/www/package.json b/www/package.json index c26bd72..02beaec 100644 --- a/www/package.json +++ b/www/package.json @@ -31,6 +31,11 @@ "autoprefixer": "^10.4.19", "copy-webpack-plugin": "^12.0.2", "css-loader": "^6.10.0", + "css-minimizer-webpack-plugin": "^6.0.0", + "esbuild": "^0.20.2", + "esbuild-loader": "^4.1.0", + "extract-loader": "^5.1.0", + "fork-ts-checker-webpack-plugin": "^9.0.2", "hello-wasm-pack": "^0.1.0", "html-webpack-plugin": "^5.6.0", "image-minimizer-webpack-plugin": "^4.0.0", @@ -39,19 +44,26 @@ "imagemin-jpegtran": "^7.0.0", "imagemin-optipng": "^8.0.0", "imagemin-svgo": "^10.0.1", + "lit-scss-loader": "^2.0.1", "mini-css-extract-plugin": "^2.8.1", "postcss-loader": "^8.1.1", "sass": "^1.72.0", "sass-loader": "^14.1.1", "style-loader": "^3.3.4", + "thread-loader": "^4.0.2", + "ts-lit-plugin": "^2.0.2", "ts-loader": "^9.5.1", "typescript": "^5.4.3", + "typescript-lit-html-plugin": "^0.9.0", "webpack": "^5.91.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.0.4" }, "dependencies": { + "@leeoniya/ufuzzy": "^1.0.14", + "@lit/context": "^1.1.0", "@popperjs/core": "^2.11.8", + "@shoelace-style/shoelace": "^2.15.0", "ace-builds": "^1.32.9", "ace-linters": "^1.1.2", "bootstrap": "^5.3.3", @@ -63,7 +75,6 @@ "jquery": "^3.7.1", "lit": "^3.1.2", "lzma-web": "^3.0.1", - "shoelace": "^0.1.1", "stream-browserify": "^3.0.0", "uuid": "^9.0.1", "vm-browserify": "^1.1.2" diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index 9a60f55..e4c2908 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -5,9 +5,18 @@ settings: excludeLinksFromLockfile: false dependencies: + '@leeoniya/ufuzzy': + specifier: ^1.0.14 + version: 1.0.14 + '@lit/context': + specifier: ^1.1.0 + version: 1.1.0 '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 + '@shoelace-style/shoelace': + specifier: ^2.15.0 + version: 2.15.0(@types/react@18.2.74) ace-builds: specifier: ^1.32.9 version: 1.32.9 @@ -41,9 +50,6 @@ dependencies: lzma-web: specifier: ^3.0.1 version: 3.0.1 - shoelace: - specifier: ^0.1.1 - version: 0.1.1 stream-browserify: specifier: ^3.0.0 version: 3.0.0 @@ -76,6 +82,21 @@ devDependencies: css-loader: specifier: ^6.10.0 version: 6.10.0(webpack@5.91.0) + css-minimizer-webpack-plugin: + specifier: ^6.0.0 + version: 6.0.0(esbuild@0.20.2)(webpack@5.91.0) + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + esbuild-loader: + specifier: ^4.1.0 + version: 4.1.0(webpack@5.91.0) + extract-loader: + specifier: ^5.1.0 + version: 5.1.0 + fork-ts-checker-webpack-plugin: + specifier: ^9.0.2 + version: 9.0.2(typescript@5.4.3)(webpack@5.91.0) hello-wasm-pack: specifier: ^0.1.0 version: 0.1.0 @@ -100,6 +121,9 @@ devDependencies: imagemin-svgo: specifier: ^10.0.1 version: 10.0.1 + lit-scss-loader: + specifier: ^2.0.1 + version: 2.0.1(webpack@5.91.0) mini-css-extract-plugin: specifier: ^2.8.1 version: 2.8.1(webpack@5.91.0) @@ -115,15 +139,24 @@ devDependencies: style-loader: specifier: ^3.3.4 version: 3.3.4(webpack@5.91.0) + thread-loader: + specifier: ^4.0.2 + version: 4.0.2(webpack@5.91.0) + ts-lit-plugin: + specifier: ^2.0.2 + version: 2.0.2 ts-loader: specifier: ^9.5.1 version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) typescript: specifier: ^5.4.3 version: 5.4.3 + typescript-lit-html-plugin: + specifier: ^0.9.0 + version: 0.9.0 webpack: specifier: ^5.91.0 - version: 5.91.0(webpack-cli@5.1.4) + version: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -156,11 +189,251 @@ packages: picocolors: 1.0.0 dev: true + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + + /@ctrl/tinycolor@4.0.3: + resolution: {integrity: sha512-e9nEVehVJwkymQpkGhdSNzLT2Lr9UTTby+JePq4Z2SxBbOQjY7pLgSouAaXvfaGQVSAaY0U4eJdwfSDmCbItcw==} + engines: {node: '>=14'} + dev: false + /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} dev: true + /@emmetio/extract-abbreviation@0.1.6: + resolution: {integrity: sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw==} + dev: true + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom@1.6.3: + resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -173,6 +446,25 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.2 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -210,6 +502,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@leeoniya/ufuzzy@1.0.14: + resolution: {integrity: sha512-/xF4baYuCQMo+L/fMSUrZnibcu0BquEGnbxfVPiZhs/NbJeKj4c/UmFpQzW9Us0w45ui/yYW3vyaqawhNYsTzA==} + dev: false + /@leichtgewicht/ip-codec@2.0.5: resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} dev: true @@ -218,6 +514,20 @@ packages: resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} dev: false + /@lit/context@1.1.0: + resolution: {integrity: sha512-fCyv4dsH05wCNm3AKbB+PdYbXGJd/XT8OOwo4hVmD4COq5wOWJlQreGAMDvmHZ7osqxuu06Y4nmP6ooXpN7ErA==} + dependencies: + '@lit/reactive-element': 2.0.4 + dev: false + + /@lit/react@1.0.4(@types/react@18.2.74): + resolution: {integrity: sha512-6HBvk3AwF46z17fTkZp5F7/EdCJW9xqqQgYKr3sQGgoEJv0TKV1voWydG4UQQA2RWkoD4SHjy08snSpzyoyd0w==} + peerDependencies: + '@types/react': 17 || 18 + dependencies: + '@types/react': 18.2.74 + dev: false + /@lit/reactive-element@2.0.4: resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} dependencies: @@ -261,6 +571,34 @@ packages: /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + /@shoelace-style/animations@1.1.0: + resolution: {integrity: sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==} + dev: false + + /@shoelace-style/localize@3.1.2: + resolution: {integrity: sha512-Hf45HeO+vdQblabpyZOTxJ4ZeZsmIUYXXPmoYrrR4OJ5OKxL+bhMz5mK8JXgl7HsoEowfz7+e248UGi861de9Q==} + dev: false + + /@shoelace-style/shoelace@2.15.0(@types/react@18.2.74): + resolution: {integrity: sha512-Lcg938Y8U2VsHqIYewzlt+H1rbrXC4GRSUkTJgXyF8/0YAOlI+srd5OSfIw+/LYmwLP2Peyh398Kae/6tg4PDA==} + engines: {node: '>=14.17.0'} + dependencies: + '@ctrl/tinycolor': 4.0.3 + '@floating-ui/dom': 1.6.3 + '@lit/react': 1.0.4(@types/react@18.2.74) + '@shoelace-style/animations': 1.1.0 + '@shoelace-style/localize': 3.1.2 + composed-offset-position: 0.0.4 + lit: 3.1.2 + qr-creator: 1.0.0 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@0.7.0: resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} engines: {node: '>=4'} @@ -370,6 +708,22 @@ packages: '@types/node': 20.12.2 dev: true + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -403,6 +757,10 @@ packages: undici-types: 5.26.5 dev: true + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + dev: false + /@types/qs@6.9.14: resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} dev: true @@ -411,6 +769,13 @@ packages: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} dev: true + /@types/react@18.2.74: + resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + dev: false + /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: @@ -462,10 +827,24 @@ packages: '@types/node': 20.12.2 dev: true + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + /@vscode/l10n@0.0.18: resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} dev: false + /@vscode/web-custom-data@0.4.9: + resolution: {integrity: sha512-QeCJFISE/RiTG0NECX6DYmVRPVb0jdyaUrhY0JqNMv9ruUYtYqxxQfv3PSjogb+zNghmwgXLSYuQKk6G+Xnaig==} + dev: true + /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: @@ -579,7 +958,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true @@ -590,7 +969,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true @@ -605,7 +984,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) dev: true @@ -715,10 +1094,6 @@ packages: hasBin: true dev: true - /agent-base@1.0.2: - resolution: {integrity: sha512-IrdRInle5l28T2DjBsOojXniN91mXYkt9piDyPbPEoA/X+f7kjd0qiIb18vZThIZCJdLk2Zq/ukXxZp8NkcFsw==} - dev: false - /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -829,10 +1204,6 @@ packages: file-type: 4.4.0 dev: true - /archy@0.0.2: - resolution: {integrity: sha512-8mMsetjXv4pCPTrMbPPO2cxy9vzJn2jwbd+ug+mf8fEUZG2E78Vo5erJMjrnGuLTKqOLtS5ulFHJSfg1yaCjxA==} - dev: false - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -879,29 +1250,532 @@ packages: postcss-value-parser: 4.2.0 dev: true + /babel-code-frame@6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: true + + /babel-core@6.26.3: + resolution: {integrity: sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==} + dependencies: + babel-code-frame: 6.26.0 + babel-generator: 6.26.1 + babel-helpers: 6.24.1 + babel-messages: 6.23.0 + babel-register: 6.26.0 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + convert-source-map: 1.9.0 + debug: 2.6.9 + json5: 0.5.1 + lodash: 4.17.21 + minimatch: 3.1.2 + path-is-absolute: 1.0.1 + private: 0.1.8 + slash: 1.0.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-generator@6.26.1: + resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==} + dependencies: + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + detect-indent: 4.0.0 + jsesc: 1.3.0 + lodash: 4.17.21 + source-map: 0.5.7 + trim-right: 1.0.1 + dev: true + + /babel-helper-builder-binary-assignment-operator-visitor@6.24.1: + resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==} + dependencies: + babel-helper-explode-assignable-expression: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-call-delegate@6.24.1: + resolution: {integrity: sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==} + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-define-map@6.26.0: + resolution: {integrity: sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-explode-assignable-expression@6.24.1: + resolution: {integrity: sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==} + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-function-name@6.24.1: + resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==} + dependencies: + babel-helper-get-function-arity: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-get-function-arity@6.24.1: + resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-helper-hoist-variables@6.24.1: + resolution: {integrity: sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-helper-optimise-call-expression@6.24.1: + resolution: {integrity: sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-helper-regex@6.26.0: + resolution: {integrity: sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + dev: true + + /babel-helper-remap-async-to-generator@6.24.1: + resolution: {integrity: sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helper-replace-supers@6.24.1: + resolution: {integrity: sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==} + dependencies: + babel-helper-optimise-call-expression: 6.24.1 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-helpers@6.24.1: + resolution: {integrity: sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==} + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-messages@6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-add-module-exports@1.0.4: + resolution: {integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==} + dev: true + + /babel-plugin-check-es2015-constants@6.22.0: + resolution: {integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-syntax-async-functions@6.13.0: + resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==} + dev: true + + /babel-plugin-syntax-exponentiation-operator@6.13.0: + resolution: {integrity: sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==} + dev: true + + /babel-plugin-syntax-trailing-function-commas@6.22.0: + resolution: {integrity: sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==} + dev: true + + /babel-plugin-transform-async-to-generator@6.24.1: + resolution: {integrity: sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==} + dependencies: + babel-helper-remap-async-to-generator: 6.24.1 + babel-plugin-syntax-async-functions: 6.13.0 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-arrow-functions@6.22.0: + resolution: {integrity: sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-block-scoped-functions@6.22.0: + resolution: {integrity: sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-block-scoping@6.26.0: + resolution: {integrity: sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==} + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-classes@6.24.1: + resolution: {integrity: sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==} + dependencies: + babel-helper-define-map: 6.26.0 + babel-helper-function-name: 6.24.1 + babel-helper-optimise-call-expression: 6.24.1 + babel-helper-replace-supers: 6.24.1 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-computed-properties@6.24.1: + resolution: {integrity: sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==} + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-destructuring@6.23.0: + resolution: {integrity: sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-duplicate-keys@6.24.1: + resolution: {integrity: sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-for-of@6.23.0: + resolution: {integrity: sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-function-name@6.24.1: + resolution: {integrity: sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-literals@6.22.0: + resolution: {integrity: sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-modules-amd@6.24.1: + resolution: {integrity: sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==} + dependencies: + babel-plugin-transform-es2015-modules-commonjs: 6.26.2 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-modules-commonjs@6.26.2: + resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==} + dependencies: + babel-plugin-transform-strict-mode: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-modules-systemjs@6.24.1: + resolution: {integrity: sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==} + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-modules-umd@6.24.1: + resolution: {integrity: sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==} + dependencies: + babel-plugin-transform-es2015-modules-amd: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-object-super@6.24.1: + resolution: {integrity: sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==} + dependencies: + babel-helper-replace-supers: 6.24.1 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-parameters@6.24.1: + resolution: {integrity: sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==} + dependencies: + babel-helper-call-delegate: 6.24.1 + babel-helper-get-function-arity: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-es2015-shorthand-properties@6.24.1: + resolution: {integrity: sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-spread@6.22.0: + resolution: {integrity: sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-sticky-regex@6.24.1: + resolution: {integrity: sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==} + dependencies: + babel-helper-regex: 6.26.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-template-literals@6.22.0: + resolution: {integrity: sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-typeof-symbol@6.23.0: + resolution: {integrity: sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==} + dependencies: + babel-runtime: 6.26.0 + dev: true + + /babel-plugin-transform-es2015-unicode-regex@6.24.1: + resolution: {integrity: sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==} + dependencies: + babel-helper-regex: 6.26.0 + babel-runtime: 6.26.0 + regexpu-core: 2.0.0 + dev: true + + /babel-plugin-transform-exponentiation-operator@6.24.1: + resolution: {integrity: sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==} + dependencies: + babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 + babel-plugin-syntax-exponentiation-operator: 6.13.0 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-regenerator@6.26.0: + resolution: {integrity: sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==} + dependencies: + regenerator-transform: 0.10.1 + dev: true + + /babel-plugin-transform-strict-mode@6.24.1: + resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: true + + /babel-preset-env@1.7.0: + resolution: {integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==} + dependencies: + babel-plugin-check-es2015-constants: 6.22.0 + babel-plugin-syntax-trailing-function-commas: 6.22.0 + babel-plugin-transform-async-to-generator: 6.24.1 + babel-plugin-transform-es2015-arrow-functions: 6.22.0 + babel-plugin-transform-es2015-block-scoped-functions: 6.22.0 + babel-plugin-transform-es2015-block-scoping: 6.26.0 + babel-plugin-transform-es2015-classes: 6.24.1 + babel-plugin-transform-es2015-computed-properties: 6.24.1 + babel-plugin-transform-es2015-destructuring: 6.23.0 + babel-plugin-transform-es2015-duplicate-keys: 6.24.1 + babel-plugin-transform-es2015-for-of: 6.23.0 + babel-plugin-transform-es2015-function-name: 6.24.1 + babel-plugin-transform-es2015-literals: 6.22.0 + babel-plugin-transform-es2015-modules-amd: 6.24.1 + babel-plugin-transform-es2015-modules-commonjs: 6.26.2 + babel-plugin-transform-es2015-modules-systemjs: 6.24.1 + babel-plugin-transform-es2015-modules-umd: 6.24.1 + babel-plugin-transform-es2015-object-super: 6.24.1 + babel-plugin-transform-es2015-parameters: 6.24.1 + babel-plugin-transform-es2015-shorthand-properties: 6.24.1 + babel-plugin-transform-es2015-spread: 6.22.0 + babel-plugin-transform-es2015-sticky-regex: 6.24.1 + babel-plugin-transform-es2015-template-literals: 6.22.0 + babel-plugin-transform-es2015-typeof-symbol: 6.23.0 + babel-plugin-transform-es2015-unicode-regex: 6.24.1 + babel-plugin-transform-exponentiation-operator: 6.24.1 + babel-plugin-transform-regenerator: 6.26.0 + browserslist: 3.2.8 + invariant: 2.2.4 + semver: 5.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-register@6.26.0: + resolution: {integrity: sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==} + dependencies: + babel-core: 6.26.3 + babel-runtime: 6.26.0 + core-js: 2.6.12 + home-or-tmp: 2.0.0 + lodash: 4.17.21 + mkdirp: 0.5.6 + source-map-support: 0.4.18 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: true + + /babel-template@6.26.0: + resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==} + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-traverse@6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9 + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-types@6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: true + + /babylon@6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - /batch@0.2.1: - resolution: {integrity: sha512-prVkjDV23cjQy3z89LUFWV96l+VtCvCNk2NBjDTXzssr6G+3RGdkuLfh3uKJ/GmzkE+jyBXBGmo2hn/J/W2Dcw==} - dev: false - - /batch@0.3.2: - resolution: {integrity: sha512-TIMqydnQ7j/svdKkp7oovtYKFwxSiLpU8E62A3cVbi9+T8KUlsJSAB7Cg+Z/4ioYGDF4anLfImvpZlUP46TPqQ==} - dev: false - /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /better-assert@0.1.0: - resolution: {integrity: sha512-U83vktWGmwjuSPMErA7ztkJHuq0q9sj1qyxggClobyxgl3YPoB+BlflxBnHkEKB64Oxy9tdI6aH9OSouvlNcgQ==} - dependencies: - callsite: 1.0.0 - dev: false + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true /bin-build@3.0.0: resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} @@ -1086,6 +1960,14 @@ packages: safe-buffer: 5.2.1 dev: false + /browserslist@3.2.8: + resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001603 + electron-to-chromium: 1.4.722 + dev: true + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1102,6 +1984,12 @@ packages: engines: {node: '>=16.20.1'} dev: false + /btoa@1.2.1: + resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} + engines: {node: '>= 0.4.0'} + hasBin: true + dev: true + /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} dev: true @@ -1183,10 +2071,6 @@ packages: set-function-length: 1.2.2 dev: true - /callsite@1.0.0: - resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - dev: false - /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1212,6 +2096,15 @@ packages: engines: {node: '>=0.10.0'} dev: true + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001603 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + /caniuse-lite@1.0.30001603: resolution: {integrity: sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==} dev: true @@ -1280,6 +2173,11 @@ packages: engines: {node: '>=6.0'} dev: true + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -1287,6 +2185,13 @@ packages: safe-buffer: 5.2.1 dev: false + /clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + /clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -1294,6 +2199,15 @@ packages: source-map: 0.6.1 dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -1328,32 +2242,19 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true - /commander@0.5.2: - resolution: {integrity: sha512-/IKo89++b1UhClEhWvKk00gKgw6iwvwD8TOPTqqN9AyvjgPCnf9OrjnDNY3dPDOj+K+OhN9SRjYQH0AfX0bROw==} - engines: {node: '>= 0.4.x'} - dev: false - - /commander@1.0.5: - resolution: {integrity: sha512-Iil6cZ1vitahfQSTrGO3L4v3dtvnfyGpKkXN+aJV9uR24JYxhM9bUfBLat65nU7cIXzOcnkjGtfdCuqaO1caIQ==} - engines: {node: '>= 0.6.x'} - dependencies: - keypress: 0.1.0 - dev: false - /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} dev: true - /commander@2.0.0: - resolution: {integrity: sha512-qebjpyeaA/nJ4w3EO2cV2++/zEkccPnjWogzA2rff+Lk8ILI75vULeTmyd4wPxWdKwtP3J+G39IXVZadh0UHyw==} - engines: {node: '>= 0.6.x'} - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -1373,76 +2274,8 @@ packages: engines: {node: ^12.20.0 || >=14} dev: false - /component-builder@0.10.0: - resolution: {integrity: sha512-J5dabmzaO8W3yIs3YNabTn8tU2bMwMVNith5/X8RFOxQZ1nJ+Gg1Cr8w63FRJkN/695/KRrnSXUodSDh7joDqg==} - dependencies: - batch: 0.2.1 - better-assert: 0.1.0 - component-require: 0.3.1 - cp: 0.1.1 - debug: 4.3.4 - mkdirp: 0.3.4 - string-to-js: 0.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /component-builder@0.8.3: - resolution: {integrity: sha512-fkElR5xGWJeyrgNGmiZV3quoO02I0+JbXLsGJwSngKNF6w6qzZA7y63ZVX0ZFfmr4X3+WLU9FQ9LcstK6UnuXg==} - dependencies: - batch: 0.2.1 - better-assert: 0.1.0 - component-require: 0.2.2 - debug: 4.3.4 - fs-extra: 0.6.4 - mkdirp: 0.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /component-require@0.2.2: - resolution: {integrity: sha512-Y9SwO0tVgVmEa3M20HmLKUJ824QwN9ZWEgSdBV1yFwG0UV0S8q2z0YOXM1RSZcae1b+0c5ol2RPK9tGBvpyx4g==} - dev: false - - /component-require@0.3.1: - resolution: {integrity: sha512-MpKgc0kIW93KPY2ew6Y0owtJiRtHJO6vJVtxst26FxNrtBdLHQ3k/rTbfSZSJ09F4QHUiKLh6fxZd3U2FZPHAg==} - dev: false - - /component-stylus@1.1.3(component-builder@0.8.3): - resolution: {integrity: sha512-of2le9CLJuNU00DicVdvmdAYdFfa83XwcIt1ZkO5PmKvR15ujiA7IgwGp7SjSU2n8GDV5XFln+nEJIFYS72+mQ==} - peerDependencies: - component-builder: ~0.8.1 - dependencies: - batch: 0.3.2 - component-builder: 0.8.3 - debug: 0.7.4 - nib: 0.9.2 - stylus: 0.32.1 - transitivePeerDependencies: - - supports-color - dev: false - - /component@0.18.0: - resolution: {integrity: sha512-lRWPQu2QdAiARAZUfX/lvP7CXnE/NZB0xTgfWO2S8m8essLEPSNAnMZAc5bHkh2eDj0rP51HID3h5r6weZOWgA==} - engines: {node: '>= 0.8.0'} - hasBin: true - dependencies: - archy: 0.0.2 - batch: 0.3.2 - commander: 1.0.5 - component-builder: 0.10.0 - debug: 4.3.4 - jog: 0.4.0 - mkdirp: 0.3.4 - netrc: 0.1.4 - open: 0.0.4 - rimraf: 2.1.4 - string-to-js: 0.0.1 - superagent: 0.15.3 - superagent-proxy: 0.0.1(superagent@0.15.3) - win-fork: 1.0.0 - transitivePeerDependencies: - - supports-color + /composed-offset-position@0.0.4: + resolution: {integrity: sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==} dev: false /compressible@2.0.18: @@ -1498,6 +2331,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true @@ -1507,10 +2344,6 @@ packages: engines: {node: '>= 0.6'} dev: true - /cookiejar@1.3.0: - resolution: {integrity: sha512-U+NgxxtwHIokuL04FqKEkqsaWBDtnCQo+wvYjUCtBA56Lcg8vpV3SGtBx+RAmw92SV3VT8PwsYcCFK/cC3Dw+A==} - dev: false - /copy-webpack-plugin@12.0.2(webpack@5.91.0): resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} engines: {node: '>= 18.12.0'} @@ -1523,12 +2356,34 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + + /core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true dev: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + /cosmiconfig@8.3.6(typescript@5.4.3): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.4.3 + dev: true + /cosmiconfig@9.0.0(typescript@5.4.3): resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -1545,10 +2400,6 @@ packages: typescript: 5.4.3 dev: true - /cp@0.1.1: - resolution: {integrity: sha512-ht9oKVsn1lAqV8FdUuSwBUQB8AG2cSyYbPim/mEwj+Dt3d21IRu2H5diDumMpKb77tsIAGM3eU484KvcTrPvHw==} - dev: false - /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -1621,6 +2472,15 @@ packages: randomfill: 1.0.4 dev: false + /css-declaration-sorter@7.2.0(postcss@8.4.38): + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.38 + dev: true + /css-loader@6.10.0(webpack@5.91.0): resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} engines: {node: '>= 12.13.0'} @@ -1641,7 +2501,42 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + + /css-minimizer-webpack-plugin@6.0.0(esbuild@0.20.2)(webpack@5.91.0): + resolution: {integrity: sha512-BLpR9CCDkKvhO3i0oZQgad6v9pCxUuhSc5RT6iUEy9M8hBXi4TJb5vqF2GQ2deqYHmRi3O6IR9hgAZQWg0EBwA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@parcel/css': '*' + '@swc/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + lightningcss: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + '@swc/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + cssnano: 6.1.2(postcss@8.4.38) + esbuild: 0.20.2 + jest-worker: 29.7.0 + postcss: 8.4.38 + schema-utils: 4.2.0 + serialize-javascript: 6.0.2 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /css-select@4.3.0: @@ -1654,6 +2549,16 @@ packages: nth-check: 2.1.1 dev: true + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: true + /css-tree@1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} @@ -1662,6 +2567,22 @@ packages: source-map: 0.6.1 dev: true + /css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.0 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + dev: true + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -1673,6 +2594,65 @@ packages: hasBin: true dev: true + /cssnano-preset-default@6.1.2(postcss@8.4.38): + resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + css-declaration-sorter: 7.2.0(postcss@8.4.38) + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-calc: 9.0.1(postcss@8.4.38) + postcss-colormin: 6.1.0(postcss@8.4.38) + postcss-convert-values: 6.1.0(postcss@8.4.38) + postcss-discard-comments: 6.0.2(postcss@8.4.38) + postcss-discard-duplicates: 6.0.3(postcss@8.4.38) + postcss-discard-empty: 6.0.3(postcss@8.4.38) + postcss-discard-overridden: 6.0.2(postcss@8.4.38) + postcss-merge-longhand: 6.0.5(postcss@8.4.38) + postcss-merge-rules: 6.1.1(postcss@8.4.38) + postcss-minify-font-values: 6.1.0(postcss@8.4.38) + postcss-minify-gradients: 6.0.3(postcss@8.4.38) + postcss-minify-params: 6.1.0(postcss@8.4.38) + postcss-minify-selectors: 6.0.4(postcss@8.4.38) + postcss-normalize-charset: 6.0.2(postcss@8.4.38) + postcss-normalize-display-values: 6.0.2(postcss@8.4.38) + postcss-normalize-positions: 6.0.2(postcss@8.4.38) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.38) + postcss-normalize-string: 6.0.2(postcss@8.4.38) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.38) + postcss-normalize-unicode: 6.1.0(postcss@8.4.38) + postcss-normalize-url: 6.0.2(postcss@8.4.38) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.38) + postcss-ordered-values: 6.0.2(postcss@8.4.38) + postcss-reduce-initial: 6.1.0(postcss@8.4.38) + postcss-reduce-transforms: 6.0.2(postcss@8.4.38) + postcss-svgo: 6.0.3(postcss@8.4.38) + postcss-unique-selectors: 6.0.4(postcss@8.4.38) + dev: true + + /cssnano-utils@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + + /cssnano@6.1.2(postcss@8.4.38): + resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.4.38) + lilconfig: 3.1.1 + postcss: 8.4.38 + dev: true + /csso@4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} engines: {node: '>=8.0.0'} @@ -1680,9 +2660,15 @@ packages: css-tree: 1.1.3 dev: true - /cssom@0.2.5: - resolution: {integrity: sha512-b9ecqKEfWrNcyzx5+1nmcfi80fPp8dVM8rlAh7fFK14PZbNjp++gRjyZTZfLJQa/Lw0qeCJho7WBIl0nw0v6HA==} - engines: {node: '>=0.2.0'} + /csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: false /currently-unhandled@0.4.1: @@ -1692,26 +2678,6 @@ packages: array-find-index: 1.0.2 dev: true - /debug@0.7.4: - resolution: {integrity: sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dev: false - - /debug@2.2.0: - resolution: {integrity: sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 0.7.1 - dev: false - /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -1721,6 +2687,7 @@ packages: optional: true dependencies: ms: 2.0.0 + dev: true /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -1732,6 +2699,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -1803,6 +2771,11 @@ packages: strip-dirs: 2.1.0 dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -1859,10 +2832,26 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true + /detect-indent@4.0.0: + resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==} + engines: {node: '>=0.10.0'} + dependencies: + repeating: 2.0.1 + dev: true + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true + /didyoumean2@4.1.0: + resolution: {integrity: sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig==} + engines: {node: '>=10.13'} + dependencies: + '@babel/runtime': 7.24.4 + leven: 3.1.0 + lodash.deburr: 4.1.0 + dev: true + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -1899,6 +2888,14 @@ packages: entities: 2.2.0 dev: true + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: true + /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true @@ -1910,6 +2907,13 @@ packages: domelementtype: 2.3.0 dev: true + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: @@ -1918,6 +2922,14 @@ packages: domhandler: 4.3.1 dev: true + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: @@ -1988,10 +3000,6 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: false - /emitter-component@1.0.0: - resolution: {integrity: sha512-GZrLdp4Z7OERecoYQYElVVqf6/gcbGUs8nvaE+nmu2dGy453lLgGyPLNX9DdSyojdMqI86fCT9XQqsWJymciEw==} - dev: false - /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -2000,6 +3008,11 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -2023,6 +3036,11 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2056,6 +3074,49 @@ packages: resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} dev: true + /esbuild-loader@4.1.0(webpack@5.91.0): + resolution: {integrity: sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==} + peerDependencies: + webpack: ^4.40.0 || ^5.0.0 + dependencies: + esbuild: 0.20.2 + get-tsconfig: 4.7.3 + loader-utils: 2.0.4 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + webpack-sources: 1.4.3 + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2095,6 +3156,11 @@ packages: engines: {node: '>=4.0'} dev: true + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -2229,13 +3295,20 @@ packages: sort-keys-length: 1.0.1 dev: true - /extend@1.2.1: - resolution: {integrity: sha512-2/JwIYRpMBDSjbQjUUppNSrmc719crhFaWIdT+TRSVA8gE+6HEobQWqJ6VkPt/H8twS7h/0WWs7veh8wmp98Ng==} - dev: false - - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false + /extract-loader@5.1.0: + resolution: {integrity: sha512-+U7sMNULTgm3d3G4hE+N7Rvr/Npsxa7M1jfgvhyYdJuOnyLepm9e2gGuriKw1mrX+mJnX4krPfKI4qyLJ5x94w==} + engines: {node: '>= 6.0.0'} + dependencies: + babel-core: 6.26.3 + babel-plugin-add-module-exports: 1.0.4 + babel-preset-env: 1.7.0 + babel-runtime: 6.26.0 + btoa: 1.2.1 + loader-utils: 1.4.2 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2417,11 +3490,28 @@ packages: signal-exit: 4.1.0 dev: true - /formidable@1.0.14: - resolution: {integrity: sha512-aOskFHEfYwkSKSzGui5jhQ+uyLo2NTwpzhndggz2YZHlv0HkAi+zG5ZEBCL3GTvqLyr/FzX9Mvx9DueCmu2HzQ==} - engines: {node: '>=0.8.0'} - deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' - dev: false + /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.4.3)(webpack@5.91.0): + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + dependencies: + '@babel/code-frame': 7.24.2 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.4.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.0 + tapable: 2.2.1 + typescript: 5.4.3 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -2448,14 +3538,18 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra@0.6.4: - resolution: {integrity: sha512-5rU898vl/Z948L+kkJedbmo/iltzmiF5bn/eEk0j/SgrPpI+Ydau9xlJPicV7Av2CHYBGz5LAlwTnBU80j1zPQ==} + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: - jsonfile: 1.0.1 - mkdirp: 0.3.4 - ncp: 0.4.2 - rimraf: 2.2.8 - dev: false + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2472,6 +3566,11 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -2520,6 +3619,12 @@ packages: engines: {node: '>=10'} dev: true + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /gifsicle@5.3.0: resolution: {integrity: sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==} engines: {node: '>=10'} @@ -2572,6 +3677,11 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /globals@9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} + engines: {node: '>=0.10.0'} + dev: true + /globby@12.2.0: resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2649,14 +3759,6 @@ packages: url-to-options: 1.0.1 dev: true - /graceful-fs@1.2.3: - resolution: {integrity: sha512-iiTUZ5vZ+2ZV+h71XAgwCSu6+NAizhFU3Yw8aC/hH5SQ3SnISqEqAek40imAFGtDcwJKNhXvSY+hzIolnLwcdQ==} - engines: {node: '>=0.4.0'} - deprecated: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js - requiresBuild: true - dev: false - optional: true - /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -2755,6 +3857,14 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: false + /home-or-tmp@2.0.0: + resolution: {integrity: sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==} + engines: {node: '>=0.10.0'} + dependencies: + os-homedir: 1.0.2 + os-tmpdir: 1.0.2 + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -2803,7 +3913,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /htmlhint@1.1.4: @@ -2864,16 +3974,6 @@ packages: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent@0.2.7: - resolution: {integrity: sha512-9W3grrlsrW2kRGNRbGkBNVFx4voQS1H1TxWR60MVHKQ+rw+kRtA9JXVGQiiDgYsp315Ex5HPk+3it4lBNyk4WA==} - dependencies: - agent-base: 1.0.2 - debug: 2.6.9 - extend: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: false - /http-proxy-middleware@2.0.6(@types/express@4.17.21): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -2904,16 +4004,6 @@ packages: - debug dev: true - /https-proxy-agent@0.3.6: - resolution: {integrity: sha512-ZuLafAeUu97abfbpAO9Cwjl3slsx6yZ7apTYBNVtMdoDhlVzUhxXO0qh+Xxqc5FAm7oq747k2jjbICYJdEYShg==} - dependencies: - agent-base: 1.0.2 - debug: 2.6.9 - extend: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: false - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2965,7 +4055,7 @@ packages: imagemin: 8.0.1 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /imagemin-gifsicle@7.0.0: @@ -3079,6 +4169,12 @@ packages: p-is-promise: 1.1.0 dev: true + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: true + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -3256,6 +4352,18 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.2 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -3265,23 +4373,21 @@ packages: supports-color: 8.1.1 dev: true + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 20.12.2 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true dev: true - /jog@0.4.0: - resolution: {integrity: sha512-yhLpqkWesxFD7uI5X9Jzzu5gOlnpuzcURpVxzuLePLCBizhWlKrHzR+Rln2Ror/WiU+nteey8DFINisKeC64wA==} - hasBin: true - dependencies: - commander: 0.5.2 - debug: 4.3.4 - ms: 0.1.0 - redis: 0.7.1 - transitivePeerDependencies: - - supports-color - dev: false - /jpegtran-bin@5.0.2: resolution: {integrity: sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==} engines: {node: '>=10'} @@ -3297,6 +4403,10 @@ packages: resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} dev: false + /js-tokens@3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3308,10 +4418,24 @@ packages: argparse: 2.0.1 dev: true + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@1.3.0: + resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} + hasBin: true + dev: true + /json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} dev: true + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -3324,23 +4448,45 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true + /json5@0.5.1: + resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==} + hasBin: true + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-parser@1.0.3: + resolution: {integrity: sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g==} + dev: true + /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: false - /jsonfile@1.0.1: - resolution: {integrity: sha512-KbsDJNRfRPF5v49tMNf9sqyyGqGLBcz1v5kZT01kG5ns5mQSltwxCKVmUzVKtEinkUnTDtSrp6ngWpV7Xw0ZlA==} - dev: false + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true /junk@3.1.0: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} engines: {node: '>=8'} dev: true - /keypress@0.1.0: - resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} - dev: false - /keyv@3.0.0: resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} dependencies: @@ -3359,10 +4505,35 @@ packages: shell-quote: 1.8.1 dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /lit-analyzer@2.0.3: + resolution: {integrity: sha512-XiAjnwVipNrKav7r3CSEZpWt+mwYxrhPRVC7h8knDmn/HWTzzWJvPe+mwBcL2brn4xhItAMzZhFC8tzzqHKmiQ==} + hasBin: true + dependencies: + '@vscode/web-custom-data': 0.4.9 + chalk: 2.4.2 + didyoumean2: 4.1.0 + fast-glob: 3.3.2 + parse5: 5.1.0 + ts-simple-type: 2.0.0-next.0 + vscode-css-languageservice: 4.3.0 + vscode-html-languageservice: 3.1.0 + web-component-analyzer: 2.0.0 + dev: true + /lit-element@4.0.4: resolution: {integrity: sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==} dependencies: @@ -3377,6 +4548,15 @@ packages: '@types/trusted-types': 2.0.7 dev: false + /lit-scss-loader@2.0.1(webpack@5.91.0): + resolution: {integrity: sha512-2PvmHuklfZx+OgudhU2zH4SrKyPdzQ9eOQsYoxGEga10dcAwmiMx/6UjOdI13i/BHxcElOqSmTkJ4hBxZrO7dQ==} + peerDependencies: + webpack: ^5.37.1 + dependencies: + clean-css: 4.2.4 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + /lit@3.1.2: resolution: {integrity: sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==} dependencies: @@ -3401,6 +4581,24 @@ packages: engines: {node: '>=6.11.5'} dev: true + /loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + dev: true + + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3408,6 +4606,18 @@ packages: p-locate: 4.1.0 dev: true + /lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} + dev: true + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3424,6 +4634,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + /loud-rejection@1.6.0: resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} engines: {node: '>=0.10.0'} @@ -3511,11 +4728,26 @@ packages: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.5 + dev: true + /memfs@4.8.1: resolution: {integrity: sha512-7q/AdPzf2WpwPlPL4v1kE2KsJsHl7EF4+hAeVzlyanr2+YnR21NVn9mDqo+7DEaKDRsQy8nvxPlKH4WqMtiO0w==} engines: {node: '>= 4.0.0'} @@ -3552,10 +4784,6 @@ packages: engines: {node: '>= 8'} dev: true - /methods@0.0.1: - resolution: {integrity: sha512-pB8oFfci/xcfUgM6DTxc7lbTKifPPgs3mZUOsEgaH+1TTWpmcmv3sHl+5sUHIj2X2W8aPYa2+nJealRHK+Lo6A==} - dev: false - /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -3589,10 +4817,6 @@ packages: mime-db: 1.52.0 dev: true - /mime@1.2.5: - resolution: {integrity: sha512-QfwTOA+zRHSZXxl9Y7ue5ifKDhU1prnh0dO67Vgcl7Lcx0+79vL9A1ln0qtVur8CFSdYq5Zhnw9DDZQgwDh8Ng==} - dev: false - /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -3623,7 +4847,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /minimalistic-assert@1.0.1: @@ -3654,29 +4878,20 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true - /mkdirp@0.3.4: - resolution: {integrity: sha512-sZObLj65ImOahHTaycVJF559muyAvv1hYyBQSfVfZq9ajpgY9Da+cRQzbXDfsKJTwUMUABRjBMDHieYqbHKx0g==} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - dev: false - - /mkdirp@0.3.5: - resolution: {integrity: sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - dev: false - - /ms@0.1.0: - resolution: {integrity: sha512-7uwYj3Xip4rOFpe5dDy+C25Ad0nAXkT4yAVMSpuh1UYR2Z7tAswSh4wb/HghRa533wofFUsvg54OQ90Mu1dCJg==} - dev: false - - /ms@0.7.1: - resolution: {integrity: sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==} - dev: false + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3696,11 +4911,6 @@ packages: hasBin: true dev: true - /ncp@0.4.2: - resolution: {integrity: sha512-PfGU8jYWdRl4FqJfCy0IzbkGyFHntfWygZg46nFk/dJD/XRrk2cj0SsKSX9n5u5gE0E0YfEpKWrEkfjnlZSTXA==} - hasBin: true - dev: false - /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -3710,18 +4920,6 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /netrc@0.1.4: - resolution: {integrity: sha512-ye8AIYWQcP9MvoM1i0Z2jV0qed31Z8EWXYnyGNkiUAd+Fo8J+7uy90xTV8g/oAbhtjkY7iZbNTizQaXdKUuwpQ==} - dev: false - - /nib@0.9.2: - resolution: {integrity: sha512-8e1pkjRQSF8+HlwPJUytj+JDsDBuGQh7hnKzpwh4qoIvEol8SuDsCqOgGRL91d4HvfeIiBT9iyDII2gmDmA1Uw==} - dependencies: - stylus: 0.31.0 - transitivePeerDependencies: - - supports-color - dev: false - /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true @@ -3733,6 +4931,10 @@ packages: tslib: 2.6.2 dev: true + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -3847,11 +5049,6 @@ packages: mimic-fn: 2.1.0 dev: true - /open@0.0.4: - resolution: {integrity: sha512-89TW6JswxDIlkXZ6gBscNCE7x+A3oN/J0OqGhiLNhFnWiphTVnXOMsi5ggo72DqpB5PzinTu9ZU508z7Af2TnA==} - engines: {node: '>= 0.6.0'} - dev: false - /open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} @@ -3879,6 +5076,16 @@ packages: arch: 2.2.0 dev: true + /os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + /p-cancelable@0.3.0: resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} engines: {node: '>=4'} @@ -4015,6 +5222,10 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse5@5.1.0: + resolution: {integrity: sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==} + dev: true + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4152,6 +5363,77 @@ packages: find-up: 4.1.0 dev: true + /postcss-calc@9.0.1(postcss@8.4.38): + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-duplicates@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-empty@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-overridden@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + /postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.3)(webpack@5.91.0): resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} @@ -4169,11 +5451,79 @@ packages: jiti: 1.21.0 postcss: 8.4.38 semver: 7.6.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true + /postcss-merge-longhand@6.0.5(postcss@8.4.38): + resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.4.38) + dev: true + + /postcss-merge-rules@6.1.1(postcss@8.4.38): + resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-minify-font-values@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@6.0.4(postcss@8.4.38): + resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.38): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} @@ -4215,6 +5565,128 @@ packages: postcss: 8.4.38 dev: true + /postcss-normalize-charset@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-normalize-display-values@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-ordered-values@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-reduce-initial@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.23.0 + caniuse-api: 3.0.0 + postcss: 8.4.38 + dev: true + + /postcss-reduce-transforms@6.0.2(postcss@8.4.38): + resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + /postcss-selector-parser@6.0.16: resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} @@ -4223,6 +5695,27 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-svgo@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + svgo: 3.2.0 + dev: true + + /postcss-unique-selectors@6.0.4(postcss@8.4.38): + resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -4253,6 +5746,11 @@ packages: renderkid: 3.0.0 dev: true + /private@0.1.8: + resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} + engines: {node: '>= 0.6'} + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -4295,8 +5793,8 @@ packages: engines: {node: '>=6'} dev: true - /qs@0.6.5: - resolution: {integrity: sha512-n7wA/f30O3SsOw2BVkGUDzjWMw7kXvQJWKtDdgfq5HJvDoad+Jbc6osN1AQ0Iain5plo9e7Cs5fE+xR+DVkPTw==} + /qr-creator@1.0.0: + resolution: {integrity: sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==} dev: false /qs@6.11.0: @@ -4319,14 +5817,6 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /rainbowsocks@0.1.3: - resolution: {integrity: sha512-/dfeXfgrecw1gCxmgfASMEYxAGLfztnXIwYoXTk4+I2qJY8oLmhKqlYZP7RTeuFPOQHQPCr0U0TbFG/k2fZgjg==} - dependencies: - debug: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: false - /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -4420,14 +5910,49 @@ packages: strip-indent: 1.0.1 dev: true - /redis@0.7.1: - resolution: {integrity: sha512-kG/XY5DBOBo7NngF4+Ylj5FSbcjxGPHayDfjaGPAXTzay0f4vo+zFd4YPkL+2ANAkxQJYDISfoDa/qjgnYphCw==} - dev: false + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regenerator-transform@0.10.1: + resolution: {integrity: sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + private: 0.1.8 + dev: true /regexp-to-ast@0.5.0: resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} dev: false + /regexpu-core@2.0.0: + resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==} + dependencies: + regenerate: 1.4.2 + regjsgen: 0.2.0 + regjsparser: 0.1.5 + dev: true + + /regjsgen@0.2.0: + resolution: {integrity: sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==} + dev: true + + /regjsparser@0.1.5: + resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -4455,6 +5980,11 @@ packages: engines: {node: '>= 10'} dev: true + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -4481,6 +6011,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4506,17 +6040,6 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf@2.1.4: - resolution: {integrity: sha512-tzwmX16YQhcFu0T/m0gHBcFKx6yQAg77Z6WWaQSJsUekXYa6yaAmHhrDdmFicgauX/er7GsdN+vRao3mBhA4kQ==} - optionalDependencies: - graceful-fs: 1.2.3 - dev: false - - /rimraf@2.2.8: - resolution: {integrity: sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==} - hasBin: true - dev: false - /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true @@ -4583,7 +6106,7 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.72.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /sass@1.72.0: @@ -4776,18 +6299,6 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /shoelace@0.1.1: - resolution: {integrity: sha512-opa30oBCIpii7AgvzDokkg7ASWNNH8kiT7OfWyIAT4nHjVAD1OxvjJBZQvgEgv0Y2GvGrurB9AFerVes/wWvbQ==} - hasBin: true - dependencies: - commander: 2.0.0 - component: 0.18.0 - component-builder: 0.8.3 - component-stylus: 1.1.3(component-builder@0.8.3) - transitivePeerDependencies: - - supports-color - dev: false - /showdown@2.1.0: resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} hasBin: true @@ -4814,6 +6325,11 @@ packages: engines: {node: '>=14'} dev: true + /slash@1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} + engines: {node: '>=0.10.0'} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4837,16 +6353,6 @@ packages: websocket-driver: 0.7.4 dev: true - /socks-proxy-agent@0.1.2: - resolution: {integrity: sha512-A6HCJpilsagbgSHmNbd6SdW5grzIn+UwJwughjFtSM9FldW44DJcdONeqVU74JNsJca5SDj7ParjW9aLKkNc4g==} - dependencies: - agent-base: 1.0.2 - extend: 1.2.1 - rainbowsocks: 0.1.3 - transitivePeerDependencies: - - supports-color - dev: false - /sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} @@ -4868,11 +6374,21 @@ packages: is-plain-obj: 1.1.0 dev: true + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true + /source-map-support@0.4.18: + resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==} + dependencies: + source-map: 0.5.7 + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -4880,6 +6396,11 @@ packages: source-map: 0.6.1 dev: true + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4974,10 +6495,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /string-to-js@0.0.1: - resolution: {integrity: sha512-6/1FZ26C+iPY1+cfbScGQ91Br3ZixQn13s/wiOwVBMHZr/OrzrOcAp64li6OeoM1WiG8MZIk9kJZE5Q+Vr8dDg==} - dev: false - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5088,58 +6605,19 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true - /stylus@0.31.0: - resolution: {integrity: sha512-BJ7iU9iUNOj/HlTuUF9SHh994ooIrOr/yYxzzQzpsweulT0HPyL4vtel9/QJcvq+xwy3ff7sf9Nv25kATr2qww==} - hasBin: true - dependencies: - cssom: 0.2.5 - debug: 4.3.4 - mkdirp: 0.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /stylus@0.32.1: - resolution: {integrity: sha512-QAUlDBLxjrNpf4dT991DOaXcxBKCJuICYAso29Q0RV9aI+REZIER4aRMfE5DIkV1meSiVccO27dA1Uhu+5gzEQ==} - hasBin: true - dependencies: - cssom: 0.2.5 - debug: 4.3.4 - mkdirp: 0.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /superagent-proxy@0.0.1(superagent@0.15.3): - resolution: {integrity: sha512-AaMG2jcK0qW8nPUvh1Y5p5yu5TygzKZ4MSHtvtA6VF3Pk0q6GNoyaeY/MxsIjye+SSD3LqbUIfbmGRM2QqCxbw==} + /stylehacks@6.1.1(postcss@8.4.38): + resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: - superagent: '0' + postcss: ^8.4.31 dependencies: - http-proxy-agent: 0.2.7 - https-proxy-agent: 0.3.6 - socks-proxy-agent: 0.1.2 - superagent: 0.15.3 - transitivePeerDependencies: - - supports-color - dev: false - - /superagent@0.15.3: - resolution: {integrity: sha512-PSYnen8vHPQeZNn25BPo146evL0EO2FgMCcHvC7xghasVZPuS/ubiI9A1w4O7gCf1IJ0sx6gdlu9Xeuussr6Uw==} - deprecated: Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at . - dependencies: - cookiejar: 1.3.0 - debug: 0.7.4 - emitter-component: 1.0.0 - formidable: 1.0.14 - methods: 0.0.1 - mime: 1.2.5 - qs: 0.6.5 - transitivePeerDependencies: - - supports-color - dev: false + browserslist: 4.23.0 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} @@ -5185,6 +6663,20 @@ packages: stable: 0.1.8 dev: true + /svgo@3.2.0: + resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.0.0 + dev: true + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -5216,7 +6708,7 @@ packages: uuid: 3.4.0 dev: true - /terser-webpack-plugin@5.3.10(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(esbuild@0.20.2)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -5233,11 +6725,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.20.2 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.30.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /terser@5.30.0: @@ -5251,6 +6744,19 @@ packages: source-map-support: 0.5.21 dev: true + /thread-loader@4.0.2(webpack@5.91.0): + resolution: {integrity: sha512-UOk/KBydsQjh4Ja5kocxDUzhv11KYptHN/h8gdSwo6/MBkYrWqQua6K2qwlpXnCXS9c/uLs8F/JF8rpveF0+fA==} + engines: {node: '>= 16.10.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + json-parse-better-errors: 1.0.2 + loader-runner: 4.3.0 + neo-async: 2.6.2 + schema-utils: 4.2.0 + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -5268,6 +6774,11 @@ packages: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} dev: true + /to-fast-properties@1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5305,6 +6816,18 @@ packages: escape-string-regexp: 1.0.5 dev: true + /trim-right@1.0.1: + resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} + engines: {node: '>=0.10.0'} + dev: true + + /ts-lit-plugin@2.0.2: + resolution: {integrity: sha512-DPXlVxhjWHxg8AyBLcfSYt2JXgpANV1ssxxwjY98o26gD8MzeiM68HFW9c2VeDd1CjoR3w7B/6/uKxwBQe+ioA==} + dependencies: + lit-analyzer: 2.0.3 + web-component-analyzer: 2.0.0 + dev: true + /ts-loader@9.5.1(typescript@5.4.3)(webpack@5.91.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} @@ -5318,7 +6841,11 @@ packages: semver: 7.6.0 source-map: 0.7.4 typescript: 5.4.3 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) + dev: true + + /ts-simple-type@2.0.0-next.0: + resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} dev: true /tslib@2.6.2: @@ -5339,6 +6866,35 @@ packages: mime-types: 2.1.35 dev: true + /typescript-lit-html-plugin@0.9.0: + resolution: {integrity: sha512-Ux2I1sPpt2akNbRZiBAND9oA8XNE2BuVmDwsb7rZshJ9T8/Na2rICE5Tnuj9dPHdFUATdOGjVEagn1/v8T4gCQ==} + dependencies: + typescript-styled-plugin: 0.13.0 + typescript-template-language-service-decorator: 2.3.2 + vscode-html-languageservice: 2.1.12 + vscode-languageserver-types: 3.17.5 + dev: true + + /typescript-styled-plugin@0.13.0: + resolution: {integrity: sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg==} + deprecated: Deprecated in favor of https://github.com/styled-components/typescript-styled-plugin + dependencies: + typescript-template-language-service-decorator: 2.3.2 + vscode-css-languageservice: 3.0.13 + vscode-emmet-helper: 1.2.11 + vscode-languageserver-types: 3.17.5 + dev: true + + /typescript-template-language-service-decorator@2.3.2: + resolution: {integrity: sha512-hN0zNkr5luPCeXTlXKxsfBPlkAzx86ZRM1vPdL7DbEqqWoeXSxplACy98NpKpLmXsdq7iePUzAXloCAoPKBV6A==} + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} @@ -5361,6 +6917,11 @@ packages: engines: {node: '>=18'} dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -5446,6 +7007,22 @@ packages: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: false + /vscode-css-languageservice@3.0.13: + resolution: {integrity: sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg==} + dependencies: + vscode-languageserver-types: 3.17.5 + vscode-nls: 4.1.2 + dev: true + + /vscode-css-languageservice@4.3.0: + resolution: {integrity: sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A==} + dependencies: + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.16.0-next.2 + vscode-nls: 4.1.2 + vscode-uri: 2.1.2 + dev: true + /vscode-css-languageservice@6.2.13: resolution: {integrity: sha512-2rKWXfH++Kxd9Z4QuEgd1IF7WmblWWU7DScuyf1YumoGLkY9DW6wF/OTlhOyO2rN63sWHX2dehIpKBbho4ZwvA==} dependencies: @@ -5455,6 +7032,32 @@ packages: vscode-uri: 3.0.8 dev: false + /vscode-emmet-helper@1.2.11: + resolution: {integrity: sha512-ms6/Z9TfNbjXS8r/KgbGxrNrFlu4RcIfVJxTZ2yFi0K4gn+Ka9X1+8cXvb5+5IOBGUrOsPjR0BuefdDkG+CKbQ==} + deprecated: This package has been renamed to @vscode/emmet-helper, please update to the new name + dependencies: + '@emmetio/extract-abbreviation': 0.1.6 + jsonc-parser: 1.0.3 + vscode-languageserver-types: 3.17.5 + dev: true + + /vscode-html-languageservice@2.1.12: + resolution: {integrity: sha512-mIb5VMXM5jI97HzCk2eadI1K//rCEZXte0wBqA7PGXsyJH4KTyJUaYk9MR+mbfpUl2vMi3HZw9GUOLGYLc6l5w==} + dependencies: + vscode-languageserver-types: 3.17.5 + vscode-nls: 4.1.2 + vscode-uri: 1.0.8 + dev: true + + /vscode-html-languageservice@3.1.0: + resolution: {integrity: sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg==} + dependencies: + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.16.0-next.2 + vscode-nls: 4.1.2 + vscode-uri: 2.1.2 + dev: true + /vscode-html-languageservice@5.2.0: resolution: {integrity: sha512-cdNMhyw57/SQzgUUGSIMQ66jikqEN6nBNyhx5YuOyj9310+eY9zw8Q0cXpiKzDX8aHYFewQEXRnigl06j/TVwQ==} dependencies: @@ -5493,11 +7096,25 @@ packages: /vscode-languageserver-textdocument@1.0.11: resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} - dev: false + + /vscode-languageserver-types@3.16.0-next.2: + resolution: {integrity: sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==} + dev: true /vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - dev: false + + /vscode-nls@4.1.2: + resolution: {integrity: sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==} + dev: true + + /vscode-uri@1.0.8: + resolution: {integrity: sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==} + dev: true + + /vscode-uri@2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + dev: true /vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} @@ -5524,6 +7141,16 @@ packages: minimalistic-assert: 1.0.1 dev: true + /web-component-analyzer@2.0.0: + resolution: {integrity: sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ==} + hasBin: true + dependencies: + fast-glob: 3.3.2 + ts-simple-type: 2.0.0-next.0 + typescript: 5.2.2 + yargs: 17.7.2 + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false @@ -5557,7 +7184,7 @@ packages: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) webpack-merge: 5.10.0 dev: true @@ -5577,7 +7204,7 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) dev: true /webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.91.0): @@ -5621,7 +7248,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-middleware: 7.2.0(webpack@5.91.0) ws: 8.16.0 @@ -5641,12 +7268,19 @@ packages: wildcard: 2.0.1 dev: true + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack@5.91.0(webpack-cli@5.1.4): + /webpack@5.91.0(esbuild@0.20.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -5677,7 +7311,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.91.0) watchpack: 2.4.1 webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-sources: 3.2.3 @@ -5727,10 +7361,6 @@ packages: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} dev: true - /win-fork@1.0.0: - resolution: {integrity: sha512-iFsJSmXuUuGQKyCMx5pWPj0/jdLbpPAofFqbXDB8vOu2KjBmx3e8WO5heBtn0HTZ/MYVSMebx18f48Oe4bRn8Q==} - dev: false - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5774,6 +7404,11 @@ packages: engines: {node: '>=0.4'} dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true @@ -5782,6 +7417,24 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: diff --git a/www/src/index.html b/www/src/index.html index 8538a9c..ddf8ff9 100644 --- a/www/src/index.html +++ b/www/src/index.html @@ -12,294 +12,36 @@ + + - - - - - - -

- - -
-
-
Editor Settings
- -
-
-
-
Editor Keyboard Bindings
-
- - - - - - - - - - -
-
-
-
Editor Cursor Style
-
- - - - - - - - - - -
-
-
- Font Size - - px -
-
-
- - -
-
-
-
- - - -
-
-
-
-
-
-
IC10 editor!
-
-
-
-
-
-
-
-
- - - -
-
-
- -
-
Instruction Pointer
-
-
-
-
-
Last Run Operations Count
-
-
-
-
-
Last State
-
-
- -
-
- -
- -
-
-
-
-
-
-
-
-

- -

-
-
-
- -
-
-
-
-
-

- -

-
-
-
-
-
-
-
-
-

- -

-
-
-
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - - -
-
-
Devices
- -
-
-
-
-
+ diff --git a/www/src/js/editor/ace.js b/www/src/js/editor/ace.js deleted file mode 100644 index 9a2885e..0000000 --- a/www/src/js/editor/ace.js +++ /dev/null @@ -1,43 +0,0 @@ -import * as ace from "ace-code" - -// make sure Ace can load through webpack -// trimmed down version of https://github.com/ajaxorg/ace-builds/blob/master/esm-resolver.js but for ace-code -ace.config.setModuleLoader("ace/theme/one_dark", () => import("ace-code/src/theme/one_dark")); -ace.config.setModuleLoader("ace/theme/textmate", () => import("ace-code/src/theme/textmate")); - -ace.config.setModuleLoader('ace/ext/beautify', () => import('ace-code/src/ext/beautify.js')); -ace.config.setModuleLoader('ace/ext/code_lens', () => import('ace-code/src/ext/code_lens.js')); -ace.config.setModuleLoader('ace/ext/command_bar', () => import('ace-code/src/ext/command_bar.js')); -ace.config.setModuleLoader('ace/ext/elastic_tabstops_lite', () => import('ace-code/src/ext/elastic_tabstops_lite.js')); -ace.config.setModuleLoader('ace/ext/emmet', () => import('ace-code/src/ext/emmet.js')); -ace.config.setModuleLoader('ace/ext/error_marker', () => import('ace-code/src/ext/error_marker.js')); -ace.config.setModuleLoader('ace/ext/hardwrap', () => import('ace-code/src/ext/hardwrap.js')); -ace.config.setModuleLoader('ace/ext/inline_autocomplete', () => import('ace-code/src/ext/inline_autocomplete.js')); -ace.config.setModuleLoader('ace/ext/keyboard_menu', () => import('ace-code/src/ext/keybinding_menu.js')); -ace.config.setModuleLoader('ace/ext/language_tools', () => import('ace-code/src/ext/language_tools.js')); -ace.config.setModuleLoader('ace/ext/linking', () => import('ace-code/src/ext/linking.js')); -ace.config.setModuleLoader('ace/ext/modelist', () => import('ace-code/src/ext/modelist.js')); -ace.config.setModuleLoader('ace/ext/options', () => import('ace-code/src/ext/options.js')); -// ace.config.setModuleLoader('ace/ext/prompt', () => import('ace-code/src/ext/prompt.js')); -ace.config.setModuleLoader('ace/ext/prompt', () => import('./prompt_patch')); -ace.config.setModuleLoader('ace/ext/rtl', () => import('ace-code/src/ext/rtl.js')); -ace.config.setModuleLoader('ace/ext/searchbox', () => import('ace-code/src/ext/searchbox.js')); -// ace.config.setModuleLoader('ace/ext/settings_menu', () => import('ace-code/src/ext/settings_menu.js')); -ace.config.setModuleLoader('ace/ext/simple_tokenizer', () => import('ace-code/src/ext/simple_tokenizer.js')); -ace.config.setModuleLoader('ace/ext/spellcheck', () => import('ace-code/src/ext/spellcheck.js')); -ace.config.setModuleLoader('ace/ext/split', () => import('ace-code/src/ext/split.js')); -ace.config.setModuleLoader('ace/ext/static_highlight', () => import('ace-code/src/ext/static_highlight.js')); -ace.config.setModuleLoader('ace/ext/statusbar', () => import('ace-code/src/ext/statusbar.js')); -ace.config.setModuleLoader('ace/ext/textarea', () => import('ace-code/src/ext/textarea.js')); -ace.config.setModuleLoader('ace/ext/themelist', () => import('ace-code/src/ext/themelist.js')); -ace.config.setModuleLoader('ace/ext/whitespace', () => import('ace-code/src/ext/whitespace.js')); -ace.config.setModuleLoader('ace/keyboard/emacs', () => import('ace-code/src/keyboard/emacs.js')); -ace.config.setModuleLoader('ace/keyboard/sublime', () => import('ace-code/src/keyboard/sublime.js')); -ace.config.setModuleLoader('ace/keyboard/vim', () => import('ace-code/src/keyboard/vim.js')); -ace.config.setModuleLoader('ace/keyboard/vscode', () => import('ace-code/src/keyboard/vscode.js')); - -ace.config.setModuleLoader('ace/range', () => import('ace-code/src/range')); - -console.log("ace module loaders patched"); - -export { ace }; diff --git a/www/src/js/editor/index.ts b/www/src/js/editor/index.ts deleted file mode 100644 index 5327f83..0000000 --- a/www/src/js/editor/index.ts +++ /dev/null @@ -1,226 +0,0 @@ -// import { ace } from "./ace.js" -import ace from "ace-builds"; -import "ace-builds/esm-resolver"; - -// patch prompt ext -ace.config.setModuleLoader('ace/ext/prompt', () => import('./prompt_patch')); -ace.config.setDefaultValue("session", "theme", "ace/theme/one_dark"); - - -import "ace-builds/src-noconflict/ext-language_tools"; -ace.require("ace/ext/language_tools"); - -import "./ic10_mode"; -import { AceLanguageClient } from "ace-linters/build/ace-language-client"; -import { IC10EditorUI } from './ui'; -import { Range } from 'ace-builds'; - -import { App } from "../index"; -import { Session } from "../session"; - -// import { Mode as TextMode } from 'ace-code/src/mode/text'; -// to make sure language tools are loaded -ace.config.loadModule("ace/ext/language_tools"); - -import { Mode as TextMode } from "ace-builds/src-noconflict/mode-text"; - - -async function setupLspWorker() { - // Create a web worker - let worker = new Worker(new URL('./lspWorker.ts', import.meta.url)); - - const loaded = (w: Worker) => - new Promise(r => w.addEventListener("message", r, { once: true })); - await Promise.all([loaded(worker)]); - - // Register the editor with the language provider - return worker; -} - -declare global { - interface Window { Editor: IC10Editor } -} - -class IC10Editor { - mode: string; - settings: { keyboard: string; cursor: string; fontSize: number; relativeLineNumbers: boolean; }; - aceEditor: ace.Ace.Editor; - sessions: Map; - active_session: number; - active_line_markers: Map; - languageProvider: null | AceLanguageClient; - ui: IC10EditorUI; - constructor(session_id: number) { - window.Editor = this; - this.mode = "ace/mode/ic10"; - - this.settings = { - keyboard: "ace", - cursor: "ace", - fontSize: 16, - relativeLineNumbers: false, - }; - - this.aceEditor = ace.edit('editor', { - mode: this.mode, - enableBasicAutocompletion: true, - enableLiveAutocompletion: true, - enableSnippets: true, - theme: "ace/theme/one_dark", - fontSize: 16, - customScrollbar: false, - firstLineNumber: 0, - printMarginColumn: 52, - placeholder: "Your code goes here ...", - }); - - this.sessions = new Map(); - this.sessions.set(session_id, this.aceEditor.getSession()); - this.active_session = session_id; - this.bindSession(session_id, this.sessions.get(session_id)); - this.active_line_markers = new Map(); - this.active_line_markers.set(session_id, null); - - this.languageProvider = null; - - this.ui = new IC10EditorUI(this); - - const that = this; - - App.session.onLoad((session: Session ) => { - const updated_ids = []; - for (const [id, _] of session.programs) { - updated_ids.push(id); - that.createOrSetSession(id, session.programs.get(id)); - } - that.activateSession(that.active_session); - for (const [id, _] of that.sessions) { - if (!updated_ids.includes(id)) { - that.destroySession(id); - } - } - - }); - App.session.loadFromFragment(); - - App.session.onActiveLine((session: Session) => { - for (const id of session.programs.keys()) { - const active_line = session.getActiveLine(id); - if (typeof active_line !== "undefined") { - const marker = that.active_line_markers.get(id); - if (marker) { - that.sessions.get(id).removeMarker(marker); - that.active_line_markers.set(id, null); - } - const session = that.sessions.get(id); - if (session) { - that.active_line_markers.set(id, session.addMarker(new Range(active_line, 0, active_line, 1), "vm_ic_active_line", "fullLine", true)); - if (that.active_session == id) { - // editor.resize(true); - // TODO: Scroll to line if vm was stepped - //that.aceEditor.scrollToLine(active_line, true, true, ()=>{}) - } - } - } - } - }) - - } - - createOrSetSession(session_id: number, content: any) { - if (!this.sessions.hasOwnProperty(session_id)) { - this.newSession(session_id); - } - this.sessions.get(session_id).setValue(content); - } - - newSession(session_id: number) { - if (this.sessions.hasOwnProperty(session_id)) { - return false; - } - const session = ace.createEditSession("", this.mode as any); - session.setOptions({ - firstLineNumber: 0, - }) - this.sessions.set(session_id, session); - this.bindSession(session_id, session); - } - - setupLsp(lsp_worker: Worker) { - const serverData = { - module: () => import("ace-linters/build/language-client"), - modes: "ic10", - type: "webworker", - worker: lsp_worker, - }; - // Create a language provider for web worker - this.languageProvider = AceLanguageClient.for(serverData as any); - (this.languageProvider as any).registerEditor(this.aceEditor); - - // for (const session_id of this.sessions.keys()) { - // let options = {}; - // (this.languageProvider as any).setSessionOptions(this.sessions.get(session_id), options); - // } - - } - - activateSession(session_id: number) { - if (!this.sessions.get(session_id)) { - return false; - } - this.aceEditor.setSession(this.sessions.get(session_id)); - this.active_session = session_id; - return true; - } - - loadEditorSettings() { - const saved_settings = window.localStorage.getItem("editorSettings"); - if (saved_settings !== null && saved_settings.length > 0) { - try { - const saved = JSON.parse(saved_settings); - const temp = Object.assign({}, this.settings, saved); - Object.assign(this.settings, temp); - } catch (e) { - console.log("error loading editor settings", e); - } - } - } - - saveEditorSettings() { - const toSave = JSON.stringify(this.settings); - window.localStorage.setItem("editorSettings", toSave); - } - - destroySession(session_id: number) { - if (!this.sessions.hasOwnProperty(session_id)) { - return false; - } - if (!(Object.keys(this.sessions).length > 1)) { - return false; - } - const session = this.sessions.get(session_id); - this.sessions.delete(session_id); - if (this.active_session = session_id) { - this.activateSession(this.sessions.entries().next().value); - } - session.destroy(); - return true; - } - - bindSession(session_id: number, session: ace.Ace.EditSession) { - session.on('change', () => { - var val = session.getValue(); - window.App.session.setProgramCode(session_id, val); - }); - } -} - - - - - - - - - -export { IC10Editor, setupLspWorker }; diff --git a/www/src/js/editor/lspWorker.ts b/www/src/js/editor/lspWorker.ts deleted file mode 100644 index 60afa33..0000000 --- a/www/src/js/editor/lspWorker.ts +++ /dev/null @@ -1,219 +0,0 @@ -import { ServerConfig, serve } from "ic10lsp_wasm"; - -export const encoder = new TextEncoder(); -export const decoder = new TextDecoder(); - -export default class Bytes { - static encode(input: string) { - return encoder.encode(input); - } - - static decode(input: Uint8Array) { - return decoder.decode(input); - } - - static append( - constructor: Uint8ArrayConstructor, - ...arrays: Uint8Array[] - ) { - let totalLength = 0; - for (const arr of arrays) { - totalLength += arr.length; - } - const result = new constructor(totalLength); - let offset = 0; - for (const arr of arrays) { - result.set(arr, offset); - offset += arr.length; - } - return result; - } -} - -export class AsyncStreamQueue implements AsyncIterator { - - promises: Promise[] = []; - resolvers: Promise[] = []; - observers: any = []; - - closed = false; - tag = ""; - stream: WritableStream; - - static __add(promises: any[], resolvers: any[]) { - promises.push(new Promise((resolve) => { - resolvers.push(resolve); - })) - } - - static __enqueue(closed: boolean, promises: any[], resolvers: any[], item: any) { - if (!closed) { - if (!resolvers.length) AsyncStreamQueue.__add(promises, resolvers); - const resolve = resolvers.shift(); - resolve(item); - } - } - - constructor(tag: string) { - this.tag = tag; - const closed = this.closed; - // invariant: at least one of the arrays is empty - const promises = this.promises; - const resolvers = this.resolvers; - this.stream = new WritableStream({ - write(item) { - AsyncStreamQueue.__enqueue(closed, promises, resolvers, item) - - } - }) - } - _add() { - return AsyncStreamQueue.__add(this.promises, this.resolvers); - } - - enqueue(item: Uint8Array) { - return AsyncStreamQueue.__enqueue(this.closed, this.promises, this.resolvers, item); - } - - dequeue() { - if (!this.promises.length) this._add(); - const item = this.promises.shift(); - return item; - } - - // now some utilities: - isEmpty() { // there are no values available - return !this.promises.length; // this.length <= 0 - } - - isBlocked() { // it's waiting for values - return !!this.resolvers.length; // this.length < 0 - } - - get length() { - return this.promises.length - this.resolvers.length; - } - - /* return() { - return new Promise(() => { }) - } - - throw(err: any) { - return new Promise((_resolve, reject) => { - reject(err); - }) - } */ - - async next(): Promise> { - const done = false; - // console.log(`AsyncStream(${this.tag}) waiting for message`) - const value = await this.dequeue(); - // console.log(`AsyncStream(${this.tag}) got message`, decoder.decode(value)) - return { done, value }; - } - - [Symbol.asyncIterator]() { - return this; - } - - get locked() { - return this.stream.locked; - } - - abort(reason: any) { - return this.stream.abort(reason); - } - - close() { - return this.stream.close(); - } - - getWriter() { - return this.stream.getWriter(); - } - -} -let clientMsgStream = new AsyncStreamQueue("client"); -let serverMsgStream = new AsyncStreamQueue("server"); - -async function start() { - let config = new ServerConfig(clientMsgStream, serverMsgStream); - await serve(config); -} - -function fixup(data: { hasOwnProperty: (arg0: string) => any; params: { hasOwnProperty: (arg0: string) => any; rootUri: string; textDocument: { hasOwnProperty: (arg0: string) => any; uri: string; }; }; }) { - if (data.hasOwnProperty("params") && data.params.hasOwnProperty("rootUri") && data.params.rootUri === "") { - data.params.rootUri = null - } - if (data.hasOwnProperty("params") && data.params.hasOwnProperty("textDocument")) { - if (data.params.textDocument.hasOwnProperty("uri")) { - const match = data.params.textDocument.uri.match(/^file:\/\/\/(.*)/); - if (null == match) { - data.params.textDocument.uri = `file:///${data.params.textDocument.uri}`; - } - } - data.params.rootUri = null - } - return data -} - -function sendClient(data: any) { - data = fixup(data); - const data_j = JSON.stringify(data); - const msg = `Content-Length: ${data_j.length}\r\n\r\n${data_j}` - clientMsgStream.enqueue(encoder.encode(msg)); -} - -async function listen() { - let contentLength = null; - let buffer = new Uint8Array(); - console.log("Worker: listening for lsp messages..."); - for await (const bytes of serverMsgStream) { - buffer = Bytes.append(Uint8Array, buffer, bytes); - - // check if the content length is known - if (null == contentLength) { - // if not, try to match the prefixed headers - const match = Bytes.decode(buffer).match(/^Content-Length:\s*(\d+)\s*/); - if (null == match) continue; - - // try to parse the content-length from the headers - const length = parseInt(match[1]); - if (isNaN(length)) throw new Error("invalid content length"); - - // slice the headers since we now have the content length - buffer = buffer.slice(match[0].length); - - // set the content length - contentLength = length; - } - - // if the buffer doesn't contain a full message; await another iteration - if (buffer.length < contentLength) continue; - - // decode buffer to a string - const delimited = Bytes.decode(buffer); - - // reset the buffer - buffer = buffer.slice(contentLength); - // reset the contentLength - contentLength = null; - - const message = JSON.parse(delimited); - console.log("Lsp Message:", message); - postMessage(message) - } - console.log("Worker: lsp message queue done?"); -} - -listen(); - -postMessage("ready"); - -onmessage = function (e) { - console.log("Client Message:", e.data); - sendClient(e.data) -} - -console.log("Starting LSP..."); -start(); diff --git a/www/src/js/editor/ui.ts b/www/src/js/editor/ui.ts deleted file mode 100644 index 4968470..0000000 --- a/www/src/js/editor/ui.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { IC10Editor } from "."; -import * as ace from "ace-builds"; -import { Offcanvas } from 'bootstrap'; - -class IC10EditorUI { - ic10editor: IC10Editor; - - constructor(ic10editor: IC10Editor) { - - const that = this; - - that.ic10editor = ic10editor; - - that.ic10editor.aceEditor.commands.addCommand({ - name: "showSettingsMenu", - description: "Show settings menu", - bindKey: { win: "Ctrl-,", mac: "Command-," }, - exec: (_editor: ace.Ace.Editor) => { - const offCanvas = new Offcanvas(document.getElementById("editorSettings")); - offCanvas.toggle(); - } - } as any); - - ace.config.loadModule("ace/ext/keyboard_menu", function (module) { - console.log("keybinding_menu loaded"); - module.init(that.ic10editor.aceEditor); - }); - - that.ic10editor.loadEditorSettings(); - that.displayEditorSettings(); - that.updateEditorSettings(); - that.reCalcEditorSize(); - window.addEventListener('resize', (e) => { that.reCalcEditorSize(); }); - - document.getElementsByName("editorKeybindRadio").forEach((el) => { - el.addEventListener('change', (e) => { - that.ic10editor.settings.keyboard = (e.target as any).value; - that.ic10editor.saveEditorSettings(); - that.updateEditorSettings(); - }); - }); - - document.getElementsByName("editorCursorRadio").forEach((el) => { - el.addEventListener('change', (e) => { - that.ic10editor.settings.cursor = (e.target as any).value; - that.ic10editor.saveEditorSettings(); - that.updateEditorSettings(); - }); - }); - document.getElementById("editorSettingsFontSize").addEventListener('change', (e) => { - window.App.editorSettings.fontSize = parseInt((e.target as any).value); - that.ic10editor.saveEditorSettings(); - that.updateEditorSettings(); - }); - document.getElementById("editorSettingsRelativeLineNumbers").addEventListener('change', (e) => { - window.App.editorSettings.relativeLineNumbers = (e.target as any).checked; - that.ic10editor.saveEditorSettings(); - that.updateEditorSettings(); - }); - - console.log(that.ic10editor.aceEditor.getOption('keyboardHandler')); - - that.ic10editor.aceEditor.setTheme("ace/theme/one_dark"); - ace.config.loadModule("ace/ext/statusbar", function (module) { - const statusBar = new module.StatusBar(that.ic10editor.aceEditor, document.getElementById("statusBar")); - statusBar.updateStatus(that.ic10editor.aceEditor); - }); - - that.ic10editor.aceEditor.setAutoScrollEditorIntoView(true); - - } - - updateEditorSettings() { - const settings = this.ic10editor.settings; - const editor = this.ic10editor.aceEditor; - if (settings.keyboard === 'ace') { - editor.setOption('keyboardHandler', null); - } else { - editor.setOption('keyboardHandler', `ace/keyboard/${settings.keyboard}`); - } - editor.setOption('cursorStyle', settings.cursor as any); - editor.setOption('fontSize', settings.fontSize); - editor.setOption('relativeLineNumbers', settings.relativeLineNumbers); - } - - displayEditorSettings() { - const settings = this.ic10editor.settings; - document.getElementsByName("editorKeybindRadio").forEach((el: any) => { - el.checked = el.value === settings.keyboard; - }); - document.getElementsByName("editorCursorRadio").forEach((el: any) => { - el.checked = el.value === settings.cursor; - }); - (document.getElementById("editorSettingsFontSize") as any).value = settings.fontSize; - (document.getElementById("editorSettingsRelativeLineNumbers") as any).checked = settings.relativeLineNumbers; - } - - reCalcEditorSize() { - const editor = this.ic10editor.aceEditor; - const navBar = document.getElementById("navBar"); - const statusBarContainer = document.getElementById("statusBarContainer"); - - const correction = navBar.offsetHeight + statusBarContainer.offsetHeight; - const editorContainer = document.getElementById("editor"); - editorContainer.style.height = `calc( 100vh - ${correction}px - 0.5rem)`; - editor.resize(true); - } -} - - - - -export { IC10EditorUI }; diff --git a/www/src/js/index.ts b/www/src/js/index.ts deleted file mode 100644 index 7fcea87..0000000 --- a/www/src/js/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { IC10Editor, setupLspWorker } from "./editor"; -import { Session } from './session'; -import { VirtualMachine } from "./virtual_machine"; -import { docReady, openFile, saveFile } from "./utils"; -// import { makeRequest } from "./utils"; -declare global { - interface Window { App: App } -} - -type App = { - editorSettings: { fontSize: number, relativeLineNumbers: boolean }; editor: IC10Editor, vm: VirtualMachine, session: Session -} - - -export const App: App = { - editor: null, - vm: null, - session: new Session(), - editorSettings: { fontSize: 16, relativeLineNumbers: false } -}; - -window.App = App; - -// const dbPromise = makeRequest({ method: "GET", url: "/data/database.json"}); -// const dbPromise = fetch("/data/database.json").then(resp => resp.json()); -const dbPromise = import("../../data/database.json") - -docReady(() => { - - App.vm = new VirtualMachine(); - - dbPromise.then(db => App.vm.setupDeviceDatabase(db)) - - const init_session_id = App.vm.devices.get(0).id; - - App.editor = new IC10Editor(init_session_id); - - setupLspWorker().then((worker) => { - App.editor.setupLsp(worker); - }) - - - // Menu - document.getElementById("mainMenuShare").addEventListener('click', (_event) => { - const link = document.getElementById("shareLinkText") as HTMLInputElement; - link.setAttribute('value', window.location.href); - link.setSelectionRange(0, 0); - }, { capture: true }); - document.getElementById("shareLinkCopyButton").addEventListener('click', (event) => { - event.preventDefault(); - const link = document.getElementById("shareLinkText") as HTMLInputElement; - link.select(); - link.setSelectionRange(0, 99999); - navigator.clipboard.writeText(link.value); - }, { capture: true }); - document.getElementById("mainMenuOpenFile").addEventListener('click', (_event) => { - openFile(App.editor.aceEditor); - }, { capture: true }); - document.getElementById("mainMenuSaveAs").addEventListener('click', (_event) => { - saveFile(App.editor.aceEditor.getSession().getValue()) - - }, { capture: true }); - document.getElementById("mainMenuKeyboardShortcuts").addEventListener('click', (_event) => { - App.editor.aceEditor.execCommand("showKeyboardShortcuts"); - }, { capture: true }); - -}); - - - - diff --git a/www/src/js/main.ts b/www/src/js/main.ts deleted file mode 100644 index 84b6acc..0000000 --- a/www/src/js/main.ts +++ /dev/null @@ -1,10 +0,0 @@ - -import '@popperjs/core'; -import '../scss/styles.scss'; -import { Dropdown, Modal } from 'bootstrap'; - -// A dependency graph that contains any wasm must all be imported -// asynchronously. This `main.js` file does the single async import, so -// that no one else needs to worry about it again. -import("./index") - .catch(e => console.error("Error importing `index.ts`:", e)); diff --git a/www/src/js/utils.ts b/www/src/js/utils.ts deleted file mode 100644 index 3e864a6..0000000 --- a/www/src/js/utils.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Ace } from "ace-builds"; - - -function docReady(fn: ()=> void) { - // see if DOM is already available - if (document.readyState === "complete" || document.readyState === "interactive") { - setTimeout(fn, 1); - } else { - document.addEventListener("DOMContentLoaded", fn); - } -} - -// probably not needed, fetch() exists now -function makeRequest(opts: { method: string, url: string, headers: { [key: string]: string }, params: any }) { - return new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open(opts.method, opts.url); - xhr.onload = function () { - if (xhr.status >= 200 && xhr.status < 300) { - resolve(xhr.response); - } else { - reject({ - status: xhr.status, - statusText: xhr.statusText - }); - } - }; - xhr.onerror = function () { - reject({ - status: xhr.status, - statusText: xhr.statusText - }); - }; - if (opts.headers) { - Object.keys(opts.headers).forEach(function (key) { - xhr.setRequestHeader(key, opts.headers[key]); - }); - } - var params = opts.params; - if (params && typeof params === 'object') { - params = Object.keys(params).map(function (key) { - return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); - }).join('&'); - } - xhr.send(params); - }); -} - -async function saveFile(content: BlobPart) { - const blob = new Blob([content], { type: "text/plain" }); - if (typeof window.showSaveFilePicker !== "undefined") { - console.log("Saving via FileSystem API") - const saveHandle = await window.showSaveFilePicker({ - types: [ - { - // suggestedName: "code.ic10", - description: 'Text Files', - accept: { - 'text/plain': ['.txt', '.ic10'], - }, - }, - ], - }); - const ws = await saveHandle.createWritable(); - await ws.write(blob); - await ws.close(); - } else { - console.log("saving file via hidden link event"); - var a = document.createElement('a'); - a.download = "code.ic10"; - a.href = window.URL.createObjectURL(blob); - a.click(); - } -} - -async function openFile(editor: Ace.Editor) { - if (typeof window.showOpenFilePicker !== "undefined") { - console.log("opening file via FileSystem Api"); - const [fileHandle] = await window.showOpenFilePicker(); - const file = await fileHandle.getFile(); - const contents = await file.text(); - const session = editor.getSession(); - session.setValue(contents); - } else { - console.log("opening file via hidden input event"); - let input = document.createElement('input'); - input.type = 'file'; - input.accept = ".txt,.ic10,.mips,text/*"; - input.onchange = _ => { - const files = Array.from(input.files); - console.log(files); - const file = files[0]; - var reader = new FileReader(); - reader.onload = (e) => { - const contents = e.target.result as string; - const session = editor.getSession(); - // session.id = file.name; - session.setValue(contents); - }; - reader.readAsText(file); - }; - input.click(); - } -} -export { docReady, makeRequest, saveFile, openFile } \ No newline at end of file diff --git a/www/src/js/virtual_machine/device.ts b/www/src/js/virtual_machine/device.ts deleted file mode 100644 index 86111a1..0000000 --- a/www/src/js/virtual_machine/device.ts +++ /dev/null @@ -1,395 +0,0 @@ -import { Offcanvas } from "bootstrap"; -import { VirtualMachine, VirtualMachineUI } from "."; -import { DeviceRef, VM } from "ic10emu_wasm"; - -class VMDeviceUI { - ui: VirtualMachineUI; - summary: HTMLDivElement; - canvasEl: HTMLDivElement; - deviceCountEl: HTMLElement; - canvas: Offcanvas; - private _deviceSummaryCards: Map; - private _offCanvaseCards: Map< - number, - { col: HTMLElement; card: VMDeviceCard } - >; - - constructor(ui: VirtualMachineUI) { - const that = this; - that.ui = ui; - this.summary = document.getElementById("vmDeviceSummary") as HTMLDivElement; - this.canvasEl = document.getElementById( - "vmDevicesOCBody", - ) as HTMLDivElement; - this.deviceCountEl = document.getElementById("vmViewDeviceCount"); - this.canvas = new Offcanvas(this.canvasEl); - this._deviceSummaryCards = new Map(); - this._offCanvaseCards = new Map(); - } - - update(active_ic: DeviceRef) { - const devices = window.VM.devices; - this.deviceCountEl.textContent = `(${devices.size})`; - for (const [id, device] of devices) { - if (!this._deviceSummaryCards.has(id)) { - this._deviceSummaryCards.set(id, new VMDeviceSummaryCard(this, device)); - } - if (!this._offCanvaseCards.has(id)) { - const col = document.createElement("div"); - col.classList.add("col"); - col.id = `${this.canvasEl.id}_col${id}` - this.canvasEl.appendChild(col); - this._offCanvaseCards.set(id, { - col, - card: new VMDeviceCard(this, col, device), - }); - } - } - this._deviceSummaryCards.forEach((card, id, cards) => { - if (!devices.has(id)) { - card.destroy(); - cards.delete(id); - } else { - card.update(active_ic); - } - }, this); - this._offCanvaseCards.forEach((card, id, cards) => { - if (!devices.has(id)) { - card.card.destroy(); - card.col.remove(); - cards.delete(id); - } else { - card.card.update(active_ic); - } - }, this); - } -} - -class VMDeviceSummaryCard { - root: HTMLDivElement; - viewBtn: HTMLButtonElement; - deviceUI: VMDeviceUI; - device: DeviceRef; - badges: HTMLSpanElement[]; - constructor(deviceUI: VMDeviceUI, device: DeviceRef) { - // const that = this; - this.deviceUI = deviceUI; - this.device = device; - this.root = document.createElement("div"); - this.root.classList.add( - "hstack", - "gap-2", - "bg-light-subtle", - "border", - "border-secondary-subtle", - "rounded", - ); - this.viewBtn = document.createElement("button"); - this.viewBtn.type = "button"; - this.viewBtn.classList.add("btn", "btn-success"); - this.root.appendChild(this.viewBtn); - this.deviceUI.summary.appendChild(this.root); - this.badges = []; - - this.update(window.VM.activeIC); - } - - update(active_ic: DeviceRef) { - const that = this; - // clear previous badges - this.badges.forEach((badge) => badge.remove()); - this.badges = []; - - //update name - var deviceName = this.device.name ?? this.device.prefabName ?? ""; - if (deviceName) { - deviceName = `: ${deviceName}`; - } - const btnTxt = `Device ${this.device.id}${deviceName}`; - this.viewBtn.textContent = btnTxt; - - // regenerate badges - this.device.connections.forEach((conn, index) => { - if (typeof conn === "object") { - var badge = document.createElement("span"); - badge.classList.add("badge", "text-bg-light"); - badge.textContent = `Net ${index}:${conn.CableNetwork}`; - that.badges.push(badge); - that.root.appendChild(badge); - } - }); - - if (this.device.id === active_ic.id) { - var badge = document.createElement("span"); - badge.classList.add("badge", "text-bg-success"); - badge.textContent = "db"; - that.badges.push(badge); - that.root.appendChild(badge); - } - - active_ic.pins?.forEach((id, index) => { - if (that.device.id === id) { - var badge = document.createElement("span"); - badge.classList.add("badge", "text-bg-success"); - badge.textContent = `d${index}`; - that.badges.push(badge); - that.root.appendChild(badge); - } - }); - } - - destroy() { - this.root.remove(); - } -} - -class VMDeviceCard { - ui: VMDeviceUI; - container: HTMLElement; - device: DeviceRef; - root: HTMLDivElement; - nav: HTMLUListElement; - - header: HTMLDivElement; - nameInput: HTMLInputElement; - nameHash: HTMLSpanElement; - body: HTMLDivElement; - badges: HTMLSpanElement[]; - fieldsContainer: HTMLDivElement; - slotsContainer: HTMLDivElement; - pinsContainer: HTMLDivElement; - networksContainer: HTMLDivElement; - reagentsContainer: HTMLDivElement; - nav_id: string; - navTabs: { [key: string]: { li: HTMLLIElement; button: HTMLButtonElement } }; - paneContainer: HTMLDivElement; - tabPanes: { [key: string]: HTMLElement }; - image: HTMLImageElement; - image_err: boolean; - title: HTMLHeadingElement; - fieldEls: Map; - - constructor(ui: VMDeviceUI, container: HTMLElement, device: DeviceRef) { - this.ui = ui; - this.container = container; - this.device = device; - this.nav_id = `${this.container.id}_vmDeviceCard${this.device.id}`; - - this.root = document.createElement("div"); - this.root.classList.add("card"); - - this.header = document.createElement("div"); - this.header.classList.add("card-header", "hstack"); - this.image = document.createElement("img"); - this.image_err = false; - this.image.src = `/img/stationpedia/${this.device.prefabName}.png`; - this.image.onerror = this.onImageErr; - this.image.width = 48; - this.image.classList.add("me-2"); - this.header.appendChild(this.image); - - this.title = document.createElement("h5"); - this.title.textContent = `Device ${this.device.id} : ${this.device.prefabName ?? ""}`; - this.header.appendChild(this.title); - - this.nameInput = document.createElement("input"); - this.nameHash = document.createElement("span"); - - this.root.appendChild(this.header); - - this.body = document.createElement("div"); - this.body.classList.add("card-body"); - this.root.appendChild(this.body); - - this.nav = document.createElement("ul"); - this.nav.classList.add("nav", "nav-tabs"); - this.nav.role = "tablist"; - this.nav.id = this.nav_id; - this.navTabs = {}; - this.tabPanes = {}; - - this.body.appendChild(this.nav); - - this.paneContainer = document.createElement("div"); - this.paneContainer.id = `${this.nav_id}_tabs`; - - this.body.appendChild(this.paneContainer); - - this.badges = []; - this.fieldsContainer = document.createElement("div"); - this.fieldsContainer.id = `${this.nav_id}_fields`; - this.fieldsContainer.classList.add("vstack"); - this.fieldEls = new Map(); - this.slotsContainer = document.createElement("div"); - this.slotsContainer.id = `${this.nav_id}_slots`; - this.slotsContainer.classList.add("vstack"); - this.reagentsContainer = document.createElement("div"); - this.reagentsContainer.id = `${this.nav_id}_reagents`; - this.reagentsContainer.classList.add("vstack"); - this.networksContainer = document.createElement("div"); - this.networksContainer.id = `${this.nav_id}_networks`; - this.networksContainer.classList.add("vstack"); - this.pinsContainer = document.createElement("div"); - this.pinsContainer.id = `${this.nav_id}_pins`; - this.pinsContainer.classList.add("vstack"); - - this.addTab("Fields", this.fieldsContainer); - this.addTab("Slots", this.slotsContainer); - this.addTab("Networks", this.networksContainer); - - this.update(window.VM.activeIC); - - // do last to minimise reflows - this.container.appendChild(this.root); - } - - onImageErr(e: Event) { - this.image_err = true; - console.log("Image load error", e); - } - - addNav(name: string, target: string) { - if (!(name in this.navTabs)) { - var li = document.createElement("li"); - li.classList.add("nav-item"); - li.role = "presentation"; - var button = document.createElement("button"); - button.classList.add("nav-link"); - if (!(Object.keys(this.navTabs).length > 0)) { - button.classList.add("active"); - button.tabIndex = 0; - } else { - button.tabIndex = -1; - } - button.id = `${this.nav_id}_tab_${name}`; - button.setAttribute("data-bs-toggle", "tab"); - button.setAttribute("data-bs-target", `#${target}`); - button.type = "button"; - button.role = "tab"; - button.setAttribute("aria-controls", target); - button.setAttribute( - "aria-selected", - Object.keys(this.navTabs).length > 0 ? "false" : "true", - ); - button.textContent = name; - li.appendChild(button); - this.nav.appendChild(li); - this.navTabs[name] = { li, button }; - return true; - } - return false; - } - - removeNav(name: string) { - if (name in this.navTabs) { - this.navTabs[name].li.remove(); - delete this.navTabs[name]; - return true; - } - return false; - } - - addTab(name: string, tab: HTMLElement) { - const paneName = `${this.nav_id}_pane_${name}`; - if (this.addNav(name, paneName)) { - if (name in this.tabPanes) { - this.tabPanes[name].remove(); - } - const pane = document.createElement("div"); - pane.classList.add("tap-pane", "fade"); - if (!(Object.keys(this.tabPanes).length > 0)) { - pane.classList.add("show", "active"); - } - pane.id = paneName; - pane.role = "tabpanel"; - pane.setAttribute("aria-labelledby", `${this.nav_id}_tab_${name}`); - pane.tabIndex = 0; - - this.paneContainer.appendChild(pane); - pane.appendChild(tab); - this.tabPanes[name] = tab; - } - } - - removeTab(name: string) { - let result = this.removeNav(name); - if (name in this.tabPanes) { - this.tabPanes[name].remove(); - delete this.tabPanes[name]; - return true; - } - return result; - } - - update(active_ic: DeviceRef) { - if (this.device.pins) { - this.addTab("Pins", this.pinsContainer); - } else { - this.removeTab("Pins"); - } - - // fields - for (const [name, _field] of this.device.fields) { - if (!this.fieldEls.has(name)) { - const field = new VMDeviceField(this.device, name, this, this.fieldsContainer); - this.fieldEls.set(name, field); - } - } - this.fieldEls.forEach((field, name, map) => { - if(!this.device.fields.has(name)) { - field.destroy(); - map.delete(name); - } else { - field.update(active_ic); - } - }, this); - - - // TODO Reagents - } - - destroy() { - this.root.remove(); - } -} - -class VMDeviceField { - container: HTMLElement; - card: VMDeviceCard; - device: DeviceRef; - field: string; - root: HTMLDivElement; - name: HTMLSpanElement; - fieldType: HTMLSpanElement; - input: HTMLInputElement; - constructor(device: DeviceRef, field: string, card: VMDeviceCard, container: HTMLElement) { - this.device = device; - this.field = field; - this.card = card; - this.container = container; - this.root = document.createElement('div'); - this.root.classList.add("input-group", "input-group-sm"); - this.name = document.createElement('span'); - this.name.classList.add("input-group-text", "field_name"); - this.name.textContent = this.field; - this.root.appendChild(this.name); - this.fieldType = document.createElement('span'); - this.fieldType.classList.add("input-group-text", "field_type"); - this.fieldType.textContent = device.fields.get(this.field)?.field_type; - this.root.appendChild(this.fieldType); - this.input = document.createElement('input'); - this.input.type = "text"; - this.input.value = this.device.fields.get(this.field)?.value.toString(); - this.root.appendChild(this.input); - - this.container.appendChild(this.root); - } - destroy () { - this.root.remove(); - } - update(_active_ic: DeviceRef) { - this.input.value = this.device.fields.get(this.field)?.value.toString(); - } -} - -export { VMDeviceUI }; diff --git a/www/src/js/virtual_machine/index.ts b/www/src/js/virtual_machine/index.ts deleted file mode 100644 index c6e049c..0000000 --- a/www/src/js/virtual_machine/index.ts +++ /dev/null @@ -1,417 +0,0 @@ -import { DeviceRef, VM, init } from "ic10emu_wasm"; -import { VMDeviceUI } from "./device"; -// import { Card } from 'bootstrap'; - -declare global { - interface Window { VM: VirtualMachine } -} - -type DeviceDB = { - logic_enabled: string[]; - slot_logic_enabled: string[]; - devices: string[]; - items: { - [key: string]: { - name: string, - hash: number, - desc: string, - logic?: { [key: string]: string }, - slots?: { name: string, type: string }[], - modes?: { [key: string]: string }, - conn?: { [key: string]: string[] }, - } - } -} - -class VirtualMachine { - ic10vm: VM; - ui: VirtualMachineUI; - _devices: Map; - _ics: Map; - db: DeviceDB; - - constructor() { - const vm = init(); - - window.VM = this; - - this.ic10vm = vm; - this.ui = new VirtualMachineUI(this); - - this._devices = new Map(); - this._ics = new Map(); - - this.updateDevices(); - - this.updateCode() - - } - - get devices() { - return this._devices; - } - - get ics() { - return this._ics; - } - - get activeIC() { - return this._ics.get(window.App.session.activeSession); - } - - updateDevices() { - - const device_ids = this.ic10vm.devices; - for (const id of device_ids) { - if (!this._devices.has(id)) { - this._devices.set(id, this.ic10vm.getDevice(id)); - } - } - for (const id of this._devices.keys()) { - if (!device_ids.includes(id)) { - this._devices.get(id).free(); - this._devices.delete(id); - } - } - - const ics = this.ic10vm.ics; - for (const id of ics) { - if (!this._ics.has(id)) { - this._ics.set(id, this._devices.get(id)); - } - } - for (const id of this._ics.keys()) { - if (!ics.includes(id)) { - this._ics.get(id).free(); - this._ics.delete(id); - } - } - - } - - updateCode() { - const progs = window.App.session.programs; - for (const id of progs.keys()) { - const attempt = Date.now().toString(16) - const ic = this._ics.get(id); - const prog = progs.get(id); - if (ic && prog) { - console.time(`CompileProgram_${id}_${attempt}`); - try { - this.ics.get(id).setCode(progs.get(id)); - } catch (e) { - console.log(e); - } - console.timeEnd(`CompileProgram_${id}_${attempt}`); - } - } - this.update(); - } - - step() { - const ic = this.activeIC; - if (ic) { - try { - ic.step(); - } catch (e) { - console.log(e); - } - this.update(); - } - } - - run() { - const ic = this.activeIC; - if (ic) { - try { - ic.run(false); - } catch (e) { - console.log(e); - } - this.update(); - } - } - - reset() { - const ic = this.activeIC; - if (ic) { - ic.reset(); - this.update(); - } - } - - update() { - this.updateDevices(); - const ic = this.activeIC; - window.App.session.setActiveLine(window.App.session.activeSession, ic.ip); - this.ui.update(ic); - } - - setRegister(index: number, val: number) { - const ic = this.activeIC; - try { - ic.setRegister(index, val); - } catch (e) { - console.log(e); - } - } - - setStack(addr: number, val: number) { - const ic = this.activeIC; - try { - ic.setStack(addr, val); - } catch (e) { - console.log(e); - } - } - - setupDeviceDatabase(db: DeviceDB) { - this.db = db; - console.log("Loaded Device Database", this.db); - } -} - - -class VirtualMachineUI { - vm: VirtualMachine; - state: VMStateUI; - registers: VMRegistersUI; - stack: VMStackUI; - devices: VMDeviceUI; - - constructor(vm: VirtualMachine) { - this.vm = vm - this.state = new VMStateUI(this); - this.registers = new VMRegistersUI(this); - this.stack = new VMStackUI(this); - this.devices = new VMDeviceUI(this); - - const that = this; - - document.getElementById("vmControlRun").addEventListener('click', (_event) => { - that.vm.run(); - }, { capture: true }); - document.getElementById("vmControlStep").addEventListener('click', (_event) => { - that.vm.step(); - }, { capture: true }); - document.getElementById("vmControlReset").addEventListener('click', (_event) => { - that.vm.reset(); - }, { capture: true }); - - } - - update(ic: DeviceRef) { - this.state.update(ic); - this.registers.update(ic); - this.stack.update(ic); - this.devices.update(ic); - } - -} - -class VMStateUI { - ui: VirtualMachineUI; - instructionPointer: HTMLElement; - instructionCounter: HTMLElement; - lastState: HTMLElement; - constructor(ui: VirtualMachineUI) { - this.ui = ui; - - this.instructionPointer = document.getElementById("vmActiveICStateIP"); - this.instructionCounter = document.getElementById("vmActiveICStateICount"); - this.lastState = document.getElementById("vmActiveICStateLastRun"); - } - - update(ic: { ip: { toString: () => string; }; instructionCount: { toString: () => string; }; state: { toString: () => string; }; }) { - if (ic) { - this.instructionPointer.innerText = ic.ip.toString(); - this.instructionCounter.innerText = ic.instructionCount.toString(); - this.lastState.innerText = ic.state.toString(); - } - } -} - -class VMRegistersUI { - ui: VirtualMachineUI; - tbl: HTMLDivElement; - regCells: { - cell: HTMLDivElement, - nameLabel: HTMLSpanElement, - aliasesLabel: HTMLSpanElement, - input: HTMLInputElement - }[]; - default_aliases: Map; - ic_aliases: Map; - constructor(ui: VirtualMachineUI) { - const that = this; - this.ui = ui; - const regDom = document.getElementById("vmActiveRegisters"); - this.tbl = document.createElement("div"); - this.tbl.classList.add("d-flex", "flex-wrap", "justify-content-start", "align-items-end",); - this.regCells = []; - for (var i = 0; i < 18; i++) { - const container = document.createElement("div"); - container.classList.add("vm_reg_cel", "align-that-stretch"); - const cell = document.createElement("div"); - cell.classList.add("input-group", "input-group-sm") - // cell.style.width = "30%"; - const nameLabel = document.createElement("span"); - nameLabel.innerText = `r${i}`; - nameLabel.classList.add("input-group-text") - cell.appendChild(nameLabel); - const input = document.createElement("input"); - input.type = "text" - input.value = (0).toString(); - input.dataset.index = i.toString(); - cell.appendChild(input); - const aliasesLabel = document.createElement("span"); - aliasesLabel.classList.add("input-group-text", "reg_label") - cell.appendChild(aliasesLabel); - this.regCells.push({ - cell, - nameLabel, - aliasesLabel, - input, - }); - container.appendChild(cell); - this.tbl.appendChild(container); - } - this.regCells.forEach(cell => { - cell.input.addEventListener('change', that.onCellUpdate); - }); - this.default_aliases = new Map([["sp", 16], ["ra", 17]]); - this.ic_aliases = new Map(); - regDom.appendChild(this.tbl); - } - - onCellUpdate(e: Event) { - let index; - let val; - let target = (e.target as HTMLInputElement); - try { - index = parseInt(target.dataset.index); - val = parseFloat(target.value); - } catch (e) { - // reset the edit - console.log(e); - window.VM.update(); - return; - } - window.VM.setRegister(index, val); - } - - update(ic: DeviceRef) { - const that = this; - if (ic) { - const registers = ic.registers; - if (registers) { - for (var i = 0; i < registers.length; i++) { - this.regCells[i].input.value = registers[i].toString(); - } - } - const aliases = ic.aliases; - if (aliases) { - this.ic_aliases = new Map(); - aliases.forEach((target, alias, _map) => { - if (("RegisterSpec" in target) && target.RegisterSpec.indirection == 0) { - const index = target.RegisterSpec.target; - this.ic_aliases.set(alias, index); - } - }) - } - } - this.updateAliases(); - } - - updateAliases() { - const aliases = new Map([...Array.from(this.default_aliases), ...Array.from(this.ic_aliases)]); - const labels = new Map(); - for (const [alias, target] of aliases) { - if (labels.hasOwnProperty(target)) { - labels.get(target).push(alias) - } else { - labels.set(target, [alias]); - } - } - - for (const [index, label_list] of labels) { - this.regCells[index].aliasesLabel.innerText = label_list.join(", ") - } - } -} - -class VMStackUI { - ui: VirtualMachineUI; - tbl: HTMLDivElement; - stackCells: { cell: HTMLDivElement, nameLabel: HTMLSpanElement, input: HTMLInputElement }[]; - constructor(ui: VirtualMachineUI) { - this.ui = ui; - const stackDom = document.getElementById("vmActiveStack"); - this.tbl = document.createElement("div"); - this.tbl.classList.add("d-flex", "flex-wrap", "justify-content-start", "align-items-end",); - this.stackCells = []; - for (var i = 0; i < 512; i++) { - const container = document.createElement("div"); - container.classList.add("vm_stack_cel", "align-that-stretch"); - const cell = document.createElement("div"); - cell.classList.add("input-group", "input-group-sm") - const nameLabel = document.createElement("span"); - nameLabel.innerText = `${i}`; - nameLabel.classList.add("input-group-text") - cell.appendChild(nameLabel); - const input = document.createElement("input"); - input.type = "text" - input.value = (0).toString(); - input.dataset.index = i.toString(); - cell.appendChild(input); - - this.stackCells.push({ - cell, - nameLabel, - input, - }); - container.appendChild(cell); - this.tbl.appendChild(container); - } - this.stackCells.forEach(cell => { - cell.input.addEventListener('change', this.onCellUpdate); - }); - stackDom.appendChild(this.tbl); - } - - onCellUpdate(e: Event) { - let index; - let val; - let target = e.target as HTMLInputElement; - try { - index = parseInt(target.dataset.index); - val = parseFloat(target.value); - } catch (e) { - // reset the edit - window.VM.update(); - return; - } - window.VM.setStack(index, val); - } - - update(ic: { stack: any; registers: any[]; }) { - const that = this; - if (ic) { - const stack = ic.stack; - const sp = ic.registers[16]; - if (stack) { - for (var i = 0; i < stack.length; i++) { - this.stackCells[i].input.value = stack[i]; - if (i == sp) { - this.stackCells[i].nameLabel.classList.add("stack_pointer"); - } else { - this.stackCells[i].nameLabel.classList.remove("stack_pointer"); - } - } - } - } - } - -} - -export { VirtualMachine, VirtualMachineUI , DeviceDB }; diff --git a/www/src/scss/dark.scss b/www/src/scss/dark.scss index d45c44b..94b138c 100644 --- a/www/src/scss/dark.scss +++ b/www/src/scss/dark.scss @@ -4,32 +4,6 @@ body { margin: 0; } -.ace_tooltip { - background: #282c34; - color: #c1c1c1; - border: 1px #484747 solid; - box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); -} - -.ace_tooltip.ace_dark { - background: #282c34; - color: #c1c1c1; - border: 1px #484747 solid; - box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); -} - -.ace_status-indicator { - color: #dee2e6; - position: relative; - bottom: 4px; - border-left: 1px solid; - border-right: 1px solid; - height: 20px; - float: right; - padding-left: 5px; - padding-right: 5px; -} - #ace_settingsmenu, #kbshortcutmenu { background-color: rgb(33, 37, 41); @@ -48,12 +22,12 @@ body { .ace_optionsMenuEntry:hover { background-color: #161719; - transition: all 0.3s + transition: all 0.3s; } .ace_closeButton { background: rgba(245, 146, 146, 0.5); - border: 1px solid #F48A8A; + border: 1px solid #f48a8a; border-radius: 50%; padding: 7px; position: absolute; @@ -81,7 +55,7 @@ body { vertical-align: middle; } -.ace_optionsMenuEntry button[ace_selected_button=true] { +.ace_optionsMenuEntry button[ace_selected_button="true"] { background: #e7e7e7; box-shadow: 1px 0px 2px 0px #adadad inset; border-color: #adadad; @@ -107,203 +81,7 @@ body { box-shadow: 0px 2px 3px 0px #555; } -/* ------------------------------------------------------------------------------------------ -* Editor Search Form -* --------------------------------------------------------------------------------------- */ -.ace_search { - background-color: #2b3035; - color: #dee2e6; - border: 1px solid #495057; - border-top: 0 none; - overflow: hidden; - margin: 0; - padding: 4px 6px 0 4px; - position: absolute; - top: 0; - z-index: 99; - white-space: normal; -} - -.ace_search.left { - border-left: 0 none; - border-radius: 0px 0px 5px 0px; - left: 0; -} - -.ace_search.right { - border-radius: 0px 0px 0px 5px; - border-right: 0 none; - right: 0; -} - -.ace_search_form, -.ace_replace_form { - margin: 0 20px 4px 0; - overflow: hidden; - line-height: 1.9; -} - -.ace_replace_form { - margin-right: 0; -} - -.ace_search_form.ace_nomatch { - outline: 1px solid red; -} - -.ace_search_field { - border-radius: 3px 0 0 3px; - background-color: #343a40; - color: #dee2e6; - border: 1px solid #41464b; - border-right: 0 none; - outline: 0; - padding: 0; - font-size: inherit; - margin: 0; - line-height: inherit; - padding: 0 6px; - min-width: 17em; - vertical-align: top; - min-height: 1.8em; - box-sizing: content-box; -} - -.ace_searchbtn { - border: 1px solid #6c757d; - line-height: inherit; - display: inline-block; - padding: 0 6px; - background: #343a40; - border-right: 0 none; - border-left: 1px solid #6c757d; - ; - cursor: pointer; - margin: 0; - position: relative; - color: #fff; -} - -.ace_searchbtn:last-child { - border-radius: 0 3px 3px 0; - border-right: 1px solid #6c757d; -} - -.ace_searchbtn:disabled { - background: none; - cursor: default; -} - -.ace_searchbtn:hover { - background-color: #161719; -} - -.ace_searchbtn.prev, -.ace_searchbtn.next { - padding: 0px 0.7em -} - -.ace_searchbtn.prev:after, -.ace_searchbtn.next:after { - content: ""; - border: solid 2px #6c757d; - width: 0.5em; - height: 0.5em; - border-width: 2px 0 0 2px; - display: inline-block; - transform: rotate(-45deg); -} - -.ace_searchbtn.next:after { - border-width: 0 2px 2px 0; -} - -.ace_searchbtn_close { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0; - border-radius: 50%; - border: 0 none; - color: #343a40; - cursor: pointer; - font: 16px/16px Arial; - padding: 0; - height: 14px; - width: 14px; - top: 9px; - right: 7px; - position: absolute; -} - -.ace_searchbtn_close:hover { - background-color: #656565; - background-position: 50% 100%; - color: white; -} - -.ace_button { - background-color: #343a40; - margin-left: 2px; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -o-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; - opacity: 0.7; - border: 1px solid #6c757d; - padding: 1px; - box-sizing: border-box !important; - color: #fff; -} - -.ace_button:hover { - background-color: #161719; - opacity: 1; -} - -.ace_button:active { - background-color: #6c757d; - ; -} - -.ace_button.checked { - background-color: #6c757d; - border-color: #6c757d; - opacity: 1; -} - -.ace_search_options { - margin-bottom: 3px; - text-align: right; - -webkit-user-select: none; - -moz-user-select: none; - -o-user-select: none; - -ms-user-select: none; - user-select: none; - clear: both; -} - -.ace_search_counter { - float: left; - font-family: arial; - padding: 0 8px; -} - -/* ---------------- -* End Ace Search -* --------------- */ - -code { - // color: #e685b5 - color: #c678dd; -} - -.ace_tooltip code { - font-style: italic; - font-size: 12px; -} - -.navbar-default .navbar-nav>li>a { +.navbar-default .navbar-nav > li > a { color: #fff; } @@ -314,7 +92,7 @@ code { color: #fff; } -.navbar-nav>li>a { +.navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 20px; @@ -327,7 +105,7 @@ code { // } // } -.nav>li>a { +.nav > li > a { position: relative; display: block; padding: 10px 15px; @@ -337,7 +115,7 @@ code { .navbar-nav .dropdown-menu { position: absolute; - left: .5rem; + left: 0.5rem; } .modal-title { @@ -345,21 +123,51 @@ code { } .modal-body button { - color: #fff + color: #fff; } +/* ---------------- +* Ace Tooltips +* --------------- */ +code { + // color: #e685b5 + color: #c678dd; +} + +.ace_tooltip code { + font-style: italic; + font-size: 12px; +} + +.ace_tooltip { + background: #282c34; + color: #c1c1c1; + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); +} + +.ace_tooltip.ace_dark { + background: #282c34; + color: #c1c1c1; + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); +} + +/* ---------------- +* Ace tooltip +* --------------- */ .ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight { color: #c678dd; } .ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { - background-color: rgba(76, 87, 103, .19); + background-color: rgba(76, 87, 103, 0.19); } .ace_dark.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(8, 121, 144, 0.5); - background: rgba(76, 87, 103, .19); + background: rgba(76, 87, 103, 0.19); } .ace_dark.ace_editor.ace_autocomplete { @@ -386,12 +194,12 @@ code { } .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { - background-color: rgba(76, 87, 103, .19); + background-color: rgba(76, 87, 103, 0.19); } .ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(8, 121, 144, 0.5); - background: rgba(76, 87, 103, .19); + background: rgba(76, 87, 103, 0.19); } .vm_ic_active_line { @@ -490,13 +298,12 @@ code { border-radius: 0; } -.vm_stack_cel span.stack_pointer { +.vm_stack_cel span.stack_pointer { background-color: var(--bs-success); } .vm_device_summary button.btn { line-height: 0.75rem; - } .vm_device_summary span.badge { diff --git a/www/src/scss/styles.scss b/www/src/scss/styles.scss index 4eaf55b..3efd6b8 100644 --- a/www/src/scss/styles.scss +++ b/www/src/scss/styles.scss @@ -32,31 +32,31 @@ $accordion-button-padding-y: 0.5rem; // @import "bootstrap/scss/images"; @import "bootstrap/scss/containers"; @import "bootstrap/scss/grid"; -@import "bootstrap/scss/tables"; -@import "bootstrap/scss/forms"; -@import "bootstrap/scss/buttons"; -@import "bootstrap/scss/transitions"; -@import "bootstrap/scss/dropdown"; -@import "bootstrap/scss/button-group"; -@import "bootstrap/scss/nav"; -@import "bootstrap/scss/navbar"; // Requires nav -@import "bootstrap/scss/card"; +// @import "bootstrap/scss/tables"; +// @import "bootstrap/scss/forms"; +// @import "bootstrap/scss/buttons"; +// @import "bootstrap/scss/transitions"; +// @import "bootstrap/scss/dropdown"; +// @import "bootstrap/scss/button-group"; +// @import "bootstrap/scss/nav"; +// @import "bootstrap/scss/navbar"; // Requires nav +// @import "bootstrap/scss/card"; // @import "bootstrap/scss/breadcrumb"; -@import "bootstrap/scss/accordion"; +// @import "bootstrap/scss/accordion"; // @import "bootstrap/scss/pagination"; -@import "bootstrap/scss/badge"; -@import "bootstrap/scss/alert"; -@import "bootstrap/scss/progress"; -@import "bootstrap/scss/list-group"; -@import "bootstrap/scss/close"; -@import "bootstrap/scss/toasts"; -@import "bootstrap/scss/modal"; // Requires transitions -@import "bootstrap/scss/tooltip"; -@import "bootstrap/scss/popover"; +// @import "bootstrap/scss/badge"; +// @import "bootstrap/scss/alert"; +// @import "bootstrap/scss/progress"; +// @import "bootstrap/scss/list-group"; +// @import "bootstrap/scss/close"; +// @import "bootstrap/scss/toasts"; +// @import "bootstrap/scss/modal"; // Requires transitions +// @import "bootstrap/scss/tooltip"; +// @import "bootstrap/scss/popover"; // @import "bootstrap/scss/carousel"; -@import "bootstrap/scss/spinners"; -@import "bootstrap/scss/offcanvas"; // Requires transitions +// @import "bootstrap/scss/spinners"; +// @import "bootstrap/scss/offcanvas"; // Requires transitions // @import "bootstrap/scss/placeholders"; // Helpers @@ -65,8 +65,8 @@ $accordion-button-padding-y: 0.5rem; // Utilities @import "bootstrap/scss/utilities/api"; -@import "./dark.scss" // // Custom styles -// \ No newline at end of file +// +@import "./dark.scss" diff --git a/www/src/ts/app/app.ts b/www/src/ts/app/app.ts new file mode 100644 index 0000000..85dd0d3 --- /dev/null +++ b/www/src/ts/app/app.ts @@ -0,0 +1,114 @@ +import { HTMLTemplateResult, html, css, CSSResultGroup } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import "./nav"; +import "./share"; +import { ShareSessionDialog } from "./share"; + +import { setBasePath } from "@shoelace-style/shoelace/dist/utilities/base-path.js"; + +// Set the base path to the folder you copied Shoelace's assets to +setBasePath("/shoelace"); + +import "@shoelace-style/shoelace/dist/components/split-panel/split-panel.js"; + +import "../editor"; +import { IC10Editor } from "../editor"; +import { Session } from "../session"; +import { VirtualMachine } from "../virtual_machine"; +import { openFile, saveFile } from "../utils"; + +import "../virtual_machine/ui"; + +@customElement("ic10emu-app") +export class App extends BaseElement { + static styles = [ + ...defaultCss, + css` + :host { + height: 100vh; + display: block; + } + .app-container { + display: flex; + flex-direction: column; + height: 100%; + } + .app-body { + flex-grow: 1; + } + sl-split-panel { + height: 100%; + } + `, + ]; + + editorSettings: { fontSize: number; relativeLineNumbers: boolean }; + + @query("ace-ic10") accessor editor: IC10Editor; + @query("session-share-dialog") accessor shareDialog: ShareSessionDialog; + + // get editor() { + // return this.renderRoot.querySelector("ace-ic10") as IC10Editor; + // } + + vm!: VirtualMachine; + session!: Session; + + constructor() { + super(); + window.App = this; + this.session = new Session(); + this.vm = new VirtualMachine(); + } + + protected createRenderRoot(): HTMLElement | DocumentFragment { + const root = super.createRenderRoot(); + root.addEventListener("app-share-session", this._handleShare.bind(this)); + root.addEventListener("app-open-file", this._handleOpenFile.bind(this)); + root.addEventListener("app-save-as", this._handleSaveAs.bind(this)); + return root; + } + + protected render(): HTMLTemplateResult { + return html` +
+ +
+ + +
+
+
+ +
+ `; + } + + firstUpdated(): void {} + + _handleShare(_e: Event) { + // TODO: + this.shareDialog.link = window.location.href; + this.shareDialog.show(); + } + + _handleSaveAs(_e: Event) { + saveFile(window.Editor.editorValue); + } + + _handleOpenFile(_e: Event) { + openFile(window.Editor.editor); + } +} + +declare global { + interface Window { + App?: App; + } +} diff --git a/www/src/ts/app/icons.ts b/www/src/ts/app/icons.ts new file mode 100644 index 0000000..549b1b5 --- /dev/null +++ b/www/src/ts/app/icons.ts @@ -0,0 +1,12 @@ +import { registerIconLibrary } from "@shoelace-style/shoelace/dist/utilities/icon-library.js"; + +registerIconLibrary("fa", { + resolver: (name) => { + const filename = name.replace(/^fa[rbs]-/, ""); + let folder = "regular"; + if (name.substring(0, 4) === "fas-") folder = "solid"; + if (name.substring(0, 4) === "fab-") folder = "brands"; + return `https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/svgs/${folder}/${filename}.svg`; + }, + mutator: (svg) => svg.setAttribute("fill", "currentColor"), +}); diff --git a/www/src/ts/app/index.ts b/www/src/ts/app/index.ts new file mode 100644 index 0000000..fa6f33c --- /dev/null +++ b/www/src/ts/app/index.ts @@ -0,0 +1,5 @@ +import { App } from "./app"; +import { Nav } from "./nav"; +import { ShareSessionDialog } from "./share"; +import "./icons"; +export { App, Nav, ShareSessionDialog } diff --git a/www/src/ts/app/nav.ts b/www/src/ts/app/nav.ts new file mode 100644 index 0000000..1fbe901 --- /dev/null +++ b/www/src/ts/app/nav.ts @@ -0,0 +1,195 @@ +import { HTMLTemplateResult, html, css } from "lit"; +import { customElement, property } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; + +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; +import "@shoelace-style/shoelace/dist/components/icon-button/icon-button.js"; +import "@shoelace-style/shoelace/dist/components/menu/menu.js"; +import "@shoelace-style/shoelace/dist/components/divider/divider.js"; +import "@shoelace-style/shoelace/dist/components/menu-item/menu-item.js"; +import "@shoelace-style/shoelace/dist/components/dropdown/dropdown.js"; +import SlMenuItem from "@shoelace-style/shoelace/dist/components/menu-item/menu-item.js"; + +@customElement("app-nav") +export class Nav extends BaseElement { + static styles = [ + ...defaultCss, + css` + .nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + .navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: left; + justify-content: space-between; + padding: 0.5rem 0; + } + .navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + @media screen and (min-width: 768px) { + .navbar-right { + display: flex !important; + flex-direction: row !important; + margin-left: 0.5rem !important; + } + } + .navbar-right { + display: none; + } + ol, + ul, + dl { + margin-top: 0; + margin-bottom: 1rem; + } + .navbar-text { + padding: 0; + padding-right: 10px; + position: relative; + color: #fff; + } + .nav > li > a { + color: #fff; + line-height: 20px; + position: relative; + display: block; + padding: 10px 15px; + padding-top: 10px; + padding-bottom: 10px; + } + .navbar-brand { + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + color: #fff; + text-decoration: none; + white-space: nowrap; + } + .dropdown { + position: relative; + top: 50%; + transform: translateY(-50%); + z-index: 100; + } + nav { + border-bottom: 1px solid rgb(108, 117, 125); + } + `, + ]; + + constructor() { + super(); + } + protected render(): HTMLTemplateResult { + return html` + + `; + } + + firstUpdated(): void {} + + _menuClickHandler(e: CustomEvent) { + const item = e.detail.item as SlMenuItem; + switch (item.value) { + case "share": + this.dispatchEvent( + new CustomEvent("app-share-session", { bubbles: true }), + ); + break; + case "openFile": + this.dispatchEvent(new CustomEvent("app-open-file", { bubbles: true })); + break; + case "saveAs": + this.dispatchEvent(new CustomEvent("app-save-as", { bubbles: true })); + break; + case "editorSettings": + window.Editor.settingDialog.show(); + break; + case "keyboardShortcuts": + window.Editor.kbShortcuts.show(); + break; + default: + console.log("Unknown main menu item", item.value); + } + } +} diff --git a/www/src/ts/app/share.ts b/www/src/ts/app/share.ts new file mode 100644 index 0000000..a254b3d --- /dev/null +++ b/www/src/ts/app/share.ts @@ -0,0 +1,49 @@ +import { HTMLTemplateResult, html, css } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; + +import "@shoelace-style/shoelace/dist/components/dialog/dialog.js"; +import "@shoelace-style/shoelace/dist/components/input/input.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; +import "@shoelace-style/shoelace/dist/components/icon-button/icon-button.js"; +import "@shoelace-style/shoelace/dist/components/copy-button/copy-button.js"; +import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.js"; +import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; + +@customElement("session-share-dialog") +export class ShareSessionDialog extends BaseElement { + @query(".dialog") accessor dialog: SlDialog; + @query(".input") accessor input: SlInput; + @property({ type: String }) accessor link: string; + + constructor() { + super(); + } + + protected render() { + return html` + + + + + + + + + + + `; + } + + show() { + this.dialog.show(); + } + + hide() { + this.dialog.hide(); + } + + _handleCopyClick() { + this.input.value; + } +} diff --git a/www/src/ts/components/base.ts b/www/src/ts/components/base.ts new file mode 100644 index 0000000..6f60273 --- /dev/null +++ b/www/src/ts/components/base.ts @@ -0,0 +1,45 @@ +import { CSSResultGroup, LitElement, css, unsafeCSS } from "lit"; +import shoelaceDark from "@shoelace-style/shoelace/dist/themes/dark.styles.js"; + +export const defaultCss = [ + shoelaceDark, + css` + .ps-2 { + padding-left: 0.5rem !important; + } + .ms-2 { + margin-left: 0.5rem !important; + } + .ms-auto { + margin-left: auto !important; + } + .flex-row { + flex-direction: row !important; + } + .d-flex { + display: flex !important; + } + .align-self-center { + align-self: center !important; + } + .mb-auto { + margin-bottom: auto !important; + } + .mt-auto { + margin-top: auto !important; + } + .hstack { + display: flex; + flex-direction: row; + } + .vstack { + display: flex; + flex-direction: column; + } + `, +]; + +export class BaseElement extends LitElement { + // Some default styles + static styles: CSSResultGroup = defaultCss; +} diff --git a/www/src/ts/components/details.ts b/www/src/ts/components/details.ts new file mode 100644 index 0000000..6f34838 --- /dev/null +++ b/www/src/ts/components/details.ts @@ -0,0 +1,94 @@ +import { html, css, HTMLTemplateResult, PropertyValueMap } from "lit"; +import { customElement, query, state } from "lit/decorators.js"; +import { classMap } from "lit/directives/class-map.js"; +import SlDetails from "@shoelace-style/shoelace/dist/components/details/details.js"; + +@customElement("ic10-details") +export class IC10Details extends SlDetails { + @query(".details__summary-icon") accessor summaryIcon: HTMLSpanElement; + + constructor() { + super(); + } + + private handleSummaryIconClick(event: MouseEvent) { + event.preventDefault(); + + if (!this.disabled) { + if (this.open) { + this.hide(); + } else { + this.show(); + } + this.header.focus(); + } + } + + private handleSummaryIconKeyDown(event: KeyboardEvent) { + if (event.key === "Enter" || event.key === " ") { + event.preventDefault(); + + if (this.open) { + this.hide(); + } else { + this.show(); + } + } + + if (event.key === "ArrowUp" || event.key === "ArrowLeft") { + event.preventDefault(); + this.hide(); + } + + if (event.key === "ArrowDown" || event.key === "ArrowRight") { + event.preventDefault(); + this.show(); + } + } + + render() { + return html` +
+ + ${this.summary} + + + + + + + + + + + +
+ +
+
+ `; + } +} diff --git a/www/src/ts/components/index.ts b/www/src/ts/components/index.ts new file mode 100644 index 0000000..e846885 --- /dev/null +++ b/www/src/ts/components/index.ts @@ -0,0 +1,3 @@ +import { BaseElement, defaultCss } from './base'; +import { IC10Details } from './details'; +export { BaseElement, defaultCss, IC10Details } diff --git a/www/src/ts/editor/ace.ts b/www/src/ts/editor/ace.ts new file mode 100644 index 0000000..1eca64d --- /dev/null +++ b/www/src/ts/editor/ace.ts @@ -0,0 +1,26 @@ +import ace from "ace-builds"; +import "ace-builds/esm-resolver"; + +import { AceLanguageClient } from "ace-linters/build/ace-language-client"; + +// to make sure language tools are loaded +ace.config.loadModule("ace/ext/language_tools"); + +import { Mode as TextMode } from "ace-builds/src-noconflict/mode-text"; + +export async function setupLspWorker() { + // Create a web worker + let worker = new Worker(new URL("./lspWorker.ts", import.meta.url)); + + const loaded = (w: Worker) => + new Promise((r) => w.addEventListener("message", r, { once: true })); + await Promise.all([loaded(worker)]); + + // Register the editor with the language provider + return worker; +} + +export import Ace = ace.Ace; +import { Range } from "ace-builds"; + +export { ace, TextMode, Range, AceLanguageClient } diff --git a/www/src/js/editor/ic10_highlight_rules.ts b/www/src/ts/editor/ic10_highlight_rules.ts similarity index 100% rename from www/src/js/editor/ic10_highlight_rules.ts rename to www/src/ts/editor/ic10_highlight_rules.ts diff --git a/www/src/js/editor/ic10_mode.ts b/www/src/ts/editor/ic10_mode.ts similarity index 98% rename from www/src/js/editor/ic10_mode.ts rename to www/src/ts/editor/ic10_mode.ts index 6977e05..6a81103 100644 --- a/www/src/js/editor/ic10_mode.ts +++ b/www/src/ts/editor/ic10_mode.ts @@ -4,7 +4,6 @@ import { rules as highlightRules } from "./ic10_highlight_rules"; //Support function to create Ace mode function createAceMode(modeName: string, highlighterObj: ace.Ace.HighlightRulesMap) { (ace as any).define(modeName, ["require", "exports", "module"], function (require: any, exports: any, module: any) { - console.log(require); var oop = require("ace/lib/oop"); var TextMode = require("ace/mode/text").Mode; var TextHighlightRules = require("ace/mode/text_highlight_rules").TextHighlightRules; diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts new file mode 100644 index 0000000..8c170b6 --- /dev/null +++ b/www/src/ts/editor/index.ts @@ -0,0 +1,590 @@ +import { + ace, + Ace, + Range, + AceLanguageClient, + setupLspWorker, +} from "./ace"; + +import { LanguageProvider } from "ace-linters/types/language-provider"; + +import "@shoelace-style/shoelace/dist/components/dialog/dialog.js"; +import "@shoelace-style/shoelace/dist/components/button-group/button-group.js"; +import "@shoelace-style/shoelace/dist/components/button/button.js"; +import "@shoelace-style/shoelace/dist/components/input/input.js"; +import "@shoelace-style/shoelace/dist/components/radio-button/radio-button.js"; +import "@shoelace-style/shoelace/dist/components/radio-group/radio-group.js"; +import "@shoelace-style/shoelace/dist/components/switch/switch.js"; +import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.js"; +import SlRadioGroup from "@shoelace-style/shoelace/dist/components/radio-group/radio-group.js"; +import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; +import SlSwitch from "@shoelace-style/shoelace/dist/components/switch/switch.js"; + +declare global { + interface Window { + Editor: IC10Editor; + } +} + +import { BaseElement, defaultCss } from "../components"; +import { html } from "lit"; +import { Ref, createRef, ref } from "lit/directives/ref.js"; +import { customElement, property, query } from "lit/decorators.js"; +import { editorStyles } from "./styles"; +import "./shortcuts_ui"; +import { AceKeyboardShortcuts } from "./shortcuts_ui"; + +@customElement("ace-ic10") +export class IC10Editor extends BaseElement { + mode: string; + settings: { + keyboard: string; + cursor: string; + fontSize: number; + relativeLineNumbers: boolean; + }; + sessions: Map; + + @property({ type: Number }) + accessor active_session: number = 0; + + active_line_markers: Map = new Map(); + languageProvider?: LanguageProvider; + // ui: IC10EditorUI; + + static styles = [...defaultCss, editorStyles]; + + initialInit: boolean; + editorDiv: HTMLElement; + editorContainerDiv: HTMLElement; + editorStatusbarDiv: HTMLElement; + editor: Ace.Editor; + statusBar: any; + snippetManager: any; + observer: ResizeObserver; + private _statusbarIndex: number; + private _statusbar: any; + vScrollbarObserver: IntersectionObserver; + hScrollbarObserver: IntersectionObserver; + stylesObserver: MutationObserver; + stylesAdded: string[]; + tooltipObserver: MutationObserver; + + @query(".e-kb-shortcuts") accessor kbShortcuts: AceKeyboardShortcuts; + + @query(".e-settings-dialog") accessor settingDialog: SlDialog; + + constructor() { + super(); + console.log("constructing editor"); + + window.Editor = this; + this.mode = "ace/mode/ic10"; + + this.settings = { + keyboard: "ace", + cursor: "ace", + fontSize: 16, + relativeLineNumbers: false, + }; + + this.sessions = new Map(); + this.active_line_markers = new Map(); + + // this.ui = new IC10EditorUI(this); + } + + protected render() { + const result = html` +
+
+
+
+ + + Ace + Vim + Emacs + Sublime + VS Code + + + Ace + Slim + Smooth + Smooth And Slim + Wide + + + Relative Line Numbers + + + `; + return result; + } + + connectedCallback(): void { + super.connectedCallback(); + this.loadEditorSettings(); + } + + async firstUpdated() { + console.log("editor firstUpdated"); + if (!ace.require("ace/ext/language_tools")) { + await import("ace-builds/src-noconflict/ext-language_tools"); + } + if (!ace.require("ace/ext/statusbar")) { + await import("ace-builds/src-noconflict/ext-statusbar"); + } + if (!ace.require("ace/mode/ic10")) { + await import("./ic10_mode"); + } + // patch prompt ext + ace.config.setModuleLoader( + "ace/ext/prompt", + () => import("./prompt_patch"), + ); + ace.config.setDefaultValue("session", "theme", "ace/theme/one_dark"); + + this.initialInit = true; + + this.editorDiv = this.shadowRoot?.getElementById("editor") as HTMLElement; + this.editorContainerDiv = this.shadowRoot?.getElementById( + "editorContainer", + ) as HTMLElement; + this.editorStatusbarDiv = this.shadowRoot?.getElementById( + "editorStatusbar", + ) as HTMLElement; + + this.editor = ace.edit(this.editorDiv, { + mode: this.mode, + enableBasicAutocompletion: true, + enableLiveAutocompletion: true, + enableSnippets: true, + theme: "ace/theme/one_dark", + fontSize: 16, + customScrollbar: false, + firstLineNumber: 0, + printMarginColumn: 52, + placeholder: "Your code goes here ...", + }); + this.editor.renderer.attachToShadowRoot(); + this.statusBar = ace.require("ace/ext/statusbar").StatusBar; + this.snippetManager = ace.require("ace/snippets").snippetManager; + + this.stylesAdded = []; + const stylesToMove: string[] = ["vimMode"]; + const stylesToCopy: string[] = ["autocompletion.css"]; + const that = this; + + this.stylesObserver = new MutationObserver((_mutations, _observer) => { + // ace adds nodes, ours should be + for (const sheet of document.head.querySelectorAll("style")) { + if (!that.stylesAdded.includes(sheet.id)) { + if (stylesToMove.includes(sheet.id)) { + that.shadowRoot?.appendChild(sheet); + that.stylesAdded.push(sheet.id); + } else if (stylesToCopy.includes(sheet.id)) { + let new_sheet = sheet.cloneNode() as HTMLStyleElement; + new_sheet.id = `${sheet.id}_clone`; + that.shadowRoot?.appendChild(new_sheet); + that.stylesAdded.push(sheet.id); + } + } + } + }); + + this.stylesObserver.observe(document.head, { + attributes: false, + childList: true, + subtree: true, + characterData: false, + }); + + // Fornow this seems uneeded, tooltips seem to work better on the lightdom + // this.tooltipObserver = new MutationObserver((_mutations, _observer) => { + // // we want the toltips on the shadow-dom not the light dom body + // for (const node of document.body.querySelectorAll( + // ".ace_tooltip, .ace_editor.ace_autocomplete", + // )) { + // that.shadowRoot?.appendChild(node); + // } + // }); + // this.tooltipObserver.observe(document.body, { + // attributes: false, + // childList: true, + // subtree: true, + // characterData: false, + // }); + + this.sessions.set(this.active_session, this.editor.getSession()); + this.bindSession( + this.active_session, + this.sessions.get(this.active_session), + ); + this.active_line_markers.set(this.active_session, null); + + const worker = await setupLspWorker(); + this.setupLsp(worker); + + // when the CSS resize Property is added (to a container-div or ace-ic10 ) + // the correct sizing is maintained (after user resize) + document.addEventListener("mouseup", function (e) { + that.resizeEditor(); + }); + + this.observer = new ResizeObserver(function (entries) { + for (const _entry of entries) { + that.resizeEditor(); + } + }); + + this.observer.observe(this.editorContainerDiv); + this.kbShortcuts.editor = this.editor; + this.kbShortcuts.requestUpdate(); + + this.initializeEditor(); + } + + initializeEditor() { + let editor = this.editor; + const that = this; + + window.App!.session.onLoad(((e: CustomEvent) => { + const session = e.detail; + const updated_ids: number[] = []; + for (const [id, _] of session.programs) { + updated_ids.push(id); + that.createOrSetSession(id, session.programs.get(id)); + } + that.activateSession(that.active_session); + for (const [id, _] of that.sessions) { + if (!updated_ids.includes(id)) { + that.destroySession(id); + } + } + }) as EventListener); + window.App!.session.loadFromFragment(); + + window.App!.session.onActiveLine(((e: CustomEvent) => { + const session = window.App?.session!; + const id = e.detail; + const active_line = session.getActiveLine(id); + if (typeof active_line !== "undefined") { + const marker = that.active_line_markers.get(id); + if (marker) { + that.sessions.get(id)?.removeMarker(marker); + that.active_line_markers.set(id, null); + } + const session = that.sessions.get(id); + if (session) { + that.active_line_markers.set( + id, + session.addMarker( + new Range(active_line, 0, active_line, 1), + "vm_ic_active_line", + "fullLine", + true, + ), + ); + if (that.active_session == id) { + // editor.resize(true); + // TODO: Scroll to line if vm was stepped + //that.editor.scrollToLine(active_line, true, true, ()=>{}) + } + } + } + }) as EventListener); + + // change -> possibility to allow saving the value without having to wait for blur + editor.on("change", () => this.editorChangeAction()); + + this._statusbarIndex = 1; + this._statusbar = new this.statusBar( + this.editor, + this.editorStatusbarDiv, + this._statusbarIndex, + ); + this._statusbar.updateStatus(this.editor); + + this.vScrollbarObserver = new IntersectionObserver( + this._vScrollbarHandler.bind(this), + { root: null }, + ); + this.vScrollbarObserver.observe( + this.shadowRoot!.querySelector(".ace_scrollbar-v")!, + ); + + this.hScrollbarObserver = new IntersectionObserver( + this._hScrollbarHandler.bind(this), + { root: null }, + ); + this.hScrollbarObserver.observe( + this.shadowRoot!.querySelector(".ace_scrollbar-h")!, + ); + + editor.commands.addCommands([ + { + name: "showSettingsMenu", + // description: "Show settings menu", + bindKey: { win: "Ctrl-,", mac: "Command-," }, + exec: (_editor: Ace.Editor) => { + that.settingDialog.show(); + }, + }, + { + name: "showKeyboardShortcuts", + bindKey: { + win: "Ctrl-Alt-h", + mac: "Command-Alt-h", + }, + exec: (_editor: Ace.Editor) => { + that.kbShortcuts.show(); + }, + }, + ]); + + this.updateEditorSettings(); + const keyboardRadio = this.renderRoot.querySelector( + "#editorKeyboardRadio", + )! as SlRadioGroup; + const cursorRadio = this.renderRoot.querySelector( + "#editorCursorRadio", + )! as SlRadioGroup; + const fontSize = this.renderRoot.querySelector( + "#editorFontSize", + )! as SlInput; + const relativeLineNumbers = this.renderRoot.querySelector( + "#editorRelativeLineNumbers", + )! as SlSwitch; + + keyboardRadio.addEventListener("sl-change", (_e) => { + that.settings.keyboard = keyboardRadio.value; + that.updateEditorSettings(); + that.saveEditorSettings(); + }); + cursorRadio?.addEventListener("sl-change", (_e) => { + that.settings.cursor = cursorRadio.value; + that.updateEditorSettings(); + that.saveEditorSettings(); + }); + fontSize?.addEventListener("sl-change", (_e) => { + that.settings.fontSize = parseInt(fontSize.value); + that.updateEditorSettings(); + that.saveEditorSettings(); + }); + relativeLineNumbers?.addEventListener("sl-change", (_e) => { + that.settings.relativeLineNumbers = relativeLineNumbers.checked; + that.updateEditorSettings(); + that.saveEditorSettings(); + }); + } + + resizeEditor() { + if (this.editor == undefined) { + this.addEventListener("editor-ready", () => this._resizeEditor(), { + once: true, + }); + } else { + this._resizeEditor(); + } + } + + /** @private */ + _resizeEditor() { + this.editor.resize(); + } + + /** @private */ + _vScrollbarHandler() { + var vScrollbar = this.shadowRoot?.querySelector( + ".ace_scrollbar-v", + ) as HTMLDivElement; + if (vScrollbar.style.display === "none") { + this.editorStatusbarDiv.style.right = "4px"; + } else { + let width = vScrollbar.offsetWidth - vScrollbar.clientWidth; + if (width === undefined || width === null) { + width = 20; + } + this.editorStatusbarDiv.style.right = width + 4 + "px"; + } + } + + /** @private */ + _hScrollbarHandler() { + var hScrollbar = this.shadowRoot?.querySelector( + ".ace_scrollbar-h", + ) as HTMLDivElement; + if (hScrollbar.style.display === "none") { + this.editorStatusbarDiv.style.bottom = "4px"; + } else { + let height = hScrollbar.offsetHeight - hScrollbar.clientHeight; + if (height === undefined || height === null) { + height = 20; + } + this.editorStatusbarDiv.style.bottom = height + 4 + "px"; + } + } + + editorChangeAction() { + this.dispatchEvent( + new CustomEvent("editor-change", { + detail: { + value: this.editorValue, + }, + }), + ); + } + + get editorValue() { + if (this.editor == undefined) { + return ""; + } + return this.editor.getValue(); + } + + set editorValue(value) { + if (this.editor == undefined || value === undefined) { + return; + } + this.editor.setValue(value, 1); + } + + focusEditor() { + if (this.editor == undefined) { + this.addEventListener("editor-ready", (e) => this.editor.focus(), { + once: true, + }); + } else { + this.editor.focus(); + } + } + + createOrSetSession(session_id: number, content: any) { + if (!this.sessions.hasOwnProperty(session_id)) { + this.newSession(session_id); + } + this.sessions.get(session_id)?.setValue(content); + } + + newSession(session_id: number) { + if (this.sessions.hasOwnProperty(session_id)) { + return false; + } + const session = ace.createEditSession("", this.mode as any); + session.setOptions({ + firstLineNumber: 0, + }); + this.sessions.set(session_id, session); + this.bindSession(session_id, session); + } + + setupLsp(lsp_worker: Worker) { + const serverData = { + module: () => import("ace-linters/build/language-client"), + modes: "ic10", + type: "webworker", + worker: lsp_worker, + }; + // Create a language provider for web worker + this.languageProvider = AceLanguageClient.for(serverData as any); + this.languageProvider.registerEditor(this.editor); + } + + activateSession(session_id: number) { + if (!this.sessions.get(session_id)) { + return false; + } + const session = this.sessions.get(session_id); + this.editor?.setSession(session); + const mode = ace.require(this.mode); + const options = mode?.options ?? {}; + this.languageProvider?.setSessionOptions(session, options); + this.active_session = session_id; + return true; + } + + loadEditorSettings() { + const saved_settings = window.localStorage.getItem("editorSettings"); + if (saved_settings !== null && saved_settings.length > 0) { + try { + const saved = JSON.parse(saved_settings); + const temp = Object.assign({}, this.settings, saved); + Object.assign(this.settings, temp); + } catch (e) { + console.log("error loading editor settings", e); + } + } + } + + saveEditorSettings() { + const toSave = JSON.stringify(this.settings); + window.localStorage.setItem("editorSettings", toSave); + } + + updateEditorSettings() { + if (this.settings.keyboard === "ace") { + this.editor.setOption("keyboardHandler", null); + } else { + this.editor.setOption( + "keyboardHandler", + `ace/keyboard/${this.settings.keyboard}`, + ); + } + this.editor.setOption("cursorStyle", this.settings.cursor as any); + this.editor.setOption("fontSize", this.settings.fontSize); + this.editor.setOption( + "relativeLineNumbers", + this.settings.relativeLineNumbers, + ); + } + + destroySession(session_id: number) { + if (!this.sessions.hasOwnProperty(session_id)) { + return false; + } + if (!(Object.keys(this.sessions).length > 1)) { + return false; + } + const session = this.sessions.get(session_id); + this.sessions.delete(session_id); + if ((this.active_session = session_id)) { + this.activateSession(this.sessions.entries().next().value); + } + session?.destroy(); + return true; + } + + bindSession(session_id: number, session?: Ace.EditSession) { + if (session) { + session.on("change", () => { + var val = session.getValue(); + window.App?.session.setProgramCode(session_id, val); + }); + } + } +} diff --git a/www/src/ts/editor/lspWorker.ts b/www/src/ts/editor/lspWorker.ts new file mode 100644 index 0000000..7204a37 --- /dev/null +++ b/www/src/ts/editor/lspWorker.ts @@ -0,0 +1,263 @@ +import { ServerConfig, serve } from "ic10lsp_wasm"; + +export const encoder = new TextEncoder(); +export const decoder = new TextDecoder(); + +export default class Bytes { + static encode(input: string) { + return encoder.encode(input); + } + + static decode(input: Uint8Array) { + return decoder.decode(input); + } + + static append(constructor: Uint8ArrayConstructor, ...arrays: Uint8Array[]) { + let totalLength = 0; + for (const arr of arrays) { + totalLength += arr.length; + } + const result = new constructor(totalLength); + let offset = 0; + for (const arr of arrays) { + result.set(arr, offset); + offset += arr.length; + } + return result; + } +} + +export class AsyncStreamQueueUint8Array + implements AsyncIterator { + promises: Promise[] = []; + resolvers: ((value: Uint8Array) => void)[] = []; + observers: any = []; + + closed = false; + tag = ""; + stream: WritableStream; + + static __add( + promises: Promise[], + resolvers: ((value: Uint8Array) => void)[], + ) { + promises.push( + new Promise((resolve: (value: Uint8Array) => void) => { + resolvers.push(resolve); + }), + ); + } + + static __enqueue( + closed: boolean, + promises: Promise[], + resolvers: ((value: Uint8Array) => void)[], + item: Uint8Array, + ) { + if (!closed) { + if (!resolvers.length) + AsyncStreamQueueUint8Array.__add(promises, resolvers); + const resolve = resolvers.shift()!; + resolve(item); + } + } + + constructor(tag: string) { + this.tag = tag; + const closed = this.closed; + // invariant: at least one of the arrays is empty + const promises = this.promises; + const resolvers = this.resolvers; + this.stream = new WritableStream({ + write(item) { + AsyncStreamQueueUint8Array.__enqueue(closed, promises, resolvers, item); + }, + }); + } + _add() { + return AsyncStreamQueueUint8Array.__add(this.promises, this.resolvers); + } + + enqueue(item: Uint8Array) { + return AsyncStreamQueueUint8Array.__enqueue( + this.closed, + this.promises, + this.resolvers, + item, + ); + } + + dequeue() { + if (!this.promises.length) this._add(); + const item = this.promises.shift()!; + return item; + } + + // now some utilities: + isEmpty() { + // there are no values available + return !this.promises.length; // this.length <= 0 + } + + isBlocked() { + // it's waiting for values + return !!this.resolvers.length; // this.length < 0 + } + + get length() { + return this.promises.length - this.resolvers.length; + } + + /* return() { + return new Promise(() => { }) + } + + throw(err: any) { + return new Promise((_resolve, reject) => { + reject(err); + }) + } */ + + async next(): Promise> { + const done = false; + // console.log(`AsyncStream(${this.tag}) waiting for message`) + const value = await this.dequeue(); + // console.log(`AsyncStream(${this.tag}) got message`, decoder.decode(value)) + return { done, value }; + } + + [Symbol.asyncIterator]() { + return this; + } + + get locked() { + return this.stream.locked; + } + + abort(reason: any) { + return this.stream.abort(reason); + } + + close() { + return this.stream.close(); + } + + getWriter() { + return this.stream.getWriter(); + } +} +let clientMsgStream = new AsyncStreamQueueUint8Array("client"); +let serverMsgStream = new AsyncStreamQueueUint8Array("server"); + +async function start() { + let config = new ServerConfig(clientMsgStream, serverMsgStream); + await serve(config); +} + +function fixup(data: { + hasOwnProperty: (arg0: string) => any; + params: { + hasOwnProperty: (arg0: string) => any; + rootUri: string | null; + textDocument: { hasOwnProperty: (arg0: string) => any; uri: string }; + }; +}) { + if ( + data.hasOwnProperty("params") && + data.params.hasOwnProperty("rootUri") && + data.params.rootUri === "" + ) { + data.params.rootUri = null; + } + if ( + data.hasOwnProperty("params") && + data.params.hasOwnProperty("textDocument") + ) { + if (data.params.textDocument.hasOwnProperty("uri")) { + const match = data.params.textDocument.uri.match(/^file:\/\/\/(.*)/); + if (null == match) { + data.params.textDocument.uri = `file:///${data.params.textDocument.uri}`; + } + } + data.params.rootUri = null; + } + return data; +} + +function sendClient(data: any) { + data = fixup(data); + const data_j = JSON.stringify(data); + const msg = `Content-Length: ${data_j.length}\r\n\r\n${data_j}`; + clientMsgStream.enqueue(encoder.encode(msg)); +} + +async function listen() { + let contentLength: number | null = null; + let buffer = new Uint8Array(); + console.log("Worker: listening for lsp messages..."); + for await (const bytes of serverMsgStream) { + buffer = Bytes.append(Uint8Array, buffer, bytes); + let waitingForFullContent = false; + let messagesThisLoop = 0; + + // sometimes the buffer can get more than one message in it, loop untill we need to wait for more. + while (buffer.length > 0 && !waitingForFullContent) { + // check if the content length is known + if (null == contentLength) { + // if not, try to match the prefixed headers + const match = Bytes.decode(buffer).match(/^Content-Length:\s*(\d+)\s*/); + if (null == match) continue; + + // try to parse the content-length from the headers + const length = parseInt(match[1]); + if (isNaN(length)) throw new Error("invalid content length"); + + // slice the headers since we now have the content length + buffer = buffer.slice(match[0].length); + + // set the content length + contentLength = length; + } + + // if the buffer doesn't contain a full message; await another iteration + if (buffer.length < contentLength) { + waitingForFullContent = true; + continue; + } + messagesThisLoop += 1; + + // decode buffer up to `contentLength` to a string (leave the rest for the next message) + const delimited = Bytes.decode(buffer.slice(0, contentLength)); + + // reset the buffer + buffer = buffer.slice(contentLength); + // reset the contentLength + contentLength = null; + + try { + const message = JSON.parse(delimited); + console.log( + "Lsp Message:", + `| This Loop: ${messagesThisLoop} |`, + message, + ); + postMessage(message); + } catch (e) { + console.log("Error parsing Lsp Message:", e); + } + } + } + console.log("Worker: lsp message queue done?"); +} + +listen(); + +postMessage("ready"); + +onmessage = function (e) { + console.log("Client Message:", e.data); + sendClient(e.data); +}; + +console.log("Starting LSP..."); +start(); diff --git a/www/src/js/editor/prompt_patch.ts b/www/src/ts/editor/prompt_patch.ts similarity index 100% rename from www/src/js/editor/prompt_patch.ts rename to www/src/ts/editor/prompt_patch.ts diff --git a/www/src/ts/editor/shortcuts_ui.ts b/www/src/ts/editor/shortcuts_ui.ts new file mode 100644 index 0000000..9172a39 --- /dev/null +++ b/www/src/ts/editor/shortcuts_ui.ts @@ -0,0 +1,78 @@ +import { BaseElement, defaultCss } from "../components"; +import { html, css, PropertyValueMap } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { ace, Ace } from "./ace"; + +import "@shoelace-style/shoelace/dist/components/drawer/drawer.js"; + +import { SlDrawer } from "@shoelace-style/shoelace"; +import { Ref, createRef, ref } from "lit/directives/ref.js"; + +@customElement("ace-kb-menu") +export class AceKeyboardShortcuts extends BaseElement { + static styles = [ + defaultCss, + css` + .command { + color: #c678dd; + font-weight: normal; + } + .entry:hover { + background-color: var(--sl-color-neutral-100); + transition: all 0.3s; + } + .key { + color: var(--sl-color-neutral-1000); + font-weight: bold; + } + `, + ]; + + editor?: Ace.Editor; + @query('.drawer') accessor drawer: SlDrawer; + + constructor() { + super(); + } + + // protected shouldUpdate(_changedProperties: PropertyValueMap | Map): boolean { + // return true; + // } + + protected async firstUpdated() { + if (!ace.require("ace/ext/menu_tools/get_editor_keyboard_shortcuts")) { + await import("ace-builds/src-noconflict/ext-keybinding_menu"); + } + } + + protected render() { + var kbs: any[] = []; + if (this.editor) { + const getEditorKeybordShortcuts = ace.require( + "ace/ext/menu_tools/get_editor_keyboard_shortcuts", + ).getEditorKeybordShortcuts; + kbs = getEditorKeybordShortcuts(this.editor); + } + return html` + +
+ ${kbs.map( + (kb: any) => + html`
+ ${kb.command} : + ${kb.key} +
`, + )} +
+
+ `; + } + + show() { + this.drawer.show(); + } + + hide() { + this.drawer.hide(); + } +} diff --git a/www/src/ts/editor/styles.ts b/www/src/ts/editor/styles.ts new file mode 100644 index 0000000..746d3e6 --- /dev/null +++ b/www/src/ts/editor/styles.ts @@ -0,0 +1,350 @@ +import { css } from "lit"; +export const editorStyles = css` + :host { + display: block; + width: 100%; + height: 100%; + } + #editor { + // border: 1px solid; + // border-radius: 4px; + // @apply --ace-widget-editor; + } + #editorStatusbar { + z-index: 9 !important; + position: absolute !important; + right: 4px; + bottom: 4px; + } + .ace_status-indicator { + background-color: #777; + color: white; + text-align: center; + border: none; + border-radius: 7px; + padding-right: 3px; + padding-left: 3px; + padding-bottom: 1px; + font-size: small; + opacity: 0.9; + } + .ace_marker-layer .green { + // background-color: ; + // color: ; + position: absolute; + } + .ace_marker-layer .darkGrey { + // background-color: ; + // color: ; + position: absolute; + } + .ace_marker-layer .red { + // background-color: ; + // color: ; + position: absolute; + } + .ace_marker-layer .blue { + // background-color: ; + // color: ; + position: absolute; + } + .ace_marker-layer .orange { + background-color: #ff9900; + color: #555; + position: absolute; + } + .ace_placeholder { + color: #808080 !important; + // font-family: "" !important; + transform: scale(1) !important; + opacity: 1 !important; + font-style: italic !important; + } + /* ------------------------------------------------------------------------------------------ + * Editor Search Form + * --------------------------------------------------------------------------------------- */ + .ace_search { + background-color: #2b3035; + color: #dee2e6; + border: 1px solid #495057; + border-top: 0 none; + overflow: hidden; + margin: 0; + padding: 4px 6px 0 4px; + position: absolute; + top: 0; + z-index: 99; + white-space: normal; + } + + .ace_search.left { + border-left: 0 none; + border-radius: 0px 0px 5px 0px; + left: 0; + } + + .ace_search.right { + border-radius: 0px 0px 0px 5px; + border-right: 0 none; + right: 0; + } + + .ace_search_form, + .ace_replace_form { + margin: 0 20px 4px 0; + overflow: hidden; + line-height: 1.9; + } + + .ace_replace_form { + margin-right: 0; + } + + .ace_search_form.ace_nomatch { + outline: 1px solid red; + } + + .ace_search_field { + border-radius: 3px 0 0 3px; + background-color: #343a40; + color: #dee2e6; + border: 1px solid #41464b; + border-right: 0 none; + outline: 0; + padding: 0; + font-size: inherit; + margin: 0; + line-height: inherit; + padding: 0 6px; + min-width: 17em; + vertical-align: top; + min-height: 1.8em; + box-sizing: content-box; + } + + .ace_searchbtn { + border: 1px solid #6c757d; + line-height: inherit; + display: inline-block; + padding: 0 6px; + background: #343a40; + border-right: 0 none; + border-left: 1px solid #6c757d; + cursor: pointer; + margin: 0; + position: relative; + color: #fff; + } + + .ace_searchbtn:last-child { + border-radius: 0 3px 3px 0; + border-right: 1px solid #6c757d; + } + + .ace_searchbtn:disabled { + background: none; + cursor: default; + } + + .ace_searchbtn:hover { + background-color: #161719; + } + + .ace_searchbtn.prev, + .ace_searchbtn.next { + padding: 0px 0.7em; + } + + .ace_searchbtn.prev:after, + .ace_searchbtn.next:after { + content: ""; + border: solid 2px #6c757d; + width: 0.5em; + height: 0.5em; + border-width: 2px 0 0 2px; + display: inline-block; + transform: rotate(-45deg); + } + + .ace_searchbtn.next:after { + border-width: 0 2px 2px 0; + } + + .ace_searchbtn_close { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) + no-repeat 50% 0; + border-radius: 50%; + border: 0 none; + color: #343a40; + cursor: pointer; + font: 16px/16px Arial; + padding: 0; + height: 14px; + width: 14px; + top: 9px; + right: 7px; + position: absolute; + } + + .ace_searchbtn_close:hover { + background-color: #656565; + background-position: 50% 100%; + color: white; + } + + .ace_button { + background-color: #343a40; + margin-left: 2px; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -o-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + opacity: 0.7; + border: 1px solid #6c757d; + padding: 1px; + box-sizing: border-box !important; + color: #fff; + } + + .ace_button:hover { + background-color: #161719; + opacity: 1; + } + + .ace_button:active { + background-color: #6c757d; + } + + .ace_button.checked { + background-color: #6c757d; + border-color: #6c757d; + opacity: 1; + } + + .ace_search_options { + margin-bottom: 3px; + text-align: right; + -webkit-user-select: none; + -moz-user-select: none; + -o-user-select: none; + -ms-user-select: none; + user-select: none; + clear: both; + } + + .ace_search_counter { + float: left; + font-family: arial; + padding: 0 8px; + } + + /* ---------------- + * Ace Tooltips + * --------------- */ + code { + // color: #e685b5 + color: #c678dd; + } + + .ace_tooltip code { + font-style: italic; + font-size: 12px; + } + .ace_tooltip { + background: #282c34; + color: #c1c1c1; + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + } + + .ace_tooltip.ace_dark { + background: #282c34; + color: #c1c1c1; + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + } + + /* ---------------- + * Ace tooltip + * --------------- */ + + .ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight { + color: #c678dd; + } + + .ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: rgba(76, 87, 103, 0.19); + } + + .ace_dark.ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid rgba(8, 121, 144, 0.5); + background: rgba(76, 87, 103, 0.19); + } + + .ace_dark.ace_editor.ace_autocomplete { + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + line-height: 1.4; + background: #282c34; + color: #c1c1c1; + } + + .ace_editor.ace_autocomplete { + width: 300px; + z-index: 200000; + border: 1px #484747 solid; + position: fixed; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + line-height: 1.4; + background: #282c34; + color: #c1c1c1; + } + + .ace_editor.ace_autocomplete .ace_completion-highlight { + color: #c678dd; + } + + .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: rgba(76, 87, 103, 0.19); + } + + .ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid rgba(8, 121, 144, 0.5); + background: rgba(76, 87, 103, 0.19); + } + + .vm_ic_active_line { + position: absolute; + background: rgba(121, 82, 179, 0.4); + z-index: 20; + } + /* ---------------------- + * Editor Setting dialog + * ---------------------- */ + .label-on-left { + --label-width: 3.75rem; + --gap-width: 1rem; + } + + .label-on-left + .label-on-left { + margin-top: var(--sl-spacing-medium); + } + + .label-on-left::part(form-control) { + display: grid; + grid: auto / var(--label-width) 1fr; + gap: var(--sl-spacing-3x-small) var(--gap-width); + align-items: center; + } + + .label-on-left::part(form-control-label) { + text-align: right; + } + + .label-on-left::part(form-control-help-text) { + grid-column-start: 2; + } +`; diff --git a/www/src/ts/index.ts b/www/src/ts/index.ts new file mode 100644 index 0000000..1c2dcee --- /dev/null +++ b/www/src/ts/index.ts @@ -0,0 +1,65 @@ +import { IC10Editor } from "./editor"; +import { Session } from "./session"; +import { VirtualMachine } from "./virtual_machine"; +import { docReady, openFile, saveFile } from "./utils"; +// import { makeRequest } from "./utils"; + +// const dbPromise = makeRequest({ method: "GET", url: "/data/database.json"}); +// const dbPromise = fetch("/data/database.json").then(resp => resp.json()); + +// docReady(() => { +// App.vm = new VirtualMachine(); +// +// dbPromise.then((db) => App.vm.setupDeviceDatabase(db)); +// +// const init_session_id = App.vm.devices.get(0).id; +// +// // App.editor = new IC10Editor(init_session_id); +// +// // setupLspWorker().then((worker) => { +// // App.editor.setupLsp(worker); +// // }); +// +// // Menu +// document.getElementById("mainMenuShare").addEventListener( +// "click", +// (_event) => { +// const link = document.getElementById("shareLinkText") as HTMLInputElement; +// link.setAttribute("value", window.location.href); +// link.setSelectionRange(0, 0); +// }, +// { capture: true }, +// ); +// document.getElementById("shareLinkCopyButton").addEventListener( +// "click", +// (event) => { +// event.preventDefault(); +// const link = document.getElementById("shareLinkText") as HTMLInputElement; +// link.select(); +// link.setSelectionRange(0, 99999); +// navigator.clipboard.writeText(link.value); +// }, +// { capture: true }, +// ); +// document.getElementById("mainMenuOpenFile").addEventListener( +// "click", +// (_event) => { +// openFile(App.editor.editor); +// }, +// { capture: true }, +// ); +// document.getElementById("mainMenuSaveAs").addEventListener( +// "click", +// (_event) => { +// saveFile(App.editor.editor.getSession().getValue()); +// }, +// { capture: true }, +// ); +// document.getElementById("mainMenuKeyboardShortcuts").addEventListener( +// "click", +// (_event) => { +// App.editor.editor.execCommand("showKeyboardShortcuts"); +// }, +// { capture: true }, +// ); +// }); diff --git a/www/src/ts/main.ts b/www/src/ts/main.ts new file mode 100644 index 0000000..2d82601 --- /dev/null +++ b/www/src/ts/main.ts @@ -0,0 +1,10 @@ +import "@popperjs/core"; +import "../scss/styles.scss"; +import { Dropdown, Modal } from "bootstrap"; +import "./app"; + +// A dependency graph that contains any wasm must all be imported +// asynchronously. This `main.js` file does the single async import, so +// that no one else needs to worry about it again. +// import("./index") +// .catch(e => console.error("Error importing `index.ts`:", e)); diff --git a/www/src/js/session.ts b/www/src/ts/session.ts similarity index 63% rename from www/src/js/session.ts rename to www/src/ts/session.ts index 652ad5b..b34a445 100644 --- a/www/src/js/session.ts +++ b/www/src/ts/session.ts @@ -1,22 +1,21 @@ - const demoCode = `# Highlighting Demo # This is a comment # Hover a define id anywhere to see it's definition -define a_def 10 +define a_def 10 # Hover HASH("String")'s to see computed crc32 # hover here vvvvvvvvvvvvvvvv -define a_hash HASH("This is a String") +define a_hash HASH("This is a String") # hover over an alias anywhere in the code # to see it's definition -alias a_var r0 +alias a_var r0 alias a_device d0 -# instructions have Auto Completion, +# instructions have Auto Completion, # numeric logic types are identified on hover -s db 12 0 +s db 12 0 # ^^ # hover here @@ -42,9 +41,9 @@ move r0 HASH("AccessCardBlack") push r0 beqzal r1 test -# -2045627372 is the crc32 hash of a SolarPanel, +# -2045627372 is the crc32 hash of a SolarPanel, # hover it to see the documentation! -# vvvvvvvvvv +# vvvvvvvvvv move r1 -2045627372 jal test move r1 $FF @@ -59,31 +58,28 @@ test: add r15 r15 1 j ra -` +`; -interface SessionCbFn { - (param: Session): void; -} +import type { ICError } from "ic10emu_wasm"; -class Session { +export class Session extends EventTarget { _programs: Map; - _onLoadCallbacks: SessionCbFn[]; - _activeSession: number; + _errors: Map; + _activeIC: number; _activeLines: Map; - _onActiveLineCallbacks: SessionCbFn[]; _activeLine: number; - private _save_timeout: ReturnType; + _save_timeout?: ReturnType; constructor() { + super(); this._programs = new Map(); - this._save_timeout = null; - this._onLoadCallbacks = []; - this._activeSession = 0; + this._errors = new Map(); + this._save_timeout = undefined; + this._activeIC = 0; this._activeLines = new Map(); - this._onActiveLineCallbacks = []; this.loadFromFragment(); const that = this; - window.addEventListener('hashchange', (_event) => { + window.addEventListener("hashchange", (_event) => { that.loadFromFragment(); }); } @@ -94,10 +90,26 @@ class Session { set programs(programs) { this._programs = new Map([...programs]); + this._fireOnLoad(); } - get activeSession() { - return this._activeSession; + get activeIC() { + return this._activeIC; + } + + set activeIC(val: number) { + this._activeIC = val; + this.dispatchEvent( + new CustomEvent("session-active-ic", { detail: this.activeIC }), + ); + } + + onActiveIc(callback: EventListenerOrEventListenerObject) { + this.addEventListener("session-active-ic", callback); + } + + get errors() { + return this._errors; } getActiveLine(id: number) { @@ -106,7 +118,7 @@ class Session { setActiveLine(id: number, line: number) { this._activeLines.set(id, line); - this._fireOnActiveLine(); + this._fireOnActiveLine(id); } set activeLine(line: number) { @@ -118,34 +130,55 @@ class Session { this.save(); } - onLoad(callback: SessionCbFn) { - this._onLoadCallbacks.push(callback); + setProgramErrors(id: number, errors: ICError[]) { + this._errors.set(id, errors); + this._fireOnErrors([id]); + } + + _fireOnErrors(ids: number[]) { + this.dispatchEvent( + new CustomEvent("session-errors", { + detail: ids, + }), + ); + } + + onErrors(callback: EventListenerOrEventListenerObject) { + this.addEventListener("session-errors", callback); + } + + onLoad(callback: EventListenerOrEventListenerObject) { + this.addEventListener("session-load", callback); } _fireOnLoad() { - for (const callback of this._onLoadCallbacks) { - callback(this); - } + this.dispatchEvent( + new CustomEvent("session-load", { + detail: this, + }), + ); } - onActiveLine(callback: SessionCbFn) { - this._onActiveLineCallbacks.push(callback); + onActiveLine(callback: EventListenerOrEventListenerObject) { + this.addEventListener("active-line", callback); } - _fireOnActiveLine() { - for (const callback of this._onActiveLineCallbacks) { - callback(this); - } + _fireOnActiveLine(id: number) { + this.dispatchEvent( + new CustomEvent("active-line", { + detail: id, + }), + ); } save() { if (this._save_timeout) clearTimeout(this._save_timeout); this._save_timeout = setTimeout(() => { this.saveToFragment(); - if (window.App.vm) { - window.App.vm.updateCode(); + if (window.App!.vm) { + window.App!.vm.updateCode(); } - this._save_timeout = null; + this._save_timeout = undefined; }, 1000); } @@ -160,7 +193,6 @@ class Session { console.log("Error compressing content fragment:", e); return; } - } async loadFromFragment() { @@ -176,7 +208,8 @@ class Session { if (bytes !== null) { const txt = new TextDecoder().decode(bytes); const data = getJson(txt); - if (data === null) { // backwards compatible + if (data === null) { + // backwards compatible this._programs = new Map([[0, txt]]); this, this._fireOnLoad(); return; @@ -191,7 +224,6 @@ class Session { } } } - } async function decompressFragment(c_bytes: ArrayBuffer) { try { @@ -222,26 +254,31 @@ async function* streamAsyncIterator(stream: ReadableStream) { if (done) return; yield value; } - } - finally { + } finally { reader.releaseLock(); } } function base64url_encode(buffer: ArrayBuffer) { - return btoa(Array.from(new Uint8Array(buffer), b => String.fromCharCode(b)).join('')) - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=+$/, ''); + return btoa( + Array.from(new Uint8Array(buffer), (b) => String.fromCharCode(b)).join(""), + ) + .replace(/\+/g, "-") + .replace(/\//g, "_") + .replace(/=+$/, ""); } function base64url_decode(value: string): ArrayBuffer { const m = value.length % 4; - return Uint8Array.from(atob( - value.replace(/-/g, '+') - .replace(/_/g, '/') - .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=') - ), c => c.charCodeAt(0)).buffer + return Uint8Array.from( + atob( + value + .replace(/-/g, "+") + .replace(/_/g, "/") + .padEnd(value.length + (m === 0 ? 0 : 4 - m), "="), + ), + (c) => c.charCodeAt(0), + ).buffer; } async function concatUintArrays(arrays: Uint8Array[]) { @@ -252,10 +289,8 @@ async function concatUintArrays(arrays: Uint8Array[]) { async function compress(bytes: ArrayBuffer) { const s = new Blob([bytes]).stream(); - const cs = s.pipeThrough( - new CompressionStream('deflate-raw') - ); - const chunks = []; + const cs = s.pipeThrough(new CompressionStream("deflate-raw")); + const chunks: Uint8Array[] = []; for await (const chunk of streamAsyncIterator(cs)) { chunks.push(chunk); } @@ -264,14 +299,10 @@ async function compress(bytes: ArrayBuffer) { async function decompress(bytes: ArrayBuffer) { const s = new Blob([bytes]).stream(); - const ds = s.pipeThrough( - new DecompressionStream('deflate-raw') - ); - const chunks = []; + const ds = s.pipeThrough(new DecompressionStream("deflate-raw")); + const chunks: Uint8Array[] = []; for await (const chunk of streamAsyncIterator(ds)) { chunks.push(chunk); } return await concatUintArrays(chunks); } - -export { Session, SessionCbFn }; diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts new file mode 100644 index 0000000..aec801b --- /dev/null +++ b/www/src/ts/utils.ts @@ -0,0 +1,179 @@ +import { Ace } from "ace-builds"; + +export function docReady(fn: () => void) { + // see if DOM is already available + if ( + document.readyState === "complete" || + document.readyState === "interactive" + ) { + setTimeout(fn, 1); + } else { + document.addEventListener("DOMContentLoaded", fn); + } +} + + +function replacer(key: any, value: any) { + if(value instanceof Map) { + return { + dataType: 'Map', + value: Array.from(value.entries()), // or with spread: value: [...value] + }; + } else { + return value; + } +} + +function reviver(_key: any, value: any) { + if(typeof value === 'object' && value !== null) { + if (value.dataType === 'Map') { + return new Map(value.value); + } + } + return value; +} + +export function toJson(value: any): string { + return JSON.stringify(value, replacer); +} + +export function fromJson(value: string): any { + return JSON.parse(value, reviver) +} + +export function structuralEqual(a: any, b: any): boolean { + const _a = JSON.stringify(a, replacer); + const _b = JSON.stringify(b, replacer); + return _a === _b; + +} + +// probably not needed, fetch() exists now +export function makeRequest(opts: { + method: string; + url: string; + headers: { [key: string]: string }; + params: any; +}) { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open(opts.method, opts.url); + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.response); + } else { + reject({ + status: xhr.status, + statusText: xhr.statusText, + }); + } + }; + xhr.onerror = function () { + reject({ + status: xhr.status, + statusText: xhr.statusText, + }); + }; + if (opts.headers) { + Object.keys(opts.headers).forEach(function (key) { + xhr.setRequestHeader(key, opts.headers[key]); + }); + } + var params = opts.params; + if (params && typeof params === "object") { + params = Object.keys(params) + .map(function (key) { + return ( + encodeURIComponent(key) + "=" + encodeURIComponent(params[key]) + ); + }) + .join("&"); + } + xhr.send(params); + }); +} + +export async function saveFile(content: BlobPart) { + const blob = new Blob([content], { type: "text/plain" }); + if (typeof window.showSaveFilePicker !== "undefined") { + console.log("Saving via FileSystem API"); + try { + const saveHandle = await window.showSaveFilePicker({ + types: [ + { + // suggestedName: "code.ic10", + description: "Text Files", + accept: { + "text/plain": [".txt", ".ic10"], + }, + }, + ], + }); + const ws = await saveHandle.createWritable(); + await ws.write(blob); + await ws.close(); + } catch (e) { + console.log(e); + } + } else { + console.log("saving file via hidden link event"); + var a = document.createElement("a"); + a.download = "code.ic10"; + a.href = window.URL.createObjectURL(blob); + a.click(); + } +} + +export async function openFile(editor: Ace.Editor) { + if (typeof window.showOpenFilePicker !== "undefined") { + console.log("opening file via FileSystem Api"); + try { + const [fileHandle] = await window.showOpenFilePicker(); + const file = await fileHandle.getFile(); + const contents = await file.text(); + const session = editor.getSession(); + session.setValue(contents); + } catch (e) { + console.log(e); + } + } else { + console.log("opening file via hidden input event"); + let input = document.createElement("input"); + input.type = "file"; + input.accept = ".txt,.ic10,.mips,text/*"; + input.onchange = (_) => { + const files = Array.from(input.files!); + console.log(files); + const file = files[0]; + var reader = new FileReader(); + reader.onload = (e) => { + const contents = e.target!.result as string; + const session = editor.getSession(); + // session.id = file.name; + session.setValue(contents); + }; + reader.readAsText(file); + }; + input.click(); + } +} + +export function parseNumber(s: string): number { + switch (s.toLowerCase()) { + case 'nan': + return Number.NaN; + case 'pinf': + return Number.POSITIVE_INFINITY; + case 'ninf': + return Number.NEGATIVE_INFINITY; + case 'pi': + return 3.141592653589793; + case 'deg2rad': + return 0.0174532923847437; + case 'rad2deg': + return 57.2957801818848; + case 'epsilon': + return Number.EPSILON; + } + return parseFloat(s); +} diff --git a/www/src/ts/virtual_machine/base_device.ts b/www/src/ts/virtual_machine/base_device.ts new file mode 100644 index 0000000..6cd1dbc --- /dev/null +++ b/www/src/ts/virtual_machine/base_device.ts @@ -0,0 +1,192 @@ +import { property, state } from "lit/decorators.js"; + +import { + DeviceRef, + Fields, + Reagents, + Slot, + Connection, + ICError, + Registers, + Stack, + Aliases, + Defines, + Pins, +} from "ic10emu_wasm"; +import { structuralEqual } from "../utils"; +import { LitElement } from "lit"; +import { BaseElement } from "../components/base"; + +type Constructor = new (...args: any[]) => T; + +export declare class VMDeviceMixinInterface { + deviceID: number; + device: DeviceRef; + name: string | null; + nameHash: number | null; + prefabName: string | null; + fields: Fields; + slots: Slot[]; + reagents: Reagents; + connections: Connection[]; + icIP: number; + icOpCount: number; + icState: string; + errors: ICError[]; + registers: Registers | null; + stack: Stack | null; + aliases: Aliases | null; + defines: Defines | null; + pins: Pins | null; + _handleDeviceModified(e: CustomEvent): void; + updateDevice(): void; + updateIC(): void; +} + +export const VMDeviceMixin = >( + superClass: T, +) => { + class VMDeviceMixinClass extends superClass { + @property({ type: Number }) accessor deviceID: number; + @state() accessor device: DeviceRef; + + @state() accessor name: string | null = null; + @state() accessor nameHash: number | null = null; + @state() accessor prefabName: string | null; + @state() accessor fields: Fields; + @state() accessor slots: Slot[]; + @state() accessor reagents: Reagents; + @state() accessor connections: Connection[]; + @state() accessor icIP: number; + @state() accessor icOpCount: number; + @state() accessor icState: string; + @state() accessor errors: ICError[]; + @state() accessor registers: Registers | null; + @state() accessor stack: Stack | null; + @state() accessor aliases: Aliases | null; + @state() accessor defines: Defines | null; + @state() accessor pins: Pins | null; + + connectedCallback(): void { + const root = super.connectedCallback(); + this.device = window.VM!.devices.get(this.deviceID)!; + window.VM?.addEventListener( + "vm-device-modified", + this._handleDeviceModified.bind(this), + ); + this.updateDevice(); + return root; + } + + _handleDeviceModified(e: CustomEvent) { + const id = e.detail; + if (this.deviceID === id) { + this.updateDevice(); + } + } + + updateDevice() { + const name = this.device.name ?? null; + if (this.name !== name) { + this.name = name; + } + const nameHash = this.device.nameHash ?? null; + if (this.nameHash !== nameHash) { + this.nameHash = nameHash; + } + const prefabName = this.device.prefabName ?? null; + if (this.prefabName !== prefabName) { + this.prefabName = prefabName; + } + const fields = this.device.fields; + if (!structuralEqual(this.fields, fields)) { + this.fields = fields; + } + const slots = this.device.slots; + if (!structuralEqual(this.slots, slots)) { + this.slots = slots; + } + const reagents = this.device.reagents; + if (!structuralEqual(this.reagents, reagents)) { + this.reagents = reagents; + } + const connections = this.device.connections; + if (!structuralEqual(this.connections, connections)) { + this.connections = connections; + } + this.updateIC(); + } + + updateIC() { + const ip = this.device.ip!; + if (this.icIP !== ip) { + this.icIP = ip; + } + const opCount = this.device.instructionCount!; + if (this.icOpCount !== opCount) { + this.icOpCount = opCount; + } + const state = this.device.state!; + if (this.icState !== state) { + this.icState = state; + } + const errors = this.device.program!.errors ?? null; + if (!structuralEqual(this.errors, errors)) { + this.errors = errors; + } + const registers = this.device.registers ?? null; + if (!structuralEqual(this.registers, registers)) { + this.registers = registers; + } + const stack = this.device.stack ?? null; + if (!structuralEqual(this.stack, stack)) { + this.stack = stack; + } + const aliases = this.device.aliases ?? null; + if (!structuralEqual(this.aliases, aliases)) { + this.aliases = aliases; + } + const defines = this.device.defines ?? null; + if (!structuralEqual(this.defines, defines)) { + this.defines = defines; + } + const pins = this.device.pins ?? null; + if (!structuralEqual(this.pins, pins)) { + this.pins = pins; + } + } + } + return VMDeviceMixinClass as Constructor & T; +}; + +export const VMActiveICMixin = >(superClass: T) => { + class VMActiveICMixinClass extends VMDeviceMixin(superClass) { + constructor() { + super(); + this.deviceID = window.App!.session.activeIC; + } + + connectedCallback(): void { + const root = super.connectedCallback(); + window.VM?.addEventListener( + "vm-run-ic", + this._handleDeviceModified.bind(this), + ); + window.App?.session.addEventListener( + "session-active-ic", + this._handleActiveIC.bind(this), + ); + return root; + } + + _handleActiveIC(e: CustomEvent) { + const id = e.detail; + if (this.deviceID !== id) { + this.deviceID = id; + this.device = window.VM!.devices.get(this.deviceID)!; + } + this.updateDevice(); + } + }; + return VMActiveICMixinClass as Constructor & T; +} diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtual_machine/controls.ts new file mode 100644 index 0000000..1efd169 --- /dev/null +++ b/www/src/ts/virtual_machine/controls.ts @@ -0,0 +1,198 @@ +import { html, css } from "lit"; +import { customElement, query } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import { VMActiveICMixin } from "./base_device"; + +import "@shoelace-style/shoelace/dist/components/card/card.js"; +import "@shoelace-style/shoelace/dist/components/button-group/button-group.js"; +import "@shoelace-style/shoelace/dist/components/button/button.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; +import "@shoelace-style/shoelace/dist/components/tooltip/tooltip.js"; +import "@shoelace-style/shoelace/dist/components/divider/divider.js"; +import "@shoelace-style/shoelace/dist/components/select/select.js"; +import "@shoelace-style/shoelace/dist/components/badge/badge.js"; +import "@shoelace-style/shoelace/dist/components/option/option.js"; +import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; + +@customElement("vm-ic-controls") +export class VMICControls extends VMActiveICMixin(BaseElement) { + static styles = [ + ...defaultCss, + css` + :host { + display: block; + box-sizing: border-box; + } + .card { + width: 100%; + box-sizing: border-box; + } + .controls { + display: flex; + flex-direction: row; + font-size: var(--sl-font-size-small); + } + .stats { + font-size: var(--sl-font-size-x-small); + } + .device-id { + margin-left: 2rem; + flex-grow: 1; + } + .button-group-toolbar sl-button-group:not(:last-of-type) { + margin-right: var(--sl-spacing-x-small); + } + .active-ic-select { + width: 100%; + } + sl-divider { + --spacing: 0.25rem; + } + + sl-button[variant="success"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-success-600: var(--sl-color-purple-700); + } + sl-button[variant="primary"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-primary-600: var(--sl-color-cyan-600); + } + sl-button[variant="warning"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-warning-600: var(--sl-color-amber-600); + } + `, + ]; + + @query(".active-ic-select") accessor activeICSelect: SlSelect; + + protected render() { + const ics = Array.from(window.VM!.ics); + return html` + +
+ + + + Run + + + + + + Step + + + + + + Reset + + + + +
+ + ${ics.map( + ([id, device], _index) => + html` + ${device.name + ? html`${device.prefabName}` + : ""} + Device:${id} ${device.name ?? device.prefabName} + `, + )} + +
+
+
+
+ Instruction Pointer + ${this.icIP} +
+ +
+ Last Run Operations Count + ${this.icOpCount} +
+ +
+ Last State + ${this.icState} +
+ +
+ Errors + ${this.errors.map( + (err) => + html`
+ + Line: ${err.ParseError.line} - + ${err.ParseError.start}:${err.ParseError.end} + + ${err.ParseError.msg} +
`, + )} +
+
+
+ `; + } + + _handleRunClick() { + window.VM?.run(); + } + _handleStepClick() { + window.VM?.step(); + } + _handleResetClick() { + window.VM?.reset(); + } + + updateIC(): void { + super.updateIC(); + this.activeICSelect?.dispatchEvent(new Event("slotchange")); + // if (this.activeICSelect) { + // const val = this.activeICSelect.value; + // this.activeICSelect.value = ""; + // this.activeICSelect.requestUpdate(); + // this.activeICSelect.value = val; + // this.activeICSelect. + // } + } + + _handleChangeActiveIC(e: CustomEvent) { + const select = e.target as SlSelect; + const icId = parseInt(select.value as string); + window.App!.session.activeIC = icId; + } +} diff --git a/www/src/ts/virtual_machine/device.ts b/www/src/ts/virtual_machine/device.ts new file mode 100644 index 0000000..165e67c --- /dev/null +++ b/www/src/ts/virtual_machine/device.ts @@ -0,0 +1,751 @@ +import { Slot } from "ic10emu_wasm"; +import { html, css, HTMLTemplateResult } from "lit"; +import { customElement, property, query, state } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import { VMDeviceMixin } from "./base_device"; + +import { default as uFuzzy } from "@leeoniya/ufuzzy"; + +import "@shoelace-style/shoelace/dist/components/card/card.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; +import "@shoelace-style/shoelace/dist/components/tooltip/tooltip.js"; +import "@shoelace-style/shoelace/dist/components/input/input.js"; +import "@shoelace-style/shoelace/dist/components/details/details.js"; +import "@shoelace-style/shoelace/dist/components/tab/tab.js"; +import "@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js"; +import "@shoelace-style/shoelace/dist/components/tab-group/tab-group.js"; +import "@shoelace-style/shoelace/dist/components/copy-button/copy-button.js"; +import "@shoelace-style/shoelace/dist/components/select/select.js"; +import "@shoelace-style/shoelace/dist/components/badge/badge.js"; +import "@shoelace-style/shoelace/dist/components/option/option.js"; +import "@shoelace-style/shoelace/dist/components/drawer/drawer.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; + +import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; +import { parseNumber, structuralEqual } from "../utils"; +import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; +import SlDetails from "@shoelace-style/shoelace/dist/components/details/details.js"; +import SlDrawer from "@shoelace-style/shoelace/dist/components/drawer/drawer.js"; +import { DeviceDB, DeviceDBEntry } from "./device_db"; + +@customElement("vm-device-card") +export class VMDeviceCard extends VMDeviceMixin(BaseElement) { + image_err: boolean; + + static styles = [ + ...defaultCss, + css` + :host { + display: block; + box-sizing: border-box; + } + .card { + width: 100%; + box-sizing: border-box; + } + .image { + width: 4rem; + height: 4rem; + } + .header { + display: flex; + flex-direction: row; + } + .header-name { + display: flex; + flex-direction: row; + width: 100%; + flex-grow: 1; + align-items: center; + flex-wrap: wrap; + } + .device-name::part(input) { + width: 10rem; + } + .device-id::part(input) { + width: 2rem; + } + .device-name-hash::part(input) { + width: 7rem; + } + sl-divider { + --spacing: 0.25rem; + } + sl-button[variant="success"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-success-600: var(--sl-color-purple-700); + } + sl-button[variant="primary"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-primary-600: var(--sl-color-cyan-600); + } + sl-button[variant="warning"] { + /* Changes the success theme color to purple using primitives */ + --sl-color-warning-600: var(--sl-color-amber-600); + } + sl-tab-group { + margin-left: 1rem; + margin-right: 1rem; + --indicator-color: var(--sl-color-purple-600); + --sl-color-primary-600: var(--sl-color-purple-600); + } + sl-tab::part(base) { + padding: var(--sl-spacing-small) var(--sl-spacing-medium) + } + sl-tab-group::part(base) { + height: 16rem; + overflow-y: auto; + } + `, + ]; + + onImageErr(e: Event) { + this.image_err = true; + console.log("Image load error", e); + } + + renderHeader(): HTMLTemplateResult { + const activeIc = window.VM?.activeIC; + const badges: HTMLTemplateResult[] = []; + if (this.deviceID == activeIc?.id) { + badges.push(html`db`); + } + activeIc?.pins?.forEach((id, _index) => { + if (this.deviceID == id) { + badges.push(html``); + } + }, this); + return html` + + + +
+ + Id + + + + Name + + + + Hash + + + ${badges.map((badge) => badge)} +
+ `; + } + + renderFields(): HTMLTemplateResult { + const fields = Array.from(this.fields); + const inputIdBase = `vmDeviceCard${this.deviceID}Field`; + return html` + ${fields.map(([name, field], _index, _fields) => { + return html` + ${name} + + ${field.field_type} + `; + })} + `; + } + + renderSlot(slot: Slot, slotIndex: number): HTMLTemplateResult { + const fields = Array.from(slot.fields); + const inputIdBase = `vmDeviceCard${this.deviceID}Slot${slotIndex}Field`; + return html` + + ${slotIndex} : ${slot.typ} +
+ ${fields.map( + ([name, field], _index, _fields) => html` + + ${name} + + ${field.field_type} + + `, + )} +
+
+ `; + } + + renderSlots(): HTMLTemplateResult { + return html` +
+ ${this.slots.map((slot, index, _slots) => this.renderSlot(slot, index))} +
+ `; + } + + renderReagents(): HTMLTemplateResult { + return html``; + } + + renderNetworks(): HTMLTemplateResult { + const vmNetworks = window.VM!.networks; + return html` +
+ ${this.connections.map((connection, index, _conns) => { + const conn = + typeof connection === "object" ? connection.CableNetwork : null; + return html` + + Connection:${index} + ${vmNetworks.map( + (net) => + html`Network ${net}`, + )} + + `; + })} +
+ `; + } + renderPins(): HTMLTemplateResult { + const pins = this.pins; + const visibleDevices = window.VM!.visibleDevices(this.deviceID); + return html` +
+ ${pins?.map( + (pin, index) => + html` + d${index} + ${visibleDevices.map( + (device, _index) => + html` + Device ${device.id} : ${device.name ?? device.prefabName} + `, + )} + `, + )} +
+ `; + } + + render(): HTMLTemplateResult { + return html` + +
${this.renderHeader()}
+ + Fields + Slots + Reagents + Networks + Pins + + ${this.renderFields()} + ${this.renderSlots()} + ${this.renderReagents()} + ${this.renderNetworks()} + ${this.renderPins()} + +
+ `; + } + + _handleChangeName(e: CustomEvent) { + const input = e.target as SlInput; + window.VM?.setDeviceName(this.deviceID, input.value); + this.updateDevice(); + } + + _handleChangeField(e: CustomEvent) { + const input = e.target as SlInput; + const field = input.getAttribute("key")!; + const val = parseNumber(input.value); + window.VM?.setDeviceField(this.deviceID, field, val); + this.updateDevice(); + } + + _handleChangeSlotField(e: CustomEvent) { + const input = e.target as SlInput; + const slot = parseInt(input.getAttribute("slotIndex")!); + const field = input.getAttribute("key")!; + const val = parseNumber(input.value); + window.VM?.setDeviceSlotField(this.deviceID, slot, field, val); + this.updateDevice(); + } + + _handleChangeConnection(e: CustomEvent) { + const select = e.target as SlSelect; + const conn = parseInt(select.getAttribute("key")!); + const last = this.device.connections[conn]; + const val = select.value ? parseInt(select.value as string) : undefined; + if (typeof last === "object" && typeof last.CableNetwork === "number") { + // is there no other connection to the previous network? + if ( + !this.device.connections.some((other_conn, index) => { + structuralEqual(last, other_conn) && index !== conn; + }) + ) { + this.device.removeDeviceFromNetwork(last.CableNetwork); + } + } + if (typeof val !== "undefined") { + this.device.addDeviceToNetwork(conn, val); + } else { + this.device.setConnection(conn, val); + } + + this.updateDevice(); + } + + _handleChangePin(e: CustomEvent) { + const select = e.target as SlSelect; + const pin = parseInt(select.getAttribute("key")!); + const val = select.value ? parseInt(select.value as string) : undefined; + this.device.setPin(pin, val); + this.updateDevice(); + } +} + +@customElement("vm-device-list") +export class VMDeviceList extends BaseElement { + @state() accessor devices: number[]; + + static styles = [ + ...defaultCss, + css` + .header { + margin-botton: 1rem; + margin-right: 2rem; + padding: 0.25rem 0.25rem; + align-items: center; + display: flex; + flex-direction: row; + width: 100%; + box-sizing: border-box; + } + .device-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + .device-list-card { + } + `, + ]; + + constructor() { + super(); + this.devices = window.VM!.deviceIds; + } + + connectedCallback(): void { + const root = super.connectedCallback(); + window.VM?.addEventListener( + "vm-devices-update", + this._handleDevicesUpdate.bind(this), + ); + return root; + } + + _handleDevicesUpdate(e: CustomEvent) { + const ids = e.detail; + if (!structuralEqual(this.devices, ids)) { + this.devices = ids; + } + } + + protected render(): HTMLTemplateResult { + return html` +
+ + Devices: + ${this.devices.length} + + +
+
+ ${this.devices.map( + (id, _index, _ids) => + html``, + )} +
+ `; + } +} + +@customElement("vm-add-device-button") +export class VMAddDeviceButton extends BaseElement { + static styles = [ + ...defaultCss, + css` + .add-device-drawer { + --size: 32rem; + } + + .search-results { + display: flex; + flex-direction: row; + overflow-x: auto; + } + + .card { + margin-top: var(--sl-spacing-small); + margin-right: var(--sl-spacing-small); + } + + .card + .card { + } + `, + ]; + + @query("sl-drawer") accessor drawer: SlDrawer; + @query(".device-search-input") accessor searchInput: SlInput; + + private _deviceDB: DeviceDB; + private _strutures: Map; + + get deviceDB() { + return this._deviceDB; + } + + @state() + set deviceDB(val: DeviceDB) { + this._deviceDB = val; + this._strutures = new Map( + Object.values(this.deviceDB.db) + .filter((entry) => this.deviceDB.strutures.includes(entry.name), this) + .filter( + (entry) => this.deviceDB.logic_enabled.includes(entry.name), + this, + ) + .map((entry) => [entry.name, entry]), + ); + this.performSearch(); + } + + _filter: string = ""; + + get filter() { + return this._filter; + } + + @state() + set filter(val: string) { + this._filter = val; + this.performSearch(); + } + + private _searchResults: DeviceDBEntry[]; + + private filterTimeout: number | undefined; + + performSearch() { + if (this.filter) { + const datapoints: [string, string][] = []; + for (const entry of this._strutures.values()) { + datapoints.push([entry.name, entry.name], [entry.desc, entry.name]); + } + const haystack: string[] = datapoints.map((data) => data[0]); + const uf = new uFuzzy({}); + const [_idxs, info, order] = uf.search(haystack, this._filter, 0, 1e3); + + const filtered = order?.map((infoIdx) => datapoints[info.idx[infoIdx]]); + const names = + filtered + ?.map((data) => data[1]) + ?.filter((val, index, arr) => arr.indexOf(val) === index) ?? []; + + this._searchResults = names.map((name) => this._strutures.get(name)!); + } else { + this._searchResults = + [] ?? this._strutures ? [...this._strutures.values()] : []; + } + } + + connectedCallback(): void { + const root = super.connectedCallback(); + window.VM!.addEventListener( + "vm-device-db-loaded", + this._handleDeviceDBLoad.bind(this), + ); + return root; + } + + _handleDeviceDBLoad(e: CustomEvent) { + this.deviceDB = e.detail; + } + + renderSearchResults(): HTMLTemplateResult { + const renderedResults: HTMLTemplateResult[] = this._searchResults?.map( + (result) => + html``, + ); + return html`${renderedResults}`; + } + + render() { + return html` + + Add Device + + + + Search Structures + " + +
${this.renderSearchResults()}
+ { + this.drawer.hide(); + }} + > + Close + +
+ `; + } + + _handleSearchInput(e: CustomEvent) { + console.log("search-input", e); + if (this.filterTimeout) { + clearTimeout(this.filterTimeout); + } + const that = this; + this.filterTimeout = setTimeout(() => { + that.filter = that.searchInput.value; + that.filterTimeout = undefined; + }, 200); + } + + _handleAddButtonClick() { + this.drawer.show(); + } +} + +@customElement("vm-device-template") +export class VmDeviceTemplate extends BaseElement { + @property({ type: String }) accessor name: string; + + private _deviceDB: DeviceDB; + private image_err: boolean = false; + + static styles = [ + ...defaultCss, + css` + .template-card { + --padding: var(--sl-spacing-small) + } + .image { + width: 3rem; + height: 3rem; + } + .header { + display: flex; + flex-direction: row; + } + .card-body { + // height: 18rem; + overflow-y: auto; + } + sl-tab::part(base) { + padding: var(--sl-spacing-small) var(--sl-spacing-medium) + } + sl-tab-group::part(base) { + height: 14rem; + overflow-y: auto; + } + `, + ]; + + constructor() { + super(); + this.deviceDB = window.VM!.db; + } + + get deviceDB() { + return this._deviceDB; + } + + @state() + set deviceDB(val: DeviceDB) { + this._deviceDB = val; + } + + connectedCallback(): void { + const root = super.connectedCallback(); + window.VM!.addEventListener( + "vm-device-db-loaded", + this._handleDeviceDBLoad.bind(this), + ); + return root; + } + + _handleDeviceDBLoad(e: CustomEvent) { + this.deviceDB = e.detail; + } + + onImageErr(e: Event) { + this.image_err = true; + console.log("Image load error", e); + } + + renderFields(): HTMLTemplateResult { + const device = this.deviceDB.db[this.name]; + const fields = device.logic ? Object.entries(device.logic) : []; + return html` + ${fields.map(([name, field_type], _index, _fields) => { + return html` + ${name} + ${field_type} + `; + })} + `; + } + + renderSlot(slot: Slot, slotIndex: number): HTMLTemplateResult { + const fields = Array.from(slot.fields); + return html` `; + } + + renderSlots(): HTMLTemplateResult { + return html`
`; + } + + renderReagents(): HTMLTemplateResult { + return html``; + } + + renderNetworks(): HTMLTemplateResult { + const vmNetworks = window.VM!.networks; + return html`
`; + } + + renderPins(): HTMLTemplateResult { + const device = this.deviceDB.db[this.name]; + return html`
`; + } + + render() { + const device = this.deviceDB.db[this.name]; + return html` + +
+ + + +
+ ${device.name} + ${device.hash} +
+ Add +
+
+ + + Fields + Slots + Reagents + Networks + Pins + + ${this.renderFields()} + ${this.renderSlots()} + ${this.renderReagents()} + ${this.renderNetworks()} + ${this.renderPins()} + + +
+
+ `; + } +} diff --git a/www/src/ts/virtual_machine/device_db.ts b/www/src/ts/virtual_machine/device_db.ts new file mode 100644 index 0000000..b7f6721 --- /dev/null +++ b/www/src/ts/virtual_machine/device_db.ts @@ -0,0 +1,20 @@ +export type DeviceDBEntry = { + name: string; + hash: number; + desc: string; + logic?: { [key: string]: string }; + slots?: { name: string; typ: string }[]; + modes?: { [key: string]: string }; + conn?: { [key: string]: string[] }; +}; + +export type DeviceDB = { + logic_enabled: string[]; + slot_logic_enabled: string[]; + devices: string[]; + items: string[]; + strutures: string[]; + db: { + [key: string]: DeviceDBEntry; + }; +}; diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts new file mode 100644 index 0000000..e4ecf06 --- /dev/null +++ b/www/src/ts/virtual_machine/index.ts @@ -0,0 +1,259 @@ +import { DeviceRef, VM, init } from "ic10emu_wasm"; +import { DeviceDB } from "./device_db" +import "./base_device"; + +declare global { + interface Window { + VM?: VirtualMachine; + } +} + + +class VirtualMachine extends EventTarget { + ic10vm: VM; + _devices: Map; + _ics: Map; + + accessor db: DeviceDB; + dbPromise: Promise<{ default: DeviceDB }> + + constructor() { + super(); + const vm = init(); + + window.VM = this; + + this.ic10vm = vm; + + this._devices = new Map(); + this._ics = new Map(); + + this.dbPromise = import("../../../data/database.json"); + this.dbPromise.then((module) => this.setupDeviceDatabase(module.default)) + + this.updateDevices(); + this.updateCode(); + } + + get devices() { + return this._devices; + } + + get deviceIds() { + return Array.from(this.ic10vm.devices); + } + + get ics() { + return this._ics; + } + + get icIds() { + return Array.from(this.ic10vm.ics); + } + + get networks() { + return Array.from(this.ic10vm.networks); + } + + get defaultNetwork() { + return this.ic10vm.defaultNetwork; + } + + get activeIC() { + return this._ics.get(window.App!.session.activeIC); + } + + visibleDevices(source: number) { + const ids = Array.from(this.ic10vm.visibleDevices(source)); + return ids.map((id, _index) => this._devices.get(id)!); + } + + updateDevices() { + var update_flag = false; + const device_ids = this.ic10vm.devices; + for (const id of device_ids) { + if (!this._devices.has(id)) { + this._devices.set(id, this.ic10vm.getDevice(id)!); + update_flag = true; + } + } + for (const id of this._devices.keys()) { + if (!device_ids.includes(id)) { + this._devices.get(id)!.free(); + this._devices.delete(id); + update_flag = true; + } + } + + const ics = this.ic10vm.ics; + for (const id of ics) { + if (!this._ics.has(id)) { + this._ics.set(id, this._devices.get(id)!); + update_flag = true; + } + } + for (const id of this._ics.keys()) { + if (!ics.includes(id)) { + this._ics.get(id)!.free(); + this._ics.delete(id); + update_flag = true; + } + } + if (update_flag) { + this.dispatchEvent( + new CustomEvent("vm-devices-update", { detail: device_ids }), + ); + } + } + + updateCode() { + const progs = window.App!.session.programs; + for (const id of progs.keys()) { + const attempt = Date.now().toString(16); + const ic = this._ics.get(id); + const prog = progs.get(id); + if (ic && prog) { + console.time(`CompileProgram_${id}_${attempt}`); + try { + this.ics.get(id)!.setCodeInvalid(progs.get(id)!); + const compiled = this.ics.get(id)?.program!; + window.App?.session.setProgramErrors(id, compiled.errors); + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: id }), + ); + } catch (e) { + console.log(e); + } + console.timeEnd(`CompileProgram_${id}_${attempt}`); + } + } + this.update(); + } + + step() { + const ic = this.activeIC; + if (ic) { + try { + ic.step(false); + } catch (e) { + console.log(e); + } + this.update(); + this.dispatchEvent( + new CustomEvent("vm-run-ic", { detail: this.activeIC!.id }), + ); + } + } + + run() { + const ic = this.activeIC; + if (ic) { + try { + ic.run(false); + } catch (e) { + console.log(e); + } + this.update(); + this.dispatchEvent( + new CustomEvent("vm-run-ic", { detail: this.activeIC!.id }), + ); + } + } + + reset() { + const ic = this.activeIC; + if (ic) { + ic.reset(); + this.update(); + } + } + + update() { + this.updateDevices(); + this.ic10vm.lastOperationModified.forEach((id, _index, _modifiedIds) => { + if (this.devices.has(id)) { + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: id }), + ); + } + }, this); + const ic = this.activeIC!; + window.App!.session.setActiveLine(window.App!.session.activeIC, ic.ip!); + } + + setRegister(index: number, val: number) { + const ic = this.activeIC!; + try { + ic.setRegister(index, val); + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: ic.id }), + ); + } catch (e) { + console.log(e); + } + } + + setStack(addr: number, val: number) { + const ic = this.activeIC!; + try { + ic!.setStack(addr, val); + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: ic.id }), + ); + } catch (e) { + console.log(e); + } + } + + setDeviceName(id: number, name: string): boolean { + const device = this._devices.get(id); + if (device) { + device.setName(name); + this.dispatchEvent(new CustomEvent("vm-device-modified", { detail: id })); + return true; + } + return false; + } + + setDeviceField(id: number, field: string, val: number) { + const device = this._devices.get(id); + if (device) { + try { + device.setField(field, val); + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: id }), + ); + return true; + } catch (e) { + console.log(e); + } + } + return false; + } + + setDeviceSlotField(id: number, slot: number, field: string, val: number) { + const device = this._devices.get(id); + if (device) { + try { + device.setSlotField(slot, field, val); + this.dispatchEvent( + new CustomEvent("vm-device-modified", { detail: id }), + ); + return true; + } catch (e) { + console.log(e); + } + } + return false; + } + + setupDeviceDatabase(db: DeviceDB) { + this.db = db; + console.log("Loaded Device Database", this.db); + this.dispatchEvent( + new CustomEvent("vm-device-db-loaded", { detail: this.db }), + ); + } +} + +export { VirtualMachine }; diff --git a/www/src/ts/virtual_machine/registers.ts b/www/src/ts/virtual_machine/registers.ts new file mode 100644 index 0000000..29c4586 --- /dev/null +++ b/www/src/ts/virtual_machine/registers.ts @@ -0,0 +1,109 @@ +import { html, css } from "lit"; +import { customElement } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import { VMActiveICMixin } from "./base_device"; + +import "@shoelace-style/shoelace/dist/components/card/card.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; +import "@shoelace-style/shoelace/dist/components/tooltip/tooltip.js"; +import "@shoelace-style/shoelace/dist/components/input/input.js"; +import { RegisterSpec } from "ic10emu_wasm"; +import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; +import { parseNumber } from "../utils"; + +@customElement("vm-ic-registers") +export class VMICRegisters extends VMActiveICMixin(BaseElement) { + static styles = [ + ...defaultCss, + css` + :host { + } + .card { + --padding: 0.5rem; + --sl-input-font-size-small: 0.75em; + } + .card-body { + display: flex; + flex-flow: row wrap; + max-height: 8rem; + overflow-y: auto; + } + .reg-input { + width: 10rem; + } + .tooltip { + --max-width: 6rem; + } + `, + ]; + + static defaultAliases: [string, number][] = [ + ["sp", 16], + ["ra", 17], + ]; + + constructor() { + super(); + } + + protected render() { + // const inputTypeFromVal = (val: number) => { if (val === Number.NEGATIVE_INFINITY || val === Number.POSITIVE_INFINITY || Number.isNaN(val)) { return "text"; } else { return "number"; } }; + const displayVal = (val: number) => { + if (Number.POSITIVE_INFINITY === val) { + return "∞"; + } else if (Number.NEGATIVE_INFINITY === val) { + return "-∞"; + } else { + return val.toString(); + } + }; + const registerAliases: [string, number][] = ( + ( + [...(this.aliases ?? [])].filter( + ([_alias, target]) => + "RegisterSpec" in target && target.RegisterSpec.indirection === 0, + ) as [string, RegisterSpec][] + ).map(([alias, target]) => [alias, target.RegisterSpec.target]) as [ + string, + number, + ][] + ).concat(VMICRegisters.defaultAliases); + return html` + +
+ ${this.registers?.map((val, index) => { + const aliases = registerAliases + .filter(([_alias, target]) => index === target) + .map(([alias, _target]) => alias); + return html` + +
+ Register r${index} Aliases: + ${aliases.join(", ") || "None"} +
+ + r${index} + ${aliases.join(", ")} + +
+ `; + })} +
+
+ `; + } + + _handleCellChange(e: Event) { + const input = e.target as SlInput; + const index = parseInt(input.getAttribute("key")!); + const val = parseNumber(input.value); + window.VM!.setRegister(index, val); + } +} diff --git a/www/src/ts/virtual_machine/stack.ts b/www/src/ts/virtual_machine/stack.ts new file mode 100644 index 0000000..ed795c4 --- /dev/null +++ b/www/src/ts/virtual_machine/stack.ts @@ -0,0 +1,92 @@ +import { html, css } from "lit"; +import { customElement } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import { VMActiveICMixin } from "./base_device"; + +import "@shoelace-style/shoelace/dist/components/card/card.js"; +import "@shoelace-style/shoelace/dist/components/icon/icon.js"; +import "@shoelace-style/shoelace/dist/components/tooltip/tooltip.js"; +import "@shoelace-style/shoelace/dist/components/input/input.js"; +import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; +import { parseNumber } from "../utils"; + +@customElement("vm-ic-stack") +export class VMICStack extends VMActiveICMixin(BaseElement) { + static styles = [ + ...defaultCss, + css` + :host { + } + .card { + --padding: 0.5rem; + --sl-input-font-size-small: 0.75em; + } + .card-body { + display: flex; + flex-flow: row wrap; + max-height: 15rem; + overflow-y: auto; + } + .stack-input { + width: 8rem; + } + .stack-pointer::part(prefix) { + background: rgb(121, 82, 179); + } + sl-input::part(prefix) { + padding-right: 0.25rem; + } + `, + ]; + + constructor() { + super(); + } + + protected render() { + const displayVal = (val: number) => { + if (Number.POSITIVE_INFINITY === val) { + return "∞"; + } else if (Number.NEGATIVE_INFINITY === val) { + return "-∞"; + } else { + return val.toString(); + } + }; + const sp = this.registers![16]; + + return html` + +
+ ${this.stack?.map((val, index) => { + return html` + +
+ ${sp === index ? html`Stack Pointer` : ""} + Address ${index} +
+ + ${index} + +
+ `; + })} +
+
+ `; + } + + _handleCellChange(e: Event) { + const input = e.target as SlInput; + const index = parseInt(input.getAttribute("key")!); + const val = parseNumber(input.value); + window.VM!.setStack(index, val); + } +} diff --git a/www/src/ts/virtual_machine/ui.ts b/www/src/ts/virtual_machine/ui.ts new file mode 100644 index 0000000..be82639 --- /dev/null +++ b/www/src/ts/virtual_machine/ui.ts @@ -0,0 +1,69 @@ +import { HTMLTemplateResult, html, css } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { BaseElement, defaultCss } from "../components"; +import "@shoelace-style/shoelace/dist/components/details/details.js"; +import "@shoelace-style/shoelace/dist/components/tab/tab.js"; +import "@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js"; +import "@shoelace-style/shoelace/dist/components/tab-group/tab-group.js"; + +import "./controls"; +import "./registers"; +import "./stack"; +import "./device"; + +@customElement("vm-ui") +export class VMUI extends BaseElement { + static styles = [ + ...defaultCss, + css` + sl-tab-group { + margin-left: 1rem; + margin-right: 1rem; + --indicator-color: var(--sl-color-purple-600); + --sl-color-primary-600: var(--sl-color-purple-600); + } + sl-details::part(header) { + padding: 0.3rem; + } + sl-details::part(content) { + padding: 0.5rem; + } + vm-ic-controls { + margin-left: 1rem; + margin-right: 1rem; + margin-top: 0.5rem; + } + .side-container { + height: 100% + overflow-y: auto; + } + `, + ]; + + constructor() { + super(); + } + + protected render() { + return html` +
+ + + Active IC + Devices + + + + + + + + + + + + +
+ `; + } +} diff --git a/www/stationpedia.py b/www/stationpedia.py index ec9164f..373e6bc 100644 --- a/www/stationpedia.py +++ b/www/stationpedia.py @@ -1,19 +1,66 @@ import json +import re +from collections import defaultdict from pathlib import Path from pprint import pprint -from collections import defaultdict -import re -import json +from typing import Any # type: ignore[Any] +from typing import TypedDict -def extract_all(): - items = {} - pedia = {} +class SlotInsert(TypedDict): + SlotIndex: str + SlotName: str + SlotType: str + + +class LInsert(TypedDict): + LogicName: str + LogicAccessTypes: str + + +class PediaPage(TypedDict): + Key: str + Title: str + Description: str + PrefabName: str + PrefabHash: int + SlotInserts: list[SlotInsert] + LogicInsert: list[LInsert] + LogicSlotInsert: list[LInsert] + ModeInsert: list[LInsert] + ConnectionInsert: list[LInsert] + ConnectionList: list[list[str]] + + +class Pedia(TypedDict): + pages: list[PediaPage] + + +class DBSlot(TypedDict): + name: str + typ: str + + +class DBPage(TypedDict): + name: str + hash: int + desc: str + slots: list[DBSlot] | None + logic: dict[str, str] | None + slotlogic: dict[str, list[int]] | None + modes: dict[int, str] | None + conn: dict[int, list[str]] | None + + +def extract_all() -> None: + db: dict[str, DBPage] = {} + pedia: Pedia = {"pages": []} linkPat = re.compile(r"(.+?)") with (Path("data") / "Stationpedia.json").open("r") as f: - pedia.update(json.load(f)) + pedia = json.load(f) for page in pedia["pages"]: - item = defaultdict(list) + item: DBPage = defaultdict(list) # type: ignore[reportAssignmenType] + match page: case { "Key": _, @@ -26,7 +73,7 @@ def extract_all(): "LogicSlotInsert": slotlogic, "ModeInsert": modes, "ConnectionInsert": _, - "ConnectionList": connections, # type: List[Tuple[str, str]] + "ConnectionList": connections, }: item["name"] = name item["hash"] = name_hash @@ -35,11 +82,11 @@ def extract_all(): case []: item["slots"] = None case _: - item["slots"] = [{}] * len(slots) + item["slots"] = [{}] * len(slots) # type: ignore[reportAssignmenType] for slot in slots: item["slots"][int(slot["SlotIndex"])] = { "name": slot["SlotName"], - "type": slot["SlotType"], + "typ": slot["SlotType"], } match logic: @@ -85,44 +132,50 @@ def extract_all(): pprint(page) return - items[name] = item + db[name] = item - logicable = [item["name"] for item in items.values() if item["logic"] is not None] + logicable = [item["name"] for item in db.values() if item["logic"] is not None] slotlogicable = [ - item["name"] for item in items.values() if item["slotlogic"] is not None + item["name"] for item in db.values() if item["slotlogic"] is not None ] devices = [ item["name"] - for item in items.values() + for item in db.values() if item["logic"] is not None and item["conn"] is not None ] - def clean_nones(value): + strutures = [ + item["name"] for item in db.values() if item["name"].startswith("Structure") + ] + + items = [item["name"] for item in db.values() if item["name"] not in strutures] + + def clean_nones(value: Any) -> Any: # type: ignore[Any] if isinstance(value, list): - return [clean_nones(x) for x in value if x is not None] + return [clean_nones(x) for x in value if x is not None] # type: ignore[unknown] elif isinstance(value, dict): return { - key: clean_nones(val) for key, val in value.items() if val is not None + key: clean_nones(val) for key, val in value.items() if val is not None # type: ignore[unknown] } else: - return value + return value # type: ignore[Any] with open("data/database.json", "w") as f: - json.encoder json.dump( clean_nones( { "logic_enabled": logicable, "slot_logic_enabled": slotlogicable, "devices": devices, + "strutures": strutures, "items": items, + "db": db, } ), f, ) - if __name__ == "__main__": # extract_logicable() extract_all() diff --git a/www/tsconfig.json b/www/tsconfig.json index e91f392..9661d95 100644 --- a/www/tsconfig.json +++ b/www/tsconfig.json @@ -4,10 +4,21 @@ "sourceMap": true, "noImplicitAny": true, "module": "es2022", - "target": "es2020", + "target": "es2021", "allowJs": true, "moduleResolution": "bundler", "resolveJsonModule": true, - "types": ["@types/wicg-file-system-access", "@types/ace"] - } + "isolatedModules": true, + "experimentalDecorators": true, + "types": ["@types/wicg-file-system-access", "@types/ace"], + "plugins": [ + { + "name": "ts-lit-plugin" + }, + { + "name": "typescript-lit-html-plugin" + } + ] + }, + "include": ["src/**/*", "node_modules/lit-scss-loader/types.d.ts"] } diff --git a/www/webpack.config.js b/www/webpack.config.js index 255d8e9..2c1fc0f 100644 --- a/www/webpack.config.js +++ b/www/webpack.config.js @@ -1,79 +1,109 @@ const CopyWebpackPlugin = require("copy-webpack-plugin"); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const miniCssExtractPlugin = require('mini-css-extract-plugin'); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const miniCssExtractPlugin = require("mini-css-extract-plugin"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); +const { SourceMap } = require("module"); - -const path = require('path'); +const path = require("path"); module.exports = { - entry: "./src/js/main.ts", + entry: "./src/ts/main.ts", output: { path: path.resolve(__dirname, "dist"), filename: "main.js", clean: true, }, devServer: { - static: path.resolve(__dirname, 'dist'), + static: path.resolve(__dirname, "dist"), port: 8080, - hot: true + hot: true, }, mode: "development", devtool: "eval-source-map", plugins: [ - new CopyWebpackPlugin({ patterns: ['img/*.png', 'img/*/*.png', { from: 'data/database.json', to: 'data' }] }), - new HtmlWebpackPlugin({ template: './src/index.html' }), - new miniCssExtractPlugin() + new ForkTsCheckerWebpackPlugin(), + new CopyWebpackPlugin({ + patterns: [ + "img/*.png", + "img/*/*.png", + { from: "data/database.json", to: "data" }, + // Copy Shoelace assets to dist/shoelace + { + from: path.resolve( + __dirname, + "node_modules/@shoelace-style/shoelace/dist/assets", + ), + to: path.resolve(__dirname, "dist/shoelace/assets"), + }, + ], + }), + new HtmlWebpackPlugin({ template: "./src/index.html" }), + new miniCssExtractPlugin(), ], module: { rules: [ { - test: /\.tsx?$/, - use: 'ts-loader', + test: /\.[jt]sx?$/, exclude: /node_modules/, + loader: "esbuild-loader", + options: { + target: "es2021", + tsconfig: "./tsconfig.json", + }, }, { test: /\.(jpg|png|svg|gif)$/, - type: 'asset/resource', + type: "asset/resource", }, { - test: /\.(scss)$/, - use: [{ - // inject CSS to page - loader: miniCssExtractPlugin.loader - }, { - // translates CSS into CommonJS modules - loader: 'css-loader' - }, { - // Run postcss actions - loader: 'postcss-loader', - options: { - // `postcssOptions` is needed for postcss 8.x; - // if you use postcss 7.x skip the key - postcssOptions: { - // postcss plugins, can be exported to postcss.config.js - plugins: function () { - return [ - require('autoprefixer') - ]; - } - } - } - }, { - // compiles Sass to CSS - loader: 'sass-loader' - }], + test: /\.css|\.s(c|a)ss$/, + use: [ + { + // inject CSS to page + loader: miniCssExtractPlugin.loader, + }, + { + // translates CSS into CommonJS modules + loader: "css-loader", + options: { + sourceMap: true, + }, + }, + { + // Run postcss actions + loader: "postcss-loader", + options: { + // `postcssOptions` is needed for postcss 8.x; + // if you use postcss 7.x skip the key + postcssOptions: { + // postcss plugins, can be exported to postcss.config.js + plugins: function () { + return [require("autoprefixer")]; + }, + }, + }, + }, + { + // compiles Sass to CSS + loader: "sass-loader", + options: { + sourceMap: true, + }, + }, + ], // parser: { // javascript : { importMeta: false } // } - },], + }, + ], }, resolve: { - extensions: ['.tsx', '.ts', '.js', '.json'], + extensions: [".tsx", ".ts", ".js", ".json"], fallback: { - "crypto": require.resolve("crypto-browserify"), - "buffer": require.resolve("buffer"), - "stream": require.resolve("stream-browserify"), - "vm": require.resolve("vm-browserify"), + crypto: require.resolve("crypto-browserify"), + buffer: require.resolve("buffer"), + stream: require.resolve("stream-browserify"), + vm: require.resolve("vm-browserify"), }, }, experiments: { @@ -83,5 +113,8 @@ module.exports = { watchOptions: { aggregateTimeout: 200, poll: 200, - }, + }, + optimization: { + chunkIds: "named", + }, }; diff --git a/www/webpack.config.prod.js b/www/webpack.config.prod.js index 47f55a0..744ea87 100644 --- a/www/webpack.config.prod.js +++ b/www/webpack.config.prod.js @@ -1,79 +1,104 @@ const CopyWebpackPlugin = require("copy-webpack-plugin"); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const miniCssExtractPlugin = require('mini-css-extract-plugin'); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); +const miniCssExtractPlugin = require("mini-css-extract-plugin"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin"); +const { EsbuildPlugin } = require("esbuild-loader"); -const path = require('path'); +const path = require("path"); module.exports = { - entry: "./src/js/main.ts", + entry: "./src/ts/main.ts", output: { path: path.resolve(__dirname, "dist"), filename: "main.js", - clean: true - }, - devServer: { - static: path.resolve(__dirname, 'dist'), - port: 8080, - hot: true + clean: true, }, mode: "production", devtool: "source-map", plugins: [ - new CopyWebpackPlugin({ patterns: ['img/*.png', 'img/*/*.png', { from: 'data/database.json', to: 'data' }] }), - new HtmlWebpackPlugin({ template: './src/index.html' }), - new miniCssExtractPlugin() + new ForkTsCheckerWebpackPlugin(), + new CopyWebpackPlugin({ + patterns: [ + "img/*.png", + "img/*/*.png", + { from: "data/database.json", to: "data" }, + // Copy Shoelace assets to dist/shoelace + { + from: path.resolve( + __dirname, + "node_modules/@shoelace-style/shoelace/dist/assets", + ), + to: path.resolve(__dirname, "dist/shoelace/assets"), + }, + ], + }), + new HtmlWebpackPlugin({ template: "./src/index.html" }), + new miniCssExtractPlugin(), ], module: { rules: [ { - test: /\.tsx?$/, - use: 'ts-loader', + test: /\.[jt]sx?$/, exclude: /node_modules/, + loader: "esbuild-loader", + options: { + target: "es2021", + tsconfig: "./tsconfig.json", + }, }, { test: /\.(jpg|png|svg|gif)$/, - type: 'asset/resource', + type: "asset/resource", }, { test: /\.(scss)$/, - use: [{ - // inject CSS to page - loader: miniCssExtractPlugin.loader - }, { - // translates CSS into CommonJS modules - loader: 'css-loader' - }, { - // Run postcss actions - loader: 'postcss-loader', - options: { - // `postcssOptions` is needed for postcss 8.x; - // if you use postcss 7.x skip the key - postcssOptions: { - // postcss plugins, can be exported to postcss.config.js - plugins: function () { - return [ - require('autoprefixer') - ]; - } - } - } - }, { - // compiles Sass to CSS - loader: 'sass-loader' - }], - // parser: { - // javascript : { importMeta: false } - // } - },], + use: [ + { + // inject CSS to page + loader: miniCssExtractPlugin.loader, + }, + { + // translates CSS into CommonJS modules + loader: "css-loader", + }, + { + loader: "esbuild-loader", + options: { + loader: 'css', + minify: true, + }, + }, + { + // Run postcss actions + loader: "postcss-loader", + options: { + // `postcssOptions` is needed for postcss 8.x; + // if you use postcss 7.x skip the key + postcssOptions: { + // postcss plugins, can be exported to postcss.config.js + plugins: function () { + return [require("autoprefixer")]; + }, + }, + }, + }, + { + // compiles Sass to CSS + loader: "sass-loader", + }, + ], + }, + ], }, resolve: { - extensions: ['.tsx', '.ts', '.js'], + extensions: [".tsx", ".ts", ".js"], fallback: { - "crypto": require.resolve("crypto-browserify"), - "buffer": require.resolve("buffer"), - "stream": require.resolve("stream-browserify"), - "vm": require.resolve("vm-browserify"), + crypto: require.resolve("crypto-browserify"), + buffer: require.resolve("buffer"), + stream: require.resolve("stream-browserify"), + vm: require.resolve("vm-browserify"), }, }, experiments: { @@ -82,6 +107,10 @@ module.exports = { }, optimization: { minimizer: [ + new EsbuildPlugin({ + target: "es2021", // Syntax to transpile to (see options below for possible values) + css: true, + }), new ImageMinimizerPlugin({ minimizer: { implementation: ImageMinimizerPlugin.imageminMinify, @@ -118,7 +147,7 @@ module.exports = { ], }, }, - }) - ] + }), + ], }, }; diff --git a/xtask/src/main.rs b/xtask/src/main.rs index c536681..c070801 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -1,4 +1,4 @@ -use std::process::Command; +use std::process::{Command, ExitStatus}; use clap::{Parser, Subcommand}; @@ -39,6 +39,8 @@ enum Task { /// /// This does not build the packages, use `build` first Start {}, + /// Runs production page under 'www/dist', Run `build` first. + Deploy {}, } #[derive(thiserror::Error)] @@ -91,13 +93,23 @@ fn main() -> Result<(), Error> { build(&args, packages, *release, &workspace, rest)?; } Task::Start {} => { + pnpm_install(&args, &workspace)?; eprintln!("Starting server"); let mut cmd = Command::new(&args.manager); cmd.current_dir(&workspace.join("www")); cmd.args(["run", "start"]).status().map_err(|e| { Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e) })?; - } + }, + Task::Deploy {} => { + pnpm_install(&args, &workspace)?; + eprintln!("Production Build"); + let mut cmd = Command::new(&args.manager); + cmd.current_dir(&workspace.join("www")); + cmd.args(["run", "build"]).status().map_err(|e| { + Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e) + })?; + }, } Ok(()) } @@ -147,3 +159,15 @@ fn build + std::fmt::Debug + std::fmt::Display>( } Ok(()) } + +fn pnpm_install( + args: &Args, + workspace: &std::path::Path, +) -> Result { + eprintln!("Running `pnpm install`"); + let mut cmd = Command::new(&args.manager); + cmd.current_dir(&workspace.join("www")); + cmd.args(["install"]) + .status() + .map_err(|e| Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e)) +}