Merge branch 'master' into develop

This commit is contained in:
Athanasius 2022-01-10 09:40:14 +00:00
commit aa7fabf134
18 changed files with 7440 additions and 37 deletions

View File

@ -126,7 +126,8 @@ set a `Content-Type` header of `applicaton/json`, and NOT any of:
* `text/plain`
For historical reasons URL form-encoded data *is* supported, **but this is
deprecated and no new software should attempt this method**.
deprecated and no new software should attempt this method**. We
purposefully do not further document the exact format for this.
You *MAY* use gzip compression on the body of the message, but it is not
required.
@ -310,35 +311,62 @@ make a valid request" responses you might experience the following:
[commit 0e80c76cb564771465f61825e694227dcc3be312](https://github.com/EDCD/EDDN/commit/0e80c76cb564771465f61825e694227dcc3be312).
#### EDDN Gateway responses
1. `400` - `Bad Request` - this can be for a variety of reasons, and should
come with a response body with prefix `OK: ` or `FAIL: `:
1. `FAIL: <python simplejson exception message>` - the request couldn't be
parsed as valid JSON. e.g.
For all failures the response body will contain text that begins `FAIL: `. Currently two different HTTP status codes are utilised:
```
FAIL: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
```
2. `FAIL: [<ValidationError: "<schema validation failure>"]` - the JSON
message failed to pass schema validation. e.g.
1. `400` - `Bad Request` - This indicates something wrong with the request
body. Possibly due to a format issue (compression, form encoding), or
the actual content of the EDDN message:
1. `FAIL: zlib.error: <detail>` - A failure to decompress a message that
claimed to be compressed.
```
FAIL: [<ValidationError: "'StarPos' is a required property">]
```
2. `FAIL: Malformed Upload: <detail>` - the message appeared to be
form-encoded, but either the format was bad or there was no `data`
key.
3. Other python exception message, e.g. if a message appeared to be
gzip compressed, but a failure was experienced when attempting to
decompress it. **NB: As of 2022-07-01 such messages won't have the
`FAIL: ` prefix.** See
[#161 - Gateway: Improve reporting of 'misc' errors ](https://github.com/EDCD/EDDN/issues/161)
for any progress/resolution on this.
2. `426` - `Upgrade Required` - You sent a message with an outdated
`$schemaRef` value. This could be either an old, deprecated version of
a schema, or an entirely deprecated schema. e.g.
3. `FAIL: JSON parsing: <detail>` - the
message couldn't be parsed as valid JSON. e.g.
```
FAIL: The schema you have used is no longer supported. Please check for an updated version of your application.
FAIL: JSON parsing: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
```
4. `FAIL: Schema Validation: <detail>` - the message failed to validate
against the cited schema. e.g.
```
FAIL: Schema Validation: [<ValidationError: "'StarPos' is a required property">]
```
The exact detail will be very much dependent on both the schema the
message cited and the contents of the message that failed to pass the
validation.
In particular, if the message contains a key that is tagged 'disallowed' in
the schema the response will look like:
```
FAIL: Schema Validation: "[<ValidationError: "{'type': ['array', 'boolean', 'integer', 'number', 'null', 'object', 'string']} is not allowed for 'BadKey'">]"
```
This is due to the use of a JSON schema stanza that says "don't allow
any valid type for the value of this key" to trigger the error for such
disallowed keys.
2. `426` - `Upgrade Required` - This indicates that the cited schema, or
version thereof, is outdated. The body of the response will be:
```
FAIL: Oudated Schema: The schema you have used is no longer supported. Please check for an updated version of your application.
```
The wording here is aimed at users of applications that send messages
over EDDN. If you're the developer of such an application then
obviously you need to update your code to use a currently supported
schema and version thereof.
There shouldn't be any other variants of a 'FAIL' message. If you find
any then please
[open an issue on GitHub](https://github.com/EDCD/EDDN/issues/new)
with as much detail as possible so that we can update this documentation.
## Receiving messages

View File

@ -0,0 +1,330 @@
{ "timestamp":"2022-01-06T11:19:27Z", "event":"Market", "MarketID":128008448, "StationName":"Freeport", "StationType":"Coriolis", "StarSystem":"LP 98-132", "Items":[
{ "id":128049152, "Name":"$platinum_name;", "Name_Localised":"Platinum", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":39557, "SellPrice":39555, "MeanPrice":58263, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049153, "Name":"$palladium_name;", "Name_Localised":"Palladium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":47901, "SellPrice":47360, "MeanPrice":50639, "StockBracket":1, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049154, "Name":"$gold_name;", "Name_Localised":"Gold", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":44874, "SellPrice":44362, "MeanPrice":47610, "StockBracket":1, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049155, "Name":"$silver_name;", "Name_Localised":"Silver", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":34289, "SellPrice":33471, "MeanPrice":37223, "StockBracket":1, "DemandBracket":0, "Stock":8, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049156, "Name":"$bertrandite_name;", "Name_Localised":"Bertrandite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":21216, "MeanPrice":18817, "StockBracket":0, "DemandBracket":2, "Stock":0, "Demand":1047, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049157, "Name":"$indite_name;", "Name_Localised":"Indite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":10508, "SellPrice":10238, "MeanPrice":11389, "StockBracket":1, "DemandBracket":0, "Stock":296, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049158, "Name":"$gallite_name;", "Name_Localised":"Gallite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":13829, "MeanPrice":11915, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1765, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049159, "Name":"$coltan_name;", "Name_Localised":"Coltan", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":7849, "MeanPrice":6163, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2063, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049160, "Name":"$uraninite_name;", "Name_Localised":"Uraninite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":4202, "MeanPrice":2957, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2899, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049161, "Name":"$lepidolite_name;", "Name_Localised":"Lepidolite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":4193, "SellPrice":3999, "MeanPrice":771, "StockBracket":1, "DemandBracket":0, "Stock":1271, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049162, "Name":"$cobalt_name;", "Name_Localised":"Cobalt", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":13474, "SellPrice":12870, "MeanPrice":3762, "StockBracket":1, "DemandBracket":0, "Stock":724, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049163, "Name":"$rutile_name;", "Name_Localised":"Rutile", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":11056, "MeanPrice":2083, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1306, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049165, "Name":"$bauxite_name;", "Name_Localised":"Bauxite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":10730, "SellPrice":10270, "MeanPrice":1140, "StockBracket":1, "DemandBracket":0, "Stock":595, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049166, "Name":"$water_name;", "Name_Localised":"Water", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":0, "SellPrice":599, "MeanPrice":278, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":336, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049168, "Name":"$beryllium_name;", "Name_Localised":"Beryllium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":8041, "SellPrice":7948, "MeanPrice":8243, "StockBracket":1, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049169, "Name":"$indium_name;", "Name_Localised":"Indium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":5894, "SellPrice":5824, "MeanPrice":5845, "StockBracket":1, "DemandBracket":0, "Stock":8, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049170, "Name":"$gallium_name;", "Name_Localised":"Gallium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":5165, "SellPrice":5042, "MeanPrice":5203, "StockBracket":1, "DemandBracket":0, "Stock":11, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049171, "Name":"$tantalum_name;", "Name_Localised":"Tantalum", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":4099, "SellPrice":3999, "MeanPrice":4044, "StockBracket":1, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049172, "Name":"$uranium_name;", "Name_Localised":"Uranium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":3139, "SellPrice":3060, "MeanPrice":2827, "StockBracket":1, "DemandBracket":0, "Stock":24, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049173, "Name":"$lithium_name;", "Name_Localised":"Lithium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":1906, "SellPrice":1855, "MeanPrice":1772, "StockBracket":1, "DemandBracket":0, "Stock":6, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049174, "Name":"$titanium_name;", "Name_Localised":"Titanium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":1377, "SellPrice":1319, "MeanPrice":1208, "StockBracket":2, "DemandBracket":0, "Stock":122, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049175, "Name":"$copper_name;", "Name_Localised":"Copper", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":1115, "SellPrice":1042, "MeanPrice":689, "StockBracket":2, "DemandBracket":0, "Stock":474, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049176, "Name":"$aluminium_name;", "Name_Localised":"Aluminium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":1127, "SellPrice":1045, "MeanPrice":551, "StockBracket":2, "DemandBracket":0, "Stock":352, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049177, "Name":"$algae_name;", "Name_Localised":"Algae", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":23, "SellPrice":22, "MeanPrice":356, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049178, "Name":"$fruitandvegetables_name;", "Name_Localised":"Fruit and Vegetables", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":1060, "MeanPrice":509, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1637, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049180, "Name":"$grain_name;", "Name_Localised":"Grain", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":919, "MeanPrice":410, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2980, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049182, "Name":"$animalmeat_name;", "Name_Localised":"Animal Meat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":1695, "MeanPrice":1539, "StockBracket":0, "DemandBracket":1, "Stock":0, "Demand":26, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049183, "Name":"$fish_name;", "Name_Localised":"Fish", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":1008, "MeanPrice":650, "StockBracket":0, "DemandBracket":2, "Stock":0, "Demand":481, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049184, "Name":"$foodcartridges_name;", "Name_Localised":"Food Cartridges", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":767, "MeanPrice":265, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1094, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049185, "Name":"$syntheticmeat_name;", "Name_Localised":"Synthetic Meat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":872, "MeanPrice":440, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":496, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049188, "Name":"$tea_name;", "Name_Localised":"Tea", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":1923, "MeanPrice":1696, "StockBracket":0, "DemandBracket":2, "Stock":0, "Demand":43, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049189, "Name":"$coffee_name;", "Name_Localised":"Coffee", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":0, "SellPrice":2303, "MeanPrice":1499, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":527, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049190, "Name":"$leather_name;", "Name_Localised":"Leather", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":57, "SellPrice":56, "MeanPrice":435, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049191, "Name":"$naturalfabrics_name;", "Name_Localised":"Natural Fabrics", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":351, "SellPrice":350, "MeanPrice":688, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049193, "Name":"$syntheticfabrics_name;", "Name_Localised":"Synthetic Fabrics", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1705, "SellPrice":1435, "MeanPrice":416, "StockBracket":1, "DemandBracket":0, "Stock":197, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049197, "Name":"$polymers_name;", "Name_Localised":"Polymers", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":2614, "SellPrice":1960, "MeanPrice":376, "StockBracket":1, "DemandBracket":0, "Stock":272, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049199, "Name":"$semiconductors_name;", "Name_Localised":"Semiconductors", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":1415, "SellPrice":1355, "MeanPrice":1136, "StockBracket":1, "DemandBracket":0, "Stock":42, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049200, "Name":"$superconductors_name;", "Name_Localised":"Superconductors", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":6809, "SellPrice":6729, "MeanPrice":6679, "StockBracket":1, "DemandBracket":0, "Stock":14, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049202, "Name":"$hydrogenfuel_name;", "Name_Localised":"Hydrogen Fuel", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":126, "SellPrice":120, "MeanPrice":113, "StockBracket":1, "DemandBracket":0, "Stock":379, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049203, "Name":"$mineraloil_name;", "Name_Localised":"Mineral Oil", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":0, "SellPrice":1483, "MeanPrice":423, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":3336, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049204, "Name":"$explosives_name;", "Name_Localised":"Explosives", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":0, "SellPrice":2101, "MeanPrice":512, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":3964, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049205, "Name":"$pesticides_name;", "Name_Localised":"Pesticides", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":82, "SellPrice":81, "MeanPrice":437, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049208, "Name":"$agriculturalmedicines_name;", "Name_Localised":"Agri-Medicines", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":543, "SellPrice":542, "MeanPrice":1231, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049209, "Name":"$performanceenhancers_name;", "Name_Localised":"Performance Enhancers", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":0, "SellPrice":6907, "MeanPrice":6790, "StockBracket":0, "DemandBracket":1, "Stock":0, "Demand":40, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049210, "Name":"$basicmedicines_name;", "Name_Localised":"Basic Medicines", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":0, "SellPrice":963, "MeanPrice":493, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":904, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049213, "Name":"$tobacco_name;", "Name_Localised":"Tobacco", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":0, "SellPrice":5568, "MeanPrice":5325, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":398, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049214, "Name":"$beer_name;", "Name_Localised":"Beer", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":0, "SellPrice":799, "MeanPrice":430, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1777, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049215, "Name":"$wine_name;", "Name_Localised":"Wine", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":0, "SellPrice":411, "MeanPrice":507, "StockBracket":0, "DemandBracket":1, "Stock":0, "Demand":0, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049216, "Name":"$liquor_name;", "Name_Localised":"Liquor", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":0, "SellPrice":1331, "MeanPrice":879, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":453, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049217, "Name":"$powergenerators_name;", "Name_Localised":"Power Generators", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":0, "SellPrice":3475, "MeanPrice":2466, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":613, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049218, "Name":"$waterpurifiers_name;", "Name_Localised":"Water Purifiers", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":0, "SellPrice":2101, "MeanPrice":484, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1256, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049220, "Name":"$heliostaticfurnaces_name;", "Name_Localised":"Microbial Furnaces", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":0, "SellPrice":2010, "MeanPrice":434, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":537, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049221, "Name":"$mineralextractors_name;", "Name_Localised":"Mineral Extractors", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":0, "SellPrice":2647, "MeanPrice":801, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1698, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049222, "Name":"$cropharvesters_name;", "Name_Localised":"Crop Harvesters", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1564, "SellPrice":1563, "MeanPrice":2230, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049223, "Name":"$marinesupplies_name;", "Name_Localised":"Marine Equipment", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":2745, "SellPrice":2744, "MeanPrice":4135, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049225, "Name":"$computercomponents_name;", "Name_Localised":"Computer Components", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":267, "SellPrice":266, "MeanPrice":776, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049226, "Name":"$hazardousenvironmentsuits_name;", "Name_Localised":"H.E. Suits", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":0, "SellPrice":915, "MeanPrice":570, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":4363, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049227, "Name":"$robotics_name;", "Name_Localised":"Robotics", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":1447, "SellPrice":1446, "MeanPrice":2020, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049228, "Name":"$autofabricators_name;", "Name_Localised":"Auto-Fabricators", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":2685, "SellPrice":2684, "MeanPrice":3827, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049229, "Name":"$animalmonitors_name;", "Name_Localised":"Animal Monitors", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":630, "SellPrice":629, "MeanPrice":537, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049230, "Name":"$aquaponicsystems_name;", "Name_Localised":"Aquaponic Systems", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":321, "SellPrice":320, "MeanPrice":524, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049231, "Name":"$advancedcatalysers_name;", "Name_Localised":"Advanced Catalysers", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":0, "SellPrice":3756, "MeanPrice":3039, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":936, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049232, "Name":"$terrainenrichmentsystems_name;", "Name_Localised":"Land Enrichment Systems", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":3005, "SellPrice":3004, "MeanPrice":4928, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049234, "Name":"$battleweapons_name;", "Name_Localised":"Battle Weapons", "Category":"$MARKET_category_weapons;", "Category_Localised":"Weapons", "BuyPrice":4463, "SellPrice":4462, "MeanPrice":7451, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128049235, "Name":"$reactivearmour_name;", "Name_Localised":"Reactive Armour", "Category":"$MARKET_category_weapons;", "Category_Localised":"Weapons", "BuyPrice":0, "SellPrice":2669, "MeanPrice":2224, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":150, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049236, "Name":"$nonlethalweapons_name;", "Name_Localised":"Non-Lethal Weapons", "Category":"$MARKET_category_weapons;", "Category_Localised":"Weapons", "BuyPrice":0, "SellPrice":2417, "MeanPrice":1943, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":274, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049238, "Name":"$domesticappliances_name;", "Name_Localised":"Domestic Appliances", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":0, "SellPrice":1216, "MeanPrice":740, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":575, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049240, "Name":"$consumertechnology_name;", "Name_Localised":"Consumer Technology", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":0, "SellPrice":6883, "MeanPrice":6690, "StockBracket":0, "DemandBracket":1, "Stock":0, "Demand":0, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049241, "Name":"$clothing_name;", "Name_Localised":"Clothing", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":0, "SellPrice":963, "MeanPrice":546, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":955, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049244, "Name":"$biowaste_name;", "Name_Localised":"Biowaste", "Category":"$MARKET_category_waste;", "Category_Localised":"Waste", "BuyPrice":145, "SellPrice":87, "MeanPrice":358, "StockBracket":1, "DemandBracket":0, "Stock":103, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128049246, "Name":"$chemicalwaste_name;", "Name_Localised":"Chemical Waste", "Category":"$MARKET_category_waste;", "Category_Localised":"Waste", "BuyPrice":0, "SellPrice":599, "MeanPrice":672, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":159, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049248, "Name":"$scrap_name;", "Name_Localised":"Scrap", "Category":"$MARKET_category_waste;", "Category_Localised":"Waste", "BuyPrice":0, "SellPrice":625, "MeanPrice":300, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":182, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049669, "Name":"$progenitorcells_name;", "Name_Localised":"Progenitor Cells", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":0, "SellPrice":7529, "MeanPrice":6752, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":6, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049671, "Name":"$resonatingseparators_name;", "Name_Localised":"Resonating Separators", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":0, "SellPrice":7158, "MeanPrice":5937, "StockBracket":0, "DemandBracket":2, "Stock":0, "Demand":491, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128049672, "Name":"$bioreducinglichen_name;", "Name_Localised":"Bioreducing Lichen", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":0, "SellPrice":1703, "MeanPrice":1204, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":5473, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128064028, "Name":"$atmosphericextractors_name;", "Name_Localised":"Atmospheric Processors", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":331, "SellPrice":330, "MeanPrice":571, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128666746, "Name":"$eraninpearlwhisky_name;", "Name_Localised":"Eranin Pearl Whisky", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":2058, "SellPrice":2057, "MeanPrice":9040, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128666747, "Name":"$lavianbrandy_name;", "Name_Localised":"Lavian Brandy", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":3614, "SellPrice":3613, "MeanPrice":10365, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128666757, "Name":"$usscargorareartwork_name;", "Name_Localised":"Rare Artwork", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":15150, "SellPrice":15149, "MeanPrice":16807, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128667019, "Name":"$hip10175bushmeat_name;", "Name_Localised":"HIP 10175 Bush Meat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2246, "SellPrice":2245, "MeanPrice":9382, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667020, "Name":"$albinoquechuamammoth_name;", "Name_Localised":"Albino Quechua Mammoth Meat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2663, "SellPrice":2662, "MeanPrice":9687, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667021, "Name":"$utgaroarmillenialeggs_name;", "Name_Localised":"Utgaroar Millennial Eggs", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2217, "SellPrice":2216, "MeanPrice":9163, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667022, "Name":"$witchhaulkobebeef_name;", "Name_Localised":"Witchhaul Kobe Beef", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":4313, "SellPrice":4312, "MeanPrice":11085, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667023, "Name":"$karsukilocusts_name;", "Name_Localised":"Karsuki Locusts", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1583, "SellPrice":1582, "MeanPrice":8543, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667024, "Name":"$giantirukamasnails_name;", "Name_Localised":"Giant Irukama Snails", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2131, "SellPrice":2130, "MeanPrice":9174, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667025, "Name":"$baltahsinevacuumkrill_name;", "Name_Localised":"Baltah'sine Vacuum Krill", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1502, "SellPrice":1501, "MeanPrice":8479, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667026, "Name":"$cetirabbits_name;", "Name_Localised":"Ceti Rabbits", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2068, "SellPrice":2067, "MeanPrice":9079, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667027, "Name":"$kachiriginleaches_name;", "Name_Localised":"Kachirigin Filter Leeches", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":1359, "SellPrice":1358, "MeanPrice":8227, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667029, "Name":"$onionhead_name;", "Name_Localised":"Onionhead", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1814, "SellPrice":1813, "MeanPrice":8437, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667034, "Name":"$konggaale_name;", "Name_Localised":"Kongga Ale", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1578, "SellPrice":1577, "MeanPrice":8310, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667035, "Name":"$wuthielokufroth_name;", "Name_Localised":"Wuthielo Ku Froth", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1558, "SellPrice":1557, "MeanPrice":8194, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667036, "Name":"$alacarakmoskinart_name;", "Name_Localised":"Alacarakmo Skin Art", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1858, "SellPrice":1857, "MeanPrice":8899, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667037, "Name":"$eleuthermals_name;", "Name_Localised":"Eleu Thermals", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1571, "SellPrice":1570, "MeanPrice":8507, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667038, "Name":"$eshuumbrellas_name;", "Name_Localised":"Eshu Umbrellas", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":2187, "SellPrice":2186, "MeanPrice":9343, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667039, "Name":"$karetiicouture_name;", "Name_Localised":"Karetii Couture", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":4748, "SellPrice":4747, "MeanPrice":11582, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667040, "Name":"$njangarisaddles_name;", "Name_Localised":"Njangari Saddles", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1639, "SellPrice":1638, "MeanPrice":8356, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667041, "Name":"$anynacoffee_name;", "Name_Localised":"Any Na Coffee", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2165, "SellPrice":2164, "MeanPrice":9160, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667042, "Name":"$cd75catcoffee_name;", "Name_Localised":"CD-75 Kitten Brand Coffee", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2452, "SellPrice":2451, "MeanPrice":9571, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667043, "Name":"$gomanyauponcoffee_name;", "Name_Localised":"Goman Yaupon Coffee", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1843, "SellPrice":1842, "MeanPrice":8921, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667044, "Name":"$volkhabbeedrones_name;", "Name_Localised":"Volkhab Bee Drones", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":3849, "SellPrice":3848, "MeanPrice":10198, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667045, "Name":"$kinagoinstruments_name;", "Name_Localised":"Kinago Violins", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":6570, "SellPrice":6569, "MeanPrice":13030, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667046, "Name":"$ngunamodernantiques_name;", "Name_Localised":"Nguna Modern Antiques", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1989, "SellPrice":1988, "MeanPrice":8545, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667047, "Name":"$rajukrustoves_name;", "Name_Localised":"Rajukru Multi-Stoves", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":2346, "SellPrice":2345, "MeanPrice":8378, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667048, "Name":"$tiolcewaste2pasteunits_name;", "Name_Localised":"Tiolce Waste2Paste Units", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1648, "SellPrice":1647, "MeanPrice":8710, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667049, "Name":"$chieridanimarinepaste_name;", "Name_Localised":"Chi Eridani Marine Paste", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1426, "SellPrice":1425, "MeanPrice":8450, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667050, "Name":"$esusekucaviar_name;", "Name_Localised":"Esuseku Caviar", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2573, "SellPrice":2572, "MeanPrice":9625, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667051, "Name":"$livehecateseaworms_name;", "Name_Localised":"Live Hecate Sea Worms", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1899, "SellPrice":1898, "MeanPrice":8737, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667052, "Name":"$helvetitjpearls_name;", "Name_Localised":"Helvetitj Pearls", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":3507, "SellPrice":3506, "MeanPrice":10450, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667053, "Name":"$hip41181squid_name;", "Name_Localised":"HIP Proto-Squid", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1891, "SellPrice":1890, "MeanPrice":8947, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667054, "Name":"$coquimspongiformvictuals_name;", "Name_Localised":"Coquim Spongiform Victuals", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":10924, "SellPrice":10923, "MeanPrice":8077, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667055, "Name":"$aerialedenapple_name;", "Name_Localised":"Eden Apples Of Aerial", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1660, "SellPrice":1659, "MeanPrice":8331, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667056, "Name":"$neritusberries_name;", "Name_Localised":"Neritus Berries", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1616, "SellPrice":1615, "MeanPrice":8497, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667057, "Name":"$ochoengchillies_name;", "Name_Localised":"Ochoeng Chillies", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1659, "SellPrice":1658, "MeanPrice":8601, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667058, "Name":"$deuringastruffles_name;", "Name_Localised":"Deuringas Truffles", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2335, "SellPrice":2334, "MeanPrice":9232, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667059, "Name":"$hr7221wheat_name;", "Name_Localised":"HR 7221 Wheat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1540, "SellPrice":1539, "MeanPrice":8190, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667060, "Name":"$jarouarice_name;", "Name_Localised":"Jaroua Rice", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2711, "SellPrice":2710, "MeanPrice":8169, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667061, "Name":"$belalansrayleather_name;", "Name_Localised":"Belalans Ray Leather", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1605, "SellPrice":1604, "MeanPrice":8519, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667062, "Name":"$damnacarapaces_name;", "Name_Localised":"Damna Carapaces", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":2925, "SellPrice":2924, "MeanPrice":8120, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667063, "Name":"$rapabaosnakeskins_name;", "Name_Localised":"Rapa Bao Snake Skins", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1726, "SellPrice":1725, "MeanPrice":8285, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667064, "Name":"$vanayequirhinofur_name;", "Name_Localised":"Vanayequi Ceratomorpha Fur", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1660, "SellPrice":1659, "MeanPrice":8331, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667065, "Name":"$bastsnakegin_name;", "Name_Localised":"Bast Snake Gin", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1724, "SellPrice":1723, "MeanPrice":8659, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667066, "Name":"$thrutiscream_name;", "Name_Localised":"Thrutis Cream", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1538, "SellPrice":1537, "MeanPrice":8550, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667067, "Name":"$wulpahyperboresystems_name;", "Name_Localised":"Wulpa Hyperbore Systems", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":2294, "SellPrice":2293, "MeanPrice":8726, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667073, "Name":"$deltaphoenicispalms_name;", "Name_Localised":"Delta Phoenicis Palms", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1528, "SellPrice":1527, "MeanPrice":8188, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667074, "Name":"$toxandjivirocide_name;", "Name_Localised":"Toxandji Virocide", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1678, "SellPrice":1677, "MeanPrice":8275, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667075, "Name":"$xihecompanions_name;", "Name_Localised":"Xihe Biomorphic Companions", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":4277, "SellPrice":4276, "MeanPrice":11058, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667076, "Name":"$sanumameat_name;", "Name_Localised":"Sanuma Decorative Meat", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1319, "SellPrice":1318, "MeanPrice":8504, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667077, "Name":"$ethgrezeteabuds_name;", "Name_Localised":"Ethgreze Tea Buds", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":3212, "SellPrice":3211, "MeanPrice":10197, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667078, "Name":"$ceremonialheiketea_name;", "Name_Localised":"Ceremonial Heike Tea", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2161, "SellPrice":2160, "MeanPrice":9251, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667079, "Name":"$tanmarktranquiltea_name;", "Name_Localised":"Tanmark Tranquil Tea", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2041, "SellPrice":2040, "MeanPrice":9177, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667080, "Name":"$azcancriformula42_name;", "Name_Localised":"AZ Cancri Formula 42", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":6106, "SellPrice":6105, "MeanPrice":12440, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667081, "Name":"$kamitracigars_name;", "Name_Localised":"Kamitra Cigars", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":5522, "SellPrice":5521, "MeanPrice":12282, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667082, "Name":"$rusanioldsmokey_name;", "Name_Localised":"Rusani Old Smokey", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":5179, "SellPrice":5178, "MeanPrice":11994, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667083, "Name":"$yasokondileaf_name;", "Name_Localised":"Yaso Kondi Leaf", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":5381, "SellPrice":5380, "MeanPrice":12171, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667084, "Name":"$chateaudeaegaeon_name;", "Name_Localised":"Chateau De Aegaeon", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1610, "SellPrice":1609, "MeanPrice":8791, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667085, "Name":"$watersofshintara_name;", "Name_Localised":"The Waters Of Shintara", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":7070, "SellPrice":7069, "MeanPrice":13711, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667668, "Name":"$ophiuchiexinoartefacts_name;", "Name_Localised":"Ophiuch Exino Artefacts", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":4072, "SellPrice":4071, "MeanPrice":10969, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667669, "Name":"$bakedgreebles_name;", "Name_Localised":"Baked Greebles", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1056, "SellPrice":1055, "MeanPrice":8211, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667670, "Name":"$cetiaepyornisegg_name;", "Name_Localised":"Aepyornis Egg", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2741, "SellPrice":2740, "MeanPrice":9769, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667671, "Name":"$saxonwine_name;", "Name_Localised":"Saxon Wine", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1863, "SellPrice":1862, "MeanPrice":8983, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667672, "Name":"$centaurimegagin_name;", "Name_Localised":"Centauri Mega Gin", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":3239, "SellPrice":3238, "MeanPrice":10217, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667673, "Name":"$anduligafireworks_name;", "Name_Localised":"Anduliga Fire Works", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1574, "SellPrice":1573, "MeanPrice":8519, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667674, "Name":"$bankiamphibiousleather_name;", "Name_Localised":"Banki Amphibious Leather", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1138, "SellPrice":1137, "MeanPrice":8338, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667675, "Name":"$cherbonesbloodcrystals_name;", "Name_Localised":"Cherbones Blood Crystals", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":10207, "SellPrice":10206, "MeanPrice":16714, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667678, "Name":"$gerasiangueuzebeer_name;", "Name_Localised":"Gerasian Gueuze Beer", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1067, "SellPrice":1066, "MeanPrice":8215, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667679, "Name":"$haidneblackbrew_name;", "Name_Localised":"Haiden Black Brew", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1693, "SellPrice":1692, "MeanPrice":8837, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667680, "Name":"$havasupaidreamcatcher_name;", "Name_Localised":"Havasupai Dream Catcher", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":8056, "SellPrice":8055, "MeanPrice":14639, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667682, "Name":"$hiporganophosphates_name;", "Name_Localised":"Hip Organophosphates", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1039, "SellPrice":1038, "MeanPrice":8169, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667683, "Name":"$jaradharrepuzzlebox_name;", "Name_Localised":"Jaradharre Puzzle Box", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":10325, "SellPrice":10324, "MeanPrice":16816, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667684, "Name":"$korrokungpellets_name;", "Name_Localised":"Koro Kung Pellets", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1190, "SellPrice":1189, "MeanPrice":8067, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667685, "Name":"$lftvoidextractcoffee_name;", "Name_Localised":"Void Extract Coffee", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2506, "SellPrice":2505, "MeanPrice":9554, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667686, "Name":"$honestypills_name;", "Name_Localised":"Honesty Pills", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":1686, "SellPrice":1685, "MeanPrice":8860, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667687, "Name":"$noneuclidianexotanks_name;", "Name_Localised":"Non Euclidian Exotanks", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1326, "SellPrice":1325, "MeanPrice":8526, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667688, "Name":"$ltthypersweet_name;", "Name_Localised":"LTT Hyper Sweet", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1233, "SellPrice":1232, "MeanPrice":8054, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667689, "Name":"$mechucoshightea_name;", "Name_Localised":"Mechucos High Tea", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1709, "SellPrice":1708, "MeanPrice":8846, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667690, "Name":"$medbstarlube_name;", "Name_Localised":"Medb Starlube", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1953, "SellPrice":1952, "MeanPrice":8191, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667691, "Name":"$mokojingbeastfeast_name;", "Name_Localised":"Mokojing Beast Feast", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":2770, "SellPrice":2769, "MeanPrice":9788, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667692, "Name":"$mukusubiichitinos_name;", "Name_Localised":"Mukusubii Chitin-os", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1190, "SellPrice":1189, "MeanPrice":8359, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667693, "Name":"$mulachigiantfungus_name;", "Name_Localised":"Mulachi Giant Fungus", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":8230, "SellPrice":8229, "MeanPrice":7957, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667694, "Name":"$ngadandarifireopals_name;", "Name_Localised":"Ngadandari Fire Opals", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":12751, "SellPrice":12750, "MeanPrice":19112, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667695, "Name":"$tiegfriessynthsilk_name;", "Name_Localised":"Tiegfries Synth Silk", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1263, "SellPrice":1262, "MeanPrice":8478, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667696, "Name":"$uzumokulowgwings_name;", "Name_Localised":"Uzumoku Low-G Wings", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":7233, "SellPrice":7232, "MeanPrice":13845, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667697, "Name":"$vherculisbodyrub_name;", "Name_Localised":"V Herculis Body Rub", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":1730, "SellPrice":1729, "MeanPrice":8010, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667698, "Name":"$wheemetewheatcakes_name;", "Name_Localised":"Wheemete Wheat Cakes", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1164, "SellPrice":1163, "MeanPrice":8081, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667699, "Name":"$vegaslimweed_name;", "Name_Localised":"Vega Slimweed", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":2518, "SellPrice":2517, "MeanPrice":9588, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667700, "Name":"$altairianskin_name;", "Name_Localised":"Altairian Skin", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1262, "SellPrice":1261, "MeanPrice":8432, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667702, "Name":"$jotunmookah_name;", "Name_Localised":"Jotun Mookah", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1637, "SellPrice":1636, "MeanPrice":8780, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667703, "Name":"$giantverrix_name;", "Name_Localised":"Giant Verrix", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":5713, "SellPrice":5712, "MeanPrice":12496, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667704, "Name":"$indibourbon_name;", "Name_Localised":"Indi Bourbon", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1638, "SellPrice":1637, "MeanPrice":8806, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667705, "Name":"$aroucaconventualsweets_name;", "Name_Localised":"Arouca Conventual Sweets", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1557, "SellPrice":1556, "MeanPrice":8737, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667706, "Name":"$taurichimes_name;", "Name_Localised":"Tauri Chimes", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1374, "SellPrice":1373, "MeanPrice":8549, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667707, "Name":"$zeesszeantglue_name;", "Name_Localised":"Zeessze Ant Grub Glue", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1089, "SellPrice":1088, "MeanPrice":8161, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667708, "Name":"$pantaaprayersticks_name;", "Name_Localised":"Pantaa Prayer Sticks", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":2043, "SellPrice":2042, "MeanPrice":9177, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667709, "Name":"$fujintea_name;", "Name_Localised":"Fujin Tea", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1418, "SellPrice":1417, "MeanPrice":8597, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667710, "Name":"$chameleoncloth_name;", "Name_Localised":"Chameleon Cloth", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1959, "SellPrice":1958, "MeanPrice":9071, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667711, "Name":"$orrerianviciousbrew_name;", "Name_Localised":"Orrerian Vicious Brew", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1146, "SellPrice":1145, "MeanPrice":8342, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667712, "Name":"$uszaiantreegrub_name;", "Name_Localised":"Uszaian Tree Grub", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1379, "SellPrice":1378, "MeanPrice":8578, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667713, "Name":"$momusbogspaniel_name;", "Name_Localised":"Momus Bog Spaniel", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":2054, "SellPrice":2053, "MeanPrice":9184, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667714, "Name":"$disomacorn_name;", "Name_Localised":"Diso Ma Corn", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":1053, "SellPrice":1052, "MeanPrice":8134, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667715, "Name":"$leestianeviljuice_name;", "Name_Localised":"Leestian Evil Juice", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1086, "SellPrice":1085, "MeanPrice":8220, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667716, "Name":"$bluemilk_name;", "Name_Localised":"Azure Milk", "Category":"$MARKET_category_foods;", "Category_Localised":"Foods", "BuyPrice":3912, "SellPrice":3911, "MeanPrice":10805, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667717, "Name":"$alieneggs_name;", "Name_Localised":"Leathery Eggs", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":19095, "SellPrice":19094, "MeanPrice":25067, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667718, "Name":"$alyabodilysoap_name;", "Name_Localised":"Alya Body Soap", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":1078, "SellPrice":1077, "MeanPrice":8218, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667719, "Name":"$vidavantianlace_name;", "Name_Localised":"Vidavantian Lace", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":5861, "SellPrice":5860, "MeanPrice":12615, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128667760, "Name":"$transgeniconionhead_name;", "Name_Localised":"Lucan Onionhead", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1483, "SellPrice":1482, "MeanPrice":8472, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128668017, "Name":"$jaquesquinentianstill_name;", "Name_Localised":"Jaques Quinentian Still", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":7233, "SellPrice":7232, "MeanPrice":13845, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128668018, "Name":"$soontillrelics_name;", "Name_Localised":"Soontill Relics", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":13602, "SellPrice":13601, "MeanPrice":19885, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128668547, "Name":"$unknownartifact_name;", "Name_Localised":"Thargoid Sensor", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":234627, "SellPrice":234615, "MeanPrice":306252, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128668550, "Name":"$painite_name;", "Name_Localised":"Painite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":192955, "MeanPrice":53016, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":4, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128671118, "Name":"$osmium_name;", "Name_Localised":"Osmium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":23482, "SellPrice":23480, "MeanPrice":45198, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128671119, "Name":"$advert1_name;", "Name_Localised":"Ultra-Compact Processor Prototypes", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":15267, "SellPrice":15266, "MeanPrice":21542, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128671443, "Name":"$sap8corecontainer_name;", "Name_Localised":"SAP 8 Core Container", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":49112, "SellPrice":49109, "MeanPrice":67593, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672121, "Name":"$thehuttonmug_name;", "Name_Localised":"The Hutton Mug", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":2751, "SellPrice":2750, "MeanPrice":7986, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128672122, "Name":"$sothiscrystallinegold_name;", "Name_Localised":"Sothis Crystalline Gold", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":12751, "SellPrice":12750, "MeanPrice":19112, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128672124, "Name":"$encripteddatastorage_name;", "Name_Localised":"Encrypted Data Storage", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":4049, "SellPrice":4048, "MeanPrice":8313, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672127, "Name":"$comercialsamples_name;", "Name_Localised":"Commercial Samples", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":656, "SellPrice":655, "MeanPrice":1815, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672128, "Name":"$tacticaldata_name;", "Name_Localised":"Tactical Data", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":2170, "SellPrice":2169, "MeanPrice":15622, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672129, "Name":"$assaultplans_name;", "Name_Localised":"Assault Plans", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3294, "SellPrice":3293, "MeanPrice":26074, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672130, "Name":"$encryptedcorrespondence_name;", "Name_Localised":"Encrypted Correspondence", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3935, "SellPrice":3934, "MeanPrice":8226, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672131, "Name":"$diplomaticbag_name;", "Name_Localised":"Diplomatic Bag", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":4265, "SellPrice":4264, "MeanPrice":28625, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672132, "Name":"$scientificresearch_name;", "Name_Localised":"Scientific Research", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":13394, "SellPrice":13393, "MeanPrice":20151, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672133, "Name":"$scientificsamples_name;", "Name_Localised":"Scientific Samples", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":10878, "SellPrice":10877, "MeanPrice":7955, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672136, "Name":"$largeexplorationdatacash_name;", "Name_Localised":"Large Survey Data Cache", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":225210, "SellPrice":225198, "MeanPrice":255841, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672137, "Name":"$smallexplorationdatacash_name;", "Name_Localised":"Small Survey Data Cache", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":40615, "SellPrice":40612, "MeanPrice":25005, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672159, "Name":"$antiquejewellery_name;", "Name_Localised":"Antique Jewellery", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":158957, "SellPrice":158949, "MeanPrice":183163, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672160, "Name":"$preciousgems_name;", "Name_Localised":"Precious Gems", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":138850, "SellPrice":138843, "MeanPrice":160280, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672161, "Name":"$earthrelics_name;", "Name_Localised":"Earth Relics", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":14640, "SellPrice":14639, "MeanPrice":15161, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672162, "Name":"$genebank_name;", "Name_Localised":"Gene Bank", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":46704, "SellPrice":46701, "MeanPrice":59082, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672163, "Name":"$timecapsule_name;", "Name_Localised":"Time Capsule", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":2926, "SellPrice":2925, "MeanPrice":5364, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672294, "Name":"$cryolite_name;", "Name_Localised":"Cryolite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":14970, "MeanPrice":12173, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1166, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128672295, "Name":"$goslarite_name;", "Name_Localised":"Goslarite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":8024, "MeanPrice":5979, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1290, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128672296, "Name":"$moissanite_name;", "Name_Localised":"Moissanite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":16662, "SellPrice":16661, "MeanPrice":24833, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672297, "Name":"$pyrophyllite_name;", "Name_Localised":"Pyrophyllite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":13777, "MeanPrice":11538, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":341, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128672298, "Name":"$lanthanum_name;", "Name_Localised":"Lanthanum", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":6087, "SellPrice":6086, "MeanPrice":8707, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672299, "Name":"$thallium_name;", "Name_Localised":"Thallium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":2539, "SellPrice":2538, "MeanPrice":3745, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672300, "Name":"$bismuth_name;", "Name_Localised":"Bismuth", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":1607, "SellPrice":1606, "MeanPrice":2441, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672301, "Name":"$thorium_name;", "Name_Localised":"Thorium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":7969, "SellPrice":7968, "MeanPrice":11317, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672302, "Name":"$ceramiccomposites_name;", "Name_Localised":"Ceramic Composites", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":424, "SellPrice":423, "MeanPrice":415, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672303, "Name":"$syntheticreagents_name;", "Name_Localised":"Synthetic Reagents", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":4463, "SellPrice":4462, "MeanPrice":6651, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672305, "Name":"$surfacestabilisers_name;", "Name_Localised":"Surface Stabilisers", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":1656, "SellPrice":1550, "MeanPrice":726, "StockBracket":1, "DemandBracket":0, "Stock":67, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128672307, "Name":"$geologicalequipment_name;", "Name_Localised":"Geological Equipment", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1186, "SellPrice":1185, "MeanPrice":1886, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672308, "Name":"$thermalcoolingunits_name;", "Name_Localised":"Thermal Cooling Units", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":2516, "SellPrice":2515, "MeanPrice":3760, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672309, "Name":"$buildingfabricators_name;", "Name_Localised":"Building Fabricators", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1448, "SellPrice":1447, "MeanPrice":2312, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672310, "Name":"$mutomimager_name;", "Name_Localised":"Muon Imager", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":4218, "SellPrice":4217, "MeanPrice":6311, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672311, "Name":"$structuralregulators_name;", "Name_Localised":"Structural Regulators", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":1186, "SellPrice":1185, "MeanPrice":1932, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672313, "Name":"$skimercomponents_name;", "Name_Localised":"Skimmer Components", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":530, "SellPrice":529, "MeanPrice":1119, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672314, "Name":"$evacuationshelter_name;", "Name_Localised":"Evacuation Shelter", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":138, "SellPrice":137, "MeanPrice":522, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672315, "Name":"$geologicalsamples_name;", "Name_Localised":"Geological Samples", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":12144, "SellPrice":12143, "MeanPrice":8313, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672431, "Name":"$personalgifts_name;", "Name_Localised":"Personal Gifts", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":10000, "SellPrice":9999, "MeanPrice":16535, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128672432, "Name":"$crystallinespheres_name;", "Name_Localised":"Crystalline Spheres", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":5438, "SellPrice":5437, "MeanPrice":12216, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128672701, "Name":"$metaalloys_name;", "Name_Localised":"Meta-Alloys", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":162685, "SellPrice":162676, "MeanPrice":195453, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672775, "Name":"$taaffeite_name;", "Name_Localised":"Taaffeite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":51665, "SellPrice":51662, "MeanPrice":52089, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672776, "Name":"$jadeite_name;", "Name_Localised":"Jadeite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":40631, "SellPrice":40628, "MeanPrice":42383, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672810, "Name":"$unstabledatacore_name;", "Name_Localised":"Unstable Data Core", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":2371, "SellPrice":2370, "MeanPrice":4516, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128672812, "Name":"$onionheada_name;", "Name_Localised":"Onionhead Alpha Strain", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1272, "SellPrice":1271, "MeanPrice":8437, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128673069, "Name":"$onionheadb_name;", "Name_Localised":"Onionhead Beta Strain", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":1272, "SellPrice":1271, "MeanPrice":8437, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128673845, "Name":"$praseodymium_name;", "Name_Localised":"Praseodymium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":6708, "SellPrice":6707, "MeanPrice":8620, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673846, "Name":"$bromellite_name;", "Name_Localised":"Bromellite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":70950, "SellPrice":70946, "MeanPrice":30424, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673847, "Name":"$samarium_name;", "Name_Localised":"Samarium", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":31195, "SellPrice":31193, "MeanPrice":25852, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673848, "Name":"$lowtemperaturediamond_name;", "Name_Localised":"Low Temp. Diamonds", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":293785, "MeanPrice":106353, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128673850, "Name":"$hydrogenperoxide_name;", "Name_Localised":"Hydrogen Peroxide", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":0, "SellPrice":3301, "MeanPrice":3160, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":548, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128673851, "Name":"$liquidoxygen_name;", "Name_Localised":"Liquid oxygen", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":957, "SellPrice":850, "MeanPrice":1474, "StockBracket":1, "DemandBracket":0, "Stock":22, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128673852, "Name":"$methanolmonohydratecrystals_name;", "Name_Localised":"Methanol Monohydrate Crystals", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":1290, "SellPrice":1289, "MeanPrice":2478, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673853, "Name":"$lithiumhydroxide_name;", "Name_Localised":"Lithium Hydroxide", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":7350, "MeanPrice":5673, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":99, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128673854, "Name":"$methaneclathrate_name;", "Name_Localised":"Methane Clathrate", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":1740, "MeanPrice":1650, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2873, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128673855, "Name":"$insulatingmembrane_name;", "Name_Localised":"Insulating Membrane", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":10137, "SellPrice":10021, "MeanPrice":10724, "StockBracket":2, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128673856, "Name":"$cmmcomposite_name;", "Name_Localised":"CMM Composite", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":3907, "SellPrice":3906, "MeanPrice":5988, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673857, "Name":"$coolinghoses_name;", "Name_Localised":"Micro-weave Cooling Hoses", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":707, "SellPrice":706, "MeanPrice":1886, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673858, "Name":"$neofabricinsulation_name;", "Name_Localised":"Neofabric Insulation", "Category":"$MARKET_category_industrial_materials;", "Category_Localised":"Industrial materials", "BuyPrice":3380, "SellPrice":3379, "MeanPrice":5978, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673859, "Name":"$articulationmotors_name;", "Name_Localised":"Articulation Motors", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":4463, "SellPrice":4462, "MeanPrice":7588, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673860, "Name":"$hnshockmount_name;", "Name_Localised":"HN Shock Mount", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1075, "SellPrice":1074, "MeanPrice":1922, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673861, "Name":"$emergencypowercells_name;", "Name_Localised":"Emergency Power Cells", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1338, "SellPrice":1337, "MeanPrice":2368, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673862, "Name":"$powerconverter_name;", "Name_Localised":"Power Converter", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":707, "SellPrice":706, "MeanPrice":1433, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673863, "Name":"$powergridassembly_name;", "Name_Localised":"Energy Grid Assembly", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1543, "SellPrice":1542, "MeanPrice":2659, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673864, "Name":"$powertransferconduits_name;", "Name_Localised":"Power Transfer Bus", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1254, "SellPrice":1253, "MeanPrice":2212, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673865, "Name":"$radiationbaffle_name;", "Name_Localised":"Radiation Baffle", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":935, "SellPrice":934, "MeanPrice":1787, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673866, "Name":"$exhaustmanifold_name;", "Name_Localised":"Exhaust Manifold", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1009, "SellPrice":1008, "MeanPrice":1873, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673867, "Name":"$reinforcedmountingplate_name;", "Name_Localised":"Reinforced Mounting Plate", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1446, "SellPrice":1445, "MeanPrice":2454, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673868, "Name":"$heatsinkinterlink_name;", "Name_Localised":"Heatsink Interlink", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1161, "SellPrice":1160, "MeanPrice":2100, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673869, "Name":"$magneticemittercoil_name;", "Name_Localised":"Magnetic Emitter Coil", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":656, "SellPrice":655, "MeanPrice":1357, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673870, "Name":"$modularterminals_name;", "Name_Localised":"Modular Terminals", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1075, "SellPrice":1074, "MeanPrice":2475, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673871, "Name":"$nanobreakers_name;", "Name_Localised":"Nanobreakers", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":1009, "SellPrice":1008, "MeanPrice":2366, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673872, "Name":"$telemetrysuite_name;", "Name_Localised":"Telemetry Suite", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":1543, "SellPrice":1542, "MeanPrice":3214, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673873, "Name":"$microcontrollers_name;", "Name_Localised":"Micro Controllers", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":3612, "SellPrice":3611, "MeanPrice":5590, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673874, "Name":"$iondistributor_name;", "Name_Localised":"Ion Distributor", "Category":"$MARKET_category_machinery;", "Category_Localised":"Machinery", "BuyPrice":1338, "SellPrice":1337, "MeanPrice":2363, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673875, "Name":"$diagnosticsensor_name;", "Name_Localised":"Hardware Diagnostic Sensor", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":4463, "SellPrice":4462, "MeanPrice":6727, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128673876, "Name":"$unknownartifact2_name;", "Name_Localised":"Thargoid Probe", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":344560, "SellPrice":344542, "MeanPrice":443535, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682044, "Name":"$conductivefabrics_name;", "Name_Localised":"Conductive Fabrics", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":1937, "SellPrice":1810, "MeanPrice":709, "StockBracket":1, "DemandBracket":0, "Stock":55, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128682045, "Name":"$militarygradefabrics_name;", "Name_Localised":"Military Grade Fabrics", "Category":"$MARKET_category_textiles;", "Category_Localised":"Textiles", "BuyPrice":3690, "SellPrice":3527, "MeanPrice":984, "StockBracket":1, "DemandBracket":0, "Stock":46, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128682046, "Name":"$advancedmedicines_name;", "Name_Localised":"Advanced Medicines", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":0, "SellPrice":1726, "MeanPrice":1485, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":296, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128682047, "Name":"$medicaldiagnosticequipment_name;", "Name_Localised":"Medical Diagnostic Equipment", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":1779, "SellPrice":1778, "MeanPrice":3075, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682048, "Name":"$survivalequipment_name;", "Name_Localised":"Survival Equipment", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":533, "SellPrice":532, "MeanPrice":684, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682049, "Name":"$datacore_name;", "Name_Localised":"Data Core", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3907, "SellPrice":3906, "MeanPrice":6791, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682050, "Name":"$galactictravelguide_name;", "Name_Localised":"Galactic Travel Guide", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":359, "SellPrice":358, "MeanPrice":8627, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128682051, "Name":"$mysteriousidol_name;", "Name_Localised":"Mysterious Idol", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":13815, "SellPrice":13814, "MeanPrice":20863, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682054, "Name":"$spacepioneerrelics_name;", "Name_Localised":"Space Pioneer Relics", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":5967, "SellPrice":5966, "MeanPrice":9780, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128682055, "Name":"$fossilremnants_name;", "Name_Localised":"Fossil Remnants", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":7379, "SellPrice":7378, "MeanPrice":11785, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732183, "Name":"$ancientrelic_name;", "Name_Localised":"Guardian Relic", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":9126, "SellPrice":9125, "MeanPrice":24962, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732184, "Name":"$ancientorb_name;", "Name_Localised":"Guardian Orb", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":5967, "SellPrice":5966, "MeanPrice":17415, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732185, "Name":"$ancientcasket_name;", "Name_Localised":"Guardian Casket", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":5581, "SellPrice":5580, "MeanPrice":16294, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732186, "Name":"$ancienttablet_name;", "Name_Localised":"Guardian Tablet", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":5967, "SellPrice":5966, "MeanPrice":17415, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732187, "Name":"$ancienturn_name;", "Name_Localised":"Guardian Urn", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3907, "SellPrice":3906, "MeanPrice":14907, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732188, "Name":"$ancienttotem_name;", "Name_Localised":"Guardian Totem", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":7379, "SellPrice":7378, "MeanPrice":20437, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128732551, "Name":"$shanscharisorchid_name;", "Name_Localised":"Shan's Charis Orchid", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":1914, "SellPrice":1913, "MeanPrice":9043, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128737287, "Name":"$unknownresin_name;", "Name_Localised":"Thargoid Resin", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":22634, "SellPrice":22632, "MeanPrice":32825, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128737288, "Name":"$unknownbiologicalmatter_name;", "Name_Localised":"Thargoid Biological Matter", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":37090, "SellPrice":37088, "MeanPrice":51920, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128737289, "Name":"$unknowntechnologysamples_name;", "Name_Localised":"Thargoid Technology Samples", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":28012, "SellPrice":28010, "MeanPrice":39930, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128740752, "Name":"$unknownartifact3_name;", "Name_Localised":"Thargoid Link", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":37090, "SellPrice":37088, "MeanPrice":51920, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128748428, "Name":"$buckyballbeermats_name;", "Name_Localised":"Buckyball Beer Mats", "Category":"$MARKET_category_consumer_items;", "Category_Localised":"Consumer items", "BuyPrice":8230, "SellPrice":8229, "MeanPrice":7957, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128793113, "Name":"$harmasilversearum_name;", "Name_Localised":"Harma Silver Sea Rum", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":4217, "SellPrice":4216, "MeanPrice":9762, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128793114, "Name":"$platinumaloy_name;", "Name_Localised":"Platinum Alloy", "Category":"$MARKET_category_metals;", "Category_Localised":"Metals", "BuyPrice":12009, "SellPrice":12008, "MeanPrice":18333, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128793127, "Name":"$thargoidheart_name;", "Name_Localised":"Thargoid Heart", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":104381, "SellPrice":104375, "MeanPrice":140275, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128793128, "Name":"$thargoidtissuesampletype1_name;", "Name_Localised":"Thargoid Cyclops Tissue Sample", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":45421, "SellPrice":45418, "MeanPrice":63272, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128793129, "Name":"$thargoidtissuesampletype2_name;", "Name_Localised":"Thargoid Basilisk Tissue Sample", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":52545, "SellPrice":52542, "MeanPrice":72212, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128793130, "Name":"$thargoidtissuesampletype3_name;", "Name_Localised":"Thargoid Medusa Tissue Sample", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":60149, "SellPrice":60145, "MeanPrice":82435, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128824468, "Name":"$thargoidscouttissuesample_name;", "Name_Localised":"Thargoid Scout Tissue Sample", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":15982, "SellPrice":15981, "MeanPrice":23731, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128888499, "Name":"$ancientkey_name;", "Name_Localised":"Ancient Key", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":9760, "SellPrice":9759, "MeanPrice":29931, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128902652, "Name":"$thargoidtissuesampletype4_name;", "Name_Localised":"Thargoid Hydra Tissue Sample", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":79648, "SellPrice":79644, "MeanPrice":107495, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128913661, "Name":"$nanomedicines_name;", "Name_Localised":"Nanomedicines", "Category":"$MARKET_category_medicines;", "Category_Localised":"Medicines", "BuyPrice":2227, "SellPrice":2226, "MeanPrice":9859, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128922517, "Name":"$m_tissuesample_fluid_name;", "Name_Localised":"Mollusc Fluid", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3380, "SellPrice":3379, "MeanPrice":6031, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922518, "Name":"$m_tissuesample_soft_name;", "Name_Localised":"Mollusc Soft Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":11290, "SellPrice":11289, "MeanPrice":17216, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922519, "Name":"$m_tissuesample_nerves_name;", "Name_Localised":"Mollusc Brain Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":22634, "SellPrice":22632, "MeanPrice":32825, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922520, "Name":"$s_tissuesample_cells_name;", "Name_Localised":"Pod Core Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":2532, "SellPrice":2531, "MeanPrice":4780, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922521, "Name":"$s_tissuesample_surface_name;", "Name_Localised":"Pod Dead Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":8438, "SellPrice":8437, "MeanPrice":13361, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922522, "Name":"$s_tissuesample_core_name;", "Name_Localised":"Pod Surface Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":19777, "SellPrice":19776, "MeanPrice":28819, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922523, "Name":"$p_particulatesample_name;", "Name_Localised":"Anomaly Particles", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":32061, "SellPrice":32059, "MeanPrice":45525, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922524, "Name":"$duradrives_name;", "Name_Localised":"Duradrives", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":13002, "SellPrice":13001, "MeanPrice":19356, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128922781, "Name":"$s9_tissuesample_shell_name;", "Name_Localised":"Pod Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":7890, "SellPrice":7889, "MeanPrice":12546, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922782, "Name":"$m3_tissuesample_membrane_name;", "Name_Localised":"Mollusc Membrane", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":12075, "SellPrice":12074, "MeanPrice":18352, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922783, "Name":"$m3_tissuesample_mycelium_name;", "Name_Localised":"Mollusc Mycelium", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":22634, "SellPrice":22632, "MeanPrice":32825, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922784, "Name":"$m3_tissuesample_spores_name;", "Name_Localised":"Mollusc Spores", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":3380, "SellPrice":3379, "MeanPrice":6031, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922785, "Name":"$s6_tissuesample_mesoglea_name;", "Name_Localised":"Pod Mesoglea", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":18488, "SellPrice":18487, "MeanPrice":27009, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922786, "Name":"$s6_tissuesample_cells_name;", "Name_Localised":"Pod Outer Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":4175, "SellPrice":4174, "MeanPrice":7210, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128922787, "Name":"$s6_tissuesample_coenosarc_name;", "Name_Localised":"Pod Shell Tissue", "Category":"$MARKET_category_salvage;", "Category_Localised":"Salvage", "BuyPrice":37090, "SellPrice":37088, "MeanPrice":51920, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128924325, "Name":"$rhodplumsite_name;", "Name_Localised":"Rhodplumsite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":275688, "MeanPrice":176839, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924326, "Name":"$serendibite_name;", "Name_Localised":"Serendibite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":560027, "MeanPrice":172711, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924327, "Name":"$monazite_name;", "Name_Localised":"Monazite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":840306, "MeanPrice":200975, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924328, "Name":"$musgravite_name;", "Name_Localised":"Musgravite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":382972, "MeanPrice":198613, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924329, "Name":"$benitoite_name;", "Name_Localised":"Benitoite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":570449, "MeanPrice":149395, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924330, "Name":"$grandidierite_name;", "Name_Localised":"Grandidierite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":458141, "MeanPrice":197292, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924331, "Name":"$alexandrite_name;", "Name_Localised":"Alexandrite", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":357530, "MeanPrice":217277, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924332, "Name":"$opal_name;", "Name_Localised":"Void Opal", "Category":"$MARKET_category_minerals;", "Category_Localised":"Minerals", "BuyPrice":0, "SellPrice":525075, "MeanPrice":135284, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":1, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128924333, "Name":"$rockforthfertiliser_name;", "Name_Localised":"Rockforth Fertiliser", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":6, "SellPrice":5, "MeanPrice":9, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":false },
{ "id":128924334, "Name":"$agronomictreatment_name;", "Name_Localised":"Agronomic Treatment", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":0, "SellPrice":15596, "MeanPrice":3105, "StockBracket":0, "DemandBracket":3, "Stock":0, "Demand":2, "Consumer":true, "Producer":false, "Rare":false },
{ "id":128958679, "Name":"$apavietii_name;", "Name_Localised":"Apa Vietii", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":3386, "SellPrice":3385, "MeanPrice":10362, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true },
{ "id":128961249, "Name":"$tritium_name;", "Name_Localised":"Tritium", "Category":"$MARKET_category_chemicals;", "Category_Localised":"Chemicals", "BuyPrice":56235, "SellPrice":55627, "MeanPrice":51707, "StockBracket":1, "DemandBracket":0, "Stock":2, "Demand":1, "Consumer":false, "Producer":true, "Rare":false },
{ "id":128983059, "Name":"$onionheadc_name;", "Name_Localised":"Onionhead Gamma Strain", "Category":"$MARKET_category_drugs;", "Category_Localised":"Legal drugs", "BuyPrice":0, "SellPrice":5755, "MeanPrice":4828, "StockBracket":0, "DemandBracket":1, "Stock":0, "Demand":0, "Consumer":true, "Producer":false, "Rare":false },
{ "id":129002574, "Name":"$classifiedexperimentalequipment_name;", "Name_Localised":"Classified Experimental Equipment", "Category":"$MARKET_category_technology;", "Category_Localised":"Technology", "BuyPrice":4002, "SellPrice":4001, "MeanPrice":11423, "StockBracket":0, "DemandBracket":0, "Stock":0, "Demand":0, "Consumer":false, "Producer":false, "Rare":true }
] }

View File

@ -0,0 +1,18 @@
# Gateway Testing Scripts
## Introduction
This directory contains some very "rough and ready" scripts, plus
supporting files, that can be utilised to test that the EDDN Gateway code
is properly responding in the face of a variety of bad messages.
Ultimately the plan is to use these as a basis for implementing some proper
automated tests.
## Use
The scripts are mostly written against Python 3.x and expect a single
filename to be passed on the commandline. The exception is `test-bad-gzip.
sh` which is a Bourne Shell script, using `curl` to send a request that
claims to be gzipped, but isn't valid.
They all have the beta EDDN Gateway URL hard-coded. **NEVER** change this
to run them against the live service!

View File

@ -0,0 +1,46 @@
{
"$schemaRef": "http://schemas.elite-markets.net/eddn/commodity/2",
"message": {
"timestamp": "2022-01-06T11:19:27Z",
"systemName": "LP 98-132",
"stationName": "Freeport",
"marketId": 128008448,
"commodities": [
{
"name": "advancedcatalysers",
"meanPrice": 3039,
"buyPrice": 0,
"stock": 0,
"stockBracket": 0,
"sellPrice": 3756,
"demand": 936,
"demandBracket": 3
},
{
"name": "advancedmedicines",
"meanPrice": 1485,
"buyPrice": 0,
"stock": 0,
"stockBracket": 0,
"sellPrice": 1726,
"demand": 296,
"demandBracket": 3
},
{
"name": "advert1",
"meanPrice": 21542,
"buyPrice": 15267,
"stock": 0,
"stockBracket": 0,
"sellPrice": 15266,
"demand": 0,
"demandBracket": 0
}
]
},
"header": {
"uploaderID": "Athanasius Testing",
"softwareName": "Athanasius Testing",
"softwareVersion": "v0.0.1"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
#!/usr/bin/env python3
import json
import re
import sys
from collections import OrderedDict
if len(sys.argv) != 2:
print('<script> Market.json')
sys.exit(-1)
CANONICALISE_RE = re.compile(r'\$(.+)_name;')
def canonicalise(item) -> str:
match = CANONICALISE_RE.match(item)
return match and match.group(1) or item
entry = json.load(open(sys.argv[1], 'r'))
items = entry.get('Items')
commodities = sorted((OrderedDict([
('name', canonicalise(commodity['Name'])),
('meanPrice', commodity['MeanPrice']),
('buyPrice', commodity['BuyPrice']),
('stock', commodity['Stock']),
('stockBracket', commodity['StockBracket']),
('sellPrice', commodity['SellPrice']),
('demand', commodity['Demand']),
('demandBracket', commodity['DemandBracket']),
]) for commodity in items), key=lambda c: c['name'])
msg = {
'$schemaRef': 'https://eddn.edcd.io/schemas/commodity/3',
'message': OrderedDict([
('timestamp', entry['timestamp']),
('systemName', entry['StarSystem']),
('stationName', entry['StationName']),
('marketId', entry['MarketID']),
('commodities', commodities),
]),
}
msg['header'] = {
'uploaderID': 'Athanasius Testing',
'softwareName': 'Athanasius Testing',
'softwareVersion': 'v0.0.1',
}
print(json.dumps(msg, indent=2))

View File

@ -0,0 +1,37 @@
{]
"$schemaRef": "https://eddn.edcd.io/schemas/journal/1",
"header": {
"uploaderID": "Athanasius Testing",
"softwareName": "Athanasius Testing",
"softwareVersion": "v0.0.1"
},
"message": {
"timestamp":"2021-11-05T15:46:28Z",
"event":"Scan",
"ScanType":"AutoScan",
"BodyName":"Elphin",
"BodyID":1,
"Parents":[ {"Null":0} ],
"StarSystem":"Elphin",
"StarPos":[-30.12500,8.18750,-17.00000],
"SystemAddress":3932076118738,
"DistanceFromArrivalLS":0.000000,
"StarType":"K",
"Subclass":3,
"StellarMass":0.769531,
"Radius":587464832.000000,
"AbsoluteMagnitude":6.294067,
"Age_MY":9558,
"SurfaceTemperature":4796.000000,
"Luminosity":"V",
"SemiMajorAxis":1704360246658.325195,
"Eccentricity":0.348740,
"OrbitalInclination":-72.647343,
"Periapsis":86.347190,
"OrbitalPeriod":7189218699.932098,
"AscendingNode":0.000000,
"MeanAnomaly":351.262353,
"RotationPeriod":248957.736717,
"AxialTilt":-0.126915
}
}

View File

@ -0,0 +1,36 @@
{
"$schemaRef": "https://eddn.edcd.io/schemas/journal/1",
"message": {
"timestamp":"2021-11-05T15:46:28Z",
"event":"Scan",
"ScanType":"AutoScan",
"BodyName":"Elphin",
"BodyID":1,
"Parents":[ {"Null":0} ],
"StarSystem":"Elphin",
"StarPos":[-30.12500,8.18750,-17.00000],
"SystemAddress":3932076118738,
"DistanceFromArrivalLS":0.000000,
"StarType":"K",
"Subclass":3,
"StellarMass":0.769531,
"Radius":587464832.000000,
"AbsoluteMagnitude":6.294067,
"Age_MY":9558,
"SurfaceTemperature":4796.000000,
"Luminosity":"V",
"SemiMajorAxis":1704360246658.325195,
"Eccentricity":0.348740,
"OrbitalInclination":-72.647343,
"Periapsis":86.347190,
"OrbitalPeriod":7189218699.932098,
"AscendingNode":0.000000,
"MeanAnomaly":351.262353,
"RotationPeriod":248957.736717,
"AxialTilt":-0.126915
},
"header": {
"uploaderID": "Athanasius Testing",
"softwareVersion": "v0.0.1"
}
}

View File

@ -0,0 +1,37 @@
{
"$schemaRef": "https://eddn.edcd.io/schemas/journal/1",
"message": {
"timestamp":"2021-11-05T15:46:28Z",
"event":"Scan",
"ScanType":"AutoScan",
"BodyName":"Elphin",
"BodyID":1,
"Parents":[ {"Null":0} ],
"StarSystem":"Elphin",
"NOTStarPos":[-30.12500,8.18750,-17.00000],
"SystemAddress":3932076118738,
"DistanceFromArrivalLS":0.000000,
"StarType":"K",
"Subclass":3,
"StellarMass":0.769531,
"Radius":587464832.000000,
"AbsoluteMagnitude":6.294067,
"Age_MY":9558,
"SurfaceTemperature":4796.000000,
"Luminosity":"V",
"SemiMajorAxis":1704360246658.325195,
"Eccentricity":0.348740,
"OrbitalInclination":-72.647343,
"Periapsis":86.347190,
"OrbitalPeriod":7189218699.932098,
"AscendingNode":0.000000,
"MeanAnomaly":351.262353,
"RotationPeriod":248957.736717,
"AxialTilt":-0.126915
},
"header": {
"uploaderID": "Athanasius Testing",
"softwareName": "Athanasius Testing",
"softwareVersion": "v0.0.1"
}
}

View File

@ -0,0 +1,37 @@
{
"$schemaRef": "https://eddn.edcd.io/schemas/journal/1",
"message": {
"timestamp":"2021-11-05T15:46:28Z",
"event":"Scan",
"ScanType":"AutoScan",
"BodyName":"Elphin",
"BodyID":1,
"Parents":[ {"Null":0} ],
"StarSystem":"Elphin",
"StarPos":[-30.12500,8.18750,-17.00000],
"SystemAddress":3932076118738,
"DistanceFromArrivalLS":0.000000,
"StarType":"K",
"Subclass":3,
"StellarMass":0.769531,
"Radius":587464832.000000,
"AbsoluteMagnitude":6.294067,
"Age_MY":9558,
"SurfaceTemperature":4796.000000,
"Luminosity":"V",
"SemiMajorAxis":1704360246658.325195,
"Eccentricity":0.348740,
"OrbitalInclination":-72.647343,
"Periapsis":86.347190,
"OrbitalPeriod":7189218699.932098,
"AscendingNode":0.000000,
"MeanAnomaly":351.262353,
"RotationPeriod":248957.736717,
"AxialTilt":-0.126915
},
"header": {
"uploaderID": "from Athanasius Testing",
"softwareName": "Athanasius Testing script",
"softwareVersion": "v0.0.1"
}
}

View File

@ -0,0 +1,24 @@
#!/usr/bin/env python3
import json
import requests
import sys
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
msg = f.read()
s = requests.Session()
s.headers['Content-Encoding'] = 'gzip'
r = s.post(
'https://beta.eddn.edcd.io:4431/upload/',
data=msg,
)
print(f'Response: {r!r}')
print(f'Body: {r.content.decode()}')

View File

@ -0,0 +1,6 @@
#!/bin/sh
#
# python `requests` appears to perform compression when you set the
# 'Content-Encoding: gzip' header, so do this with curl.
curl --verbose -d 'wegiuweuygtfawgep9aqe8fpq2387lfbr;iufvypq38764tpgf' -H 'Content-Encoding: gzip' 'https://beta.eddn.edcd.io:4431/upload/'

View File

@ -0,0 +1,37 @@
#!/usr/bin/env python3
import json
import requests
import sys
import urllib3
import zlib
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
# Read from provided file
msg = f.read()
# Fake form-encode it
msg = 'wibble=' + msg
# Compress it
msg_gzip = zlib.compress(msg.encode('utf-8'))
http = urllib3.PoolManager()
# Send that compressed data as a POST body
r = http.request(
'POST',
'https://beta.eddn.edcd.io:4431/upload/',
headers={
'Content-Encoding': 'gzip'
},
body=msg_gzip
)
print(f'Response: {r.status!r}')
print(f'Body:\n{r.data.decode()}\n')

View File

@ -0,0 +1,37 @@
#!/usr/bin/env python3
import json
import requests
import sys
import urllib3
import zlib
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
# Read from provided file
msg = f.read()
# Fake form-encode it
msg = 'data=' + msg
# Compress it
msg_gzip = zlib.compress(msg.encode('utf-8'))
http = urllib3.PoolManager()
# Send that compressed data as a POST body
r = http.request(
'POST',
'https://beta.eddn.edcd.io:4431/upload/',
headers={
'Content-Encoding': 'gzip'
},
body=msg_gzip
)
print(f'Response: {r.status!r}')
print(f'Body:\n{r.data.decode()}\n')

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python3
import json
import sys
import urllib3
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
# Read from provided file
msg = f.read()
# Fake form-encode it
msg = 'wibble=' + msg
http = urllib3.PoolManager()
# Send that data as a POST body
r = http.request(
'POST',
'https://beta.eddn.edcd.io:4431/upload/',
body=msg
)
print(f'Response: {r.status!r}')
print(f'Body:\n{r.data.decode()}\n')

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python3
import json
import sys
import urllib3
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
# Read from provided file
msg = f.read()
# Fake form-encode it
msg = 'data=' + msg
http = urllib3.PoolManager()
# Send that data as a POST body
r = http.request(
'POST',
'https://beta.eddn.edcd.io:4431/upload/',
body=msg
)
print(f'Response: {r.status!r}')
print(f'Body:\n{r.data.decode()}\n')

View File

@ -0,0 +1,20 @@
#!/usr/bin/env python3
import json
import requests
import sys
if len(sys.argv) != 2:
print('test-sender.py <filename>')
sys.exit(-1)
with open(sys.argv[1], 'r') as f:
msg = f.read()
s = requests.Session()
r = s.post('https://beta.eddn.edcd.io:4431/upload/', data=msg)
print(f'Response: {r!r}')
print(f'Body: {r.content.decode()}')

View File

@ -128,22 +128,28 @@ def get_decompressed_message():
:returns: The de-compressed request body.
"""
content_encoding = request.headers.get('Content-Encoding', '')
logger.debug('Content-Encoding: ' + content_encoding)
if content_encoding in ['gzip', 'deflate']:
logger.debug('Content-Encoding of gzip or deflate...')
# Compressed request. We have to decompress the body, then figure out
# if it's form-encoded.
try:
# Auto header checking.
logger.debug('Trying zlib.decompress (15 + 32)...')
message_body = zlib.decompress(request.body.read(), 15 + 32)
except zlib.error:
logger.error('zlib.error, trying zlib.decompress (-15)')
# Negative wbits suppresses adler32 checksumming.
message_body = zlib.decompress(request.body.read(), -15)
logger.debug('Resulting message_body:\n%s\n' % (message_body))
# At this point, we're not sure whether we're dealing with a straight
# un-encoded POST body, or a form-encoded POST. Attempt to parse the
# body. If it's not form-encoded, this will return an empty dict.
form_enc_parsed = urlparse.parse_qs(message_body)
if form_enc_parsed:
logger.debug('Request is form-encoded')
# This is a form-encoded POST. The value of the data attrib will
# be the body we're looking for.
try:
@ -153,14 +159,33 @@ def get_decompressed_message():
"No 'data' POST key/value found. Check your POST key "
"name for spelling, and make sure you're passing a value."
)
else:
# Uncompressed request. Bottle handles all of the parsing of the
# POST key/vals, or un-encoded body.
data_key = request.forms.get('data')
if data_key:
# This is a form-encoded POST. Support the silly people.
message_body = data_key
else:
logger.debug('Request is *NOT* form-encoded')
else:
logger.debug('Content-Encoding indicates *not* compressed...')
form_enc_parsed = urlparse.parse_qs(request.body.read())
if form_enc_parsed:
logger.debug('Request is form-encoded')
# Uncompressed request. Bottle handles all of the parsing of the
# POST key/vals, or un-encoded body.
data_key = request.forms.get('data')
if data_key:
logger.debug('form-encoded POST request detected...')
# This is a form-encoded POST. Support the silly people.
message_body = data_key
else:
raise MalformedUploadError(
"No 'data' POST key/value found. Check your POST key "
"name for spelling, and make sure you're passing a value."
)
else:
logger.debug('Plain POST request detected...')
# This is a non form-encoded POST body.
message_body = request.body.read()
@ -171,7 +196,7 @@ def parse_and_error_handle(data):
try:
parsed_message = simplejson.loads(data)
except (
MalformedUploadError, TypeError, ValueError
TypeError, ValueError
) as exc:
# Something bad happened. We know this will return at least a
# semi-useful error message, so do so.
@ -192,13 +217,14 @@ def parse_and_error_handle(data):
pass
response.status = 400
return 'FAIL: ' + str(exc)
return 'FAIL: JSON parsing: ' + str(exc)
# Here we check if an outdated schema has been passed
if parsed_message["$schemaRef"] in Settings.GATEWAY_OUTDATED_SCHEMAS:
response.status = '426 Upgrade Required' # Bottle (and underlying httplib) don't know this one
statsCollector.tally("outdated")
return "FAIL: The schema you have used is no longer supported. Please check for an updated version of your application."
return "FAIL: Outdated Schema: The schema you have used is no longer supported. Please check for an updated " \
"version of your application."
validationResults = validator.validate(parsed_message)
@ -239,7 +265,7 @@ def parse_and_error_handle(data):
response.status = 400
statsCollector.tally("invalid")
return "FAIL: " + str(validationResults.messages)
return "FAIL: Schema Validation: " + str(validationResults.messages)
@app.route('/upload/', method=['OPTIONS', 'POST'])
@ -268,14 +294,14 @@ def upload():
print('Logging of "gzip error" failed: %s' % (e.message))
pass
return exc.message
return 'FAIL: zlib.error: ' + exc.message
except MalformedUploadError as exc:
# They probably sent an encoded POST, but got the key/val wrong.
response.status = 400
logger.error("MalformedUploadError from %s: %s" % (get_remote_address(), exc.message))
return exc.message
return 'FAIL: Malformed Upload: ' + exc.message
statsCollector.tally("inbound")
return parse_and_error_handle(message_body)