sorcery  Check-in [3f6a913e4e]

Overview
Comment:* remove former hacky registration system, replace with consistent and flexible API; rewrite metal/gem generation to take advantage of this new API; tweaks to init system to enable world-local tweaks to lore and sorcery behavior * initial documentation commit * initial steps towards calendar - add default date format, astrolabe; prepare infra for division/melding/transmutation spells, various tweaks and fixes
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 3f6a913e4e6dd7db76536dfddcffdef0e3fd8525daea982a6cd5c9e6cc7a5de1
User & Date: lexi on 2020-09-29 12:40:28
Other Links: manifest | tags
Context
2020-10-19
09:52
continue dev on celestial mechanics, add melding+division spells (resonance), refine itemclasses, add keypunch and punchcards, add paper pulp, add a shitload of visuals, add convenience scripts for working with the wiki, make the flamebolt spell actually useful instead of just a pretty lightshow, add essences, inferno crystal, and other goodies; iterate on wands, lots of shit i can't remember, various bugfixes check-in: ea6e475e44 user: lexi tags: trunk
2020-09-29
12:40
* remove former hacky registration system, replace with consistent and flexible API; rewrite metal/gem generation to take advantage of this new API; tweaks to init system to enable world-local tweaks to lore and sorcery behavior * initial documentation commit * initial steps towards calendar - add default date format, astrolabe; prepare infra for division/melding/transmutation spells, various tweaks and fixes check-in: 3f6a913e4e user: lexi tags: trunk
2020-09-26
18:49
add writing stand for editing codexes; add scissors, ink, erasure fluid, pens; touch up codex UI; add many recipe notes; add craft divination type for crafttools; defuckulate fucktarded crafttool impl; enhance table library with missing features like lua's table.unpack; many bug fixes and enhancements; blood for the blood god check-in: 72eebac4bc user: lexi tags: trunk
Changes

Added astrolabe.lua version [6f8619640d].

            1  +local albox = {
            2  +	type = 'fixed';
            3  +	fixed = {
            4  +		-0.43,-0.5,-0.43;
            5  +		 0.43, 0.3, 0.43;
            6  +	};
            7  +}
            8  +minetest.register_node('sorcery:astrolabe',{
            9  +	description = 'Astrolabe';
           10  +	drawtype = 'mesh';
           11  +	mesh = 'sorcery-astrolabe.obj';
           12  +	groups = {
           13  +		cracky = 2, choppy = 2;
           14  +		oddly_breakable_by_hand = 2;
           15  +		sorcery_tech = 1;
           16  +	};
           17  +	selection_box = albox, collision_box = albox;
           18  +	after_dig_node = sorcery.lib.node.purge_containers;
           19  +	tiles = {
           20  +		'default_steel_block.png';
           21  +		'default_bronze_block.png';
           22  +		'default_copper_block.png';
           23  +		'default_aspen_wood.png';
           24  +	};
           25  +	_sorcery = {
           26  +		recipe = {
           27  +			note = 'Unravel the secrets of the stars';
           28  +		};
           29  +	};
           30  +})

Added calendar.lua version [f67589c567].

            1  +if not sorcery then
            2  +	sorcery = { data = {
            3  +		calendar = dofile('data/calendar.lua');
            4  +		signs = dofile('data/signs.lua');
            5  +	} }
            6  +end
            7  +
            8  +sorcery.calendar = {}
            9  +
           10  +sorcery.calendar.stats = function(style)
           11  +	if not style then style = sorcery.data.calendar.default end
           12  +	local s = sorcery.data.calendar.styles[style]
           13  +	local days, moons, weeks = s.days, s.moons, s.weeks
           14  +
           15  +	return {
           16  +		days_in_year = #moons * #weeks * #days;
           17  +		days_in_week = #days;
           18  +		days_in_moon = #days * #weeks;
           19  +		weeks_in_moon = #weeks;
           20  +		weeks_in_year = #weeks * #moons;
           21  +		moons_in_year = #moons;
           22  +	}
           23  +end
           24  +
           25  +sorcery.calendar.date = function(day,style)
           26  +	local s = sorcery.calendar.stats(style)
           27  +
           28  +	local day_of_year = day % s.days_in_year;
           29  +	local day_of_moon = day_of_year % s.days_in_moon;
           30  +	local day_of_week = day_of_moon % s.days_in_week;
           31  +
           32  +	return {
           33  +		day_of_year = 1 + day_of_year;
           34  +		day_of_moon = 1 + day_of_moon;
           35  +		day_of_week = 1 + day_of_week;
           36  +		week_of_moon = 1 + math.floor(day_of_moon / s.days_in_week);
           37  +		week_of_year = 1 + math.floor(day_of_year / s.days_in_week);
           38  +		moon_of_year = 1 + math.floor(day_of_year / s.days_in_moon);
           39  +		year = math.floor(day / s.days_in_year);
           40  +		moons_passed = math.floor(day / s.days_in_moon);
           41  +		weeks_passed = math.floor(day / s.days_in_week);
           42  +	}
           43  +end
           44  +
           45  +sorcery.calendar.stars = function(day,style)
           46  +	local periods = math.floor(day / sorcery.data.calendar.days_per_stellar_cycle)
           47  +
           48  +	local elapsed = 0
           49  +	local cycle = 1
           50  +	while true do
           51  +		for _, c in pairs(sorcery.data.signs) do
           52  +			if c.cycle then
           53  +				if cycle % c.cycle ~= 0 then goto skip end
           54  +			end
           55  +			elapsed = elapsed + c.duration
           56  +			if elapsed >= periods then
           57  +				return {
           58  +					sign = c;
           59  +					cycle = cycle;
           60  +				}
           61  +			end
           62  +		::skip::end
           63  +		cycle = cycle + 1
           64  +	end
           65  +end
           66  +
           67  +sorcery.calendar.longdate = function(day)
           68  +	if not style then style = sorcery.data.calendar.default end
           69  +	return sorcery.data.calendar.styles[style].longdate(sorcery.calendar.date(day))
           70  +end
           71  +
           72  +sorcery.calendar.shortdate = function(day,style)
           73  +	if not style then style = sorcery.data.calendar.default end
           74  +	return sorcery.data.calendar.styles[style].shortdate(sorcery.calendar.date(day))
           75  +end
           76  +
           77  +sorcery.calendar.stardate = function(day)
           78  +	local s = sorcery.calendar.stars(day)
           79  +	return string.format('sign of the %s, stellar cycle %u', s.sign.patron, s.cycle)
           80  +end
           81  +
           82  +-- math.randomseed(os.time())
           83  +-- local d = math.random(500,256000)
           84  +-- print(string.format('%s :: %s in the %s',
           85  +-- 	sorcery.calendar.shortdate(d),
           86  +-- 	sorcery.calendar.longdate(d),
           87  +-- 	sorcery.calendar.stardate(d)))

Modified coins.lua from [2702148c37] to [7e4d0ae5aa].

    12     12   	local g = sorcery.data.gems[gem]
    13     13   	local desc = (m.desc or metal) .. ' Coin'
    14     14   	local coinimg = u.image('sorcery_coin.png'):multiply(u.color(m.tone))
    15     15   	local id = 'sorcery:coin_' .. metal
    16     16   	if gem then
    17     17   		desc = (g.desc or gem) .. '-' .. desc
    18     18   		coinimg = u.image('sorcery_coin_gem.png'):multiply(u.color(g.tone)):blit(coinimg)
    19         -		id = id .. '_' .. gem
           19  +		local gemid = id .. '_' .. gem
           20  +		minetest.register_craft {
           21  +			type = 'shapeless';
           22  +			recipe = { 'xdecor:hammer', gemid };
           23  +			output = g.parts.shard;
           24  +			replacements = {
           25  +				{'xdecor:hammer', 'xdecor:hammer'};
           26  +				{gemid, id};
           27  +			};
           28  +		}
           29  +		id = gemid
           30  +	else
           31  +		minetest.register_craft {
           32  +			type = 'cooking';
           33  +			recipe = id .. ' 2';
           34  +			output = m.parts.fragment;
           35  +		}
    20     36   	end
    21     37   
    22     38   	minetest.register_craftitem(id, {
    23     39   		description = u.str.capitalize(desc);
    24     40   		inventory_image = coinimg:render();
    25         -		groups = { sorcery_coin = 1 };
           41  +		groups = {
           42  +			coin = 1; sorcery_coin = 1; metal = 1;
           43  +			not_in_creative_inventory = 1;
           44  +			-- nice try mr lenin
           45  +		};
           46  +		_sorcery = {
           47  +			material = (gem == nil) and {
           48  +				metal = true; id = metal, data = m;
           49  +				grindcost = 2, grindvalue = 1;
           50  +			} or nil;
           51  +		};
    26     52   	})
    27     53   end
    28         -for metal in pairs(sorcery.data.metals) do
           54  +-- for metal in pairs(sorcery.data.metals) do
           55  +sorcery.register.metals.foreach('sorcery:mkcoins',{'sorcery:generate'}, function(metal)
    29     56   	register_coin(metal)
    30         -	for gem in pairs(sorcery.data.gems) do
           57  +	-- for gem in pairs(sorcery.data.gems) do
           58  +	sorcery.register.gems.foreach('sorcery:mkcoins_' .. metal, {'sorcery:generate'}, function(gem)
    31     59   		register_coin(metal,gem)
    32         -	end
    33         -end
           60  +	end)
           61  +end)
    34     62   local update_press_output = function(meta)
    35     63   	local inv = meta:get_inventory()
    36     64   	local slot_ingot = inv:get_stack('ingot',1)
    37     65   	local slot_gem   = inv:get_stack('gem',1)
    38     66   	local metalname, gemname
    39     67   	local coincount
    40     68   	if not inv:is_empty('ingot') then
    41     69   		local id = slot_ingot:get_name()
    42     70   		for name,metal in pairs(sorcery.data.metals) do
    43         -			if id == metal.ingot then
           71  +			if id == metal.parts.ingot then
    44     72   				metalname = name
    45     73   				coincount = slot_ingot:get_count()
    46     74   				goto foundmetal
    47     75   			end
    48     76   		end
    49     77   	end
    50     78   	inv:set_stack('output',1,ItemStack(nil))
    51     79   	do return end
    52     80   
    53     81   	::foundmetal:: if not inv:is_empty('gem') then
    54     82   		local id = slot_gem:get_name()
    55     83   		for name,gem in pairs(sorcery.data.gems) do
    56         -			if gem.foreign then
    57         -				if id == gem.foreign then gemname = name 
    58         -					else goto skip end
    59         -			else
    60         -				if id == 'sorcery:gem_' .. name then gemname = name
    61         -					else goto skip end
    62         -			end
           84  +			if id == gem.parts.item
           85  +				then gemname = name
           86  +				else goto skip end
    63     87   			coincount = math.min(coincount, slot_gem:get_count())
    64     88   			do break end
    65     89   		::skip::end
    66     90   	end
    67     91   	
    68     92   	coincount = coincount * coins_per_ingot
    69     93   
................................................................................
   118    142   					listring[current_player;main]
   119    143   		]])
   120    144   	end;
   121    145   	allow_metadata_inventory_put = function(pos,list,idx,stack,user)
   122    146   		local id = stack:get_name()
   123    147   		if list == 'ingot' then
   124    148   			for name,metal in pairs(sorcery.data.metals) do
   125         -				if id == metal.ingot then goto okay end
          149  +				if id == metal.parts.ingot then goto okay end
   126    150   			end
   127    151   		elseif list == 'gem' then
   128    152   			for name,gem in pairs(sorcery.data.gems) do
   129    153   				if gem.foreign then
   130    154   					if id == gem.foreign then goto okay end
   131    155   				else
   132    156   					if id == 'sorcery:gem_' .. name then goto okay end
................................................................................
   136    160   		do return 0 end
   137    161   		::okay:: return max_components
   138    162   	end;
   139    163   	-- mercifully there is never any case where moving between the
   140    164   	-- inventories of the node is allowable
   141    165   	allow_metadata_inventory_move = function() return 0 end;
   142    166   	allow_metadata_inventory_take = function(pos,list,idx,stack,user)
   143         -		local meta = minetest.get_meta(pos)
   144         -		local inv = meta:get_inventory()
   145         -		return inv:get_stack(list,idx):get_count()
          167  +		local count = stack:get_count()
          168  +		if list == 'output' then
          169  +			return (count % coins_per_ingot) == 0 and count or 0
          170  +		else return count end
   146    171   	end;
   147    172   	on_metadata_inventory_put = function(pos,list,idx,stack,user)
   148    173   		update_press_output(minetest.get_meta(pos))
   149    174   	end;
   150    175   	on_metadata_inventory_take = function(pos,list,idx,stack,user)
   151    176   		local meta = minetest.get_meta(pos)
   152    177   		if list == 'output' then

Modified compat.lua from [c2cb3e762c] to [13321ca8da].

    28     28   end
    29     29   
    30     30   if minetest.get_modpath("new_campfire") then
    31     31   	minetest.register_alias('sorcery:ash', 'new_campfire:ash')
    32     32   else
    33     33   	minetest.register_craftitem('sorcery:ash', {
    34     34   		description = 'Ash';
    35         -		inventory_image = 'sorcery_iron_powder.png^[colorize:#FFFFFF:100';
           35  +		inventory_image = 'sorcery_iron_powder.png^[colorize:#FFFFFF:60';
    36     36   	})
    37     37   	minetest.register_alias('new_campfire:ash', 'sorcery:ash')
    38     38   end
    39     39   
    40     40   -- xdecor offers a conflicting and somewhat poorly designed enchantment
    41     41   -- mechanism; make it inaccessible but don't fuck up already existing
    42     42   -- enchanters in the world
    43         -minetest.clear_craft { output='xdecor:enchanter'; }
           43  +minetest.clear_craft { output='xdecor:enchantment_table'; }
           44  +minetest.override_item('xdecor:enchantment_table', {
           45  +	groups = sorcery.lib.tbl.merge(minetest.registered_items['xdecor:enchantment_table'].groups, {
           46  +		not_in_creative_inventory = 1;
           47  +	})
           48  +})
    44     49   
    45     50   return {
    46     51   	defp = function(name)
    47     52   		return minetest.registered_items[name] or minetest.registered_aliases[name]
    48     53   	end;
    49     54   }

Modified cookbook.lua from [f535fa81e6] to [62888214aa].

    78     78   				    (restrict.mod   and module ~= restrict.mod)
    79     79   				 or (restrict.group and (minetest.get_item_group(k, restrict.group) == 0))
    80     80   			))) then names[#names + 1] = k end
    81     81   		end
    82     82   	end
    83     83   	return names[math.random(#names)]
    84     84   end end
    85         -local find_builtin = function(out)
    86         -	local rec = {}
    87         -	local i = minetest.get_craft_recipe(out)
    88         -	if i == nil or i.items == nil or #i.items == 0 then return nil end
    89         -	local w = (i.width == 0) and 3 or i.width
    90         -	-- for j=1,#i.items do
    91         -	for j,item in pairs(i.items) do
    92         -		local row = math.floor((j-1) / w)
    93         -		local col = (j-1) % w
    94         -		if i.items[j] then
    95         -			rec[1 + (row * 3) + col] = i.items[j]
           85  +local find_builtin = function(method,kind)
           86  +	return function(out)
           87  +		local rec = {}
           88  +		local crec = sorcery.lib.tbl.walk(minetest.registered_items[out],{'_sorcery','recipe','canonical',kind})
           89  +		local w=0, lst
           90  +		if crec then
           91  +			lst = {}
           92  +			for i,v in pairs(crec) do
           93  +				if #v > w then w = #v end
           94  +				for j,n in pairs(v) do
           95  +					lst[#lst+1] = n
           96  +				end
           97  +			end
           98  +		else
           99  +			-- WHY IS THIS INTERFACE SO CLUMSY
          100  +			local all,i = minetest.get_all_craft_recipes(out), nil
          101  +			for _,r in pairs(all) do
          102  +				if r.method == method and r.items and #r.items>0 then
          103  +					i = r break
          104  +				end
          105  +			end
          106  +			if i == nil or i.items == nil or #i.items == 0 then return nil end
          107  +			w = (i.width == 0) and 3 or i.width
          108  +			lst = i.items
          109  +		end
          110  +		-- for j=1,#i.items do
          111  +		for j,item in pairs(lst) do
          112  +			local row = math.floor((j-1) / w)
          113  +			local col = (j-1) % w
          114  +			if item then
          115  +				rec[1 + (row * 3) + col] = item
          116  +			end
    96    117   		end
          118  +		return rec
    97    119   	end
    98         -	return rec
    99    120   end
   100    121   local function group_eval(i)
   101    122   	if string.sub(i,1,6) == 'group:' then
   102    123   		local g = string.sub(i,7)
   103    124   		if constants.group_ids[g] then
   104    125   			return constants.group_ids[g].cnitem,
   105    126   			       constants.group_ids[g].caption
................................................................................
   164    185   		name = 'Crafting Guide';
   165    186   		node = 'xdecor:workbench';
   166    187   		booksuf = 'Codex';
   167    188   		w = 3, h = 3;
   168    189   		chance = 2;
   169    190   		slots = slot3x3;
   170    191   		pick = pick_builtin('normal');
   171         -		find = find_builtin;
          192  +		find = find_builtin('normal','craft');
   172    193   		props = props_builtin;
   173    194   		apply_exclusions = true;
   174    195   	};
   175    196   	-- smelt = {
   176    197   	-- 	w = 3, h = 3;
   177    198   	-- 	slots = slot3x3;
   178    199   	-- };
................................................................................
   180    201   		name = 'Cooking Recipe';
   181    202   		node = 'default:furnace';
   182    203   		booksuf = 'Cookbook';
   183    204   		w = 1, h = 1;
   184    205   		chance = 3;
   185    206   		slots = {{-0.2,0}};
   186    207   		pick = pick_builtin('cooking');
   187         -		find = find_builtin;
          208  +		find = find_builtin('cooking','cook');
   188    209   		props = props_builtin;
   189    210   		apply_exclusions = true;
   190    211   	};
   191    212   	infuse = {
   192    213   		name = 'Infusion Recipe';
   193    214   		node = 'sorcery:infuser';
   194    215   		booksuf = 'Pharmacopeia';
................................................................................
   356    377   
   357    378   	return recipe_kinds[kind].pick(restrict), kind
   358    379   end
   359    380   
   360    381   local render_recipe = function(kind,ingredients,result,notes_right)
   361    382   	local k = recipe_kinds[kind]
   362    383   	local t = ''
          384  +	local props = k.props(result)
   363    385   	for i=1,#k.slots do
          386  +		local ing = ingredients[i]
   364    387   		local x, y = k.slots[i][1], k.slots[i][2]
   365         -		if ingredients[i] and ingredients[i] ~= '' then
          388  +		if ing and ing ~= '' then
   366    389   			local tt
   367         -			if k.indesc then tt = k.indesc(ingredients[i]) else tt = desc_builtin(ingredients[i]) end
          390  +			if k.indesc then tt = k.indesc(ing) else tt = desc_builtin(ing) end
   368    391   			t = t .. string.format([[
   369    392   				item_image[%f,%f;1,1;%s]
   370    393   				tooltip[%f,%f;1,1;%s]
   371         -			]], x,y, minetest.formspec_escape(group_eval(ingredients[i])),
          394  +			]], x,y, minetest.formspec_escape(group_eval(ing)),
   372    395   			    x,y, minetest.formspec_escape(tt))
   373    396   		else
   374    397   			if k.drawslots == nil or k.drawslots then
   375    398   				t = string.format('box[%f,%f;0.1,0.1;#00000060]',x+0.45,y+0.45) .. t
   376    399   			end
   377    400   		end
   378    401   	end
   379    402   	local img, ot
   380         -	local props = k.props(result)
   381    403   	if props.note then
   382    404   		local nx, ny, nw, nh
   383    405   		if notes_right then
   384    406   			nx = 5.25 ny = 0
   385    407   			nw = 4 nh = 3
   386    408   		else
   387    409   			nx = 0 ny = 3

Added data/calendar.lua version [9f638b5b65].

            1  +-- you can use your own month names and so on; even if you change
            2  +-- the length of the year the code will adapt
            3  +
            4  +local days = {
            5  +	'Day of the Frozen River'; 'Day of Fell Shadow';
            6  +	'Day of Peaceful Splendor'; 'Day of Somber Reflection'; 
            7  +	'Day of Wrathful Visitation'; 'Day of Wistful Remembrance';
            8  +	'Day of the Warm Hearth'; 'Day of Joyous Worship';
            9  +	'Day of the Fond Farewell';
           10  +}
           11  +
           12  +local weeks = {
           13  +	"Merchant's Week"; "Chandler's Week"; "Miller's Week";
           14  +	"Bard's Week"; "Cobbler's Week";
           15  +}
           16  +
           17  +local moons = {
           18  +	'Splendormoon';
           19  +	'Embermoon';
           20  +	'Saddlemoon';
           21  +	'Candlemoon';
           22  +	'Cindermoon';
           23  +	'Diremoon';
           24  +	'Chancelmoon';
           25  +	'Starmoon';
           26  +	'Harvestmoon';
           27  +}
           28  +
           29  +local yearadj = {
           30  +	'Whimpering';
           31  +	'Overturned';
           32  +	'Silent';
           33  +	'Whimsical';
           34  +	'Turbulent';
           35  +	'Parsimonius';
           36  +	'Rhadamanthine';
           37  +	'Exuberant';
           38  +	'Winsome';
           39  +	'Bifurcated';
           40  +}
           41  +
           42  +local yearnoun = {
           43  +	'Princeling';
           44  +	'Applecart';
           45  +	'Oxcart';
           46  +	'Parsnip';
           47  +	'Lotus';
           48  +	'Daffodil';
           49  +}
           50  +
           51  +local yg = function(y)
           52  +	local pos = -3
           53  +	local neg = y < 0
           54  +	y = tostring(math.abs(y))
           55  +	local n = ''
           56  +	while true do
           57  +		local w = string.sub(y,pos,pos+2)
           58  +		if w == nil or w == '' then break end 
           59  +		n = w .. ',' .. n
           60  +		pos = pos - 3
           61  +	end
           62  +	if neg then n = '-' .. n end
           63  +	return string.sub(n,1,-2)
           64  +end
           65  +
           66  +return {
           67  +	days_per_stellar_cycle = 17;
           68  +	default = 'imperial';
           69  +	styles = {
           70  +		imperial = {
           71  +			name = 'Imperial Archipelagian Calendar';
           72  +			days = days, weeks = weeks, moons = moons;
           73  +			longdate = function(date)
           74  +				local day  = days [date.day_of_week ]
           75  +				local week = weeks[date.week_of_moon]
           76  +				local moon = moons[date.moon_of_year]
           77  +				return string.format('%s on %s in %s after %s years of the Imperial Revolution',day,week,moon,yg(date.year))
           78  +			end;
           79  +			shortdate = function(date)
           80  +				return string.format('%u/%u %s I.R.', date.day_of_moon, date.moon_of_year, yg(date.year))
           81  +			end;
           82  +		}
           83  +	}
           84  +}

Modified data/extracts.lua from [8583c46b62] to [c62e0cc7f2].

    13     13   	raspberry = {"group:food_raspberries", {228,51,210}};
    14     14   	chili = {"farming:chili_pepper", {243,75,49}};
    15     15   	pine = {"default:pine_sapling", {41,166,80}};
    16     16   	cocoa = {"farming:cocoa_beans", {146,38,0}};
    17     17   	grape = {"farming:grapes", {206,56,214}};
    18     18   	kelp = {"default:sand_with_kelp", {109,185,145}};
    19     19   	fern = {"default:fern_1", {164,238,47}};
           20  +	marram = {"default:marram_grass_1", {127,255,210}};
    20     21   };

Modified data/gems.lua from [0836376152] to [a046b8be6a].

    45     45   			{affinity = {'praxic'}, confluence = 1};
    46     46   			{affinity = {'praxic'}, confluence = 0.5};
    47     47   			{affinity = {'cognic'}, confluence = 1};
    48     48   			{affinity = {'syncretic'}, confluence = 0.9};
    49     49   		};
    50     50   	};
    51     51   	luxite = {
    52         -		tone = {133,255,94};
           52  +		tone = {189,255,236};
    53     53   		rarity = 130;
    54     54   	};
    55     55   	ruby = {
    56     56   		tone = {255,94,161};
    57     57   		rarity = 150;
    58     58   	};
    59     59   	amethyst = {

Modified data/gods.lua from [90d2603045] to [4ff6f034b6].

   123    123   		};
   124    124   	};
   125    125   
   126    126   	blood = {
   127    127   		name = 'Faramesti Surax';
   128    128   		bless = {
   129    129   			potions = {
   130         -				Force = {50, 7};
   131         -				Longevity = {65, 3};
          130  +				Force = {favor=50, cost=5, chance=7};
          131  +				Longevity = {favor=65, cost=7, chance=3};
   132    132   			};
   133    133   			tools = {
   134         -				rend = {80, 15};
          134  +				rend = {favor=80, cost=15, chance=20};
   135    135   			};
   136    136   		};
   137    137   		generosity = 4;
   138    138   		stinginess = 9;
   139    139   		idol = {
   140    140   			desc = "Blood Idol";
   141    141   			width = 0.7;

Deleted data/register.lua version [d2f1e722e5].

     1         -return {
     2         -	infusion = function(r)
     3         -		sorcery.data.infusions[#sorcery.data.infusions + 1] = r
     4         -	end;
     5         -	alloy = function(mix)
     6         -		sorcery.data.alloys[#sorcery.data.alloys + 1] = mix
     7         -	end;
     8         -	kiln_recipe = function(mix)
     9         -		sorcery.data.kilnrecs[#sorcery.data.kilnrecs + 1] = mix
    10         -	end;
    11         -	infusion_leftover = function(orig, leave)
    12         -		sorcery.data.infusion_leftovers[orig] = leave
    13         -	end;
    14         -}

Added data/resonance.lua version [63249807d4].

            1  +-- resonance is a mechanic whereby items which 'resonate' can be
            2  +-- transformed into each other by use of the divide/meld wands

Added data/signs.lua version [15046a03f7].

            1  +-- this unit defines astrological signs of various magical
            2  +-- significance. used to determine whether the stars are aligned
            3  +
            4  +return {
            5  +	{id = 'minx', patron = 'Minx'; duration = 4 };
            6  +	{id = 'ocelot', patron = 'Ocelot'; duration = 3, cycle = 3};
            7  +	{id = 'wyvern', patron = 'Wyvern'; duration = 2, cycle = 2};
            8  +	{id = 'dove', patron = 'Dove'; duration = 4 };
            9  +	{id = 'leper', patron = 'Leper'; duration = 1, cycle = 3 };
           10  +	{id = 'petrel', patron = 'Petrel'; duration = 5 };
           11  +	{id = 'kestrel', patron = 'Kestrel'; duration = 6 };
           12  +	{id = 'serpent', patron = 'Serpent'; duration = 3, cycle = 2};
           13  +	{id = 'wserpent', patron = 'Winged Serpent'; duration = 3, cycle = 4 };
           14  +	{id = 'lamb', patron = 'Lamb'; duration = 4};
           15  +	{id = 'glamb', patron = 'Golden Lamb'; duration = 6, cycle = 5};
           16  +	{id = 'grackle', patron = 'Grackle'; duration = 3};
           17  +	{id = 'thief', patron = 'Thief'; duration = 2, cycle = 6};
           18  +	{id = 'egret', patron = 'Egret'; duration = 3};
           19  +	{id = 'chipmunk', patron = 'Chipmunk'; duration = 2};
           20  +	{id = 'ibis', patron = 'Ibis'; duration = 3, cycle = 7};
           21  +	{id = 'fox', patron = 'Fox'; duration = 3, cycle = 8};
           22  +	{id = 'cfox', patron = 'Cowled Fox'; duration = 3, cycle = 9};
           23  +	{id = 'tern', patron = 'Tern'; duration = 3, cycle = 3};
           24  +	{id = 'pilgrim', patron = 'Pilgrim'; duration = 3, cycle = 2};
           25  +
           26  +	-- every 7 cycles, several extra signs occur in short succession
           27  +	{id = 'csteer', patron = 'Crowned Steer'; duration = 1, cycle = 7};
           28  +	{id = 'cmoose', patron = 'Crowned Moose'; duration = 1, cycle = 7};
           29  +	{id = 'cgoat', patron = 'Crowned Goat'; duration = 1, cycle = 7};
           30  +	{id = 'cweasel', patron = 'Crowned Weasel'; duration = 1, cycle = 7};
           31  +	{id = 'wolfprince', patron = 'Wolf-Prince'; duration = 2, cycle = 7};
           32  +}

Modified data/spells.lua from [c7b64d56d8] to [24333d0a0e].

   391    391   	obliterate = {
   392    392   		name = 'obliteration';
   393    393   		uses = 129;
   394    394   		color = {175,6,212};
   395    395   		affinity = {'aspen','dark'};
   396    396   		leytype = 'occlutic';
   397    397   		desc = 'Totally and irreversibly obliterate all items on an enchanter.';
          398  +		cast = function(ctx)
          399  +			if not ctx.target or ctx.target.type ~= 'node' then return false end
          400  +			local tgt = minetest.get_node(ctx.target.under)
          401  +			if tgt.name ~= 'sorcery:enchanter' then return false end
          402  +
          403  +			local inv = minetest.get_meta(ctx.target.under):get_inventory()
          404  +			for _,name in pairs{'foci','item'} do
          405  +				for i=1,inv:get_size(name) do
          406  +					inv:set_stack(name,i,ItemStack(nil))
          407  +				end
          408  +			end
          409  +
          410  +			enchantment_sparkle(ctx,sorcery.lib.color(255,12,0))
          411  +			enchantment_sparkle(ctx,sorcery.lib.color(85,18,35))
          412  +			enchantment_sparkle(ctx,sorcery.lib.color(0,0,0))
          413  +		end
   398    414   	};
   399    415   	sacrifice = {
   400    416   		name = 'sacrifice';
   401    417   		uses = 58;
   402    418   		color = {212,6,63};
   403    419   		affinity = {'aspen','blazing'};
   404    420   		leytype = 'syncretic';

Added data/transmutation.lua version [c466f67e6e].

            1  +-- transmutation is a mechanic whereby a metal can be sacrificed
            2  +-- at the enchanter by use of a transmutation wand to get another
            3  +-- metal unpredictably, possibly increasing in value, possibly
            4  +-- not.
            5  +
            6  +return {
            7  +	gold = {
            8  +		[-2] = {'brass', 5};
            9  +		[-1] = {'silver', 3}; -- one chance in three of silver - undesirable
           10  +		[1] = {'lithium', 2};
           11  +		[2] = {'cobalt', 3};
           12  +		[3] = {'iridium', 50};
           13  +		fallback = 1;
           14  +	};
           15  +}

Modified depends.txt from [77f19ef08b] to [c1cf87f0b5].

     3      3   farming
     4      4   xdecor
     5      5   basic_materials
     6      6   vessels
     7      7   late
     8      8   instant_ores
     9      9   screwdriver
           10  +hopper?

Modified disassembly.lua from [5366481e82] to [9a3b11da34].

            1  +local disassembler_formspec = function(pos)
            2  +	local m = minetest.get_meta(pos)
            3  +	local i = m:get_inventory()
            4  +	local form = [[
            5  +		formspec_version[3]
            6  +		size[10.25,7] real_coordinates[true]
            7  +		list[current_player;main;0.25,2;8,4]
            8  +	]]
            9  +	local slot = function(name,x,y,ghost)
           10  +		local s = string.format('list[context;%s;%f,%f;1,1;]', name, x, y)
           11  +		if ghost and i:is_empty(name) then
           12  +			s = string.format('image[%f,%f;1,1;sorcery_ui_ghost_%s.png]',x,y,ghost) .. s
           13  +		end
           14  +		form = form .. s
           15  +	end
           16  +	slot('item',0.25,0.5)
           17  +	slot('paper',2.25,0.5,'paper')
           18  +	slot('ink',3.50,0.5,'ink_bottle')
           19  +	slot('pen',4.75,0.5,'pen')
           20  +	slot('output',9,0.5)
           21  +	form = form .. [[
           22  +		listring[context;output]
           23  +		listring[current_player;main] listring[context;paper]
           24  +		listring[current_player;main] listring[context;ink]
           25  +		listring[current_player;main] listring[context;item]
           26  +		listring[current_player;main]
           27  +	]]
           28  +	m:set_string('formspec',form)
           29  +end
     1     30   local update_disassembler = function(pos)
     2     31   	local m = minetest.get_meta(pos)
     3     32   	local i = m:get_inventory()
     4     33   	local paper = i:get_stack('paper',1)
     5     34   	local item = i:get_stack('item',1)
           35  +	local ink = i:get_stack('ink',1)
           36  +	local pen = i:get_stack('pen',1)
     6     37   
     7         -	local ink_count
     8         -	for j=1,i:get_size('ink') do
     9         -		local ink = i:get_stack('ink',j)
    10         -		local c = ink:get_count()
    11         -		if ink_count then
    12         -			if c < ink_count then ink_count = c end
    13         -		else ink_count = c end
    14         -	end
           38  +	local ink_count = ink:get_count()
    15     39   	
    16         -	ink_count = ink_count or 0
    17     40   	local maxrecs = math.min(ink_count, paper:get_count(), item:get_count())
           41  +	if pen:is_empty() then maxrecs = 0 end
    18     42   
    19     43   	if maxrecs > 0 and sorcery.cookbook.classes.craft.find(item:get_name()) then
    20     44   		local rec = ItemStack{name = 'sorcery:recipe', count = maxrecs}
    21     45   		sorcery.cookbook.setrecipe(rec, 'craft', item:get_name())
    22     46   		i:set_stack('output',1,rec)
    23     47   	else
    24     48   		i:set_stack('output',1,ItemStack())
    25     49   	end
           50  +	disassembler_formspec(pos)
    26     51   end
    27     52   local dsbox = {
    28     53   	type = 'fixed';
    29     54   	fixed = {
    30     55   		-0.5, -0.5, -0.5;
    31     56   		 0.5,  0.0,  0.5;
    32     57   	};
................................................................................
    55     80   	};
    56     81   	after_dig_node = sorcery.lib.node.purge_container;
    57     82   	on_construct = function(pos)
    58     83   		local m = minetest.get_meta(pos)
    59     84   		local i = m:get_inventory()
    60     85   		i:set_size('item',1)
    61     86   		i:set_size('paper',1)
    62         -		i:set_size('ink',3)
           87  +		i:set_size('ink',1)
           88  +		i:set_size('pen',1)
    63     89   		i:set_size('output',1)
    64     90   		m:set_string('infotext','Disassembly Kit')
    65         -		m:set_string('formspec', [[
    66         -			formspec_version[3]
    67         -			size[10.25,7] real_coordinates[true]
    68         -			list[current_player;main;0.25,2;8,4]
    69         -
    70         -			list[context;item;0.25,0.5;1,1;]
    71         -			list[context;paper;2.25,0.5;1,1;]
    72         -			list[context;ink;4.25,0.5;3,1;]
    73         -			list[context;output;9,0.5;1,1;]
    74         -
    75         -			listring[context;output]
    76         -			listring[current_player;main] listring[context;paper]
    77         -			listring[current_player;main] listring[context;ink]
    78         -			listring[current_player;main] listring[context;item]
    79         -			listring[current_player;main]
    80         -		]])
           91  +		disassembler_formspec(pos)
    81     92   	end;
    82     93   	on_metadata_inventory_put = update_disassembler;
    83     94   	on_metadata_inventory_take = function(pos,list,idx,stack,user)
    84     95   		local m = minetest.get_meta(pos)
    85     96   		local i = m:get_inventory()
    86     97   		local paper = i:get_stack('paper',1)
    87     98   		local item = i:get_stack('item',1)
    88     99   
    89    100   		if list == 'output' then
    90    101   			local count = stack:get_count()
    91         -			local leftover = sorcery.data.infusion_leftovers[item:get_name()]
          102  +			local leftover = sorcery.register.residue.db[item:get_name()]
    92    103   			local lstack if leftover then
    93    104   				lstack = ItemStack(leftover)
    94    105   				lstack:set_count(lstack:get_count() * count)
    95    106   				-- this slightly idiosyncratic code is used to ensure that
    96         -				-- itemstrings can be used in the infusion leftovers table
          107  +				-- itemstrings can be used in the residue table
    97    108   			end
    98    109   			item:take_item(count)
    99    110   			if item:get_count() > 0 then
   100    111   				if leftover then
   101    112   					lstack = user:get_inventory():add_item(lstack)
   102    113   					if lstack:get_count() > 0 then minetest.add_item(pos,lstack) end
   103    114   				end
................................................................................
   105    116   			else
   106    117   				if leftover then
   107    118   					i:set_stack('item',1,lstack)
   108    119   				else
   109    120   					i:set_stack('item',1,ItemStack())
   110    121   				end
   111    122   			end
   112         -			for j=1,i:get_size('ink') do
   113         -				local ink = i:get_stack('ink',j)
   114         -				ink:take_item(count)
   115         -				i:set_stack('ink',j,ink)
   116         -			end
          123  +			local ink = i:get_stack('ink',1)
          124  +			local paper = i:get_stack('paper',1)
          125  +			ink:take_item(count)		paper:take_item(count)
          126  +			i:set_stack('ink',1,ink)	i:set_stack('paper',1,paper)
          127  +			local penstack = i:get_stack('pen',1)
          128  +			local pen = penstack:get_definition()._sorcery
          129  +			local uses = pen.material.data.durability * 0.10
          130  +			local dmg = 65535 / math.random(math.floor(uses*0.5),uses)
          131  +			print('adding damage',dmg,penstack:get_wear())
          132  +			penstack:add_wear(dmg)
          133  +			print('wear now',penstack:get_wear())
          134  +			i:set_stack('pen',1,penstack)
   117    135   		end
   118    136   
   119    137   		update_disassembler(pos)
   120    138   	end;
   121    139   	allow_metadata_inventory_put = function(pos,list,idx,stack,user)
   122    140   		local name = stack:get_name()
   123    141   		if list == 'paper' then
   124    142   			if name == 'default:paper' then return stack:get_count() end
   125    143   		elseif list == 'ink' then
   126         -			if minetest.get_item_group(name,'dye') > 0 then return stack:get_count() end
          144  +			if minetest.get_item_group(name,'ink') > 0 then return stack:get_count() end
          145  +		elseif list == 'pen' then
          146  +			if minetest.get_item_group(name,'sorcery_pen') > 0 then return stack:get_count() end
   127    147   		elseif list == 'item' then
   128    148   			return stack:get_count()
   129    149   		elseif list == 'output' then
   130    150   			return 0
   131    151   		end
   132    152   		return 0
   133    153   	end;

Modified gems.lua from [8e18232927] to [378fef1f36].

     1      1   --- gemstones
     2      2   local shards_per_gem = 9
     3      3   
     4         -sorcery.register_gem = function(name,gem)
            4  +local register_gem = function(name,gem)
     5      5   	local itemname = gem.foreign or 'sorcery:gem_' .. name
     6      6   	local shardname = gem.foreign_shard or 'sorcery:gem_' .. name .. '_shard'
     7      7   	local amuletname = gem.foreign_amulet or 'sorcery:gem_' .. name .. '_amulet'
     8      8   
     9      9   	sorcery.data.gems[name].parts = {
    10     10   		item = itemname;
    11     11   		shard = shardname;
................................................................................
    36     36   			inventory_image = 'sorcery_gem_' .. name .. '_shard.png';
    37     37   			groups = { gemshard = 1; crystalshard = 1; sorcery_shard = 1; };
    38     38   			_sorcery = {
    39     39   				material = {
    40     40   					gem = true;
    41     41   					id = name, data = gem;
    42     42   					raw = true, value = 1;
           43  +				};
           44  +				recipe = {
           45  +					canonical = {
           46  +						craft = {
           47  +							{'','xdecor:hammer',''};
           48  +							{'',itemname,''};
           49  +						};
           50  +					}
    43     51   				};
    44     52   			};
    45     53   		})
    46     54   	end
    47     55   	if not gem.foreign_amulet then
    48     56   		minetest.register_craftitem(amuletname, {
    49     57   			description = sorcery.lib.str.capitalize(name) .. ' amulet';
................................................................................
   194    202   		minetest.override_item(ore, {drop = newdrops})
   195    203   		-- might be possible to just edit it in place, since we're
   196    204   		-- referring to registered_nodes anyway, but i don't want
   197    205   		-- to chance it; god knows what's going on under the hood
   198    206   	end
   199    207   end
   200    208   
   201         -for g,v in pairs(sorcery.data.gems) do sorcery.register_gem(g,v) end
          209  +-- for g,v in pairs(sorcery.data.gems) do sorcery.register_gem(g,v) end
          210  +sorcery.register.gems.foreach('sorcery:generate',{},register_gem)
   202    211   
   203    212   sorcery.gem = {
   204    213   	getdrops = function(fac)
   205    214   		items = {}
   206    215   		for g,v in pairs(sorcery.data.gems) do
   207    216   			items[#items + 1] = {
   208    217   				rarity = gem.rarity * fac;

Modified gravitator.lua from [31896c5f81] to [8ccd951dd6].

    27     27   		description = 'Gravitator';
    28     28   		drop = 'sorcery:gravitator_off';
    29     29   		paramtype2 = 'facedir';
    30     30   		groups = {
    31     31   			cracky = 2;
    32     32   			sorcery_magitech = 1;
    33     33   			sorcery_ley_device = 1;
    34         -
    35         -			effect_trigger = (kind == 'off') and 0 or 1;
           34  +			not_in_creative_inventory = kind == 'off' and nil or 1;
           35  +			effect_trigger = (kind == 'off') and nil or 1;
    36     36   		};
    37     37   		tiles = {
    38     38   			'sorcery_gravitator_side.png';
    39     39   			'sorcery_gravitator_side.png';
    40     40   			'sorcery_gravitator_side.png';
    41     41   			'sorcery_gravitator_side.png';
    42     42   			'sorcery_gravitator_side.png';

Modified harvester.lua from [61997cebcf] to [de45db35b3].

    91     91   		]])
    92     92   	end;
    93     93   	on_metadata_inventory_put = update_inv;
    94     94   	on_metadata_inventory_move = update_inv;
    95     95   
    96     96   	_sorcery = {
    97     97   		recipe = {
    98         -			info = "Standalone recharger for wands, amulets, and enchanted tools that draws on the ambient force from the local leylines";
           98  +			note = "Standalone recharger for wands, amulets, and enchanted tools that draws on the ambient force from the local leylines";
    99     99   		};
   100    100   	};
   101    101   })
   102    102   
   103    103   minetest.register_craftitem('sorcery:harvester_receptacle', {
   104    104   	description = 'Harvester Receptacle';
   105    105   	inventory_image = 'sorcery_harvester_receptacle.png';

Modified infuser.lua from [0d2fb4d9eb] to [13d8509748].

    90     90   			local base = potions[i]:get_name()
    91     91   			local potion = potions[i]:get_definition()
    92     92   			if elixir_can_apply(elixir,potion) then
    93     93   				-- at least one combination makes a valid potion;
    94     94   				-- we can start the infuser
    95     95   				goto start
    96     96   			end
    97         -			for _,v in pairs(sorcery.data.infusions) do
           97  +			for _,v in pairs(sorcery.register.infusions.db) do
    98     98   				if v.infuse == ingredient and v.into == base then
    99     99   					-- at least one combination makes a valid
   100    100   					-- potion; we can start the infuser
   101    101   					goto start
   102    102   				end
   103    103   			end
   104    104   		::skip:: end
................................................................................
   163    163   					title = potion._proto.name .. ' Draught';
   164    164   					desc = potion._proto.desc;
   165    165   					color = sorcery.lib.color(potion._proto.color):readable();
   166    166   					props = effects_table(newstack);
   167    167   				});
   168    168   				inv:set_stack('potions',i,discharge(newstack))
   169    169   			else
   170         -				for _,v in pairs(sorcery.data.infusions) do
          170  +				for _,v in pairs(sorcery.register.infusions.db) do
   171    171   					if v.infuse == ingredient and v.into == base then
   172    172   						-- transform the base into the infusion
   173    173   						inv:set_stack('potions',i,discharge(ItemStack(v.output)))
   174    174   					end
   175    175   				end
   176    176   			end
   177    177   		::skip:: end
   178    178   
   179         -		inv:set_stack('infusion',1,ItemStack(sorcery.data.infusion_leftovers[ingredient]))
          179  +		inv:set_stack('infusion',1,ItemStack(sorcery.register.residue.db[ingredient]))
   180    180   
   181    181   		infuser_stop(pos)
   182    182   		return false
   183    183   	else
   184    184   		meta:set_float('runtime', newtime)
   185    185   		meta:set_string('formspec', infuser_formspec(percent))
   186    186   		meta:set_string('infotext', 'Infuser (active)')

Modified init.lua from [330ca92ebf] to [f5b9efd3d5].

     1      1   do
     2      2   	local path = minetest.get_modpath('sorcery');
     3      3   	local get = function(unit)
     4      4   		return dofile(path .. '/' .. unit .. '.lua')
     5      5   	end
            6  +	local test = function(file) -- :/
            7  +		local hnd = io.open(file,'r')
            8  +		if hnd == nil then return false else
            9  +			hnd:close()
           10  +			return true
           11  +		end
           12  +	end
           13  +	local worldcfg = function(str)
           14  +		return minetest.get_worldpath() .. '/' .. str
           15  +	end
           16  +	local cfg = function(str) return worldcfg('sorcery/' .. str) end
           17  +	local selfname = minetest.get_current_modname()
           18  +	local stage = function(s,...)
           19  +		local f = sorcery.cfg(s .. '.lua')
           20  +		if test(f) then return loadfile(f)(...) or true end
           21  +		return false
           22  +	end
           23  +
     6     24   	sorcery = {
           25  +		self = selfname;
     7     26   		path = path;
     8     27   		load = function(name) get(name) end;
     9         -		unit = function(ns,sfx)
           28  +		worldcfg = worldcfg, cfg = cfg;
           29  +		stage = stage;
           30  +		log = function(module,text)
           31  +			if module then
           32  +				minetest.log('info',string.format('[%s :: %s] %s',selfname,module,text))
           33  +			else
           34  +				minetest.log('info',string.format('[%s] %s',selfname,text))
           35  +			end
           36  +		end;
           37  +		act = function(module,text)
           38  +			minetest.log('action',string.format('[%s :: %s] %s',selfname,module,text))
           39  +		end;
           40  +		unit = function(ns,sfx,override)
    10     41   			local target
    11     42   			if ns then
    12     43   				sorcery[ns] = {}
    13     44   				target = sorcery[ns]
    14     45   			else target = sorcery end
           46  +			if override == true then override = ''
           47  +				elseif override then override = override .. '-' end
           48  +			local loaded = {}
    15     49   			return function(lst)
    16         -				for i=1,#lst do
    17         -					target[lst[i]] = get(((ns and ns..'/') or '')..lst[i])
           50  +				for i,name in pairs(lst) do
           51  +					if not loaded[name] then
           52  +						loaded[name] = true
           53  +						local fpath = ((ns and ns..'/') or '')..name
           54  +						local extra = cfg(string.format('%s%s-extra.lua', override,name))
           55  +						local replace = cfg(string.format('%s%s.lua', override,name))
           56  +						local default = get(fpath)
           57  +						if override and test(replace) then
           58  +							sorcery.log(name,'loading local replacement for ' .. fpath .. ' from ' .. replace)
           59  +							target[name] = loadfile(replace)(default)
           60  +						else
           61  +							target[name] = default
           62  +							if override and test(extra) then
           63  +								sorcery.log(name,'loading local extras for ' .. fpath .. ' from ' .. extra)
           64  +								local extbl = loadfile(extra)(default)
           65  +								for k,v in pairs(extbl) do target[name][k] = v end
           66  +							end
           67  +						end
           68  +					end
    18     69   				end
    19     70   			end
    20     71   		end;
    21     72   	}
    22     73   end
    23     74   
    24     75   -- unfortunately we can't just iterate over the files
    25     76   -- and load them automatically, as interdependencies
    26     77   -- exist (especially with /lib) and we need to be very
    27     78   -- careful about the order they're loaded in
    28     79   
    29         -sorcery.unit('data') {'ui'}
           80  +local data = sorcery.unit('data',nil,'lore')
           81  +local root = sorcery.unit()
           82  +sorcery.stage('bootstrap',data,root)
           83  +
           84  +data {'ui'}
    30     85   sorcery.unit('lib') {
    31     86   	-- convenience
    32     87   	'str';
    33     88   	-- serialization
    34     89   	'marshal', 'json';
    35     90   	-- data structures
    36     91   	'tbl', 'class';
    37     92   	-- wrappers
    38     93   	'color', 'image', 'ui';
    39     94   	-- game
    40     95   	'node';
    41     96   }
    42     97   
    43         -sorcery.unit() { 'compat', 'matreg' }
    44         -sorcery.unit('data') {
    45         -	'compat';
    46         -	'affinities'; 'gods';
    47         -	'enchants', 'spells';
    48         -	'gems', 'metals';
    49         -	'potions', 'oils', 'greases',
    50         -		'draughts', 'elixirs',
    51         -		'philters', 'extracts';
    52         -	'register';
    53         -}
           98  +sorcery.stage('worldbuilding',data,root)
           99  +root {'compat','matreg'}
          100  +if not sorcery.stage('loadlore', data, root) then
          101  +	data {
          102  +		'compat';
          103  +		'affinities'; 'gods';
          104  +		'calendar', 'signs';
          105  +		'enchants', 'spells';
          106  +		'gems', 'metals';
          107  +		'potions', 'oils', 'greases',
          108  +			'draughts', 'elixirs',
          109  +			'philters', 'extracts';
          110  +	}
          111  +end
          112  +
          113  +sorcery.load('registration') do
          114  +	local exclude = {'compat','ui'}
          115  +	for k,v in pairs(sorcery.data) do
          116  +		if not sorcery.lib.tbl.has(exclude,k) then
          117  +			sorcery.registry.mk(k,v)
          118  +		end
          119  +	end
          120  +end
    54    121   
          122  +sorcery.stage('startup',data)
    55    123   for _,u in pairs {
    56    124   	'attunement'; 'context'; 'itemclass'; 'potions';
    57    125   	'metal', 'gems'; 'leylines'; 'infuser'; 'altar';
    58    126   	'wands'; 'tools', 'crafttools'; 'enchanter';
    59    127   	'harvester'; 'metallurgy-hot', 'metallurgy-cold';
    60    128   	'entities'; 'recipes'; 'coins'; 'interop';
    61    129   	'tnodes'; 'forcefield'; 'farcaster'; 'portal';
    62    130   	'cookbook', 'writing'; 'disassembly'; 'displacer';
    63         -	'gravitator';
          131  +	'gravitator'; 'precipitator'; 'astrolabe';
    64    132   
    65    133   	'admin';
    66    134   } do sorcery.load(u) end
          135  +sorcery.stage('finalize')
    67    136   
          137  +sorcery.registry.defercheck()

Modified itemclass.lua from [25dadd17e3] to [56d754e26c].

   108    108   			end;
   109    109   		};
   110    110   	};
   111    111   	get = function(name,class)
   112    112   		local c = sorcery.itemclass.classes[class]
   113    113   		local o
   114    114   		if not c then return false end
          115  +		if type(name) ~= 'string' then name = name:get_name() end
   115    116   
   116    117   		if c.predicate then 
   117    118   			o = c.predicate(name)
   118    119   			if o then return o end
   119    120   		end
   120    121   
   121    122   		if c.compat then

Modified leylines.lua from [58178ad533] to [110ec2eec9].

   699    699   	]], math.floor(burnprog * 100)) .. lamps)
   700    700   end
   701    701   for _,active in pairs{true,false} do
   702    702   	local id = 'sorcery:generator' .. (active and '_active' or '')
   703    703   	minetest.register_node(id, {
   704    704   		description = 'Generator';
   705    705   		paramtype2 = 'facedir';
   706         -		groups = { cracky = 2; sorcery_ley_device = 1; sorcery_device_generator = active and 1 or 2};
          706  +		groups = {
          707  +			cracky = 2;
          708  +			sorcery_ley_device = 1;
          709  +			sorcery_device_generator = active and 1 or 2;
          710  +			not_in_creative_inventory = active and nil or 1;
          711  +		};
   707    712   		drop = 'sorcery:generator';
   708    713   		tiles = {
   709    714   			'sorcery_ley_generator_top.png';
   710    715   			'sorcery_ley_generator_bottom.png';
   711    716   			'sorcery_ley_generator_side.png';
   712    717   			'sorcery_ley_generator_side.png';
   713    718   			'sorcery_ley_generator_back.png';

Modified lib/str.lua from [e883d78392] to [64ce434f04].

     9      9   	['\xf2'] = '\2';
    10     10   	['\xf3'] = '\3';
    11     11   }
    12     12   return {
    13     13   	capitalize = function(str)
    14     14   		return string.upper(string.sub(str, 1,1)) .. string.sub(str, 2)
    15     15   	end;
           16  +
           17  +	explode = function(str,delim)
           18  +		local i = 1
           19  +		local tbl = {}
           20  +		repeat
           21  +			local ss = string.sub(str, i)
           22  +			local d = string.find(ss, delim, 1, true) or string.len(ss)+1
           23  +			tbl[#tbl+1] = string.sub(ss,1,d-1)
           24  +			i = i + d 
           25  +		until i > string.len(str)
           26  +		return tbl
           27  +	end;
    16     28   
    17     29   	rand = function(min,max)
    18     30   		if not min then min = 16  end
    19     31   		if not max then max = min end
    20     32   		local str = ''
    21     33   		local r_int   =            0x39 - 0x30
    22     34   		local r_upper = r_int   + (0x5a - 0x41)

Modified lib/tbl.lua from [5046584198] to [4e80a60df8].

    15     15   
    16     16   fn.copy = function(t)
    17     17   	local new = {}
    18     18   	for i,v in pairs(t) do new[i] = v end
    19     19   	setmetatable(new,getmetatable(t))
    20     20   	return new
    21     21   end
           22  +
           23  +fn.deepcopy = table.copy or function(t)
           24  +	new = {}
           25  +	for k,v in pairs(t) do
           26  +		if type(v) == 'table' then
           27  +			new[k] = fn.deepcopy(v)
           28  +		else
           29  +			new[k] = v
           30  +		end
           31  +	end
           32  +	return new
           33  +end
    22     34   
    23     35   fn.merge = function(base,override)
    24     36   	local new = fn.copy(base)
    25     37   	for k,v in pairs(override) do
    26     38   		new[k] = v
           39  +	end
           40  +	return new
           41  +end
           42  +
           43  +fn.deepmerge = function(base,override)
           44  +	local new = {}
           45  +	local keys = fn.merge(fn.keys(base),fn.keys(override))
           46  +	for _,k in pairs(keys) do
           47  +		if type(base[k]) == 'table' and
           48  +		   type(override[k]) == 'table' then
           49  +			new[k] = fn.deepmerge(base[k], override[k])
           50  +		elseif override[k] then
           51  +			new[k] = override[k]
           52  +		else
           53  +			new[k] = base[k]
           54  +		end
    27     55   	end
    28     56   	return new
    29     57   end
    30     58   
    31     59   fn.append = function(r1, r2)
    32     60   	local new = fn.copy(r1)
    33     61   	for i=1,#r2 do
................................................................................
   105    133   	else
   106    134   		for i=0,#tbl do
   107    135   			acc = fn(acc,tbl[i],i)
   108    136   		end
   109    137   	end
   110    138   	return acc
   111    139   end
          140  +
          141  +fn.walk = function(tbl,path)
          142  +	if type(path) == 'table' then
          143  +		for _,p in pairs(path) do
          144  +			if tbl[p] == nil then return nil end
          145  +			tbl = tbl[p]
          146  +		end
          147  +	else
          148  +		tbl = tbl[path]
          149  +	end
          150  +	return tbl
          151  +end
   112    152   
   113    153   return fn

Added lore.md version [044261e67c].

            1  +# sorcery default lore
            2  +while individual worlds can can modify, augment, or replace it, sorcery comes with a default 'lorepack' (set of data interpreted by the mod mechanics). this is a minimal guide designed to get you started exploring it, and for developers to give them a sense of how the lore data is interpreted and what is done with it. the lore itself is purposely *not* exhaustively documented, as figuring out what you can do and writing in-game books on the topic is meant to be a core social mechanic!

Modified metal.lua from [32259e26c1] to [f9db217ceb].

     5      5   	name = "sorcery:delete_duranium_ore_again";
     6      6   	nodenames = {'sorcery:stone_with_duranium'};
     7      7   	action = function(pos,node)
     8      8   		minetest.set_node(pos, {name = 'default:stone'})
     9      9   	end
    10     10   }
    11     11   
    12         -sorcery.data.alloys = {}
    13         -sorcery.data.kilnrecs = {}
           12  +sorcery.registry.mk('alloys',false)
           13  +sorcery.registry.mk('kilnrecs',false)
    14     14   sorcery.data.metallookup = {
    15     15   	-- compat bullshit
    16     16   	['moreores:silver_ingot'] = {
    17     17   		id = 'silver'; data = sorcery.data.metals.silver;
    18     18   		value = fragments_per_ingot;
    19     19   	};
    20     20   	['moreores:silver_block'] = {
................................................................................
    37     37   	['morelights_vintage:brass_block'] = {
    38     38   		id = 'brass'; data = sorcery.data.metals.brass;
    39     39   		value = fragments_per_ingot * 9;
    40     40   	};
    41     41   }
    42     42   
    43     43   local tools, armors = sorcery.matreg.tools, sorcery.matreg.armors
    44         -for name, metal in pairs(sorcery.data.metals) do
           44  +-- for name, metal in pairs(sorcery.data.metals) do
           45  +sorcery.register.metals.foreach('sorcery:generate',{},function(name,metal)
    45     46   	local ingot = metal.ingot or 'sorcery:' .. name .. '_ingot'
    46     47   	local block = metal.block or 'sorcery:' .. name .. 'block'
    47     48   	local screw = 'sorcery:screw_' .. name
    48     49   	local fragment = 'sorcery:fragment_' .. name
    49     50   	local powder = 'sorcery:powder_' .. name
    50     51   	metal.parts = {
    51     52   		ingot = ingot;
................................................................................
    76     77   		id = name; data = metal;
    77     78   		value = fragments_per_ingot * 9;
    78     79   	}
    79     80   	sorcery.data.metallookup[fragment] = {
    80     81   		id = name; data = metal;
    81     82   		value = 1;
    82     83   	}
    83         -	sorcery.data.metallookup[screw] = {
    84         -		id = name; data = metal;
    85         -		value = 0; -- prevent use in smelting
    86         -	}
    87     84   	minetest.register_craftitem(screw, {
    88     85   		description = sorcery.lib.str.capitalize(name) .. ' Screw';
    89     86   		inventory_image = sorcery.lib.image('sorcery_screw.png'):multiply(sorcery.lib.color(metal.tone)):render();
           87  +		_sorcery = {
           88  +			material = {
           89  +				id = name, data = metal;
           90  +				grindcost = 2, grindvalue = 1;
           91  +				value = 0.5;
           92  +			};
           93  +		};
    90     94   	})
    91     95   	minetest.register_craftitem(powder, {
    92     96   		description = sorcery.lib.str.capitalize(name) .. ' Powder';
    93     97   		inventory_image = 'sorcery_' .. name .. '_powder.png';
    94     98   	})
    95     99   	if metal.dye then
    96    100   		minetest.register_craft {
................................................................................
   140    144   			armor_weight = metal.armor_weight;
   141    145   			armor_protection = metal.armor_protection;
   142    146   		}
   143    147   	end
   144    148   	minetest.register_craftitem(fragment, {
   145    149   		inventory_image = 'sorcery_' .. name .. '_fragment.png';
   146    150   		description = sorcery.lib.str.capitalize(name) .. ' Fragment';
          151  +		_sorcery = {
          152  +			recipe = {
          153  +				canonical = {
          154  +					cook = {{ingot}};
          155  +				};
          156  +			};
          157  +		};
   147    158   	})
   148    159   	minetest.register_craft {
   149    160   		type = 'cooking';
   150    161   		recipe = powder;
   151    162   		cooktime = (metal.cooktime or 4) * 0.25;
   152    163   		output = fragment;
   153    164   	}
................................................................................
   171    182   		minetest.register_craft {
   172    183   			type = 'fuel';
   173    184   			recipe = powder;
   174    185   			burntime = metal.fuel;
   175    186   		}
   176    187   	end
   177    188   	if metal.mix then
   178         -		sorcery.data.register.alloy(sorcery.lib.tbl.merge(metal.mix, {
          189  +		sorcery.register.alloys.link(sorcery.lib.tbl.merge(metal.mix, {
   179    190   			output = name;
   180    191   			cooktime = metal.cooktime or 10;
   181    192   		}))
   182    193   	end
   183    194   	if metal.sinter then
   184    195   		local powders = {}
   185    196   		for _,m in pairs(metal.sinter) do
   186    197   			powders[#powders+1] = 'sorcery:powder_' .. m
   187    198   		end
   188    199   		local repl = {}
   189    200   		if metal.sinter_catalyst then
   190    201   			for _,m in pairs(metal.sinter_catalyst) do
   191    202   				powders[#powders+1] = m
   192         -				if sorcery.data.infusion_leftovers[m] then
   193         -					repl[#repl+1] = {m, sorcery.data.infusion_leftovers[m]}
          203  +				if sorcery.register.residue.db[m] then
          204  +					repl[#repl+1] = {m, sorcery.register.residue.db[m]}
   194    205   				end
   195    206   			end
   196    207   		end
   197    208   
   198    209   		minetest.register_craft {
   199    210   			type = 'shapeless';
   200    211   			output = powder .. ' ' .. tostring(#powders);
   201    212   			recipe = powders;
   202    213   			replacements = repl;
   203    214   		};
   204    215   	end
   205         -end
          216  +end)

Modified metallurgy-cold.lua from [c145d6a94a] to [0187673a26].

    79     79   	minetest.get_node_timer(pos):start(constants.mill_refresh)
    80     80   end
    81     81   local mill_fits_in_slot = function(slot,item)
    82     82   	if slot == 'grinder' then
    83     83   		if minetest.get_item_group(item:get_name(), 'sorcery_mill_grindhead')~=0 
    84     84   			then return 1 end
    85     85   	elseif slot == 'input' then
    86         -		local metal = sorcery.data.metallookup[item:get_name()]
    87         -		local mat = sorcery.matreg.lookup[item:get_name()]
    88         -		local comp = sorcery.data.compat.grindables[item:get_name()]
    89         -		if metal or (mat and mat.metal) or comp then
           86  +		if sorcery.itemclass.get(item,'grindable') then
    90     87   			return item:get_count()
    91         -		else
    92         -			mat = item:get_definition()._sorcery and
    93         -			      item:get_definition()._sorcery.material
    94         -			if mat and mat.grindvalue then
    95         -				return item:get_count() 
    96         -			end
    97     88   		end
           89  +		-- local metal = sorcery.data.metallookup[item:get_name()]
           90  +		-- local mat = sorcery.matreg.lookup[item:get_name()]
           91  +		-- local comp = sorcery.data.compat.grindables[item:get_name()]
           92  +		-- if metal or (mat and mat.metal) or comp then
           93  +		-- 	return item:get_count()
           94  +		-- else
           95  +		-- 	mat = item:get_definition()._sorcery and
           96  +		-- 	      item:get_definition()._sorcery.material
           97  +		-- 	if mat and mat.metal or mat.powder then
           98  +		-- 		return item:get_count() 
           99  +		-- 	end
          100  +		-- end
    98    101   	end
    99    102   	return 0
   100    103   end
   101    104   local matprops = function(item)
   102    105   	local metal = sorcery.data.metallookup[item:get_name()]
          106  +	local props = item:get_definition()._sorcery
   103    107   	if not metal then
   104    108   		-- allow grinding of armor and tools back to their
   105    109   		-- original components
   106    110   		local mat = sorcery.matreg.lookup[item:get_name()]
   107    111   		if mat and mat.metal then
   108    112   			metal = mat
          113  +		elseif props and props.material and props.material.metal then
          114  +			metal = props.material
   109    115   		end
   110    116   	end
   111         -	local mp = (item:get_definition()._sorcery and
   112         -		item:get_definition()._sorcery.material)
          117  +	local mp = (props and props.material)
   113    118   		or sorcery.data.compat.grindables[item:get_name()]
   114    119   		or {}
   115    120   
   116    121   	if metal then mp = {
   117    122   		hardness = mp.hardness or metal.data.hardness;
   118    123   		grindvalue = ((mp.grindvalue or metal.value) or (metal and constants.metal_grindvalue));
   119    124   		powder = mp.powder or metal.data.parts.powder;
   120    125   		grindcost = mp.grindcost or constants.metal_grindcost; -- invariant for metal
   121    126   	} end
   122    127   
          128  +	mp.hardness   = mp.hardness   or constants.default_hardness;
   123    129   	mp.torque     = constants.grind_torque_factor * mp.hardness
   124    130   	mp.grindvalue = mp.grindvalue or constants.default_grindvalue
   125    131   	mp.grindcost  = mp.grindcost  or constants.default_grindcost
   126         -	mp.hardness   = mp.hardness   or constants.default_hardness;
   127    132   
   128    133   	if item:get_wear() ~= 0 then
   129    134   		-- prevent cheating by recovering metal from items before they
   130    135   		-- are destroyed
   131    136   		local wearfac = (item:get_wear() / 65535)
   132    137   		mp.grindvalue = math.max(1,math.ceil(mp.grindvalue * wearfac))
   133    138   		mp.hardness = math.max(1,math.ceil(mp.grindcost * wearfac))
................................................................................
   281    286   				local speedboost = math.max(0.05,((grindpower - mp.hardness)/constants.grind_range) * grinders)
   282    287   				reqtime = mp.grindvalue * mp.hardness * constants.grind_factor * (1-speedboost)
   283    288   				if elapsed >= reqtime then
   284    289   					item:take_item(mp.grindcost)
   285    290   					inv:set_stack('input',1,item)
   286    291   					local pw = ItemStack{
   287    292   						name=mp.powder;
   288         -						count=mp.grindvalue;
          293  +						count=math.floor(mp.grindvalue);
   289    294   					}
   290    295   					if inv:room_for_item('output',pw) then
   291    296   						inv:add_item('output',pw)
   292    297   					else
   293    298   						minetest.add_item(pos,pw)
   294    299   					end
   295    300   					elapsed = 0

Modified metallurgy-hot.lua from [c9beb59240] to [52848574bf].

   128    128   local find_recipe = function(inv)
   129    129   	local mix = {}
   130    130   	local count = 0
   131    131   	for i=1,inv:get_size('input') do
   132    132   		local m = inv:get_stack('input',i)
   133    133   		if m:is_empty() then goto skip end
   134    134   		local l = sorcery.data.metallookup[m:get_name()]
          135  +		if not l then
          136  +			local p = sorcery.lib.tbl.walk(m:get_definition()._sorcery,{'material'})
          137  +			if p.metal then l = p end
          138  +		end
   135    139   		if not l then return false end
   136    140   		mix[l.id] = (mix[l.id] or 0) + l.value
   137    141   		count = count + l.value
   138    142   	::skip::end
          143  +	count = math.floor(count)
   139    144   	-- everything is metal, we've finished summing it up.
   140    145   	-- let's see if the assembled items match the ratio
   141    146   	-- specified in any of the smelting recipes.
   142    147   	local matches = 0
   143         -	for _,rec in pairs(sorcery.data.alloys) do
          148  +	for _,rec in pairs(sorcery.register.alloys.db) do
   144    149   		local fac = nil
   145    150   		local meltpoint = 1
   146    151   		if rec.metals == nil then goto skip_recipe end
   147    152   		for metal, ratio in pairs(rec.metals) do
   148    153   			if mix[metal] and mix[metal] % ratio == 0 then
   149    154   				if fac then
   150    155   					if mix[metal] / ratio ~= fac then goto skip_recipe end
................................................................................
   208    213   		for i=1,inv:get_size('input') do
   209    214   			local s = inv:get_stack('input',i)
   210    215   			if s:is_empty() then goto skip end
   211    216   			s:take_item(1) inv:set_stack('input',i,s)
   212    217   		::skip::end
   213    218   
   214    219   		local outstack
   215         -		if count % fragments_per_ingot == 0 then
   216         -			outstack = ItemStack {
   217         -				name = sorcery.data.metals[recipe.output].ingot or 'sorcery:' .. recipe.output .. '_ingot';
   218         -				count = count / fragments_per_ingot;
   219         -			}
          220  +		if type(output) == 'table' then
          221  +			for v,item in pairs(output) do
          222  +				if count % v == 0 then
          223  +					outstack = ItemStack {
          224  +						name = item;
          225  +						count = count / v;
          226  +					}
          227  +				end
          228  +			end
   220    229   		else
   221         -			outstack = ItemStack {
   222         -				name = 'sorcery:fragment_' .. recipe.output;
   223         -				count = count;
   224         -			}
          230  +			if count % (fragments_per_ingot * 9) == 0 then
          231  +				outstack = ItemStack {
          232  +					name = sorcery.data.metals[recipe.output].parts.block;
          233  +					count = count / (fragments_per_ingot*9);
          234  +				}
          235  +			elseif count % fragments_per_ingot == 0 then
          236  +				outstack = ItemStack {
          237  +					name = sorcery.data.metals[recipe.output].parts.ingot;
          238  +					count = count / fragments_per_ingot;
          239  +				}
          240  +			else
          241  +				outstack = ItemStack {
          242  +					name = 'sorcery:fragment_' .. recipe.output;
          243  +					count = count;
          244  +				}
          245  +			end
   225    246   		end
   226    247   
   227    248   		local leftover = inv:add_item('output',outstack)
   228    249   		if not leftover:is_empty() then
   229    250   			minetest.add_item(pos, leftover)
   230    251   		end
   231    252   	end
................................................................................
   302    323   			drawtype = "mesh";
   303    324   			after_dig_node = sorcery.lib.node.purge_container;
   304    325   			mesh = 'sorcery-kiln-' .. state .. '.obj';
   305    326   			drop = id;
   306    327   			groups = {
   307    328   				cracky = (state == 'open' and 2) or nil;
   308    329   				sorcery_metallurgy = 1;
          330  +				not_in_creative_inventory = (state == open) and nil or 1;
   309    331   			};
   310    332   			sunlight_propagates = true;
   311    333   			paramtype1 = 'light';
   312    334   			paramtype2 = 'facedir';
   313    335   			selection_box = box[state];
   314    336   			collision_box = box[state];
   315    337   			tiles = tex[state];
................................................................................
   384    406   			_proto = kind;
   385    407   			description = desc;
   386    408   			drop = id;
   387    409   			after_dig_node = sorcery.lib.node.purge_container;
   388    410   			groups = {
   389    411   				cracky = (active and 2) or nil;
   390    412   				sorcery_metallurgy = 1;
          413  +				not_in_creative_inventory = active and 1 or nil;
   391    414   			};
   392    415   			paramtype2 = 'facedir';
   393    416   			light_source = (active and 9) or 0;
   394    417   			on_construct = function(pos)
   395    418   				local meta = minetest.get_meta(pos)
   396    419   				local inv = meta:get_inventory()
   397    420   				inv:set_size('input',kind.size)

Added models/sorcery-astrolabe.obj version [d217d918f2].

            1  +# Blender v2.82 (sub 7) OBJ File: 'astrolabe.blend'
            2  +# www.blender.org
            3  +mtllib sorcery-astrolabe.mtl
            4  +o steel
            5  +v -0.031600 0.038922 -0.405254
            6  +v -0.110054 0.038922 -0.391303
            7  +v -0.184278 0.038922 -0.362313
            8  +v -0.251421 0.038922 -0.319401
            9  +v -0.308902 0.038922 -0.264214
           10  +v -0.354512 0.038922 -0.198873
           11  +v -0.386499 0.038922 -0.125890
           12  +v -0.403632 0.038922 -0.048069
           13  +v -0.405254 0.038922 0.031599
           14  +v -0.391302 0.038922 0.110053
           15  +v -0.362313 0.038922 0.184278
           16  +v -0.319401 0.038922 0.251421
           17  +v -0.264214 0.038922 0.308902
           18  +v -0.198873 0.038922 0.354512
           19  +v -0.125890 0.038922 0.386498
           20  +v -0.048069 0.038922 0.403632
           21  +v 0.031600 0.038922 0.405254
           22  +v 0.110054 0.038922 0.391302
           23  +v 0.184278 0.038922 0.362313
           24  +v 0.251421 0.038922 0.319400
           25  +v 0.308902 0.038922 0.264213
           26  +v 0.354512 0.038922 0.198873
           27  +v 0.386498 0.038922 0.125889
           28  +v 0.403632 0.038922 0.048068
           29  +v 0.405254 0.038922 -0.031600
           30  +v 0.391302 0.038922 -0.110054
           31  +v 0.362313 0.038922 -0.184279
           32  +v 0.319400 0.038922 -0.251422
           33  +v 0.264213 0.038922 -0.308903
           34  +v 0.198872 0.038922 -0.354513
           35  +v 0.125889 0.038922 -0.386499
           36  +v 0.048068 0.038922 -0.403632
           37  +v -0.031600 -0.038922 -0.405254
           38  +v -0.110054 -0.038922 -0.391303
           39  +v -0.184278 -0.038922 -0.362313
           40  +v -0.251421 -0.038922 -0.319401
           41  +v -0.308902 -0.038922 -0.264214
           42  +v -0.354512 -0.038922 -0.198873
           43  +v -0.386499 -0.038922 -0.125890
           44  +v -0.403632 -0.038922 -0.048069
           45  +v -0.405254 -0.038922 0.031599
           46  +v -0.391302 -0.038922 0.110053
           47  +v -0.362313 -0.038922 0.184278
           48  +v -0.319401 -0.038922 0.251421
           49  +v -0.264214 -0.038922 0.308902
           50  +v -0.198873 -0.038922 0.354512
           51  +v -0.125890 -0.038922 0.386498
           52  +v -0.048069 -0.038922 0.403632
           53  +v 0.031600 -0.038922 0.405254
           54  +v 0.110054 -0.038922 0.391302
           55  +v 0.184278 -0.038922 0.362313
           56  +v 0.251421 -0.038922 0.319400
           57  +v 0.308902 -0.038922 0.264213
           58  +v 0.354512 -0.038922 0.198873
           59  +v 0.386498 -0.038922 0.125889
           60  +v 0.403632 -0.038922 0.048068
           61  +v 0.405254 -0.038922 -0.031600
           62  +v 0.391302 -0.038922 -0.110054
           63  +v 0.362313 -0.038922 -0.184279
           64  +v 0.319400 -0.038922 -0.251422
           65  +v 0.264213 -0.038922 -0.308903
           66  +v 0.198872 -0.038922 -0.354513
           67  +v 0.125889 -0.038922 -0.386499
           68  +v 0.048068 -0.038922 -0.403632
           69  +v -0.036264 0.038922 -0.465073
           70  +v -0.126297 0.038922 -0.449061
           71  +v -0.211478 0.038922 -0.415792
           72  +v -0.288532 0.038922 -0.366545
           73  +v -0.354497 0.038922 -0.303212
           74  +v -0.406839 0.038922 -0.228228
           75  +v -0.443547 0.038922 -0.144472
           76  +v -0.463210 0.038922 -0.055163
           77  +v -0.465072 0.038922 0.036264
           78  +v -0.449061 0.038922 0.126297
           79  +v -0.415792 0.038922 0.211478
           80  +v -0.366545 0.038922 0.288532
           81  +v -0.303212 0.038922 0.354497
           82  +v -0.228228 0.038922 0.406839
           83  +v -0.144471 0.038922 0.443547
           84  +v -0.055163 0.038922 0.463210
           85  +v 0.036264 0.038922 0.465070
           86  +v 0.126297 0.038922 0.449061
           87  +v 0.211478 0.038922 0.415792
           88  +v 0.288532 0.038922 0.366545
           89  +v 0.354497 0.038922 0.303212
           90  +v 0.406839 0.038922 0.228227
           91  +v 0.443547 0.038922 0.144471
           92  +v 0.463210 0.038922 0.055163
           93  +v 0.465072 0.038922 -0.036264
           94  +v 0.449061 0.038922 -0.126298
           95  +v 0.415792 0.038922 -0.211479
           96  +v 0.366545 0.038922 -0.288532
           97  +v 0.303212 0.038922 -0.354497
           98  +v 0.228227 0.038922 -0.406840
           99  +v 0.144471 0.038922 -0.443547
          100  +v 0.055162 0.038922 -0.463210
          101  +v -0.036264 -0.038922 -0.465073
          102  +v -0.126297 -0.038922 -0.449061
          103  +v -0.211478 -0.038922 -0.415792
          104  +v -0.288532 -0.038922 -0.366545
          105  +v -0.354497 -0.038922 -0.303212
          106  +v -0.406839 -0.038922 -0.228228
          107  +v -0.443547 -0.038922 -0.144472
          108  +v -0.463210 -0.038922 -0.055163
          109  +v -0.465072 -0.038922 0.036264
          110  +v -0.449061 -0.038922 0.126297
          111  +v -0.415792 -0.038922 0.211478
          112  +v -0.366545 -0.038922 0.288532
          113  +v -0.303212 -0.038922 0.354497
          114  +v -0.228228 -0.038922 0.406839
          115  +v -0.144471 -0.038922 0.443547
          116  +v -0.055163 -0.038922 0.463210
          117  +v 0.036264 -0.038922 0.465070
          118  +v 0.126297 -0.038922 0.449061
          119  +v 0.211478 -0.038922 0.415792
          120  +v 0.288532 -0.038922 0.366545
          121  +v 0.354497 -0.038922 0.303212
          122  +v 0.406839 -0.038922 0.228227
          123  +v 0.443547 -0.038922 0.144471
          124  +v 0.463210 -0.038922 0.055163
          125  +v 0.465072 -0.038922 -0.036264
          126  +v 0.449061 -0.038922 -0.126298
          127  +v 0.415792 -0.038922 -0.211479
          128  +v 0.366545 -0.038922 -0.288532
          129  +v 0.303212 -0.038922 -0.354497
          130  +v 0.228227 -0.038922 -0.406840
          131  +v 0.144471 -0.038922 -0.443547
          132  +v 0.055162 -0.038922 -0.463210
          133  +v -0.010652 0.019986 0.329882
          134  +v 0.034390 0.065822 0.322211
          135  +v 0.077602 0.109626 0.302151
          136  +v 0.117323 0.149716 0.270472
          137  +v 0.152028 0.184550 0.228394
          138  +v 0.180382 0.212791 0.177531
          139  +v 0.201296 0.233352 0.119839
          140  +v 0.213966 0.245444 0.057536
          141  +v 0.217905 0.248602 -0.006985
          142  +v 0.212963 0.242705 -0.071245
          143  +v 0.199328 0.227979 -0.132773
          144  +v 0.177525 0.204990 -0.189206
          145  +v 0.148391 0.174621 -0.238374
          146  +v 0.113047 0.138041 -0.278388
          147  +v 0.072850 0.096653 -0.307710
          148  +v 0.029346 0.052050 -0.325214
          149  +v -0.015795 0.005945 -0.330227
          150  +v -0.060836 -0.039891 -0.322556
          151  +v -0.104048 -0.083695 -0.302496
          152  +v -0.143769 -0.123785 -0.270817
          153  +v -0.178474 -0.158620 -0.228739
          154  +v -0.206828 -0.186860 -0.177876
          155  +v -0.227742 -0.207422 -0.120184
          156  +v -0.240412 -0.219514 -0.057881
          157  +v -0.244352 -0.222672 0.006641
          158  +v -0.239409 -0.216774 0.070900
          159  +v -0.225774 -0.202048 0.132428
          160  +v -0.203971 -0.179059 0.188861
          161  +v -0.174837 -0.148691 0.238029
          162  +v -0.139493 -0.112110 0.278043
          163  +v -0.099296 -0.070722 0.307365
          164  +v -0.055792 -0.026119 0.324869
          165  +v 0.015795 -0.005945 0.330227
          166  +v 0.060836 0.039891 0.322556
          167  +v 0.104048 0.083695 0.302496
          168  +v 0.143770 0.123785 0.270818
          169  +v 0.178474 0.158620 0.228739
          170  +v 0.206828 0.186860 0.177876
          171  +v 0.227742 0.207422 0.120185
          172  +v 0.240413 0.219514 0.057881
          173  +v 0.244352 0.222672 -0.006640
          174  +v 0.239409 0.216774 -0.070899
          175  +v 0.225774 0.202048 -0.132428
          176  +v 0.203971 0.179059 -0.188860
          177  +v 0.174838 0.148691 -0.238028
          178  +v 0.139493 0.112110 -0.278042
          179  +v 0.099297 0.070723 -0.307365
          180  +v 0.055792 0.026119 -0.324868
          181  +v 0.010652 -0.019986 -0.329881
          182  +v -0.034390 -0.065822 -0.322210
          183  +v -0.077602 -0.109626 -0.302150
          184  +v -0.117323 -0.149716 -0.270472
          185  +v -0.152028 -0.184550 -0.228393
          186  +v -0.180382 -0.212791 -0.177530
          187  +v -0.201296 -0.233352 -0.119839
          188  +v -0.213966 -0.245444 -0.057535
          189  +v -0.217905 -0.248602 0.006986
          190  +v -0.212963 -0.242705 0.071246
          191  +v -0.199328 -0.227979 0.132774
          192  +v -0.177524 -0.204989 0.189206
          193  +v -0.148391 -0.174621 0.238374
          194  +v -0.113047 -0.138040 0.278388
          195  +v -0.072850 -0.096653 0.307711
          196  +v -0.029345 -0.052050 0.325215
          197  +v -0.010496 0.020411 0.349876
          198  +v 0.037274 0.069023 0.341741
          199  +v 0.083104 0.115482 0.320465
          200  +v 0.125231 0.158000 0.286868
          201  +v 0.162038 0.194945 0.242240
          202  +v 0.192110 0.224896 0.188296
          203  +v 0.214291 0.246703 0.127110
          204  +v 0.227729 0.259528 0.061031
          205  +v 0.231907 0.262877 -0.007398
          206  +v 0.226665 0.256623 -0.075550
          207  +v 0.212204 0.241004 -0.140806
          208  +v 0.189080 0.216622 -0.200657
          209  +v 0.158182 0.184414 -0.252804
          210  +v 0.120696 0.145618 -0.295242
          211  +v 0.078065 0.101723 -0.326340
          212  +v 0.031924 0.054418 -0.344905
          213  +v -0.015950 0.005519 -0.350221
          214  +v -0.063720 -0.043093 -0.342086
          215  +v -0.109550 -0.089551 -0.320810
          216  +v -0.151678 -0.132069 -0.287213
          217  +v -0.188485 -0.169014 -0.242585
          218  +v -0.218557 -0.198965 -0.188641
          219  +v -0.240738 -0.220772 -0.127454
          220  +v -0.254176 -0.233597 -0.061376
          221  +v -0.258354 -0.236947 0.007053
          222  +v -0.253111 -0.230692 0.075205
          223  +v -0.238650 -0.215073 0.140461
          224  +v -0.215526 -0.190692 0.200312
          225  +v -0.184628 -0.158483 0.252459
          226  +v -0.147142 -0.119687 0.294897
          227  +v -0.104511 -0.075792 0.325995
          228  +v -0.058371 -0.028487 0.344560
          229  +v 0.015950 -0.005519 0.350222
          230  +v 0.063720 0.043093 0.342086
          231  +v 0.109550 0.089551 0.320811
          232  +v 0.151678 0.132069 0.287213
          233  +v 0.188485 0.169014 0.242585
          234  +v 0.218557 0.198965 0.188642
          235  +v 0.240738 0.220772 0.127455
          236  +v 0.254176 0.233597 0.061377
          237  +v 0.258354 0.236947 -0.007053
          238  +v 0.253112 0.230692 -0.075205
          239  +v 0.238650 0.215074 -0.140460
          240  +v 0.215526 0.190692 -0.200312
          241  +v 0.184628 0.158484 -0.252458
          242  +v 0.147143 0.119687 -0.294896
          243  +v 0.104511 0.075793 -0.325995
          244  +v 0.058371 0.028487 -0.344559
          245  +v 0.010496 -0.020411 -0.349876
          246  +v -0.037274 -0.069023 -0.341740
          247  +v -0.083104 -0.115481 -0.320464
          248  +v -0.125231 -0.158000 -0.286867
          249  +v -0.162038 -0.194945 -0.242239
          250  +v -0.192110 -0.224896 -0.188296
          251  +v -0.214291 -0.246703 -0.127109
          252  +v -0.227729 -0.259528 -0.061031
          253  +v -0.231907 -0.262877 0.007399
          254  +v -0.226665 -0.256622 0.075551
          255  +v -0.212204 -0.241004 0.140807
          256  +v -0.189080 -0.216622 0.200658
          257  +v -0.158181 -0.184414 0.252804
          258  +v -0.120696 -0.145617 0.295242
          259  +v -0.078064 -0.101723 0.326341
          260  +v -0.031924 -0.054417 0.344905
          261  +v -0.012163 -0.014207 0.330129
          262  +v -0.055292 0.033688 0.324257
          263  +v -0.096825 0.079812 0.305925
          264  +v -0.135165 0.122393 0.275835
          265  +v -0.168841 0.159794 0.235146
          266  +v -0.196556 0.190578 0.185420
          267  +v -0.217247 0.213562 0.128568
          268  +v -0.230119 0.227862 0.066776
          269  +v -0.234675 0.232930 0.002417
          270  +v -0.230742 0.228570 -0.062035
          271  +v -0.218471 0.214950 -0.124102
          272  +v -0.198333 0.192593 -0.181401
          273  +v -0.171102 0.162359 -0.231729
          274  +v -0.137825 0.125409 -0.273151
          275  +v -0.099779 0.083164 -0.304076
          276  +v -0.058429 0.037246 -0.323316
          277  +v -0.015361 -0.010579 -0.330131
          278  +v 0.027767 -0.058474 -0.324260
          279  +v 0.069300 -0.104598 -0.305927
          280  +v 0.107641 -0.147179 -0.275838
          281  +v 0.141316 -0.184580 -0.235148
          282  +v 0.169032 -0.215364 -0.185422
          283  +v 0.189723 -0.238347 -0.128570
          284  +v 0.202594 -0.252648 -0.066778
          285  +v 0.207151 -0.257716 -0.002419
          286  +v 0.203218 -0.253356 0.062033
          287  +v 0.190947 -0.239736 0.124100
          288  +v 0.170808 -0.217379 0.181399
          289  +v 0.143577 -0.187145 0.231726
          290  +v 0.110300 -0.150195 0.273149
          291  +v 0.072255 -0.107949 0.304074
          292  +v 0.030904 -0.062032 0.323314
          293  +v 0.015361 0.010579 0.330132
          294  +v -0.027767 0.058474 0.324260
          295  +v -0.069300 0.104598 0.305927
          296  +v -0.107641 0.147179 0.275838
          297  +v -0.141316 0.184580 0.235149
          298  +v -0.169032 0.215363 0.185423
          299  +v -0.189723 0.238347 0.128571
          300  +v -0.202594 0.252648 0.066778
          301  +v -0.207151 0.257716 0.002420
          302  +v -0.203218 0.253356 -0.062032
          303  +v -0.190947 0.239736 -0.124100
          304  +v -0.170809 0.217379 -0.181398
          305  +v -0.143578 0.187145 -0.231726
          306  +v -0.110300 0.150195 -0.273148
          307  +v -0.072255 0.107950 -0.304073
          308  +v -0.030904 0.062032 -0.323313
          309  +v 0.012163 0.014207 -0.330128
          310  +v 0.055292 -0.033688 -0.324257
          311  +v 0.096825 -0.079812 -0.305924
          312  +v 0.135165 -0.122393 -0.275835
          313  +v 0.168841 -0.159794 -0.235145
          314  +v 0.196556 -0.190578 -0.185419
          315  +v 0.217247 -0.213562 -0.128567
          316  +v 0.230118 -0.227862 -0.066775
          317  +v 0.234675 -0.232930 -0.002416
          318  +v 0.230742 -0.228570 0.062036
          319  +v 0.218471 -0.214950 0.124103
          320  +v 0.198333 -0.192593 0.181402
          321  +v 0.171102 -0.162359 0.231729
          322  +v 0.137824 -0.125409 0.273152
          323  +v 0.099779 -0.083164 0.304077
          324  +v 0.058428 -0.037246 0.323317
          325  +v -0.012115 -0.014262 0.340129
          326  +v -0.056550 0.035084 0.334079
          327  +v -0.099341 0.082605 0.315191
          328  +v -0.138843 0.126476 0.284190
          329  +v -0.173538 0.165009 0.242268
          330  +v -0.202093 0.196726 0.191036
          331  +v -0.223411 0.220406 0.132462
          332  +v -0.236672 0.235140 0.068798
          333  +v -0.241367 0.240361 0.002490
          334  +v -0.237315 0.235869 -0.063914
          335  +v -0.224672 0.221836 -0.127861
          336  +v -0.203924 0.198802 -0.186896
          337  +v -0.175868 0.167652 -0.238747
          338  +v -0.141582 0.129583 -0.281424
          339  +v -0.102385 0.086058 -0.313287
          340  +v -0.059781 0.038750 -0.333109
          341  +v 0.029025 -0.059870 -0.334081
          342  +v 0.071816 -0.107391 -0.315193
          343  +v 0.111318 -0.151261 -0.284193
          344  +v 0.146013 -0.189795 -0.242271
          345  +v 0.174569 -0.221511 -0.191038
          346  +v 0.195886 -0.245191 -0.132465
          347  +v 0.209147 -0.259925 -0.068800
          348  +v 0.213842 -0.265146 -0.002492
          349  +v 0.209790 -0.260654 0.063912
          350  +v 0.197147 -0.246622 0.127859
          351  +v 0.176399 -0.223588 0.186893
          352  +v 0.148343 -0.192438 0.238745
          353  +v 0.114058 -0.154369 0.281422
          354  +v 0.074860 -0.110844 0.313284
          355  +v 0.032257 -0.063535 0.333107
          356  +v 0.015410 0.010524 0.340131
          357  +v -0.029025 0.059870 0.334082
          358  +v -0.071816 0.107391 0.315194
          359  +v -0.111318 0.151261 0.284193
          360  +v -0.146013 0.189795 0.242271
          361  +v -0.174569 0.221511 0.191039
          362  +v -0.195886 0.245191 0.132465
          363  +v -0.209147 0.259925 0.068801
          364  +v -0.213842 0.265146 0.002493
          365  +v -0.209790 0.260654 -0.063911
          366  +v -0.197147 0.246622 -0.127859
          367  +v -0.176399 0.223588 -0.186893
          368  +v -0.148343 0.192438 -0.238745
          369  +v -0.114058 0.154369 -0.281422
          370  +v -0.074860 0.110844 -0.313284
          371  +v -0.032257 0.063536 -0.333106
          372  +v 0.056550 -0.035084 -0.334079
          373  +v 0.099341 -0.082605 -0.315190
          374  +v 0.138843 -0.126476 -0.284190
          375  +v 0.173538 -0.165009 -0.242268
          376  +v 0.202093 -0.196726 -0.191035
          377  +v 0.223411 -0.220406 -0.132462
          378  +v 0.236672 -0.235139 -0.068797
          379  +v 0.241367 -0.240361 -0.002489
          380  +v 0.237315 -0.235869 0.063914
          381  +v 0.224672 -0.221836 0.127862
          382  +v 0.203923 -0.198802 0.186896
          383  +v 0.175867 -0.167652 0.238748
          384  +v 0.141582 -0.129583 0.281425
          385  +v 0.102384 -0.086058 0.313287
          386  +v 0.059781 -0.038749 0.333110
          387  +v -0.023270 -0.001795 -0.338887
          388  +v 0.002710 0.024705 -0.338640
          389  +v 0.002647 0.024774 -0.328622
          390  +v -0.001722 0.020318 -0.328664
          391  +v -0.023333 -0.001727 -0.328943
          392  +vt 0.708974 0.575575
          393  +vt 0.765974 0.575575
          394  +vt 0.765974 0.503540
          395  +vt 0.708974 0.503540
          396  +vt 0.665191 0.575575
          397  +vt 0.665191 0.503540
          398  +vt 0.739820 0.503540
          399  +vt 0.739820 0.575575
          400  +vt 0.805233 0.575575
          401  +vt 0.805233 0.503540
          402  +vt 0.739820 0.503540
          403  +vt 0.739820 0.575575
          404  +vt 0.584213 0.575575
          405  +vt 0.584213 0.503540
          406  +vt 0.260180 0.575575
          407  +vt 0.260180 0.503540
          408  +vt 0.194767 0.503540
          409  +vt 0.194767 0.575575
          410  +vt 0.500000 0.575575
          411  +vt 0.500000 0.503540
          412  +vt 0.334809 0.575575
          413  +vt 0.334809 0.503540
          414  +vt 0.415787 0.575575
          415  +vt 0.415787 0.503540
          416  +vt 0.415787 0.575575
          417  +vt 0.415787 0.503540
          418  +vt 0.334809 0.575575
          419  +vt 0.334809 0.503540
          420  +vt 0.500000 0.575575
          421  +vt 0.500000 0.503540
          422  +vt 0.260180 0.575575
          423  +vt 0.260180 0.503540
          424  +vt 0.584213 0.575575
          425  +vt 0.584213 0.503540
          426  +vt 0.194767 0.575575
          427  +vt 0.194767 0.503540
          428  +vt 0.665191 0.575575
          429  +vt 0.665191 0.503540
          430  +vt 0.260180 0.575575
          431  +vt 0.260180 0.503540
          432  +vt 0.739820 0.575575
          433  +vt 0.739820 0.503540
          434  +vt 0.334809 0.575575
          435  +vt 0.334809 0.503540
          436  +vt 0.415787 0.575575
          437  +vt 0.415787 0.503540
          438  +vt 0.500000 0.503540
          439  +vt 0.500000 0.575575
          440  +vt 0.805233 0.575575
          441  +vt 0.805233 0.503540
          442  +vt 0.415787 0.575575
          443  +vt 0.415787 0.503540
          444  +vt 0.334809 0.575575
          445  +vt 0.334809 0.503540
          446  +vt 0.739820 0.575575
          447  +vt 0.739820 0.503540
          448  +vt 0.500000 0.575575
          449  +vt 0.500000 0.503540
          450  +vt 0.260180 0.575575
          451  +vt 0.260180 0.503540
          452  +vt 0.665190 0.575575
          453  +vt 0.665190 0.503540
          454  +vt 0.584213 0.575575
          455  +vt 0.584213 0.503540
          456  +vt 0.194768 0.575575
          457  +vt 0.194768 0.503540
          458  +vt 0.584212 0.575575
          459  +vt 0.584212 0.503540
          460  +vt 0.665191 0.575575
          461  +vt 0.665191 0.503540
          462  +vt 0.805232 0.503540
          463  +vt 0.805232 0.575575
          464  +vt 0.500000 0.876144
          465  +vt 0.426618 0.868917
          466  +vt 0.415787 0.923371
          467  +vt 0.500000 0.931666
          468  +vt 0.356056 0.847512
          469  +vt 0.334809 0.898806
          470  +vt 0.291026 0.812752
          471  +vt 0.260180 0.858916
          472  +vt 0.234026 0.765974
          473  +vt 0.194768 0.805233
          474  +vt 0.187248 0.708974
          475  +vt 0.141084 0.739820
          476  +vt 0.152488 0.643944
          477  +vt 0.101194 0.665191
          478  +vt 0.131083 0.573382
          479  +vt 0.076629 0.584213
          480  +vt 0.123856 0.500000
          481  +vt 0.068334 0.500000
          482  +vt 0.131083 0.426618
          483  +vt 0.076629 0.415787
          484  +vt 0.152488 0.356056
          485  +vt 0.101194 0.334809
          486  +vt 0.187248 0.291025
          487  +vt 0.141084 0.260180
          488  +vt 0.234026 0.234026
          489  +vt 0.194768 0.194767
          490  +vt 0.291026 0.187247
          491  +vt 0.260180 0.141084
          492  +vt 0.356056 0.152488
          493  +vt 0.334809 0.101194
          494  +vt 0.426618 0.131083
          495  +vt 0.415787 0.076629
          496  +vt 0.500000 0.123856
          497  +vt 0.500000 0.068336
          498  +vt 0.573382 0.131083
          499  +vt 0.584213 0.076629
          500  +vt 0.643944 0.152488
          501  +vt 0.665191 0.101194
          502  +vt 0.708975 0.187248
          503  +vt 0.739820 0.141084
          504  +vt 0.765974 0.234026
          505  +vt 0.805233 0.194768
          506  +vt 0.812753 0.291026
          507  +vt 0.858916 0.260180
          508  +vt 0.847512 0.356056
          509  +vt 0.898806 0.334810
          510  +vt 0.868917 0.426618
          511  +vt 0.923371 0.415787
          512  +vt 0.876144 0.500000
          513  +vt 0.931666 0.500000
          514  +vt 0.868917 0.573382
          515  +vt 0.923371 0.584213
          516  +vt 0.847512 0.643945
          517  +vt 0.898806 0.665191
          518  +vt 0.812752 0.708975
          519  +vt 0.858916 0.739820
          520  +vt 0.765974 0.765975
          521  +vt 0.805232 0.805233
          522  +vt 0.708974 0.812753
          523  +vt 0.739820 0.858916
          524  +vt 0.643944 0.847512
          525  +vt 0.665190 0.898806
          526  +vt 0.573382 0.868917
          527  +vt 0.584212 0.923371
          528  +vt 0.426618 0.868917
          529  +vt 0.500000 0.876144
          530  +vt 0.500000 0.931666
          531  +vt 0.415787 0.923371
          532  +vt 0.356056 0.847512
          533  +vt 0.334809 0.898806
          534  +vt 0.291026 0.812752
          535  +vt 0.260180 0.858916
          536  +vt 0.234026 0.765974
          537  +vt 0.194768 0.805233
          538  +vt 0.187248 0.708974
          539  +vt 0.141084 0.739820
          540  +vt 0.131083 0.573382
          541  +vt 0.152488 0.643944
          542  +vt 0.101194 0.665191
          543  +vt 0.076629 0.584213
          544  +vt 0.123856 0.500000
          545  +vt 0.068334 0.500000
          546  +vt 0.131083 0.426618
          547  +vt 0.076629 0.415787
          548  +vt 0.152488 0.356056
          549  +vt 0.101194 0.334809
          550  +vt 0.234026 0.234026
          551  +vt 0.187248 0.291025
          552  +vt 0.141084 0.260180
          553  +vt 0.194768 0.194767
          554  +vt 0.291026 0.187247
          555  +vt 0.260180 0.141084
          556  +vt 0.356056 0.152488
          557  +vt 0.334809 0.101194
          558  +vt 0.426618 0.131083
          559  +vt 0.415787 0.076629
          560  +vt 0.500000 0.123856
          561  +vt 0.500000 0.068336
          562  +vt 0.573382 0.131083
          563  +vt 0.584213 0.076629
          564  +vt 0.643944 0.152488
          565  +vt 0.665191 0.101194
          566  +vt 0.708975 0.187248
          567  +vt 0.739820 0.141084
          568  +vt 0.765974 0.234026
          569  +vt 0.805233 0.194768
          570  +vt 0.812753 0.291026
          571  +vt 0.858916 0.260180
          572  +vt 0.868917 0.426618
          573  +vt 0.847512 0.356056
          574  +vt 0.898806 0.334810
          575  +vt 0.923371 0.415787
          576  +vt 0.876144 0.500000
          577  +vt 0.931666 0.500000
          578  +vt 0.868917 0.573382
          579  +vt 0.923371 0.584213
          580  +vt 0.847512 0.643945
          581  +vt 0.898806 0.665191
          582  +vt 0.765974 0.765975
          583  +vt 0.812752 0.708975
          584  +vt 0.858916 0.739820
          585  +vt 0.805232 0.805233
          586  +vt 0.708974 0.812753
          587  +vt 0.739820 0.858916
          588  +vt 0.643944 0.847512
          589  +vt 0.665190 0.898806
          590  +vt 0.573382 0.868917
          591  +vt 0.584212 0.923371
          592  +vt 0.926035 0.627582
          593  +vt 0.893852 0.630339
          594  +vt 0.894026 0.578467
          595  +vt 0.922967 0.575988
          596  +vt 0.438346 0.355695
          597  +vt 0.410006 0.364110
          598  +vt 0.403735 0.313455
          599  +vt 0.434948 0.304165
          600  +vt 0.103843 0.618889
          601  +vt 0.072497 0.627582
          602  +vt 0.069430 0.575988
          603  +vt 0.097852 0.568121
          604  +vt 0.467257 0.352631
          605  +vt 0.467083 0.300759
          606  +vt 0.133709 0.604924
          607  +vt 0.125336 0.555342
          608  +vt 0.496198 0.355111
          609  +vt 0.499266 0.303516
          610  +vt 0.161818 0.586615
          611  +vt 0.151669 0.538341
          612  +vt 0.524621 0.362977
          613  +vt 0.530612 0.312209
          614  +vt 0.188225 0.564978
          615  +vt 0.176852 0.517923
          616  +vt 0.552105 0.375757
          617  +vt 0.560478 0.326175
          618  +vt 0.213211 0.540997
          619  +vt 0.201064 0.494914
          620  +vt 0.578438 0.392757
          621  +vt 0.588587 0.344483
          622  +vt 0.237170 0.515577
          623  +vt 0.224597 0.470120
          624  +vt 0.603621 0.413175
          625  +vt 0.614994 0.366120
          626  +vt 0.260539 0.489545
          627  +vt 0.247823 0.444317
          628  +vt 0.627832 0.436184
          629  +vt 0.639980 0.390101
          630  +vt 0.283756 0.463680
          631  +vt 0.271155 0.418267
          632  +vt 0.772897 0.584461
          633  +vt 0.746656 0.562530
          634  +vt 0.758131 0.515591
          635  +vt 0.783200 0.536323
          636  +vt 0.651366 0.460978
          637  +vt 0.663939 0.415522
          638  +vt 0.307238 0.438743
          639  +vt 0.295030 0.392744
          640  +vt 0.800818 0.603170
          641  +vt 0.809407 0.553725
          642  +vt 0.674592 0.486781
          643  +vt 0.687308 0.441553
          644  +vt 0.331362 0.415507
          645  +vt 0.323841 0.422751
          646  +vt 0.319887 0.368568
          647  +vt 0.830504 0.617643
          648  +vt 0.836775 0.566988
          649  +vt 0.697924 0.512831
          650  +vt 0.710524 0.467418
          651  +vt 0.356431 0.394775
          652  +vt 0.335557 0.412037
          653  +vt 0.346128 0.346637
          654  +vt 0.861717 0.626933
          655  +vt 0.865115 0.575403
          656  +vt 0.721799 0.538355
          657  +vt 0.734007 0.492355
          658  +vt 0.382638 0.377373
          659  +vt 0.374049 0.327928
          660  +vt 0.926035 0.627582
          661  +vt 0.922967 0.575988
          662  +vt 0.894026 0.578467
          663  +vt 0.893852 0.630339
          664  +vt 0.438346 0.355695
          665  +vt 0.434948 0.304165
          666  +vt 0.403735 0.313455
          667  +vt 0.410006 0.364110
          668  +vt 0.103843 0.618889
          669  +vt 0.097852 0.568121
          670  +vt 0.069430 0.575988
          671  +vt 0.072497 0.627582
          672  +vt 0.467257 0.352631
          673  +vt 0.467083 0.300759
          674  +vt 0.133709 0.604924
          675  +vt 0.125336 0.555342
          676  +vt 0.496198 0.355111
          677  +vt 0.499266 0.303516
          678  +vt 0.161818 0.586615
          679  +vt 0.151669 0.538341
          680  +vt 0.524621 0.362977
          681  +vt 0.530612 0.312209
          682  +vt 0.188225 0.564978
          683  +vt 0.176852 0.517923
          684  +vt 0.552105 0.375757
          685  +vt 0.560478 0.326175
          686  +vt 0.213211 0.540997
          687  +vt 0.201064 0.494914
          688  +vt 0.578438 0.392757
          689  +vt 0.588587 0.344483
          690  +vt 0.237170 0.515577
          691  +vt 0.224597 0.470120
          692  +vt 0.603621 0.413175
          693  +vt 0.614994 0.366120
          694  +vt 0.260539 0.489545
          695  +vt 0.247823 0.444317
          696  +vt 0.627832 0.436184
          697  +vt 0.639980 0.390101
          698  +vt 0.283756 0.463680
          699  +vt 0.271155 0.418267
          700  +vt 0.772897 0.584461
          701  +vt 0.783200 0.536323
          702  +vt 0.758131 0.515591
          703  +vt 0.746656 0.562530
          704  +vt 0.651366 0.460978
          705  +vt 0.663939 0.415522
          706  +vt 0.307238 0.438743
          707  +vt 0.295030 0.392744
          708  +vt 0.800818 0.603170
          709  +vt 0.809407 0.553725
          710  +vt 0.674592 0.486781
          711  +vt 0.687308 0.441553
          712  +vt 0.331362 0.415507
          713  +vt 0.319887 0.368568
          714  +vt 0.830504 0.617643
          715  +vt 0.836775 0.566988
          716  +vt 0.697924 0.512831
          717  +vt 0.710524 0.467418
          718  +vt 0.356431 0.394775
          719  +vt 0.346128 0.346637
          720  +vt 0.861717 0.626933
          721  +vt 0.865115 0.575403
          722  +vt 0.721799 0.538355
          723  +vt 0.734007 0.492355
          724  +vt 0.382638 0.377373
          725  +vt 0.374049 0.327928
          726  +vt 0.314619 0.373692
          727  +vt 0.295030 0.392744
          728  +vt 0.307238 0.438743
          729  +vt 0.335355 0.412205
          730  +vt 0.926035 0.627582
          731  +vt 0.893852 0.630339
          732  +vt 0.894026 0.578467
          733  +vt 0.922967 0.575988
          734  +vt 0.438346 0.355695
          735  +vt 0.410006 0.364110
          736  +vt 0.403735 0.313455
          737  +vt 0.434948 0.304165
          738  +vt 0.103843 0.618889
          739  +vt 0.072497 0.627582
          740  +vt 0.069430 0.575988
          741  +vt 0.097852 0.568121
          742  +vt 0.467257 0.352631
          743  +vt 0.467083 0.300759
          744  +vt 0.133709 0.604924
          745  +vt 0.125336 0.555342
          746  +vt 0.496198 0.355111
          747  +vt 0.499266 0.303516
          748  +vt 0.161818 0.586615
          749  +vt 0.151669 0.538341
          750  +vt 0.524621 0.362977
          751  +vt 0.530612 0.312209
          752  +vt 0.188225 0.564978
          753  +vt 0.176852 0.517923
          754  +vt 0.552105 0.375757
          755  +vt 0.560478 0.326175
          756  +vt 0.213211 0.540997
          757  +vt 0.201064 0.494914
          758  +vt 0.578438 0.392757
          759  +vt 0.588587 0.344483
          760  +vt 0.237170 0.515577
          761  +vt 0.224597 0.470120
          762  +vt 0.603621 0.413175
          763  +vt 0.614994 0.366120
          764  +vt 0.260539 0.489545
          765  +vt 0.247823 0.444317
          766  +vt 0.627832 0.436184
          767  +vt 0.639980 0.390101
          768  +vt 0.283756 0.463680
          769  +vt 0.271155 0.418267
          770  +vt 0.772897 0.584461
          771  +vt 0.746656 0.562530
          772  +vt 0.758131 0.515591
          773  +vt 0.783200 0.536323
          774  +vt 0.651366 0.460978
          775  +vt 0.663939 0.415522
          776  +vt 0.307238 0.438743
          777  +vt 0.295030 0.392744
          778  +vt 0.800818 0.603170
          779  +vt 0.809407 0.553725
          780  +vt 0.674592 0.486781
          781  +vt 0.687308 0.441553
          782  +vt 0.331362 0.415507
          783  +vt 0.314395 0.373910
          784  +vt 0.319887 0.368568
          785  +vt 0.830504 0.617643
          786  +vt 0.836775 0.566988
          787  +vt 0.697924 0.512831
          788  +vt 0.710524 0.467418
          789  +vt 0.356431 0.394775
          790  +vt 0.346128 0.346637
          791  +vt 0.861717 0.626933
          792  +vt 0.865115 0.575403
          793  +vt 0.721799 0.538355
          794  +vt 0.734007 0.492355
          795  +vt 0.382638 0.377373
          796  +vt 0.374049 0.327928
          797  +vt 0.926035 0.627582
          798  +vt 0.922967 0.575988
          799  +vt 0.894026 0.578467
          800  +vt 0.893852 0.630339
          801  +vt 0.438346 0.355695
          802  +vt 0.434948 0.304165
          803  +vt 0.403735 0.313455
          804  +vt 0.410006 0.364110
          805  +vt 0.103843 0.618889
          806  +vt 0.097852 0.568121
          807  +vt 0.069430 0.575988
          808  +vt 0.072497 0.627582
          809  +vt 0.467257 0.352631
          810  +vt 0.467083 0.300759
          811  +vt 0.133709 0.604924
          812  +vt 0.125336 0.555342
          813  +vt 0.496198 0.355111
          814  +vt 0.499266 0.303516
          815  +vt 0.161818 0.586615
          816  +vt 0.151669 0.538341
          817  +vt 0.524621 0.362977
          818  +vt 0.530612 0.312209
          819  +vt 0.188225 0.564978
          820  +vt 0.176852 0.517923
          821  +vt 0.552105 0.375757
          822  +vt 0.560478 0.326175
          823  +vt 0.213211 0.540997
          824  +vt 0.201064 0.494914
          825  +vt 0.578438 0.392757
          826  +vt 0.588587 0.344483
          827  +vt 0.237170 0.515577
          828  +vt 0.224597 0.470120
          829  +vt 0.603621 0.413175
          830  +vt 0.614994 0.366120
          831  +vt 0.260539 0.489545
          832  +vt 0.247823 0.444317
          833  +vt 0.627832 0.436184
          834  +vt 0.639980 0.390101
          835  +vt 0.283756 0.463680
          836  +vt 0.271155 0.418267
          837  +vt 0.772897 0.584461
          838  +vt 0.783200 0.536323
          839  +vt 0.758131 0.515591
          840  +vt 0.746656 0.562530
          841  +vt 0.651366 0.460978
          842  +vt 0.663939 0.415522
          843  +vt 0.800818 0.603170
          844  +vt 0.809407 0.553725
          845  +vt 0.674592 0.486781
          846  +vt 0.687308 0.441553
          847  +vt 0.830504 0.617643
          848  +vt 0.836775 0.566988
          849  +vt 0.697924 0.512831
          850  +vt 0.710524 0.467418
          851  +vt 0.861717 0.626933
          852  +vt 0.865115 0.575403
          853  +vt 0.721799 0.538355
          854  +vt 0.734007 0.492355
          855  +vt 0.382638 0.377373
          856  +vt 0.374049 0.327928
          857  +vt 0.346128 0.346637
          858  +vt 0.356431 0.394775
          859  +vt 0.000000 0.000000
          860  +vt 0.000000 0.000000
          861  +vt 0.000000 0.000000
          862  +vt 0.000000 0.000000
          863  +vt 0.000000 0.000000
          864  +vt 0.000000 0.000000
          865  +vt 0.000000 0.000000
          866  +vt 0.000000 0.000000
          867  +vt 0.000000 0.000000
          868  +vt 0.000000 0.000000
          869  +vt 0.000000 0.000000
          870  +vt 0.000000 0.000000
          871  +vt 0.000000 0.000000
          872  +vt 0.000000 0.000000
          873  +vt 0.000000 0.000000
          874  +vt 0.000000 0.000000
          875  +vt 0.000000 0.000000
          876  +vt 0.000000 0.000000
          877  +vt 0.000000 0.000000
          878  +vt 0.000000 0.000000
          879  +vt 0.000000 0.000000
          880  +vt 0.000000 0.000000
          881  +vt 0.000000 0.000000
          882  +vt 0.000000 0.000000
          883  +vt 0.000000 0.000000
          884  +vt 0.000000 0.000000
          885  +vt 0.000000 0.000000
          886  +vt 0.000000 0.000000
          887  +vt 0.000000 0.000000
          888  +vt 0.000000 0.000000
          889  +vt 0.000000 0.000000
          890  +vt 0.000000 0.000000
          891  +vt 0.000000 0.000000
          892  +vt 0.000000 0.000000
          893  +vt 0.000000 0.000000
          894  +vt 0.000000 0.000000
          895  +vt 0.000000 0.000000
          896  +vt 0.000000 0.000000
          897  +vt 0.000000 0.000000
          898  +vt 0.000000 0.000000
          899  +vt 0.000000 0.000000
          900  +vt 0.000000 0.000000
          901  +vt 0.000000 0.000000
          902  +vt 0.000000 0.000000
          903  +vt 0.000000 0.000000
          904  +vt 0.000000 0.000000
          905  +vt 0.000000 0.000000
          906  +vt 0.000000 0.000000
          907  +vt 0.000000 0.000000
          908  +vt 0.000000 0.000000
          909  +vt 0.000000 0.000000
          910  +vt 0.000000 0.000000
          911  +vt 0.000000 0.000000
          912  +vt 0.000000 0.000000
          913  +vt 0.000000 0.000000
          914  +vt 0.000000 0.000000
          915  +vt 0.000000 0.000000
          916  +vt 0.000000 0.000000
          917  +vt 0.321518 0.424988
          918  +vt 0.321736 0.424778
          919  +vt 0.000000 0.000000
          920  +vt 0.000000 0.000000
          921  +vt 0.000000 0.000000
          922  +vt 0.000000 0.000000
          923  +vn -0.8200 -0.0000 -0.5724
          924  +vn 0.9159 0.0000 0.4014
          925  +vn -0.6926 0.0000 -0.7214
          926  +vn 0.9766 -0.0000 0.2150
          927  +vn 0.9998 -0.0000 0.0204
          928  +vn -0.9159 0.0000 -0.4014
          929  +vn 0.9846 0.0000 -0.1751
          930  +vn -0.9766 0.0000 -0.2150
          931  +vn 0.9315 -0.0000 -0.3638
          932  +vn -0.9998 0.0000 -0.0204
          933  +vn 0.8426 0.0000 -0.5385
          934  +vn -0.9846 0.0000 0.1751
          935  +vn 0.7214 0.0000 -0.6926
          936  +vn -0.9315 -0.0000 0.3638
          937  +vn 0.5724 0.0000 -0.8200
          938  +vn -0.8426 -0.0000 0.5385
          939  +vn 0.4014 0.0000 -0.9159
          940  +vn 0.1751 -0.0000 0.9846
          941  +vn -0.7214 0.0000 0.6926
          942  +vn 0.2150 -0.0000 -0.9766
          943  +vn 0.3638 -0.0000 0.9315
          944  +vn -0.5724 0.0000 0.8200
          945  +vn 0.0203 -0.0000 -0.9998
          946  +vn 0.5385 -0.0000 0.8426
          947  +vn -0.4014 0.0000 0.9159
          948  +vn -0.1751 0.0000 -0.9846
          949  +vn 0.6926 0.0000 0.7214
          950  +vn -0.2150 0.0000 0.9766
          951  +vn -0.3638 0.0000 -0.9315
          952  +vn 0.8200 -0.0000 0.5724
          953  +vn -0.0204 -0.0000 0.9998
          954  +vn -0.5385 0.0000 -0.8426
          955  +vn -0.0000 -1.0000 -0.0000
          956  +vn 0.0000 1.0000 0.0000
          957  +vn 0.6211 0.6395 0.4531
          958  +vn -0.4502 -0.4692 -0.7597
          959  +vn 0.6722 0.6892 0.2705
          960  +vn -0.5461 -0.5652 -0.6183
          961  +vn 0.6975 0.7124 0.0775
          962  +vn -0.6211 -0.6395 -0.4531
          963  +vn 0.6960 0.7082 -0.1185
          964  +vn -0.6722 -0.6892 -0.2705
          965  +vn 0.6677 0.6768 -0.3100
          966  +vn -0.6975 -0.7124 -0.0775
          967  +vn 0.6138 0.6194 -0.4895
          968  +vn -0.6960 -0.7082 0.1185
          969  +vn 0.5362 0.5382 -0.6502
          970  +vn -0.6677 -0.6768 0.3100
          971  +vn 0.4381 0.4364 -0.7859
          972  +vn -0.6138 -0.6194 0.4895
          973  +vn 0.3232 0.3177 -0.8914
          974  +vn 0.0764 0.0911 0.9929
          975  +vn -0.5362 -0.5382 0.6502
          976  +vn 0.1958 0.1868 -0.9627
          977  +vn 0.2107 0.2275 0.9507
          978  +vn -0.4381 -0.4364 0.7859
          979  +vn 0.0609 0.0488 -0.9970
          980  +vn 0.3369 0.3552 0.8720
          981  +vn -0.3232 -0.3177 0.8914
          982  +vn -0.0764 -0.0911 -0.9929
          983  +vn 0.4502 0.4692 0.7597
          984  +vn -0.1958 -0.1868 0.9627
          985  +vn -0.2107 -0.2275 -0.9507
          986  +vn 0.5461 0.5652 0.6183
          987  +vn -0.0609 -0.0488 0.9970
          988  +vn -0.3369 -0.3552 -0.8720
          989  +vn 0.7140 -0.7001 0.0093
          990  +vn 0.0704 -0.0783 0.9944
          991  +vn -0.7140 0.7001 -0.0093
          992  +vn -0.5879 0.6528 0.4778
          993  +vn 0.4208 -0.4672 -0.7776
          994  +vn -0.6389 0.7095 0.2973
          995  +vn 0.5142 -0.5709 -0.6400
          996  +vn -0.6655 0.7390 0.1053
          997  +vn 0.5879 -0.6528 -0.4778
          998  +vn -0.6664 0.7400 -0.0907
          999  +vn 0.6389 -0.7095 -0.2973
         1000  +vn -0.6417 0.7127 -0.2833
         1001  +vn 0.6655 -0.7390 -0.1053
         1002  +vn -0.5924 0.6579 -0.4649
         1003  +vn 0.6664 -0.7401 0.0907
         1004  +vn -0.5203 0.5779 -0.6287
         1005  +vn 0.6417 -0.7127 0.2833
         1006  +vn -0.4282 0.4757 -0.7683
         1007  +vn 0.5924 -0.6579 0.4649
         1008  +vn -0.3197 0.3551 -0.8784
         1009  +vn -0.0608 0.0674 0.9959
         1010  +vn 0.5203 -0.5779 0.6287
         1011  +vn -0.1989 0.2210 -0.9548
         1012  +vn -0.1896 0.2104 0.9590
         1013  +vn 0.4282 -0.4757 0.7683
         1014  +vn -0.0704 0.0783 -0.9944
         1015  +vn -0.3112 0.3454 0.8854
         1016  +vn 0.3197 -0.3551 0.8784
         1017  +vn 0.0608 -0.0674 -0.9959
         1018  +vn -0.4208 0.4672 0.7776
         1019  +vn 0.1989 -0.2210 0.9548
         1020  +vn 0.1896 -0.2105 -0.9590
         1021  +vn -0.5142 0.5709 0.6400
         1022  +vn 0.3112 -0.3454 -0.8854
         1023  +vn 0.4283 -0.4757 0.7683
         1024  +vn -0.1896 0.2105 0.9590
         1025  +vn 0.7431 0.6692 0.0001
         1026  +vn -0.7431 -0.6692 -0.0001
         1027  +vn -0.0433 0.0403 0.9982
         1028  +g steel_steel_steel
         1029  +usemtl steel
         1030  +s off
         1031  +f 6/1/1 5/2/1 37/3/1 38/4/1
         1032  +f 71/5/2 103/6/2 102/7/2 70/8/2
         1033  +f 85/9/3 117/10/3 116/11/3 84/12/3
         1034  +f 72/13/4 104/14/4 103/6/4 71/5/4
         1035  +f 86/15/1 118/16/1 117/17/1 85/18/1
         1036  +f 73/19/5 105/20/5 104/14/5 72/13/5
         1037  +f 87/21/6 119/22/6 118/16/6 86/15/6
         1038  +f 74/23/7 106/24/7 105/20/7 73/19/7
         1039  +f 88/25/8 120/26/8 119/22/8 87/21/8
         1040  +f 75/27/9 107/28/9 106/24/9 74/23/9
         1041  +f 89/29/10 121/30/10 120/26/10 88/25/10
         1042  +f 76/31/11 108/32/11 107/28/11 75/27/11
         1043  +f 90/33/12 122/34/12 121/30/12 89/29/12
         1044  +f 77/35/13 109/36/13 108/32/13 76/31/13
         1045  +f 91/37/14 123/38/14 122/34/14 90/33/14
         1046  +f 78/39/15 110/40/15 109/36/15 77/35/15
         1047  +f 92/41/16 124/42/16 123/38/16 91/37/16
         1048  +f 79/43/17 111/44/17 110/40/17 78/39/17
         1049  +f 66/45/18 98/46/18 97/47/18 65/48/18
         1050  +f 93/49/19 125/50/19 124/42/19 92/41/19
         1051  +f 80/51/20 112/52/20 111/44/20 79/43/20
         1052  +f 67/53/21 99/54/21 98/46/21 66/45/21
         1053  +f 94/55/22 126/56/22 125/50/22 93/49/22
         1054  +f 81/57/23 113/58/23 112/52/23 80/51/23
         1055  +f 68/59/24 100/60/24 99/54/24 67/53/24
         1056  +f 95/61/25 127/62/25 126/56/25 94/55/25
         1057  +f 82/63/26 114/64/26 113/58/26 81/57/26
         1058  +f 69/65/27 101/66/27 100/60/27 68/59/27
         1059  +f 96/67/28 128/68/28 127/62/28 95/61/28
         1060  +f 83/69/29 115/70/29 114/64/29 82/63/29
         1061  +f 70/8/30 102/7/30 101/71/30 69/72/30
         1062  +f 65/48/31 97/47/31 128/68/31 96/67/31
         1063  +f 84/12/32 116/11/32 115/70/32 83/69/32
         1064  +f 1/73/33 2/74/33 66/75/33 65/76/33
         1065  +f 2/74/33 3/77/33 67/78/33 66/75/33
         1066  +f 3/77/33 4/79/33 68/80/33 67/78/33
         1067  +f 4/79/33 5/81/33 69/82/33 68/80/33
         1068  +f 5/81/33 6/83/33 70/84/33 69/82/33
         1069  +f 6/83/33 7/85/33 71/86/33 70/84/33
         1070  +f 7/85/33 8/87/33 72/88/33 71/86/33
         1071  +f 8/87/33 9/89/33 73/90/33 72/88/33
         1072  +f 9/89/33 10/91/33 74/92/33 73/90/33
         1073  +f 10/91/33 11/93/33 75/94/33 74/92/33
         1074  +f 11/93/33 12/95/33 76/96/33 75/94/33
         1075  +f 12/95/33 13/97/33 77/98/33 76/96/33
         1076  +f 13/97/33 14/99/33 78/100/33 77/98/33
         1077  +f 14/99/33 15/101/33 79/102/33 78/100/33
         1078  +f 15/101/33 16/103/33 80/104/33 79/102/33
         1079  +f 16/103/33 17/105/33 81/106/33 80/104/33
         1080  +f 17/105/33 18/107/33 82/108/33 81/106/33
         1081  +f 18/107/33 19/109/33 83/110/33 82/108/33
         1082  +f 19/109/33 20/111/33 84/112/33 83/110/33
         1083  +f 20/111/33 21/113/33 85/114/33 84/112/33
         1084  +f 21/113/33 22/115/33 86/116/33 85/114/33
         1085  +f 22/115/33 23/117/33 87/118/33 86/116/33
         1086  +f 23/117/33 24/119/33 88/120/33 87/118/33
         1087  +f 24/119/33 25/121/33 89/122/33 88/120/33
         1088  +f 25/121/33 26/123/33 90/124/33 89/122/33
         1089  +f 26/123/33 27/125/33 91/126/33 90/124/33
         1090  +f 27/125/33 28/127/33 92/128/33 91/126/33
         1091  +f 28/127/33 29/129/33 93/130/33 92/128/33
         1092  +f 29/129/33 30/131/33 94/132/33 93/130/33
         1093  +f 30/131/33 31/133/33 95/134/33 94/132/33
         1094  +f 31/133/33 32/135/33 96/136/33 95/134/33
         1095  +f 32/135/33 1/73/33 65/76/33 96/136/33
         1096  +f 34/137/34 33/138/34 97/139/34 98/140/34
         1097  +f 35/141/34 34/137/34 98/140/34 99/142/34
         1098  +f 36/143/34 35/141/34 99/142/34 100/144/34
         1099  +f 37/145/34 36/143/34 100/144/34 101/146/34
         1100  +f 38/147/34 37/145/34 101/146/34 102/148/34
         1101  +f 40/149/34 39/150/34 103/151/34 104/152/34
         1102  +f 41/153/34 40/149/34 104/152/34 105/154/34
         1103  +f 42/155/34 41/153/34 105/154/34 106/156/34
         1104  +f 43/157/34 42/155/34 106/156/34 107/158/34
         1105  +f 45/159/34 44/160/34 108/161/34 109/162/34
         1106  +f 46/163/34 45/159/34 109/162/34 110/164/34
         1107  +f 47/165/34 46/163/34 110/164/34 111/166/34
         1108  +f 48/167/34 47/165/34 111/166/34 112/168/34
         1109  +f 49/169/34 48/167/34 112/168/34 113/170/34
         1110  +f 50/171/34 49/169/34 113/170/34 114/172/34
         1111  +f 51/173/34 50/171/34 114/172/34 115/174/34
         1112  +f 52/175/34 51/173/34 115/174/34 116/176/34
         1113  +f 53/177/34 52/175/34 116/176/34 117/178/34
         1114  +f 54/179/34 53/177/34 117/178/34 118/180/34
         1115  +f 56/181/34 55/182/34 119/183/34 120/184/34
         1116  +f 57/185/34 56/181/34 120/184/34 121/186/34
         1117  +f 58/187/34 57/185/34 121/186/34 122/188/34
         1118  +f 59/189/34 58/187/34 122/188/34 123/190/34
         1119  +f 61/191/34 60/192/34 124/193/34 125/194/34
         1120  +f 62/195/34 61/191/34 125/194/34 126/196/34
         1121  +f 63/197/34 62/195/34 126/196/34 127/198/34
         1122  +f 64/199/34 63/197/34 127/198/34 128/200/34
         1123  +f 33/138/34 64/199/34 128/200/34 97/139/34
         1124  +f 135/201/35 134/202/35 166/203/35 167/204/35
         1125  +f 149/205/36 148/206/36 180/207/36 181/208/36
         1126  +f 136/209/37 135/210/37 167/211/37 168/212/37
         1127  +f 150/213/38 149/205/38 181/208/38 182/214/38
         1128  +f 137/215/39 136/209/39 168/212/39 169/216/39
         1129  +f 151/217/40 150/213/40 182/214/40 183/218/40
         1130  +f 138/219/41 137/215/41 169/216/41 170/220/41
         1131  +f 152/221/42 151/217/42 183/218/42 184/222/42
         1132  +f 139/223/43 138/219/43 170/220/43 171/224/43
         1133  +f 153/225/44 152/221/44 184/222/44 185/226/44
         1134  +f 140/227/45 139/223/45 171/224/45 172/228/45
         1135  +f 154/229/46 153/225/46 185/226/46 186/230/46
         1136  +f 141/231/47 140/227/47 172/228/47 173/232/47
         1137  +f 155/233/48 154/229/48 186/230/48 187/234/48
         1138  +f 142/235/49 141/231/49 173/232/49 174/236/49
         1139  +f 156/237/50 155/233/50 187/234/50 188/238/50
         1140  +f 143/239/51 142/235/51 174/236/51 175/240/51
         1141  +f 130/241/52 129/242/52 161/243/52 162/244/52
         1142  +f 157/245/53 156/237/53 188/238/53 189/246/53
         1143  +f 144/247/54 143/239/54 175/240/54 176/248/54
         1144  +f 131/249/55 130/241/55 162/244/55 163/250/55
         1145  +f 158/251/56 157/245/56 189/246/56 190/252/56
         1146  +f 145/253/57 386/254/57 144/247/57 176/248/57 177/255/57
         1147  +f 132/256/58 131/249/58 163/250/58 164/257/58
         1148  +f 159/258/59 158/251/59 190/252/59 191/259/59
         1149  +f 146/260/60 387/261/60 145/253/60 177/255/60 178/262/60
         1150  +f 133/263/61 132/256/61 164/257/61 165/264/61
         1151  +f 160/265/62 159/258/62 191/259/62 192/266/62
         1152  +f 147/267/63 146/260/63 178/262/63 179/268/63
         1153  +f 134/202/64 133/263/64 165/264/64 166/203/64
         1154  +f 129/242/65 160/265/65 192/266/65 161/243/65
         1155  +f 148/206/66 147/267/66 179/268/66 180/207/66
         1156  +f 199/269/40 231/270/40 230/271/40 198/272/40
         1157  +f 213/273/61 245/274/61 244/275/61 212/276/61
         1158  +f 200/277/42 232/278/42 231/279/42 199/280/42
         1159  +f 214/281/64 246/282/64 245/274/64 213/273/64
         1160  +f 201/283/44 233/284/44 232/278/44 200/277/44
         1161  +f 215/285/35 247/286/35 246/282/35 214/281/35
         1162  +f 202/287/46 234/288/46 233/284/46 201/283/46
         1163  +f 216/289/37 248/290/37 247/286/37 215/285/37
         1164  +f 203/291/48 235/292/48 234/288/48 202/287/48
         1165  +f 217/293/39 249/294/39 248/290/39 216/289/39
         1166  +f 204/295/50 236/296/50 235/292/50 203/291/50
         1167  +f 218/297/41 250/298/41 249/294/41 217/293/41
         1168  +f 205/299/53 237/300/53 236/296/53 204/295/53
         1169  +f 219/301/43 251/302/43 250/298/43 218/297/43
         1170  +f 206/303/56 238/304/56 237/300/56 205/299/56
         1171  +f 220/305/45 252/306/45 251/302/45 219/301/45
         1172  +f 207/307/59 239/308/59 238/304/59 206/303/59
         1173  +f 194/309/60 226/310/60 225/311/60 193/312/60
         1174  +f 221/313/47 253/314/47 252/306/47 220/305/47
         1175  +f 208/315/62 240/316/62 239/308/62 207/307/62
         1176  +f 195/317/63 227/318/63 226/310/63 194/309/63
         1177  +f 222/319/49 254/320/49 253/314/49 221/313/49
         1178  +f 209/321/65 241/322/65 240/316/65 208/315/65
         1179  +f 196/323/66 228/324/66 227/318/66 195/317/66
         1180  +f 223/325/51 255/326/51 254/320/51 222/319/51
         1181  +f 210/327/52 242/328/52 241/322/52 209/321/52
         1182  +f 197/329/36 229/330/36 228/324/36 196/323/36
         1183  +f 224/331/54 256/332/54 255/326/54 223/325/54
         1184  +f 211/333/55 243/334/55 242/328/55 210/327/55
         1185  +f 198/272/38 230/271/38 229/330/38 197/329/38
         1186  +f 193/312/57 225/311/57 256/332/57 224/331/57
         1187  +f 212/276/58 244/275/58 243/334/58 211/333/58
         1188  +f 129/242/67 130/241/67 194/309/67 193/312/67
         1189  +f 130/241/67 131/249/67 195/317/67 194/309/67
         1190  +f 131/249/67 132/256/67 196/323/67 195/317/67
         1191  +f 132/256/67 133/263/67 197/329/67 196/323/67
         1192  +f 133/263/67 134/202/67 198/272/67 197/329/67
         1193  +f 134/202/67 135/201/67 199/269/67 198/272/67
         1194  +f 135/210/67 136/209/67 200/277/67 199/280/67
         1195  +f 136/209/67 137/215/67 201/283/67 200/277/67
         1196  +f 137/215/67 138/219/67 202/287/67 201/283/67
         1197  +f 138/219/67 139/223/67 203/291/67 202/287/67
         1198  +f 139/223/67 140/227/67 204/295/67 203/291/67
         1199  +f 140/227/67 141/231/67 205/299/67 204/295/67
         1200  +f 141/231/67 142/235/67 206/303/67 205/299/67
         1201  +f 142/235/67 143/239/67 207/307/67 206/303/67
         1202  +f 143/239/67 144/247/67 208/315/67 207/307/67
         1203  +f 384/335/68 367/336/68 336/337/68 383/338/68
         1204  +f 146/260/67 147/267/67 211/333/67 210/327/67
         1205  +f 147/267/67 148/206/67 212/276/67 211/333/67
         1206  +f 148/206/67 149/205/67 213/273/67 212/276/67
         1207  +f 149/205/67 150/213/67 214/281/67 213/273/67
         1208  +f 150/213/67 151/217/67 215/285/67 214/281/67
         1209  +f 151/217/67 152/221/67 216/289/67 215/285/67
         1210  +f 152/221/67 153/225/67 217/293/67 216/289/67
         1211  +f 153/225/67 154/229/67 218/297/67 217/293/67
         1212  +f 154/229/67 155/233/67 219/301/67 218/297/67
         1213  +f 155/233/67 156/237/67 220/305/67 219/301/67
         1214  +f 156/237/67 157/245/67 221/313/67 220/305/67
         1215  +f 157/245/67 158/251/67 222/319/67 221/313/67
         1216  +f 158/251/67 159/258/67 223/325/67 222/319/67
         1217  +f 159/258/67 160/265/67 224/331/67 223/325/67
         1218  +f 160/265/67 129/242/67 193/312/67 224/331/67
         1219  +f 162/244/69 161/243/69 225/311/69 226/310/69
         1220  +f 163/250/69 162/244/69 226/310/69 227/318/69
         1221  +f 164/257/69 163/250/69 227/318/69 228/324/69
         1222  +f 165/264/69 164/257/69 228/324/69 229/330/69
         1223  +f 166/203/69 165/264/69 229/330/69 230/271/69
         1224  +f 167/204/69 166/203/69 230/271/69 231/270/69
         1225  +f 168/212/69 167/211/69 231/279/69 232/278/69
         1226  +f 169/216/69 168/212/69 232/278/69 233/284/69
         1227  +f 170/220/69 169/216/69 233/284/69 234/288/69
         1228  +f 171/224/69 170/220/69 234/288/69 235/292/69
         1229  +f 172/228/69 171/224/69 235/292/69 236/296/69
         1230  +f 173/232/69 172/228/69 236/296/69 237/300/69
         1231  +f 174/236/69 173/232/69 237/300/69 238/304/69
         1232  +f 175/240/69 174/236/69 238/304/69 239/308/69
         1233  +f 176/248/69 175/240/69 239/308/69 240/316/69
         1234  +f 177/255/69 176/248/69 240/316/69 241/322/69
         1235  +f 178/262/69 177/255/69 241/322/69 242/328/69
         1236  +f 179/268/69 178/262/69 242/328/69 243/334/69
         1237  +f 180/207/69 179/268/69 243/334/69 244/275/69
         1238  +f 181/208/69 180/207/69 244/275/69 245/274/69
         1239  +f 182/214/69 181/208/69 245/274/69 246/282/69
         1240  +f 183/218/69 182/214/69 246/282/69 247/286/69
         1241  +f 184/222/69 183/218/69 247/286/69 248/290/69
         1242  +f 185/226/69 184/222/69 248/290/69 249/294/69
         1243  +f 186/230/69 185/226/69 249/294/69 250/298/69
         1244  +f 187/234/69 186/230/69 250/298/69 251/302/69
         1245  +f 188/238/69 187/234/69 251/302/69 252/306/69
         1246  +f 189/246/69 188/238/69 252/306/69 253/314/69
         1247  +f 190/252/69 189/246/69 253/314/69 254/320/69
         1248  +f 191/259/69 190/252/69 254/320/69 255/326/69
         1249  +f 192/266/69 191/259/69 255/326/69 256/332/69
         1250  +f 161/243/69 192/266/69 256/332/69 225/311/69
         1251  +f 263/339/70 262/340/70 294/341/70 295/342/70
         1252  +f 277/343/71 276/344/71 308/345/71 309/346/71
         1253  +f 264/347/72 263/348/72 295/349/72 296/350/72
         1254  +f 278/351/73 277/343/73 309/346/73 310/352/73
         1255  +f 265/353/74 264/347/74 296/350/74 297/354/74
         1256  +f 279/355/75 278/351/75 310/352/75 311/356/75
         1257  +f 266/357/76 265/353/76 297/354/76 298/358/76
         1258  +f 280/359/77 279/355/77 311/356/77 312/360/77
         1259  +f 267/361/78 266/357/78 298/358/78 299/362/78
         1260  +f 281/363/79 280/359/79 312/360/79 313/364/79
         1261  +f 268/365/80 267/361/80 299/362/80 300/366/80
         1262  +f 282/367/81 281/363/81 313/364/81 314/368/81
         1263  +f 269/369/82 268/365/82 300/366/82 301/370/82
         1264  +f 283/371/83 282/367/83 314/368/83 315/372/83
         1265  +f 270/373/84 269/369/84 301/370/84 302/374/84
         1266  +f 284/375/85 283/371/85 315/372/85 316/376/85
         1267  +f 271/377/86 270/373/86 302/374/86 303/378/86
         1268  +f 258/379/87 257/380/87 289/381/87 290/382/87
         1269  +f 285/383/88 284/375/88 316/376/88 317/384/88
         1270  +f 272/385/89 271/377/89 303/378/89 304/386/89
         1271  +f 259/387/90 258/379/90 290/382/90 291/388/90
         1272  +f 286/389/91 285/383/91 317/384/91 318/390/91
         1273  +f 273/391/92 272/385/92 304/386/92 385/392/92 305/393/92
         1274  +f 260/394/93 259/387/93 291/388/93 292/395/93
         1275  +f 287/396/94 286/389/94 318/390/94 319/397/94
         1276  +f 274/398/95 273/391/95 305/393/95 306/399/95
         1277  +f 261/400/96 260/394/96 292/395/96 293/401/96
         1278  +f 288/402/97 287/396/97 319/397/97 320/403/97
         1279  +f 275/404/98 274/398/98 306/399/98 307/405/98
         1280  +f 262/340/99 261/400/99 293/401/99 294/341/99
         1281  +f 257/380/68 288/402/68 320/403/68 289/381/68
         1282  +f 276/344/100 275/404/100 307/405/100 308/345/100
         1283  +f 327/406/75 358/407/75 357/408/75 326/409/75
         1284  +f 340/410/96 371/411/96 370/412/96 339/413/96
         1285  +f 328/414/77 359/415/77 358/416/77 327/417/77
         1286  +f 341/418/99 372/419/99 371/411/99 340/410/99
         1287  +f 329/420/79 360/421/79 359/415/79 328/414/79
         1288  +f 342/422/70 373/423/70 372/419/70 341/418/70
         1289  +f 330/424/81 361/425/81 360/421/81 329/420/81
         1290  +f 343/426/72 374/427/72 373/423/72 342/422/72
         1291  +f 331/428/83 362/429/83 361/425/83 330/424/83
         1292  +f 344/430/74 375/431/74 374/427/74 343/426/74
         1293  +f 332/432/85 363/433/85 362/429/85 331/428/85
         1294  +f 345/434/76 376/435/76 375/431/76 344/430/76
         1295  +f 333/436/88 364/437/88 363/433/88 332/432/88
         1296  +f 346/438/78 377/439/78 376/435/78 345/434/78
         1297  +f 334/440/101 365/441/101 364/437/101 333/436/101
         1298  +f 347/442/80 378/443/80 377/439/80 346/438/80
         1299  +f 335/444/94 366/445/94 365/441/94 334/440/94
         1300  +f 322/446/95 353/447/95 352/448/95 321/449/95
         1301  +f 348/450/82 379/451/82 378/443/82 347/442/82
         1302  +f 336/337/97 367/336/97 366/445/97 335/444/97
         1303  +f 323/452/98 354/453/98 353/447/98 322/446/98
         1304  +f 349/454/84 380/455/84 379/451/84 348/450/84
         1305  +f 324/456/100 355/457/100 354/453/100 323/452/100
         1306  +f 350/458/86 381/459/86 380/455/86 349/454/86
         1307  +f 325/460/71 356/461/71 355/457/71 324/456/71
         1308  +f 351/462/89 382/463/89 381/459/89 350/458/89
         1309  +f 338/464/102 369/465/102 368/466/102 337/467/102
         1310  +f 326/409/73 357/408/73 356/461/73 325/460/73
         1311  +f 321/449/92 352/448/92 382/463/92 351/462/92
         1312  +f 339/413/93 370/412/93 369/465/93 338/464/93
         1313  +f 257/380/103 258/379/103 322/446/103 321/449/103
         1314  +f 258/379/103 259/387/103 323/452/103 322/446/103
         1315  +f 259/387/103 260/394/103 324/456/103 323/452/103
         1316  +f 260/394/103 261/400/103 325/460/103 324/456/103
         1317  +f 261/400/103 262/340/103 326/409/103 325/460/103
         1318  +f 262/340/103 263/339/103 327/406/103 326/409/103
         1319  +f 263/348/103 264/347/103 328/414/103 327/417/103
         1320  +f 264/347/103 265/353/103 329/420/103 328/414/103
         1321  +f 265/353/103 266/357/103 330/424/103 329/420/103
         1322  +f 266/357/103 267/361/103 331/428/103 330/424/103
         1323  +f 267/361/103 268/365/103 332/432/103 331/428/103
         1324  +f 268/365/103 269/369/103 333/436/103 332/432/103
         1325  +f 269/369/103 270/373/103 334/440/103 333/436/103
         1326  +f 270/373/103 271/377/103 335/444/103 334/440/103
         1327  +f 271/377/103 272/385/103 336/337/103 335/444/103
         1328  +f 336/337/103 272/385/103 387/261/103 383/338/103
         1329  +f 274/398/103 275/404/103 338/464/103 337/467/103
         1330  +f 275/404/103 276/344/103 339/413/103 338/464/103
         1331  +f 276/344/103 277/343/103 340/410/103 339/413/103
         1332  +f 277/343/103 278/351/103 341/418/103 340/410/103
         1333  +f 278/351/103 279/355/103 342/422/103 341/418/103
         1334  +f 279/355/103 280/359/103 343/426/103 342/422/103
         1335  +f 280/359/103 281/363/103 344/430/103 343/426/103
         1336  +f 281/363/103 282/367/103 345/434/103 344/430/103
         1337  +f 282/367/103 283/371/103 346/438/103 345/434/103
         1338  +f 283/371/103 284/375/103 347/442/103 346/438/103
         1339  +f 284/375/103 285/383/103 348/450/103 347/442/103
         1340  +f 285/383/103 286/389/103 349/454/103 348/450/103
         1341  +f 286/389/103 287/396/103 350/458/103 349/454/103
         1342  +f 287/396/103 288/402/103 351/462/103 350/458/103
         1343  +f 288/402/103 257/380/103 321/449/103 351/462/103
         1344  +f 290/382/104 289/381/104 352/448/104 353/447/104
         1345  +f 291/388/104 290/382/104 353/447/104 354/453/104
         1346  +f 292/395/104 291/388/104 354/453/104 355/457/104
         1347  +f 293/401/104 292/395/104 355/457/104 356/461/104
         1348  +f 294/341/104 293/401/104 356/461/104 357/408/104
         1349  +f 295/342/104 294/341/104 357/408/104 358/407/104
         1350  +f 296/350/104 295/349/104 358/416/104 359/415/104
         1351  +f 297/354/104 296/350/104 359/415/104 360/421/104
         1352  +f 298/358/104 297/354/104 360/421/104 361/425/104
         1353  +f 299/362/104 298/358/104 361/425/104 362/429/104
         1354  +f 300/366/104 299/362/104 362/429/104 363/433/104
         1355  +f 301/370/104 300/366/104 363/433/104 364/437/104
         1356  +f 302/374/104 301/370/104 364/437/104 365/441/104
         1357  +f 303/378/104 302/374/104 365/441/104 366/445/104
         1358  +f 304/386/104 303/378/104 366/445/104 367/336/104
         1359  +f 307/405/104 306/399/104 368/466/104 369/465/104
         1360  +f 308/345/104 307/405/104 369/465/104 370/412/104
         1361  +f 309/346/104 308/345/104 370/412/104 371/411/104
         1362  +f 310/352/104 309/346/104 371/411/104 372/419/104
         1363  +f 311/356/104 310/352/104 372/419/104 373/423/104
         1364  +f 312/360/104 311/356/104 373/423/104 374/427/104
         1365  +f 313/364/104 312/360/104 374/427/104 375/431/104
         1366  +f 314/368/104 313/364/104 375/431/104 376/435/104
         1367  +f 315/372/104 314/368/104 376/435/104 377/439/104
         1368  +f 316/376/104 315/372/104 377/439/104 378/443/104
         1369  +f 317/384/104 316/376/104 378/443/104 379/451/104
         1370  +f 318/390/104 317/384/104 379/451/104 380/455/104
         1371  +f 319/397/104 318/390/104 380/455/104 381/459/104
         1372  +f 320/403/104 319/397/104 381/459/104 382/463/104
         1373  +f 289/381/104 320/403/104 382/463/104 352/448/104
         1374  +f 103/151/34 39/150/34 38/147/34 102/148/34
         1375  +f 108/161/34 44/160/34 43/157/34 107/158/34
         1376  +f 124/193/34 60/192/34 59/189/34 123/190/34
         1377  +f 119/183/34 55/182/34 54/179/34 118/180/34
         1378  +f 14/468/22 13/469/22 45/470/22 46/471/22
         1379  +f 44/472/11 43/473/11 11/474/11 12/475/11
         1380  +f 9/89/12 41/153/12 42/155/12 10/476/12
         1381  +f 43/473/9 42/477/9 10/476/9 11/474/9
         1382  +f 29/478/22 30/479/22 62/480/22 61/481/22
         1383  +f 62/480/25 30/479/25 31/482/25 63/483/25
         1384  +f 6/484/2 7/485/2 39/486/2 38/487/2
         1385  +f 4/488/27 5/489/27 37/490/27 36/491/27
         1386  +f 15/492/25 14/468/25 46/471/25 47/493/25
         1387  +f 2/494/21 3/495/21 35/496/21 34/497/21
         1388  +f 22/498/30 21/499/30 53/500/30 54/501/30
         1389  +f 17/502/31 16/503/31 48/504/31 49/505/31
         1390  +f 32/506/31 1/507/31 33/508/31 64/509/31
         1391  +f 29/478/13 28/510/13 60/511/13 61/481/13
         1392  +f 12/475/13 13/469/13 45/470/13 44/472/13
         1393  +f 63/483/28 31/482/28 32/506/28 64/509/28
         1394  +f 19/512/21 18/513/21 50/514/21 51/515/21
         1395  +f 20/516/24 19/512/24 51/515/24 52/517/24
         1396  +f 28/510/11 27/518/11 59/519/11 60/511/11
         1397  +f 21/499/27 20/516/27 52/517/27 53/500/27
         1398  +f 24/520/4 23/521/4 55/522/4 56/523/4
         1399  +f 35/496/24 3/495/24 4/488/24 36/491/24
         1400  +f 49/505/18 50/514/18 18/513/18 17/502/18
         1401  +f 8/524/4 40/525/4 39/486/4 7/485/4
         1402  +f 48/504/28 16/503/28 15/492/28 47/493/28
         1403  +f 33/508/18 1/507/18 2/494/18 34/497/18
         1404  +f 23/521/2 22/498/2 54/501/2 55/522/2
         1405  +f 26/123/9 58/187/9 59/189/9 27/518/9
         1406  +f 25/121/7 57/185/7 58/187/7 26/123/7
         1407  +f 24/520/5 56/523/5 57/185/5 25/121/5
         1408  +f 8/524/10 40/525/10 41/153/10 9/89/10
         1409  +f 208/315/67 144/247/67 385/526/67 384/527/67
         1410  +f 384/335/104 385/392/104 304/386/104 367/336/104
         1411  +f 208/315/67 384/527/67 209/321/67
         1412  +f 384/527/67 383/338/67 209/321/67
         1413  +f 209/321/67 383/338/67 210/327/67
         1414  +f 210/327/67 383/338/67 387/261/67 146/260/67
         1415  +f 368/466/105 384/335/105 383/338/105 337/467/105
         1416  +f 306/528/104 385/529/104 384/530/104 368/531/104
         1417  +f 273/391/103 274/398/103 337/467/103
         1418  +f 337/467/103 383/338/103 273/391/103
         1419  +f 387/261/103 273/391/103 383/338/103
         1420  +o bronze
         1421  +v 0.173510 -0.188755 -0.202857
         1422  +v 0.076886 -0.221335 -0.228002
         1423  +v -0.017971 -0.231176 -0.230477
         1424  +v -0.111298 -0.221335 -0.213328
         1425  +v 0.203459 -0.094377 -0.237871
         1426  +v 0.088018 -0.110667 -0.294772
         1427  +v -0.023774 -0.115588 -0.304892
         1428  +v -0.132646 -0.110667 -0.277566
         1429  +v 0.212506 0.000000 -0.248448
         1430  +v 0.091465 -0.000000 -0.313878
         1431  +v -0.025415 -0.000000 -0.325944
         1432  +v -0.139012 0.000000 -0.295907
         1433  +v 0.203459 0.094377 -0.237871
         1434  +v 0.088018 0.110667 -0.294772
         1435  +v -0.023774 0.115588 -0.304892
         1436  +v -0.132646 0.110667 -0.277566
         1437  +v -0.202857 -0.188755 -0.173510
         1438  +v -0.228002 -0.221335 -0.076886
         1439  +v -0.230477 -0.231176 0.017971
         1440  +v -0.213328 -0.221335 0.111298
         1441  +v -0.237871 -0.094377 -0.203459
         1442  +v -0.294772 -0.110667 -0.088018
         1443  +v -0.304892 -0.115588 0.023774
         1444  +v -0.277566 -0.110667 0.132646
         1445  +v -0.248448 -0.000000 -0.212506
         1446  +v -0.313878 0.000000 -0.091465
         1447  +v -0.325944 0.000000 0.025415
         1448  +v -0.295907 0.000000 0.139012
         1449  +v -0.237871 0.094377 -0.203459
         1450  +v -0.294772 0.110667 -0.088018
         1451  +v -0.304892 0.115588 0.023774
         1452  +v -0.277566 0.110667 0.132646
         1453  +v -0.173510 -0.188755 0.202857
         1454  +v -0.076886 -0.221335 0.228002
         1455  +v 0.017971 -0.231176 0.230477
         1456  +v 0.111298 -0.221335 0.213328
         1457  +v -0.203459 -0.094377 0.237871
         1458  +v -0.088018 -0.110667 0.294772
         1459  +v 0.023774 -0.115588 0.304892
         1460  +v 0.132646 -0.110667 0.277566
         1461  +v -0.212506 -0.000000 0.248448
         1462  +v -0.091465 0.000000 0.313878
         1463  +v 0.025415 0.000000 0.325944
         1464  +v 0.139012 -0.000000 0.295907
         1465  +v -0.203459 0.094377 0.237871
         1466  +v -0.088018 0.110667 0.294772
         1467  +v 0.023774 0.115588 0.304892
         1468  +v 0.132646 0.110667 0.277566
         1469  +v 0.202857 -0.188755 0.173510
         1470  +v 0.228002 -0.221335 0.076886
         1471  +v 0.230477 -0.231176 -0.017971
         1472  +v 0.213328 -0.221335 -0.111298
         1473  +v 0.237871 -0.094377 0.203459
         1474  +v 0.294772 -0.110667 0.088018
         1475  +v 0.304892 -0.115588 -0.023774
         1476  +v 0.277566 -0.110667 -0.132646
         1477  +v 0.248448 0.000000 0.212506
         1478  +v 0.313878 -0.000000 0.091465
         1479  +v 0.325944 0.000000 -0.025415
         1480  +v 0.295907 -0.000000 -0.139012
         1481  +v 0.237871 0.094377 0.203459
         1482  +v 0.294772 0.110667 0.088018
         1483  +v 0.304892 0.115588 -0.023774
         1484  +v 0.277566 0.110667 -0.132646
         1485  +v 0.118936 -0.287038 0.101729
         1486  +v 0.008986 -0.305818 0.115238
         1487  +v -0.101729 -0.287038 0.118936
         1488  +v 0.115238 -0.305818 -0.008986
         1489  +v 0.000000 -0.326933 0.000000
         1490  +v -0.115238 -0.305818 0.008986
         1491  +v 0.101729 -0.287038 -0.118936
         1492  +v -0.008986 -0.305818 -0.115238
         1493  +v -0.118936 -0.287038 -0.101729
         1494  +v 0.173510 0.188755 -0.202857
         1495  +v 0.076886 0.221335 -0.228002
         1496  +v -0.017971 0.231176 -0.230477
         1497  +v -0.111298 0.221335 -0.213328
         1498  +v -0.202857 0.188755 -0.173510
         1499  +v 0.213328 0.221335 -0.111298
         1500  +v 0.101729 0.287038 -0.118936
         1501  +v -0.008986 0.305818 -0.115238
         1502  +v -0.118936 0.287038 -0.101729
         1503  +v -0.228002 0.221335 -0.076886
         1504  +v 0.230477 0.231176 -0.017971
         1505  +v 0.115238 0.305818 -0.008986
         1506  +v 0.000000 0.326933 -0.000000
         1507  +v -0.115238 0.305818 0.008986
         1508  +v -0.230477 0.231176 0.017971
         1509  +v 0.228002 0.221335 0.076886
         1510  +v 0.118936 0.287038 0.101729
         1511  +v 0.008986 0.305818 0.115238
         1512  +v -0.101729 0.287038 0.118936
         1513  +v -0.213328 0.221335 0.111298
         1514  +v 0.202857 0.188755 0.173510
         1515  +v 0.111298 0.221335 0.213328
         1516  +v 0.017971 0.231176 0.230477
         1517  +v -0.076886 0.221335 0.228002
         1518  +v -0.173510 0.188755 0.202857
         1519  +vt 0.507969 0.347291
         1520  +vt 0.547223 0.341050
         1521  +vt 0.538517 0.415417
         1522  +vt 0.498706 0.406436
         1523  +vt 0.582474 0.349307
         1524  +vt 0.571984 0.427658
         1525  +vt 0.614052 0.368999
         1526  +vt 0.604560 0.442802
         1527  +vt 0.643757 0.399897
         1528  +vt 0.641634 0.461050
         1529  +vt 0.531214 0.479431
         1530  +vt 0.492041 0.460529
         1531  +vt 0.564772 0.494797
         1532  +vt 0.598895 0.507439
         1533  +vt 0.639793 0.516562
         1534  +vt 0.522506 0.542810
         1535  +vt 0.485626 0.514681
         1536  +vt 0.556919 0.561801
         1537  +vt 0.593788 0.572359
         1538  +vt 0.637674 0.572055
         1539  +vt 0.506645 0.613877
         1540  +vt 0.477462 0.574086
         1541  +vt 0.542702 0.639352
         1542  +vt 0.587098 0.647606
         1543  +vt 0.634265 0.633125
         1544  +vt 0.675283 0.376871
         1545  +vt 0.679469 0.452343
         1546  +vt 0.078468 0.376871
         1547  +vt 0.110099 0.364441
         1548  +vt 0.115497 0.444372
         1549  +vt 0.082654 0.452343
         1550  +vt 0.143314 0.362142
         1551  +vt 0.148595 0.437406
         1552  +vt 0.179054 0.371777
         1553  +vt 0.187219 0.431181
         1554  +vt 0.681202 0.517866
         1555  +vt 0.119486 0.512562
         1556  +vt 0.084387 0.517866
         1557  +vt 0.153988 0.502136
         1558  +vt 0.193633 0.485333
         1559  +vt 0.681848 0.583469
         1560  +vt 0.124162 0.580673
         1561  +vt 0.085033 0.583469
         1562  +vt 0.161321 0.566277
         1563  +vt 0.200298 0.539427
         1564  +vt 0.680034 0.659313
         1565  +vt 0.133808 0.660111
         1566  +vt 0.083219 0.659313
         1567  +vt 0.176902 0.638347
         1568  +vt 0.209562 0.598572
         1569  +vt 0.208238 0.331986
         1570  +vt 0.224099 0.403052
         1571  +vt 0.244294 0.306511
         1572  +vt 0.258511 0.384062
         1573  +vt 0.288691 0.298257
         1574  +vt 0.295381 0.373504
         1575  +vt 0.335857 0.312738
         1576  +vt 0.339266 0.373808
         1577  +vt 0.232807 0.466432
         1578  +vt 0.266365 0.451066
         1579  +vt 0.300488 0.438423
         1580  +vt 0.341385 0.429301
         1581  +vt 0.240110 0.530446
         1582  +vt 0.273576 0.518205
         1583  +vt 0.306153 0.503061
         1584  +vt 0.343226 0.484813
         1585  +vt 0.248815 0.604813
         1586  +vt 0.284067 0.596556
         1587  +vt 0.315645 0.576864
         1588  +vt 0.345350 0.545966
         1589  +vt 0.381627 0.286550
         1590  +vt 0.383441 0.362394
         1591  +vt 0.432215 0.285752
         1592  +vt 0.422569 0.365190
         1593  +vt 0.475310 0.307516
         1594  +vt 0.459729 0.379586
         1595  +vt 0.382794 0.427997
         1596  +vt 0.417893 0.433300
         1597  +vt 0.452395 0.443727
         1598  +vt 0.381061 0.493520
         1599  +vt 0.413905 0.501491
         1600  +vt 0.447002 0.508457
         1601  +vt 0.376876 0.568992
         1602  +vt 0.408506 0.581422
         1603  +vt 0.441721 0.583721
         1604  +vt 0.320768 0.227079
         1605  +vt 0.202722 0.235209
         1606  +vt 0.159516 0.289702
         1607  +vt 0.476877 0.210594
         1608  +vt 0.917583 0.227079
         1609  +vt 0.799537 0.235209
         1610  +vt 0.667037 0.219944
         1611  +vt 0.756331 0.289702
         1612  +vt 0.697186 0.285012
         1613  +vt 0.100371 0.285012
         1614  +vt 0.534141 0.266843
         1615  +vt 0.603138 0.273163
         1616  +vt 0.648165 0.313533
         1617  +vt 0.706914 0.364441
         1618  +vt 0.457923 0.656161
         1619  +vt 0.501129 0.710653
         1620  +vt 0.619175 0.718784
         1621  +vt 0.398778 0.660851
         1622  +vt 0.368629 0.725919
         1623  +vt 0.775284 0.735269
         1624  +vt 0.730623 0.660111
         1625  +vt 0.349758 0.632330
         1626  +vt 0.304730 0.672700
         1627  +vt 0.178469 0.735269
         1628  +vt 0.235733 0.679020
         1629  +vn 0.4106 -0.4701 -0.7813
         1630  +vn 0.0892 -0.5288 -0.8440
         1631  +vn -0.2190 -0.5288 -0.8200
         1632  +vn -0.5267 -0.4701 -0.7082
         1633  +vn 0.4623 -0.1546 -0.8731
         1634  +vn 0.0988 -0.1747 -0.9797
         1635  +vn -0.2495 -0.1747 -0.9525
         1636  +vn -0.5921 -0.1546 -0.7909
         1637  +vn 0.4623 0.1546 -0.8731
         1638  +vn 0.0988 0.1747 -0.9797
         1639  +vn -0.2495 0.1747 -0.9525
         1640  +vn -0.5921 0.1546 -0.7909
         1641  +vn 0.4106 0.4701 -0.7813
         1642  +vn 0.0892 0.5288 -0.8440
         1643  +vn -0.2190 0.5288 -0.8200
         1644  +vn -0.5267 0.4701 -0.7082
         1645  +vn -0.7813 -0.4701 -0.4106
         1646  +vn -0.8440 -0.5288 -0.0892
         1647  +vn -0.8200 -0.5288 0.2190
         1648  +vn -0.7082 -0.4701 0.5267
         1649  +vn -0.8731 -0.1546 -0.4623
         1650  +vn -0.9797 -0.1747 -0.0988
         1651  +vn -0.9525 -0.1747 0.2495
         1652  +vn -0.7909 -0.1546 0.5921
         1653  +vn -0.8731 0.1546 -0.4623
         1654  +vn -0.9797 0.1747 -0.0988
         1655  +vn -0.9525 0.1747 0.2495
         1656  +vn -0.7909 0.1546 0.5921
         1657  +vn -0.7813 0.4701 -0.4106
         1658  +vn -0.8440 0.5288 -0.0892
         1659  +vn -0.8200 0.5288 0.2190
         1660  +vn -0.7082 0.4701 0.5267
         1661  +vn -0.4106 -0.4701 0.7813
         1662  +vn -0.0892 -0.5288 0.8440
         1663  +vn 0.2190 -0.5288 0.8200
         1664  +vn 0.5267 -0.4701 0.7082
         1665  +vn -0.4623 -0.1546 0.8731
         1666  +vn -0.0988 -0.1747 0.9797
         1667  +vn 0.2495 -0.1747 0.9525
         1668  +vn 0.5921 -0.1546 0.7909
         1669  +vn -0.4623 0.1546 0.8731
         1670  +vn -0.0988 0.1747 0.9797
         1671  +vn 0.2495 0.1747 0.9525
         1672  +vn 0.5921 0.1546 0.7909
         1673  +vn -0.4106 0.4701 0.7813
         1674  +vn -0.0892 0.5288 0.8440
         1675  +vn 0.2190 0.5288 0.8200
         1676  +vn 0.5267 0.4701 0.7082
         1677  +vn 0.7813 -0.4701 0.4106
         1678  +vn 0.8440 -0.5288 0.0892
         1679  +vn 0.8200 -0.5288 -0.2190
         1680  +vn 0.7082 -0.4701 -0.5267
         1681  +vn 0.8731 -0.1546 0.4623
         1682  +vn 0.9797 -0.1747 0.0988
         1683  +vn 0.9525 -0.1747 -0.2495
         1684  +vn 0.7909 -0.1546 -0.5921
         1685  +vn 0.8731 0.1546 0.4623
         1686  +vn 0.9797 0.1747 0.0988
         1687  +vn 0.9525 0.1747 -0.2495
         1688  +vn 0.7909 0.1546 -0.5921
         1689  +vn 0.7813 0.4701 0.4106
         1690  +vn 0.8440 0.5288 0.0892
         1691  +vn 0.8200 0.5288 -0.2190
         1692  +vn 0.7082 0.4701 -0.5267
         1693  +vn 0.5052 -0.7470 0.4321
         1694  +vn 0.1952 -0.8346 0.5152
         1695  +vn -0.1130 -0.8346 0.5392
         1696  +vn -0.4321 -0.7470 0.5052
         1697  +vn 0.5392 -0.8346 0.1130
         1698  +vn 0.1877 -0.9690 0.1606
         1699  +vn -0.1606 -0.9690 0.1877
         1700  +vn -0.5152 -0.8346 0.1952
         1701  +vn 0.5152 -0.8346 -0.1952
         1702  +vn 0.1606 -0.9690 -0.1877
         1703  +vn -0.1877 -0.9690 -0.1606
         1704  +vn -0.5392 -0.8346 -0.1130
         1705  +vn 0.4321 -0.7470 -0.5052
         1706  +vn 0.1130 -0.8346 -0.5392
         1707  +vn -0.1952 -0.8346 -0.5152
         1708  +vn -0.5052 -0.7470 -0.4321
         1709  +vn 0.4321 0.7470 -0.5052
         1710  +vn 0.1130 0.8346 -0.5392
         1711  +vn -0.1952 0.8346 -0.5152
         1712  +vn -0.5052 0.7470 -0.4321
         1713  +vn 0.5152 0.8346 -0.1952
         1714  +vn 0.1606 0.9690 -0.1877
         1715  +vn -0.1877 0.9690 -0.1606
         1716  +vn -0.5392 0.8346 -0.1130
         1717  +vn 0.5392 0.8346 0.1130
         1718  +vn 0.1877 0.9690 0.1606
         1719  +vn -0.1606 0.9690 0.1877
         1720  +vn -0.5152 0.8346 0.1952
         1721  +vn 0.5052 0.7470 0.4321
         1722  +vn 0.1952 0.8346 0.5152
         1723  +vn -0.1130 0.8346 0.5392
         1724  +vn -0.4321 0.7470 0.5052
         1725  +g bronze_bronze_bronze
         1726  +usemtl bronze
         1727  +s off
         1728  +f 388/532/106 389/533/106 393/534/106 392/535/106
         1729  +f 389/533/107 390/536/107 394/537/107 393/534/107
         1730  +f 390/536/108 391/538/108 395/539/108 394/537/108
         1731  +f 391/538/109 404/540/109 408/541/109 395/539/109
         1732  +f 392/535/110 393/534/110 397/542/110 396/543/110
         1733  +f 393/534/111 394/537/111 398/544/111 397/542/111
         1734  +f 394/537/112 395/539/112 399/545/112 398/544/112
         1735  +f 395/539/113 408/541/113 412/546/113 399/545/113
         1736  +f 396/543/114 397/542/114 401/547/114 400/548/114
         1737  +f 397/542/115 398/544/115 402/549/115 401/547/115
         1738  +f 398/544/116 399/545/116 403/550/116 402/549/116
         1739  +f 399/545/117 412/546/117 416/551/117 403/550/117
         1740  +f 400/548/118 401/547/118 462/552/118 461/553/118
         1741  +f 401/547/119 402/549/119 463/554/119 462/552/119
         1742  +f 402/549/120 403/550/120 464/555/120 463/554/120
         1743  +f 403/550/121 416/551/121 465/556/121 464/555/121
         1744  +f 404/540/122 405/557/122 409/558/122 408/541/122
         1745  +f 405/559/123 406/560/123 410/561/123 409/562/123
         1746  +f 406/560/124 407/563/124 411/564/124 410/561/124
         1747  +f 407/563/125 420/565/125 424/566/125 411/564/125
         1748  +f 408/541/126 409/558/126 413/567/126 412/546/126
         1749  +f 409/562/127 410/561/127 414/568/127 413/569/127
         1750  +f 410/561/128 411/564/128 415/570/128 414/568/128
         1751  +f 411/564/129 424/566/129 428/571/129 415/570/129
         1752  +f 412/546/130 413/567/130 417/572/130 416/551/130
         1753  +f 413/569/131 414/568/131 418/573/131 417/574/131
         1754  +f 414/568/132 415/570/132 419/575/132 418/573/132
         1755  +f 415/570/133 428/571/133 432/576/133 419/575/133
         1756  +f 416/551/134 417/572/134 470/577/134 465/556/134
         1757  +f 417/574/135 418/573/135 475/578/135 470/579/135
         1758  +f 418/573/136 419/575/136 480/580/136 475/578/136
         1759  +f 419/575/137 432/576/137 485/581/137 480/580/137
         1760  +f 420/565/138 421/582/138 425/583/138 424/566/138
         1761  +f 421/582/139 422/584/139 426/585/139 425/583/139
         1762  +f 422/584/140 423/586/140 427/587/140 426/585/140
         1763  +f 423/586/141 436/588/141 440/589/141 427/587/141
         1764  +f 424/566/142 425/583/142 429/590/142 428/571/142
         1765  +f 425/583/143 426/585/143 430/591/143 429/590/143
         1766  +f 426/585/144 427/587/144 431/592/144 430/591/144
         1767  +f 427/587/145 440/589/145 444/593/145 431/592/145
         1768  +f 428/571/146 429/590/146 433/594/146 432/576/146
         1769  +f 429/590/147 430/591/147 434/595/147 433/594/147
         1770  +f 430/591/148 431/592/148 435/596/148 434/595/148
         1771  +f 431/592/149 444/593/149 448/597/149 435/596/149
         1772  +f 432/576/150 433/594/150 484/598/150 485/581/150
         1773  +f 433/594/151 434/595/151 483/599/151 484/598/151
         1774  +f 434/595/152 435/596/152 482/600/152 483/599/152
         1775  +f 435/596/153 448/597/153 481/601/153 482/600/153
         1776  +f 436/588/154 437/602/154 441/603/154 440/589/154
         1777  +f 437/602/155 438/604/155 442/605/155 441/603/155
         1778  +f 438/604/156 439/606/156 443/607/156 442/605/156
         1779  +f 439/606/157 388/532/157 392/535/157 443/607/157
         1780  +f 440/589/158 441/603/158 445/608/158 444/593/158
         1781  +f 441/603/159 442/605/159 446/609/159 445/608/159
         1782  +f 442/605/160 443/607/160 447/610/160 446/609/160
         1783  +f 443/607/161 392/535/161 396/543/161 447/610/161
         1784  +f 444/593/162 445/608/162 449/611/162 448/597/162
         1785  +f 445/608/163 446/609/163 450/612/163 449/611/163
         1786  +f 446/609/164 447/610/164 451/613/164 450/612/164
         1787  +f 447/610/165 396/543/165 400/548/165 451/613/165
         1788  +f 448/597/166 449/611/166 476/614/166 481/601/166
         1789  +f 449/611/167 450/612/167 471/615/167 476/614/167
         1790  +f 450/612/168 451/613/168 466/616/168 471/615/168
         1791  +f 451/613/169 400/548/169 461/553/169 466/616/169
         1792  +f 436/588/170 423/586/170 452/617/170 437/602/170
         1793  +f 423/586/171 422/584/171 453/618/171 452/617/171
         1794  +f 422/584/172 421/582/172 454/619/172 453/618/172
         1795  +f 421/582/173 420/565/173 407/563/173 454/619/173
         1796  +f 437/602/174 452/617/174 455/620/174 438/604/174
         1797  +f 452/621/175 453/622/175 456/623/175 455/620/175
         1798  +f 453/622/176 454/624/176 457/625/176 456/623/176
         1799  +f 454/619/177 407/563/177 406/560/177 457/626/177
         1800  +f 438/604/178 455/620/178 458/627/178 439/606/178
         1801  +f 455/620/179 456/623/179 459/628/179 458/627/179
         1802  +f 456/623/180 457/625/180 460/629/180 459/628/180
         1803  +f 457/625/181 406/630/181 405/557/181 460/629/181
         1804  +f 439/606/182 458/627/182 389/533/182 388/532/182
         1805  +f 458/627/183 459/628/183 390/536/183 389/533/183
         1806  +f 459/628/184 460/629/184 391/538/184 390/536/184
         1807  +f 460/629/185 405/557/185 404/540/185 391/538/185
         1808  +f 461/553/186 462/552/186 467/631/186 466/616/186
         1809  +f 462/552/187 463/554/187 468/632/187 467/631/187
         1810  +f 463/554/188 464/555/188 469/633/188 468/632/188
         1811  +f 464/555/189 465/556/189 470/577/189 469/633/189
         1812  +f 466/616/190 467/631/190 472/634/190 471/615/190
         1813  +f 467/631/191 468/632/191 473/635/191 472/634/191
         1814  +f 468/632/192 469/633/192 474/636/192 473/635/192
         1815  +f 469/633/193 470/577/193 475/637/193 474/636/193
         1816  +f 471/615/194 472/634/194 477/638/194 476/614/194
         1817  +f 472/634/195 473/635/195 478/639/195 477/638/195
         1818  +f 473/635/196 474/640/196 479/641/196 478/639/196
         1819  +f 474/640/197 475/578/197 480/580/197 479/641/197
         1820  +f 476/614/198 477/638/198 482/600/198 481/601/198
         1821  +f 477/638/199 478/639/199 483/599/199 482/600/199
         1822  +f 478/639/200 479/641/200 484/598/200 483/599/200
         1823  +f 479/641/201 480/580/201 485/581/201 484/598/201
         1824  +o copper
         1825  +v 0.311802 0.108758 0.030700
         1826  +v 0.284564 0.167463 0.031155
         1827  +v 0.246396 0.219727 0.031627
         1828  +v 0.198765 0.263540 0.032098
         1829  +v 0.143502 0.297218 0.032551
         1830  +v 0.082730 0.319468 0.032968
         1831  +v 0.018784 0.329435 0.033332
         1832  +v -0.045877 0.326734 0.033630
         1833  +v -0.108770 0.311471 0.033851
         1834  +v -0.167477 0.284232 0.033986
         1835  +v -0.219741 0.246062 0.034029
         1836  +v -0.263556 0.198431 0.033980
         1837  +v -0.297236 0.143167 0.033839
         1838  +v -0.319488 0.082394 0.033613
         1839  +v -0.329456 0.018448 0.033310
         1840  +v -0.326757 -0.046213 0.032942
         1841  +v -0.311495 -0.109105 0.032522
         1842  +v -0.284257 -0.167811 0.032068
         1843  +v -0.246089 -0.220074 0.031596
         1844  +v -0.198458 -0.263887 0.031124
         1845  +v -0.143195 -0.297566 0.030671
         1846  +v -0.082423 -0.319816 0.030255
         1847  +v -0.018477 -0.329782 0.029890
         1848  +v 0.046184 -0.327081 0.029592
         1849  +v 0.109077 -0.311818 0.029371
         1850  +v 0.167783 -0.284578 0.029237
         1851  +v 0.220048 -0.246409 0.029193
         1852  +v 0.263863 -0.198777 0.029243
         1853  +v 0.297543 -0.143513 0.029383
         1854  +v 0.319794 -0.082741 0.029609
         1855  +v 0.329762 -0.018795 0.029912
         1856  +v 0.327063 0.045866 0.030281
         1857  +v 0.311496 0.109105 -0.032522
         1858  +v 0.284258 0.167811 -0.032068
         1859  +v 0.246090 0.220074 -0.031596
         1860  +v 0.198459 0.263887 -0.031124
         1861  +v 0.143196 0.297566 -0.030671
         1862  +v 0.082423 0.319816 -0.030255
         1863  +v 0.018478 0.329782 -0.029890
         1864  +v -0.046184 0.327082 -0.029592
         1865  +v -0.109076 0.311818 -0.029371
         1866  +v -0.167783 0.284579 -0.029237
         1867  +v -0.220048 0.246410 -0.029193
         1868  +v -0.263862 0.198778 -0.029243
         1869  +v -0.297542 0.143514 -0.029383
         1870  +v -0.319794 0.082741 -0.029609
         1871  +v -0.329762 0.018796 -0.029912
         1872  +v -0.327063 -0.045865 -0.030281
         1873  +v -0.311802 -0.108757 -0.030700
         1874  +v -0.284563 -0.167463 -0.031155
         1875  +v -0.246395 -0.219727 -0.031627
         1876  +v -0.198765 -0.263540 -0.032098
         1877  +v -0.143501 -0.297218 -0.032551
         1878  +v -0.082729 -0.319468 -0.032968
         1879  +v -0.018784 -0.329434 -0.033332
         1880  +v 0.045878 -0.326734 -0.033630
         1881  +v 0.108771 -0.311471 -0.033851
         1882  +v 0.167477 -0.284231 -0.033986
         1883  +v 0.219742 -0.246062 -0.034029
         1884  +v 0.263556 -0.198430 -0.033980
         1885  +v 0.297236 -0.143166 -0.033839
         1886  +v 0.319488 -0.082393 -0.033613
         1887  +v 0.329456 -0.018448 -0.033310
         1888  +v 0.326757 0.046214 -0.032942
         1889  +v 0.335402 0.117006 0.030631
         1890  +v 0.306101 0.180157 0.031120
         1891  +v 0.265042 0.236379 0.031628
         1892  +v 0.213805 0.283509 0.032135
         1893  +v 0.154357 0.319738 0.032622
         1894  +v 0.088983 0.343673 0.033070
         1895  +v 0.020195 0.354394 0.033462
         1896  +v -0.049363 0.351489 0.033783
         1897  +v -0.117018 0.335071 0.034021
         1898  +v -0.180170 0.305768 0.034166
         1899  +v -0.236393 0.264708 0.034212
         1900  +v -0.283525 0.213470 0.034159
         1901  +v -0.319755 0.154021 0.034008
         1902  +v -0.343692 0.088646 0.033765
         1903  +v -0.354415 0.019858 0.033439
         1904  +v -0.351512 -0.049699 0.033042
         1905  +v -0.335095 -0.117354 0.032591
         1906  +v -0.305794 -0.180505 0.032102
         1907  +v -0.264736 -0.236726 0.031594
         1908  +v -0.213498 -0.283857 0.031087
         1909  +v -0.154050 -0.320085 0.030600
         1910  +v -0.088676 -0.344020 0.030152
         1911  +v -0.019888 -0.354741 0.029760
         1912  +v 0.049670 -0.351836 0.029439
         1913  +v 0.117325 -0.335418 0.029202
         1914  +v 0.180477 -0.306115 0.029057
         1915  +v 0.236699 -0.265055 0.029010
         1916  +v 0.283832 -0.213816 0.029063
         1917  +v 0.320062 -0.154367 0.029214
         1918  +v 0.343999 -0.088993 0.029458
         1919  +v 0.354721 -0.020205 0.029784
         1920  +v 0.351818 0.049353 0.030180
         1921  +v 0.335095 0.117354 -0.032591
         1922  +v 0.305795 0.180505 -0.032102
         1923  +v 0.264736 0.236726 -0.031594
         1924  +v 0.213498 0.283857 -0.031087
         1925  +v 0.154050 0.320085 -0.030600
         1926  +v 0.088676 0.344020 -0.030152
         1927  +v 0.019889 0.354741 -0.029760
         1928  +v -0.049670 0.351837 -0.029439
         1929  +v -0.117324 0.335418 -0.029202
         1930  +v -0.180476 0.306116 -0.029057
         1931  +v -0.236699 0.265056 -0.029010
         1932  +v -0.283831 0.213817 -0.029063
         1933  +v -0.320061 0.154368 -0.029215
         1934  +v -0.343998 0.088994 -0.029458
         1935  +v -0.354721 0.020206 -0.029784
         1936  +v -0.351818 -0.049352 -0.030180
         1937  +v -0.335401 -0.117006 -0.030631
         1938  +v -0.306100 -0.180157 -0.031120
         1939  +v -0.265042 -0.236378 -0.031628
         1940  +v -0.213804 -0.283509 -0.032135
         1941  +v -0.154356 -0.319738 -0.032622
         1942  +v -0.088982 -0.343673 -0.033070
         1943  +v -0.020194 -0.354394 -0.033462
         1944  +v 0.049364 -0.351489 -0.033783
         1945  +v 0.117019 -0.335070 -0.034021
         1946  +v 0.180171 -0.305768 -0.034166
         1947  +v 0.236393 -0.264708 -0.034212
         1948  +v 0.283525 -0.213469 -0.034159
         1949  +v 0.319756 -0.154020 -0.034008
         1950  +v 0.343692 -0.088646 -0.033765
         1951  +v 0.354415 -0.019858 -0.033439
         1952  +v 0.351512 0.049700 -0.033042
         1953  +v -0.285966 0.036617 -0.253880
         1954  +v -0.330001 0.036617 -0.193213
         1955  +v -0.361354 0.036617 -0.125120
         1956  +v -0.378821 0.036617 -0.052219
         1957  +v -0.381729 0.036617 0.022688
         1958  +v -0.369968 0.036617 0.096724
         1959  +v -0.343989 0.036617 0.167043
         1960  +v -0.304791 0.036617 0.230942
         1961  +v -0.253880 0.036617 0.285966
         1962  +v -0.193213 0.036617 0.330001
         1963  +v -0.125120 0.036617 0.361354
         1964  +v -0.052220 0.036617 0.378820
         1965  +v 0.022688 0.036617 0.381729
         1966  +v 0.096724 0.036617 0.369968
         1967  +v 0.167042 0.036617 0.343989
         1968  +v 0.230942 0.036617 0.304791
         1969  +v 0.285966 0.036617 0.253880
         1970  +v 0.330001 0.036617 0.193213
         1971  +v 0.361354 0.036617 0.125120
         1972  +v 0.378820 0.036617 0.052219
         1973  +v 0.381729 0.036617 -0.022689
         1974  +v 0.369968 0.036617 -0.096724
         1975  +v 0.343989 0.036617 -0.167043
         1976  +v 0.304791 0.036617 -0.230942
         1977  +v 0.253880 0.036617 -0.285967
         1978  +v 0.193212 0.036617 -0.330001
         1979  +v 0.125120 0.036617 -0.361354
         1980  +v 0.052219 0.036617 -0.378821
         1981  +v -0.022689 0.036617 -0.381729
         1982  +v -0.096725 0.036617 -0.369968
         1983  +v -0.167043 0.036617 -0.343989
         1984  +v -0.230942 0.036617 -0.304791
         1985  +v -0.285966 -0.036617 -0.253880
         1986  +v -0.330001 -0.036617 -0.193213
         1987  +v -0.361354 -0.036617 -0.125120
         1988  +v -0.378821 -0.036617 -0.052219
         1989  +v -0.381729 -0.036617 0.022688
         1990  +v -0.369968 -0.036617 0.096724
         1991  +v -0.343989 -0.036617 0.167043
         1992  +v -0.304791 -0.036617 0.230942
         1993  +v -0.253880 -0.036617 0.285966
         1994  +v -0.193213 -0.036617 0.330001
         1995  +v -0.125120 -0.036617 0.361354
         1996  +v -0.052220 -0.036617 0.378820
         1997  +v 0.022688 -0.036617 0.381729
         1998  +v 0.096724 -0.036617 0.369968
         1999  +v 0.167042 -0.036617 0.343989
         2000  +v 0.230942 -0.036617 0.304791
         2001  +v 0.285966 -0.036617 0.253880
         2002  +v 0.330001 -0.036617 0.193213
         2003  +v 0.361354 -0.036617 0.125120
         2004  +v 0.378820 -0.036617 0.052219
         2005  +v 0.381729 -0.036617 -0.022689
         2006  +v 0.369968 -0.036617 -0.096724
         2007  +v 0.343989 -0.036617 -0.167043
         2008  +v 0.304791 -0.036617 -0.230942
         2009  +v 0.253880 -0.036617 -0.285966
         2010  +v 0.193212 -0.036617 -0.330001
         2011  +v 0.125120 -0.036617 -0.361354
         2012  +v 0.052219 -0.036617 -0.378821
         2013  +v -0.022689 -0.036617 -0.381729
         2014  +v -0.096725 -0.036617 -0.369968
         2015  +v -0.167043 -0.036617 -0.343989
         2016  +v -0.230942 -0.036617 -0.304791
         2017  +v -0.300923 0.036617 -0.267158
         2018  +v -0.347260 0.036617 -0.203318
         2019  +v -0.380253 0.036617 -0.131664
         2020  +v -0.398633 0.036617 -0.054950
         2021  +v -0.401693 0.036617 0.023875
         2022  +v -0.389317 0.036617 0.101782
         2023  +v -0.361980 0.036617 0.175779
         2024  +v -0.320732 0.036617 0.243020
         2025  +v -0.267159 0.036617 0.300922
         2026  +v -0.203318 0.036616 0.347260
         2027  +v -0.131664 0.036617 0.380253
         2028  +v -0.054951 0.036616 0.398632
         2029  +v 0.023875 0.036617 0.401693
         2030  +v 0.101782 0.036616 0.389317
         2031  +v 0.175779 0.036617 0.361980
         2032  +v 0.243020 0.036617 0.320732
         2033  +v 0.300922 0.036617 0.267158
         2034  +v 0.347260 0.036617 0.203318
         2035  +v 0.380253 0.036617 0.131664
         2036  +v 0.398632 0.036617 0.054950
         2037  +v 0.401693 0.036617 -0.023875
         2038  +v 0.389317 0.036617 -0.101783
         2039  +v 0.361979 0.036617 -0.175779
         2040  +v 0.320731 0.036617 -0.243021
         2041  +v 0.267158 0.036617 -0.300923
         2042  +v 0.203317 0.036617 -0.347260
         2043  +v 0.131663 0.036617 -0.380253
         2044  +v 0.054950 0.036617 -0.398633
         2045  +v -0.023875 0.036617 -0.401693
         2046  +v -0.101783 0.036617 -0.389317
         2047  +v -0.175779 0.036617 -0.361979
         2048  +v -0.243021 0.036617 -0.320731
         2049  +v -0.300923 -0.036617 -0.267158
         2050  +v -0.347260 -0.036617 -0.203318
         2051  +v -0.380253 -0.036617 -0.131664
         2052  +v -0.398633 -0.036617 -0.054950
         2053  +v -0.401693 -0.036617 0.023875
         2054  +v -0.389317 -0.036617 0.101782
         2055  +v -0.361980 -0.036617 0.175779
         2056  +v -0.320732 -0.036617 0.243020
         2057  +v -0.267159 -0.036617 0.300922
         2058  +v -0.203318 -0.036617 0.347260
         2059  +v -0.131664 -0.036617 0.380253
         2060  +v -0.054951 -0.036617 0.398633
         2061  +v 0.023875 -0.036617 0.401693
         2062  +v 0.101782 -0.036617 0.389317
         2063  +v 0.175779 -0.036617 0.361980
         2064  +v 0.243020 -0.036617 0.320732
         2065  +v 0.300922 -0.036617 0.267158
         2066  +v 0.347260 -0.036617 0.203318
         2067  +v 0.380252 -0.036617 0.131664
         2068  +v 0.398632 -0.036617 0.054950
         2069  +v 0.401693 -0.036617 -0.023875
         2070  +v 0.389317 -0.036617 -0.101783
         2071  +v 0.361979 -0.036617 -0.175779
         2072  +v 0.320731 -0.036617 -0.243021
         2073  +v 0.267158 -0.036617 -0.300923
         2074  +v 0.203317 -0.036617 -0.347260
         2075  +v 0.131663 -0.036617 -0.380253
         2076  +v 0.054950 -0.036617 -0.398633
         2077  +v -0.023875 -0.036617 -0.401693
         2078  +v -0.101783 -0.036617 -0.389317
         2079  +v -0.175779 -0.036617 -0.361979
         2080  +v -0.243021 -0.036617 -0.320731
         2081  +v -0.004523 0.247626 -0.255435
         2082  +v -0.003788 0.292526 -0.202484
         2083  +v -0.001613 0.326284 -0.141853
         2084  +v 0.001921 0.347600 -0.075871
         2085  +v 0.006676 0.355656 -0.007075
         2086  +v 0.012471 0.350142 0.061892
         2087  +v 0.019082 0.331271 0.128379
         2088  +v 0.026255 0.299767 0.189832
         2089  +v 0.033715 0.256841 0.243889
         2090  +v 0.041175 0.204143 0.288472
         2091  +v 0.048348 0.143697 0.321868
         2092  +v 0.054959 0.077827 0.342794
         2093  +v 0.060753 0.009065 0.350446
         2094  +v 0.065509 -0.059948 0.344529
         2095  +v 0.069042 -0.126559 0.325271
         2096  +v 0.071218 -0.188209 0.293412
         2097  +v 0.071953 -0.242528 0.250177
         2098  +v 0.071218 -0.287429 0.197226
         2099  +v 0.069042 -0.321186 0.136595
         2100  +v 0.065508 -0.342502 0.070613
         2101  +v 0.060753 -0.350559 0.001817
         2102  +v 0.054959 -0.345045 -0.067150
         2103  +v 0.048348 -0.326173 -0.133638
         2104  +v 0.041175 -0.294669 -0.195090
         2105  +v 0.033715 -0.251743 -0.249147
         2106  +v 0.026255 -0.199045 -0.293730
         2107  +v 0.019082 -0.138599 -0.327127
         2108  +v 0.012471 -0.072730 -0.348053
         2109  +v 0.006676 -0.003967 -0.355704
         2110  +v 0.001921 0.065046 -0.349787
         2111  +v -0.001613 0.131657 -0.330529
         2112  +v -0.003789 0.193307 -0.298670
         2113  +v -0.071953 0.242529 -0.250177
         2114  +v -0.071218 0.287429 -0.197226
         2115  +v -0.069042 0.321187 -0.136595
         2116  +v -0.065509 0.342503 -0.070613
         2117  +v -0.060753 0.350559 -0.001817
         2118  +v -0.054959 0.345045 0.067150
         2119  +v -0.048348 0.326174 0.133637
         2120  +v -0.041175 0.294670 0.195090
         2121  +v -0.033715 0.251744 0.249147
         2122  +v -0.026255 0.199046 0.293730
         2123  +v -0.019082 0.138600 0.327126
         2124  +v -0.012471 0.072730 0.348052
         2125  +v -0.006676 0.003968 0.355704
         2126  +v -0.001921 -0.065045 0.349787
         2127  +v 0.001612 -0.131657 0.330529
         2128  +v 0.003788 -0.193306 0.298670
         2129  +v 0.004523 -0.247625 0.255434
         2130  +v 0.003788 -0.292526 0.202484
         2131  +v 0.001612 -0.326283 0.141852
         2132  +v -0.001921 -0.347600 0.075871
         2133  +v -0.006677 -0.355656 0.007075
         2134  +v -0.012471 -0.350142 -0.061892
         2135  +v -0.019082 -0.331270 -0.128380
         2136  +v -0.026255 -0.299766 -0.189833
         2137  +v -0.033715 -0.256840 -0.243889
         2138  +v -0.041175 -0.204142 -0.288472
         2139  +v -0.048348 -0.143696 -0.321869
         2140  +v -0.054959 -0.077827 -0.342795
         2141  +v -0.060753 -0.009064 -0.350446
         2142  +v -0.065509 0.059949 -0.344529
         2143  +v -0.069042 0.126560 -0.325271
         2144  +v -0.071218 0.188210 -0.293412
         2145  +v -0.006683 0.261465 -0.269711
         2146  +v -0.005906 0.308901 -0.213770
         2147  +v -0.003607 0.344565 -0.149715
         2148  +v 0.000126 0.367085 -0.080007
         2149  +v 0.005150 0.375595 -0.007326
         2150  +v 0.011271 0.369770 0.065535
         2151  +v 0.018255 0.349833 0.135777
         2152  +v 0.025834 0.316550 0.200701
         2153  +v 0.033715 0.271201 0.257810
         2154  +v 0.041596 0.215527 0.304910
         2155  +v 0.049174 0.151668 0.340192
         2156  +v 0.056158 0.082078 0.362300
         2157  +v 0.062280 0.009433 0.370384
         2158  +v 0.067304 -0.063477 0.364133
         2159  +v 0.071037 -0.133850 0.343787
         2160  +v 0.073336 -0.198981 0.310129
         2161  +v 0.074112 -0.256367 0.264452
         2162  +v 0.073336 -0.303804 0.208512
         2163  +v 0.071037 -0.339467 0.144456
         2164  +v 0.067304 -0.361987 0.074749
         2165  +v 0.062280 -0.370498 0.002068
         2166  +v 0.056158 -0.364673 -0.070793
         2167  +v 0.049174 -0.344736 -0.141035
         2168  +v 0.041596 -0.311453 -0.205959
         2169  +v 0.033715 -0.266103 -0.263068
         2170  +v 0.025834 -0.210429 -0.310168
         2171  +v 0.018255 -0.146570 -0.345450
         2172  +v 0.011271 -0.076980 -0.367558
         2173  +v 0.005150 -0.004335 -0.375642
         2174  +v 0.000126 0.068575 -0.369391
         2175  +v -0.003607 0.138948 -0.349045
         2176  +v -0.005906 0.204079 -0.315387
         2177  +v -0.074112 0.256368 -0.264453
         2178  +v -0.073336 0.303804 -0.208512
         2179  +v -0.071037 0.339468 -0.144457
         2180  +v -0.067304 0.361987 -0.074749
         2181  +v -0.062280 0.370498 -0.002068
         2182  +v -0.056158 0.364673 0.070793
         2183  +v -0.049174 0.344736 0.141035
         2184  +v -0.041596 0.311453 0.205958
         2185  +v -0.033715 0.266104 0.263068
         2186  +v -0.025834 0.210430 0.310168
         2187  +v -0.018255 0.146571 0.345450
         2188  +v -0.011271 0.076981 0.367558
         2189  +v -0.005150 0.004336 0.375641
         2190  +v -0.000126 -0.068574 0.369391
         2191  +v 0.003607 -0.138947 0.349045
         2192  +v 0.005906 -0.204078 0.315387
         2193  +v 0.006682 -0.261464 0.269710
         2194  +v 0.005906 -0.308901 0.213769
         2195  +v 0.003607 -0.344564 0.149714
         2196  +v -0.000126 -0.367084 0.080007
         2197  +v -0.005150 -0.375595 0.007326
         2198  +v -0.011271 -0.369770 -0.065536
         2199  +v -0.018256 -0.349833 -0.135778
         2200  +v -0.025834 -0.316550 -0.200701
         2201  +v -0.033715 -0.271200 -0.257810
         2202  +v -0.041596 -0.215526 -0.304911
         2203  +v -0.049174 -0.151667 -0.340193
         2204  +v -0.056158 -0.082078 -0.362300
         2205  +v -0.062280 -0.009432 -0.370384
         2206  +v -0.067304 0.063478 -0.364133
         2207  +v -0.071037 0.133851 -0.343787
         2208  +v -0.073336 0.198982 -0.310129
         2209  +vt 0.926035 0.627582
         2210  +vt 0.893852 0.630339
         2211  +vt 0.894026 0.578467
         2212  +vt 0.922967 0.575988
         2213  +vt 0.438346 0.355695
         2214  +vt 0.410006 0.364110
         2215  +vt 0.403735 0.313455
         2216  +vt 0.434948 0.304165
         2217  +vt 0.103843 0.618889
         2218  +vt 0.072497 0.627582
         2219  +vt 0.069430 0.575988
         2220  +vt 0.097852 0.568121
         2221  +vt 0.467257 0.352631
         2222  +vt 0.467083 0.300759
         2223  +vt 0.133709 0.604924
         2224  +vt 0.125336 0.555342
         2225  +vt 0.496198 0.355111
         2226  +vt 0.499266 0.303516
         2227  +vt 0.161818 0.586615
         2228  +vt 0.151669 0.538341
         2229  +vt 0.524621 0.362977
         2230  +vt 0.530612 0.312209
         2231  +vt 0.188225 0.564978
         2232  +vt 0.176852 0.517923
         2233  +vt 0.552105 0.375757
         2234  +vt 0.560478 0.326175
         2235  +vt 0.213211 0.540997
         2236  +vt 0.201064 0.494914
         2237  +vt 0.578438 0.392757
         2238  +vt 0.588587 0.344483
         2239  +vt 0.237170 0.515577
         2240  +vt 0.224597 0.470120
         2241  +vt 0.603621 0.413175
         2242  +vt 0.614994 0.366120
         2243  +vt 0.260539 0.489545
         2244  +vt 0.247823 0.444317
         2245  +vt 0.627832 0.436184
         2246  +vt 0.639980 0.390101
         2247  +vt 0.283756 0.463680
         2248  +vt 0.271155 0.418267
         2249  +vt 0.772897 0.584461
         2250  +vt 0.746656 0.562530
         2251  +vt 0.758131 0.515591
         2252  +vt 0.783200 0.536323
         2253  +vt 0.651366 0.460978
         2254  +vt 0.663939 0.415522
         2255  +vt 0.307238 0.438743
         2256  +vt 0.295030 0.392744
         2257  +vt 0.800818 0.603170
         2258  +vt 0.809407 0.553725
         2259  +vt 0.674592 0.486781
         2260  +vt 0.687308 0.441553
         2261  +vt 0.331362 0.415507
         2262  +vt 0.319887 0.368568
         2263  +vt 0.830504 0.617643
         2264  +vt 0.836775 0.566988
         2265  +vt 0.697924 0.512831
         2266  +vt 0.710524 0.467418
         2267  +vt 0.356431 0.394775
         2268  +vt 0.346128 0.346637
         2269  +vt 0.861717 0.626933
         2270  +vt 0.865115 0.575403
         2271  +vt 0.721799 0.538355
         2272  +vt 0.734007 0.492355
         2273  +vt 0.382638 0.377373
         2274  +vt 0.374049 0.327928
         2275  +vt 0.926035 0.627582
         2276  +vt 0.922967 0.575988
         2277  +vt 0.894026 0.578467
         2278  +vt 0.893852 0.630339
         2279  +vt 0.438346 0.355695
         2280  +vt 0.434948 0.304165
         2281  +vt 0.403735 0.313455
         2282  +vt 0.410006 0.364110
         2283  +vt 0.103843 0.618889
         2284  +vt 0.097852 0.568121
         2285  +vt 0.069430 0.575988
         2286  +vt 0.072497 0.627582
         2287  +vt 0.467257 0.352631
         2288  +vt 0.467083 0.300759
         2289  +vt 0.133709 0.604924
         2290  +vt 0.125336 0.555342
         2291  +vt 0.496198 0.355111
         2292  +vt 0.499266 0.303516
         2293  +vt 0.161818 0.586615
         2294  +vt 0.151669 0.538341
         2295  +vt 0.524621 0.362977
         2296  +vt 0.530612 0.312209
         2297  +vt 0.188225 0.564978
         2298  +vt 0.176852 0.517923
         2299  +vt 0.552105 0.375757
         2300  +vt 0.560478 0.326175
         2301  +vt 0.213211 0.540997
         2302  +vt 0.201064 0.494914
         2303  +vt 0.578438 0.392757
         2304  +vt 0.588587 0.344483
         2305  +vt 0.237170 0.515577
         2306  +vt 0.224597 0.470120
         2307  +vt 0.603621 0.413175
         2308  +vt 0.614994 0.366120
         2309  +vt 0.260539 0.489545
         2310  +vt 0.247823 0.444317
         2311  +vt 0.627832 0.436184
         2312  +vt 0.639980 0.390101
         2313  +vt 0.283756 0.463680
         2314  +vt 0.271155 0.418267
         2315  +vt 0.772897 0.584461
         2316  +vt 0.783200 0.536323
         2317  +vt 0.758131 0.515591
         2318  +vt 0.746656 0.562530
         2319  +vt 0.651366 0.460978
         2320  +vt 0.663939 0.415522
         2321  +vt 0.307238 0.438743
         2322  +vt 0.295030 0.392744
         2323  +vt 0.800818 0.603170
         2324  +vt 0.809407 0.553725
         2325  +vt 0.674592 0.486781
         2326  +vt 0.687308 0.441553
         2327  +vt 0.331362 0.415507
         2328  +vt 0.319887 0.368568
         2329  +vt 0.830504 0.617643
         2330  +vt 0.836775 0.566988
         2331  +vt 0.697924 0.512831
         2332  +vt 0.710524 0.467418
         2333  +vt 0.356431 0.394775
         2334  +vt 0.346128 0.346637
         2335  +vt 0.861717 0.626933
         2336  +vt 0.865115 0.575403
         2337  +vt 0.721799 0.538355
         2338  +vt 0.734007 0.492355
         2339  +vt 0.382638 0.377373
         2340  +vt 0.374049 0.327928
         2341  +vt 0.924091 0.586444
         2342  +vt 0.892918 0.585851
         2343  +vt 0.894928 0.557945
         2344  +vt 0.923274 0.558538
         2345  +vt 0.441148 0.445412
         2346  +vt 0.413778 0.451403
         2347  +vt 0.406874 0.423497
         2348  +vt 0.436498 0.417506
         2349  +vt 0.103579 0.584252
         2350  +vt 0.072609 0.586444
         2351  +vt 0.071793 0.558538
         2352  +vt 0.100013 0.556346
         2353  +vt 0.469187 0.442055
         2354  +vt 0.467178 0.414149
         2355  +vt 0.133706 0.579358
         2356  +vt 0.127704 0.551452
         2357  +vt 0.497534 0.441462
         2358  +vt 0.498350 0.413556
         2359  +vt 0.162562 0.571951
         2360  +vt 0.154580 0.544045
         2361  +vt 0.525754 0.443654
         2362  +vt 0.529319 0.415748
         2363  +vt 0.189994 0.562315
         2364  +vt 0.180522 0.534409
         2365  +vt 0.553444 0.448548
         2366  +vt 0.559446 0.420642
         2367  +vt 0.216083 0.550821
         2368  +vt 0.205574 0.522915
         2369  +vt 0.580321 0.455955
         2370  +vt 0.588303 0.428049
         2371  +vt 0.241073 0.537909
         2372  +vt 0.229909 0.510003
         2373  +vt 0.606263 0.465591
         2374  +vt 0.615735 0.437685
         2375  +vt 0.265296 0.524077
         2376  +vt 0.253797 0.496171
         2377  +vt 0.631314 0.477085
         2378  +vt 0.641824 0.449179
         2379  +vt 0.289121 0.509856
         2380  +vt 0.277565 0.481950
         2381  +vt 0.777520 0.557633
         2382  +vt 0.751935 0.545479
         2383  +vt 0.762765 0.517573
         2384  +vt 0.787484 0.529727
         2385  +vt 0.655650 0.489997
         2386  +vt 0.666813 0.462091
         2387  +vt 0.312916 0.495793
         2388  +vt 0.301574 0.467887
         2389  +vt 0.804360 0.568109
         2390  +vt 0.813034 0.540203
         2391  +vt 0.679538 0.503829
         2392  +vt 0.691037 0.475923
         2393  +vt 0.337024 0.482427
         2394  +vt 0.326194 0.454521
         2395  +vt 0.832615 0.576503
         2396  +vt 0.839518 0.548597
         2397  +vt 0.703306 0.518050
         2398  +vt 0.714862 0.490144
         2399  +vt 0.361744 0.470273
         2400  +vt 0.351780 0.442367
         2401  +vt 0.862238 0.582494
         2402  +vt 0.866888 0.554588
         2403  +vt 0.727314 0.532113
         2404  +vt 0.738656 0.504207
         2405  +vt 0.387294 0.459797
         2406  +vt 0.378619 0.431891
         2407  +vt 0.924091 0.586444
         2408  +vt 0.923274 0.558538
         2409  +vt 0.894928 0.557945
         2410  +vt 0.892918 0.585851
         2411  +vt 0.441148 0.445412
         2412  +vt 0.436498 0.417506
         2413  +vt 0.406874 0.423497
         2414  +vt 0.413778 0.451403
         2415  +vt 0.103579 0.584252
         2416  +vt 0.100013 0.556346
         2417  +vt 0.071793 0.558538
         2418  +vt 0.072609 0.586444
         2419  +vt 0.469187 0.442055
         2420  +vt 0.467178 0.414149
         2421  +vt 0.133706 0.579358
         2422  +vt 0.127704 0.551452
         2423  +vt 0.497534 0.441462
         2424  +vt 0.498350 0.413556
         2425  +vt 0.162562 0.571951
         2426  +vt 0.154580 0.544045
         2427  +vt 0.525754 0.443654
         2428  +vt 0.529319 0.415748
         2429  +vt 0.189994 0.562315
         2430  +vt 0.180522 0.534409
         2431  +vt 0.553444 0.448548
         2432  +vt 0.559446 0.420642
         2433  +vt 0.216083 0.550821
         2434  +vt 0.205574 0.522915
         2435  +vt 0.580321 0.455955
         2436  +vt 0.588303 0.428049
         2437  +vt 0.241073 0.537909
         2438  +vt 0.229909 0.510003
         2439  +vt 0.606263 0.465591
         2440  +vt 0.615735 0.437685
         2441  +vt 0.265296 0.524077
         2442  +vt 0.253797 0.496171
         2443  +vt 0.631314 0.477085
         2444  +vt 0.641824 0.449179
         2445  +vt 0.289121 0.509856
         2446  +vt 0.277565 0.481950
         2447  +vt 0.777520 0.557633
         2448  +vt 0.787484 0.529727
         2449  +vt 0.762765 0.517573
         2450  +vt 0.751935 0.545479
         2451  +vt 0.655650 0.489997
         2452  +vt 0.666813 0.462091
         2453  +vt 0.312916 0.495793
         2454  +vt 0.301574 0.467887
         2455  +vt 0.804360 0.568109
         2456  +vt 0.813034 0.540203
         2457  +vt 0.679538 0.503829
         2458  +vt 0.691037 0.475923
         2459  +vt 0.337024 0.482427
         2460  +vt 0.326194 0.454521
         2461  +vt 0.832615 0.576503
         2462  +vt 0.839518 0.548597
         2463  +vt 0.703306 0.518050
         2464  +vt 0.714862 0.490144
         2465  +vt 0.361744 0.470273
         2466  +vt 0.351780 0.442367
         2467  +vt 0.862238 0.582494
         2468  +vt 0.866888 0.554588
         2469  +vt 0.727314 0.532113
         2470  +vt 0.738656 0.504207
         2471  +vt 0.387294 0.459797
         2472  +vt 0.378619 0.431891
         2473  +vt 0.921167 0.578126
         2474  +vt 0.890749 0.577589
         2475  +vt 0.892709 0.552369
         2476  +vt 0.920370 0.552905
         2477  +vt 0.449904 0.450665
         2478  +vt 0.423196 0.456079
         2479  +vt 0.416459 0.430859
         2480  +vt 0.445366 0.425445
         2481  +vt 0.120498 0.576144
         2482  +vt 0.090278 0.578126
         2483  +vt 0.089481 0.552905
         2484  +vt 0.117019 0.550924
         2485  +vt 0.477265 0.447631
         2486  +vt 0.475304 0.422411
         2487  +vt 0.149897 0.571722
         2488  +vt 0.144040 0.546501
         2489  +vt 0.504926 0.447095
         2490  +vt 0.505722 0.421874
         2491  +vt 0.178056 0.565027
         2492  +vt 0.170266 0.539807
         2493  +vt 0.532464 0.449076
         2494  +vt 0.535943 0.423856
         2495  +vt 0.204824 0.556319
         2496  +vt 0.195581 0.531098
         2497  +vt 0.559484 0.453499
         2498  +vt 0.565341 0.428278
         2499  +vt 0.230282 0.545930
         2500  +vt 0.220027 0.520710
         2501  +vt 0.585711 0.460193
         2502  +vt 0.593500 0.434973
         2503  +vt 0.254667 0.534261
         2504  +vt 0.243774 0.509041
         2505  +vt 0.611026 0.468902
         2506  +vt 0.620269 0.443681
         2507  +vt 0.278305 0.521760
         2508  +vt 0.267084 0.496540
         2509  +vt 0.635471 0.479290
         2510  +vt 0.645726 0.454070
         2511  +vt 0.301554 0.508908
         2512  +vt 0.290277 0.483687
         2513  +vt 0.778141 0.552087
         2514  +vt 0.753175 0.541103
         2515  +vt 0.763743 0.515882
         2516  +vt 0.787864 0.526867
         2517  +vt 0.659218 0.490959
         2518  +vt 0.670112 0.465739
         2519  +vt 0.324773 0.496198
         2520  +vt 0.313705 0.470977
         2521  +vt 0.804332 0.561555
         2522  +vt 0.812796 0.536334
         2523  +vt 0.682529 0.503460
         2524  +vt 0.693750 0.478240
         2525  +vt 0.348298 0.484118
         2526  +vt 0.337730 0.458897
         2527  +vt 0.831903 0.569141
         2528  +vt 0.838640 0.543921
         2529  +vt 0.705722 0.516313
         2530  +vt 0.716998 0.491092
         2531  +vt 0.372420 0.473133
         2532  +vt 0.362697 0.447913
         2533  +vt 0.860811 0.574555
         2534  +vt 0.865348 0.549335
         2535  +vt 0.729150 0.529023
         2536  +vt 0.740217 0.503803
         2537  +vt 0.397352 0.463666
         2538  +vt 0.388887 0.438445
         2539  +vt 0.921167 0.578126
         2540  +vt 0.920370 0.552905
         2541  +vt 0.892709 0.552369
         2542  +vt 0.890749 0.577589
         2543  +vt 0.449904 0.450665
         2544  +vt 0.445366 0.425445
         2545  +vt 0.416459 0.430859
         2546  +vt 0.423196 0.456079
         2547  +vt 0.120498 0.576144
         2548  +vt 0.117019 0.550924
         2549  +vt 0.089481 0.552905
         2550  +vt 0.090278 0.578126
         2551  +vt 0.477265 0.447631
         2552  +vt 0.475304 0.422411
         2553  +vt 0.149897 0.571722
         2554  +vt 0.144040 0.546501
         2555  +vt 0.504926 0.447095
         2556  +vt 0.505722 0.421874
         2557  +vt 0.178056 0.565027
         2558  +vt 0.170266 0.539807
         2559  +vt 0.532464 0.449076
         2560  +vt 0.535943 0.423856
         2561  +vt 0.204824 0.556319
         2562  +vt 0.195581 0.531098
         2563  +vt 0.559484 0.453499
         2564  +vt 0.565341 0.428278
         2565  +vt 0.230282 0.545930
         2566  +vt 0.220027 0.520710
         2567  +vt 0.585711 0.460193
         2568  +vt 0.593500 0.434973
         2569  +vt 0.254667 0.534261
         2570  +vt 0.243774 0.509041
         2571  +vt 0.611026 0.468902
         2572  +vt 0.620269 0.443681
         2573  +vt 0.278305 0.521760
         2574  +vt 0.267084 0.496540
         2575  +vt 0.635471 0.479290
         2576  +vt 0.645726 0.454070
         2577  +vt 0.301554 0.508908
         2578  +vt 0.290277 0.483687
         2579  +vt 0.778141 0.552087
         2580  +vt 0.787864 0.526867
         2581  +vt 0.763743 0.515882
         2582  +vt 0.753175 0.541103
         2583  +vt 0.659218 0.490959
         2584  +vt 0.670112 0.465739
         2585  +vt 0.324773 0.496198
         2586  +vt 0.313705 0.470977
         2587  +vt 0.804332 0.561555
         2588  +vt 0.812796 0.536334
         2589  +vt 0.682529 0.503460
         2590  +vt 0.693750 0.478240
         2591  +vt 0.348298 0.484118
         2592  +vt 0.337730 0.458897
         2593  +vt 0.831903 0.569141
         2594  +vt 0.838640 0.543921
         2595  +vt 0.705722 0.516313
         2596  +vt 0.716998 0.491092
         2597  +vt 0.372420 0.473133
         2598  +vt 0.362697 0.447913
         2599  +vt 0.860811 0.574555
         2600  +vt 0.865348 0.549335
         2601  +vt 0.729150 0.529023
         2602  +vt 0.740217 0.503803
         2603  +vt 0.397352 0.463666
         2604  +vt 0.388887 0.438445
         2605  +vn 0.1540 0.9881 0.0047
         2606  +vn -0.5204 -0.8539 -0.0022
         2607  +vn -0.0417 0.9991 0.0057
         2608  +vn -0.3438 -0.9390 -0.0035
         2609  +vn -0.2358 0.9718 0.0065
         2610  +vn -0.1540 -0.9881 -0.0047
         2611  +vn -0.4209 0.9071 0.0070
         2612  +vn 0.0417 -0.9991 -0.0057
         2613  +vn -0.5898 0.8076 0.0073
         2614  +vn 0.2358 -0.9718 -0.0065
         2615  +vn -0.7360 0.6770 0.0073
         2616  +vn 0.4209 -0.9071 -0.0070
         2617  +vn -0.8539 0.5204 0.0070
         2618  +vn 0.5898 -0.8076 -0.0073
         2619  +vn -0.9390 0.3438 0.0064
         2620  +vn 0.7360 -0.6770 -0.0073
         2621  +vn -0.9881 0.1540 0.0056
         2622  +vn 0.9071 0.4209 -0.0021
         2623  +vn 0.8539 -0.5204 -0.0070
         2624  +vn -0.9991 -0.0417 0.0046
         2625  +vn 0.8076 0.5898 -0.0007
         2626  +vn 0.9390 -0.3438 -0.0064
         2627  +vn -0.9718 -0.2358 0.0034
         2628  +vn 0.6770 0.7360 0.0008
         2629  +vn 0.9881 -0.1540 -0.0056
         2630  +vn -0.9071 -0.4209 0.0021
         2631  +vn 0.5204 0.8539 0.0022
         2632  +vn 0.9991 0.0417 -0.0046
         2633  +vn -0.8076 -0.5898 0.0007
         2634  +vn 0.3438 0.9390 0.0035
         2635  +vn 0.9718 0.2358 -0.0034
         2636  +vn -0.6770 -0.7360 -0.0008
         2637  +vn 0.5898 -0.8075 -0.0073
         2638  +vn -0.5898 0.8075 0.0073
         2639  +vn -0.0048 0.0055 -1.0000
         2640  +vn 0.0048 -0.0055 1.0000
         2641  +vn -0.9380 0.0000 0.3465
         2642  +vn 0.9992 0.0000 0.0388
         2643  +vn -0.8524 0.0000 0.5229
         2644  +vn 0.9876 -0.0000 -0.1569
         2645  +vn -0.7340 0.0000 0.6791
         2646  +vn 0.9380 0.0000 -0.3466
         2647  +vn -0.5874 0.0000 0.8093
         2648  +vn 0.8524 -0.0000 -0.5229
         2649  +vn -0.4182 0.0000 0.9083
         2650  +vn 0.7340 -0.0000 -0.6791
         2651  +vn -0.2330 0.0000 0.9725
         2652  +vn 0.5874 -0.0000 -0.8093
         2653  +vn -0.0388 0.0000 0.9992
         2654  +vn 0.4182 0.0000 -0.9083
         2655  +vn 0.1569 0.0000 0.9876
         2656  +vn 0.2330 -0.0000 -0.9725
         2657  +vn 0.3465 0.0000 0.9380
         2658  +vn -0.8093 -0.0000 -0.5874
         2659  +vn 0.0388 0.0000 -0.9992
         2660  +vn 0.5229 0.0000 0.8524
         2661  +vn -0.9083 0.0000 -0.4182
         2662  +vn -0.1569 0.0000 -0.9876
         2663  +vn 0.6791 0.0000 0.7340
         2664  +vn -0.9725 0.0000 -0.2330
         2665  +vn -0.3466 -0.0000 -0.9380
         2666  +vn 0.8093 -0.0000 0.5874
         2667  +vn -0.9992 0.0000 -0.0388
         2668  +vn -0.5229 -0.0000 -0.8524
         2669  +vn 0.9083 -0.0000 0.4182
         2670  +vn -0.9876 0.0000 0.1569
         2671  +vn -0.6791 0.0000 -0.7340
         2672  +vn 0.9725 -0.0000 0.2330
         2673  +vn 0.9380 0.0000 -0.3465
         2674  +vn -0.9380 0.0000 0.3466
         2675  +vn -0.3465 -0.0000 -0.9380
         2676  +vn 0.3466 0.0000 0.9380
         2677  +vn 0.0000 -1.0000 0.0000
         2678  +vn -0.0000 1.0000 -0.0000
         2679  +vn -0.0509 0.9594 0.2774
         2680  +vn 0.0835 -0.9904 0.1102
         2681  +vn -0.0313 0.8880 0.4589
         2682  +vn 0.0685 -0.9940 -0.0852
         2683  +vn -0.0106 0.7824 0.6227
         2684  +vn 0.0509 -0.9594 -0.2774
         2685  +vn 0.0106 0.6467 0.7627
         2686  +vn 0.0313 -0.8880 -0.4589
         2687  +vn 0.0313 0.4862 0.8733
         2688  +vn 0.0106 -0.7824 -0.6227
         2689  +vn 0.0509 0.3070 0.9503
         2690  +vn -0.0106 -0.6467 -0.7627
         2691  +vn 0.0685 0.1160 0.9909
         2692  +vn -0.0313 -0.4862 -0.8733
         2693  +vn 0.0835 -0.0794 0.9933
         2694  +vn -0.0509 -0.3070 -0.9503
         2695  +vn 0.0952 -0.2718 0.9576
         2696  +vn -0.1074 0.7590 -0.6421
         2697  +vn -0.0685 -0.1160 -0.9909
         2698  +vn 0.1033 -0.4538 0.8851
         2699  +vn -0.1033 0.8706 -0.4810
         2700  +vn -0.0835 0.0794 -0.9933
         2701  +vn 0.1074 -0.6183 0.7786
         2702  +vn -0.0952 0.9487 -0.3014
         2703  +vn -0.0952 0.2718 -0.9576
         2704  +vn 0.1074 -0.7590 0.6421
         2705  +vn -0.0835 0.9904 -0.1102
         2706  +vn -0.1033 0.4538 -0.8851
         2707  +vn 0.1033 -0.8706 0.4810
         2708  +vn -0.0685 0.9940 0.0852
         2709  +vn -0.1074 0.6183 -0.7786
         2710  +vn 0.0952 -0.9487 0.3014
         2711  +vn -0.9942 -0.0751 0.0775
         2712  +vn 0.9942 0.0751 -0.0775
         2713  +g copper_copper_copper
         2714  +usemtl copper
         2715  +s off
         2716  +f 492/642/202 491/643/202 523/644/202 524/645/202
         2717  +f 506/646/203 505/647/203 537/648/203 538/649/203
         2718  +f 493/650/204 492/651/204 524/652/204 525/653/204
         2719  +f 507/654/205 506/646/205 538/649/205 539/655/205
         2720  +f 494/656/206 493/650/206 525/653/206 526/657/206
         2721  +f 508/658/207 507/654/207 539/655/207 540/659/207
         2722  +f 495/660/208 494/656/208 526/657/208 527/661/208
         2723  +f 509/662/209 508/658/209 540/659/209 541/663/209
         2724  +f 496/664/210 495/660/210 527/661/210 528/665/210
         2725  +f 510/666/211 509/662/211 541/663/211 542/667/211
         2726  +f 497/668/212 496/664/212 528/665/212 529/669/212
         2727  +f 511/670/213 510/666/213 542/667/213 543/671/213
         2728  +f 498/672/214 497/668/214 529/669/214 530/673/214
         2729  +f 512/674/215 511/670/215 543/671/215 544/675/215
         2730  +f 499/676/216 498/672/216 530/673/216 531/677/216
         2731  +f 513/678/217 512/674/217 544/675/217 545/679/217
         2732  +f 500/680/218 499/676/218 531/677/218 532/681/218
         2733  +f 487/682/219 486/683/219 518/684/219 519/685/219
         2734  +f 514/686/220 513/678/220 545/679/220 546/687/220
         2735  +f 501/688/221 500/680/221 532/681/221 533/689/221
         2736  +f 488/690/222 487/682/222 519/685/222 520/691/222
         2737  +f 515/692/223 514/686/223 546/687/223 547/693/223
         2738  +f 502/694/224 501/688/224 533/689/224 534/695/224
         2739  +f 489/696/225 488/690/225 520/691/225 521/697/225
         2740  +f 516/698/226 515/692/226 547/693/226 548/699/226
         2741  +f 503/700/227 502/694/227 534/695/227 535/701/227
         2742  +f 490/702/228 489/696/228 521/697/228 522/703/228
         2743  +f 517/704/229 516/698/229 548/699/229 549/705/229
         2744  +f 504/706/230 503/700/230 535/701/230 536/707/230
         2745  +f 491/643/231 490/702/231 522/703/231 523/644/231
         2746  +f 486/683/232 517/704/232 549/705/232 518/684/232
         2747  +f 505/647/233 504/706/233 536/707/233 537/648/233
         2748  +f 556/708/207 588/709/207 587/710/207 555/711/207
         2749  +f 570/712/228 602/713/228 601/714/228 569/715/228
         2750  +f 557/716/209 589/717/209 588/718/209 556/719/209
         2751  +f 571/720/231 603/721/231 602/713/231 570/712/231
         2752  +f 558/722/211 590/723/211 589/717/211 557/716/211
         2753  +f 572/724/202 604/725/202 603/721/202 571/720/202
         2754  +f 559/726/213 591/727/213 590/723/213 558/722/213
         2755  +f 573/728/204 605/729/204 604/725/204 572/724/204
         2756  +f 560/730/234 592/731/234 591/727/234 559/726/234
         2757  +f 574/732/206 606/733/206 605/729/206 573/728/206
         2758  +f 561/734/217 593/735/217 592/731/217 560/730/217
         2759  +f 575/736/208 607/737/208 606/733/208 574/732/208
         2760  +f 562/738/220 594/739/220 593/735/220 561/734/220
         2761  +f 576/740/235 608/741/235 607/737/235 575/736/235
         2762  +f 563/742/223 595/743/223 594/739/223 562/738/223
         2763  +f 577/744/212 609/745/212 608/741/212 576/740/212
         2764  +f 564/746/226 596/747/226 595/743/226 563/742/226
         2765  +f 551/748/227 583/749/227 582/750/227 550/751/227
         2766  +f 578/752/214 610/753/214 609/745/214 577/744/214
         2767  +f 565/754/229 597/755/229 596/747/229 564/746/229
         2768  +f 552/756/230 584/757/230 583/749/230 551/748/230
         2769  +f 579/758/216 611/759/216 610/753/216 578/752/216
         2770  +f 566/760/232 598/761/232 597/755/232 565/754/232
         2771  +f 553/762/233 585/763/233 584/757/233 552/756/233
         2772  +f 580/764/218 612/765/218 611/759/218 579/758/218
         2773  +f 567/766/219 599/767/219 598/761/219 566/760/219
         2774  +f 554/768/203 586/769/203 585/763/203 553/762/203
         2775  +f 581/770/221 613/771/221 612/765/221 580/764/221
         2776  +f 568/772/222 600/773/222 599/767/222 567/766/222
         2777  +f 555/711/205 587/710/205 586/769/205 554/768/205
         2778  +f 550/751/224 582/750/224 613/771/224 581/770/224
         2779  +f 569/715/225 601/714/225 600/773/225 568/772/225
         2780  +f 486/683/236 487/682/236 551/748/236 550/751/236
         2781  +f 487/682/236 488/690/236 552/756/236 551/748/236
         2782  +f 488/690/236 489/696/236 553/762/236 552/756/236
         2783  +f 489/696/236 490/702/236 554/768/236 553/762/236
         2784  +f 490/702/236 491/643/236 555/711/236 554/768/236
         2785  +f 491/643/236 492/642/236 556/708/236 555/711/236
         2786  +f 492/651/236 493/650/236 557/716/236 556/719/236
         2787  +f 493/650/236 494/656/236 558/722/236 557/716/236
         2788  +f 494/656/236 495/660/236 559/726/236 558/722/236
         2789  +f 495/660/236 496/664/236 560/730/236 559/726/236
         2790  +f 496/664/236 497/668/236 561/734/236 560/730/236
         2791  +f 497/668/236 498/672/236 562/738/236 561/734/236
         2792  +f 498/672/236 499/676/236 563/742/236 562/738/236
         2793  +f 499/676/236 500/680/236 564/746/236 563/742/236
         2794  +f 500/680/236 501/688/236 565/754/236 564/746/236
         2795  +f 501/688/236 502/694/236 566/760/236 565/754/236
         2796  +f 502/694/236 503/700/236 567/766/236 566/760/236
         2797  +f 503/700/236 504/706/236 568/772/236 567/766/236
         2798  +f 504/706/236 505/647/236 569/715/236 568/772/236
         2799  +f 505/647/236 506/646/236 570/712/236 569/715/236
         2800  +f 506/646/236 507/654/236 571/720/236 570/712/236
         2801  +f 507/654/236 508/658/236 572/724/236 571/720/236
         2802  +f 508/658/236 509/662/236 573/728/236 572/724/236
         2803  +f 509/662/236 510/666/236 574/732/236 573/728/236
         2804  +f 510/666/236 511/670/236 575/736/236 574/732/236
         2805  +f 511/670/236 512/674/236 576/740/236 575/736/236
         2806  +f 512/674/236 513/678/236 577/744/236 576/740/236
         2807  +f 513/678/236 514/686/236 578/752/236 577/744/236
         2808  +f 514/686/236 515/692/236 579/758/236 578/752/236
         2809  +f 515/692/236 516/698/236 580/764/236 579/758/236
         2810  +f 516/698/236 517/704/236 581/770/236 580/764/236
         2811  +f 517/704/236 486/683/236 550/751/236 581/770/236
         2812  +f 519/685/237 518/684/237 582/750/237 583/749/237
         2813  +f 520/691/237 519/685/237 583/749/237 584/757/237
         2814  +f 521/697/237 520/691/237 584/757/237 585/763/237
         2815  +f 522/703/237 521/697/237 585/763/237 586/769/237
         2816  +f 523/644/237 522/703/237 586/769/237 587/710/237
         2817  +f 524/645/237 523/644/237 587/710/237 588/709/237
         2818  +f 525/653/237 524/652/237 588/718/237 589/717/237
         2819  +f 526/657/237 525/653/237 589/717/237 590/723/237
         2820  +f 527/661/237 526/657/237 590/723/237 591/727/237
         2821  +f 528/665/237 527/661/237 591/727/237 592/731/237
         2822  +f 529/669/237 528/665/237 592/731/237 593/735/237
         2823  +f 530/673/237 529/669/237 593/735/237 594/739/237
         2824  +f 531/677/237 530/673/237 594/739/237 595/743/237
         2825  +f 532/681/237 531/677/237 595/743/237 596/747/237
         2826  +f 533/689/237 532/681/237 596/747/237 597/755/237
         2827  +f 534/695/237 533/689/237 597/755/237 598/761/237
         2828  +f 535/701/237 534/695/237 598/761/237 599/767/237
         2829  +f 536/707/237 535/701/237 599/767/237 600/773/237
         2830  +f 537/648/237 536/707/237 600/773/237 601/714/237
         2831  +f 538/649/237 537/648/237 601/714/237 602/713/237
         2832  +f 539/655/237 538/649/237 602/713/237 603/721/237
         2833  +f 540/659/237 539/655/237 603/721/237 604/725/237
         2834  +f 541/663/237 540/659/237 604/725/237 605/729/237
         2835  +f 542/667/237 541/663/237 605/729/237 606/733/237
         2836  +f 543/671/237 542/667/237 606/733/237 607/737/237
         2837  +f 544/675/237 543/671/237 607/737/237 608/741/237
         2838  +f 545/679/237 544/675/237 608/741/237 609/745/237
         2839  +f 546/687/237 545/679/237 609/745/237 610/753/237
         2840  +f 547/693/237 546/687/237 610/753/237 611/759/237
         2841  +f 548/699/237 547/693/237 611/759/237 612/765/237
         2842  +f 549/705/237 548/699/237 612/765/237 613/771/237
         2843  +f 518/684/237 549/705/237 613/771/237 582/750/237
         2844  +f 620/774/238 619/775/238 651/776/238 652/777/238
         2845  +f 634/778/239 633/779/239 665/780/239 666/781/239
         2846  +f 621/782/240 620/783/240 652/784/240 653/785/240
         2847  +f 635/786/241 634/778/241 666/781/241 667/787/241
         2848  +f 622/788/242 621/782/242 653/785/242 654/789/242
         2849  +f 636/790/243 635/786/243 667/787/243 668/791/243
         2850  +f 623/792/244 622/788/244 654/789/244 655/793/244
         2851  +f 637/794/245 636/790/245 668/791/245 669/795/245
         2852  +f 624/796/246 623/792/246 655/793/246 656/797/246
         2853  +f 638/798/247 637/794/247 669/795/247 670/799/247
         2854  +f 625/800/248 624/796/248 656/797/248 657/801/248
         2855  +f 639/802/249 638/798/249 670/799/249 671/803/249
         2856  +f 626/804/250 625/800/250 657/801/250 658/805/250
         2857  +f 640/806/251 639/802/251 671/803/251 672/807/251
         2858  +f 627/808/252 626/804/252 658/805/252 659/809/252
         2859  +f 641/810/253 640/806/253 672/807/253 673/811/253
         2860  +f 628/812/254 627/808/254 659/809/254 660/813/254
         2861  +f 615/814/255 614/815/255 646/816/255 647/817/255
         2862  +f 642/818/256 641/810/256 673/811/256 674/819/256
         2863  +f 629/820/257 628/812/257 660/813/257 661/821/257
         2864  +f 616/822/258 615/814/258 647/817/258 648/823/258
         2865  +f 643/824/259 642/818/259 674/819/259 675/825/259
         2866  +f 630/826/260 629/820/260 661/821/260 662/827/260
         2867  +f 617/828/261 616/822/261 648/823/261 649/829/261
         2868  +f 644/830/262 643/824/262 675/825/262 676/831/262
         2869  +f 631/832/263 630/826/263 662/827/263 663/833/263
         2870  +f 618/834/264 617/828/264 649/829/264 650/835/264
         2871  +f 645/836/265 644/830/265 676/831/265 677/837/265
         2872  +f 632/838/266 631/832/266 663/833/266 664/839/266
         2873  +f 619/775/267 618/834/267 650/835/267 651/776/267
         2874  +f 614/815/268 645/836/268 677/837/268 646/816/268
         2875  +f 633/779/269 632/838/269 664/839/269 665/780/269
         2876  +f 684/840/270 716/841/270 715/842/270 683/843/270
         2877  +f 698/844/264 730/845/264 729/846/264 697/847/264
         2878  +f 685/848/245 717/849/245 716/850/245 684/851/245
         2879  +f 699/852/267 731/853/267 730/845/267 698/844/267
         2880  +f 686/854/247 718/855/247 717/849/247 685/848/247
         2881  +f 700/856/271 732/857/271 731/853/271 699/852/271
         2882  +f 687/858/249 719/859/249 718/855/249 686/854/249
         2883  +f 701/860/240 733/861/240 732/857/240 700/856/240
         2884  +f 688/862/251 720/863/251 719/859/251 687/858/251
         2885  +f 702/864/242 734/865/242 733/861/242 701/860/242
         2886  +f 689/866/253 721/867/253 720/863/253 688/862/253
         2887  +f 703/868/244 735/869/244 734/865/244 702/864/244
         2888  +f 690/870/256 722/871/256 721/867/256 689/866/256
         2889  +f 704/872/246 736/873/246 735/869/246 703/868/246
         2890  +f 691/874/259 723/875/259 722/871/259 690/870/259
         2891  +f 705/876/248 737/877/248 736/873/248 704/872/248
         2892  +f 692/878/272 724/879/272 723/875/272 691/874/272
         2893  +f 679/880/263 711/881/263 710/882/263 678/883/263
         2894  +f 706/884/250 738/885/250 737/877/250 705/876/250
         2895  +f 693/886/265 725/887/265 724/879/265 692/878/265
         2896  +f 680/888/266 712/889/266 711/881/266 679/880/266
         2897  +f 707/890/252 739/891/252 738/885/252 706/884/252
         2898  +f 694/892/268 726/893/268 725/887/268 693/886/268
         2899  +f 681/894/269 713/895/269 712/889/269 680/888/269
         2900  +f 708/896/273 740/897/273 739/891/273 707/890/273
         2901  +f 695/898/255 727/899/255 726/893/255 694/892/255
         2902  +f 682/900/239 714/901/239 713/895/239 681/894/239
         2903  +f 709/902/257 741/903/257 740/897/257 708/896/257
         2904  +f 696/904/258 728/905/258 727/899/258 695/898/258
         2905  +f 683/843/241 715/842/241 714/901/241 682/900/241
         2906  +f 678/883/260 710/882/260 741/903/260 709/902/260
         2907  +f 697/847/261 729/846/261 728/905/261 696/904/261
         2908  +f 614/815/274 615/814/274 679/880/274 678/883/274
         2909  +f 615/814/274 616/822/274 680/888/274 679/880/274
         2910  +f 616/822/274 617/828/274 681/894/274 680/888/274
         2911  +f 617/828/274 618/834/274 682/900/274 681/894/274
         2912  +f 618/834/274 619/775/274 683/843/274 682/900/274
         2913  +f 619/775/274 620/774/274 684/840/274 683/843/274
         2914  +f 620/783/274 621/782/274 685/848/274 684/851/274
         2915  +f 621/782/274 622/788/274 686/854/274 685/848/274
         2916  +f 622/788/274 623/792/274 687/858/274 686/854/274
         2917  +f 623/792/274 624/796/274 688/862/274 687/858/274
         2918  +f 624/796/274 625/800/274 689/866/274 688/862/274
         2919  +f 625/800/274 626/804/274 690/870/274 689/866/274
         2920  +f 626/804/274 627/808/274 691/874/274 690/870/274
         2921  +f 627/808/274 628/812/274 692/878/274 691/874/274
         2922  +f 628/812/274 629/820/274 693/886/274 692/878/274
         2923  +f 629/820/274 630/826/274 694/892/274 693/886/274
         2924  +f 630/826/274 631/832/274 695/898/274 694/892/274
         2925  +f 631/832/274 632/838/274 696/904/274 695/898/274
         2926  +f 632/838/274 633/779/274 697/847/274 696/904/274
         2927  +f 633/779/274 634/778/274 698/844/274 697/847/274
         2928  +f 634/778/274 635/786/274 699/852/274 698/844/274
         2929  +f 635/786/274 636/790/274 700/856/274 699/852/274
         2930  +f 636/790/274 637/794/274 701/860/274 700/856/274
         2931  +f 637/794/274 638/798/274 702/864/274 701/860/274
         2932  +f 638/798/274 639/802/274 703/868/274 702/864/274
         2933  +f 639/802/274 640/806/274 704/872/274 703/868/274
         2934  +f 640/806/274 641/810/274 705/876/274 704/872/274
         2935  +f 641/810/274 642/818/274 706/884/274 705/876/274
         2936  +f 642/818/274 643/824/274 707/890/274 706/884/274
         2937  +f 643/824/274 644/830/274 708/896/274 707/890/274
         2938  +f 644/830/274 645/836/274 709/902/274 708/896/274
         2939  +f 645/836/274 614/815/274 678/883/274 709/902/274
         2940  +f 647/817/275 646/816/275 710/882/275 711/881/275
         2941  +f 648/823/275 647/817/275 711/881/275 712/889/275
         2942  +f 649/829/275 648/823/275 712/889/275 713/895/275
         2943  +f 650/835/275 649/829/275 713/895/275 714/901/275
         2944  +f 651/776/275 650/835/275 714/901/275 715/842/275
         2945  +f 652/777/275 651/776/275 715/842/275 716/841/275
         2946  +f 653/785/275 652/784/275 716/850/275 717/849/275
         2947  +f 654/789/275 653/785/275 717/849/275 718/855/275
         2948  +f 655/793/275 654/789/275 718/855/275 719/859/275
         2949  +f 656/797/275 655/793/275 719/859/275 720/863/275
         2950  +f 657/801/275 656/797/275 720/863/275 721/867/275
         2951  +f 658/805/275 657/801/275 721/867/275 722/871/275
         2952  +f 659/809/275 658/805/275 722/871/275 723/875/275
         2953  +f 660/813/275 659/809/275 723/875/275 724/879/275
         2954  +f 661/821/275 660/813/275 724/879/275 725/887/275
         2955  +f 662/827/275 661/821/275 725/887/275 726/893/275
         2956  +f 663/833/275 662/827/275 726/893/275 727/899/275
         2957  +f 664/839/275 663/833/275 727/899/275 728/905/275
         2958  +f 665/780/275 664/839/275 728/905/275 729/846/275
         2959  +f 666/781/275 665/780/275 729/846/275 730/845/275
         2960  +f 667/787/275 666/781/275 730/845/275 731/853/275
         2961  +f 668/791/275 667/787/275 731/853/275 732/857/275
         2962  +f 669/795/275 668/791/275 732/857/275 733/861/275
         2963  +f 670/799/275 669/795/275 733/861/275 734/865/275
         2964  +f 671/803/275 670/799/275 734/865/275 735/869/275
         2965  +f 672/807/275 671/803/275 735/869/275 736/873/275
         2966  +f 673/811/275 672/807/275 736/873/275 737/877/275
         2967  +f 674/819/275 673/811/275 737/877/275 738/885/275
         2968  +f 675/825/275 674/819/275 738/885/275 739/891/275
         2969  +f 676/831/275 675/825/275 739/891/275 740/897/275
         2970  +f 677/837/275 676/831/275 740/897/275 741/903/275
         2971  +f 646/816/275 677/837/275 741/903/275 710/882/275
         2972  +f 748/906/276 747/907/276 779/908/276 780/909/276
         2973  +f 762/910/277 761/911/277 793/912/277 794/913/277
         2974  +f 749/914/278 748/915/278 780/916/278 781/917/278
         2975  +f 763/918/279 762/910/279 794/913/279 795/919/279
         2976  +f 750/920/280 749/914/280 781/917/280 782/921/280
         2977  +f 764/922/281 763/918/281 795/919/281 796/923/281
         2978  +f 751/924/282 750/920/282 782/921/282 783/925/282
         2979  +f 765/926/283 764/922/283 796/923/283 797/927/283
         2980  +f 752/928/284 751/924/284 783/925/284 784/929/284
         2981  +f 766/930/285 765/926/285 797/927/285 798/931/285
         2982  +f 753/932/286 752/928/286 784/929/286 785/933/286
         2983  +f 767/934/287 766/930/287 798/931/287 799/935/287
         2984  +f 754/936/288 753/932/288 785/933/288 786/937/288
         2985  +f 768/938/289 767/934/289 799/935/289 800/939/289
         2986  +f 755/940/290 754/936/290 786/937/290 787/941/290
         2987  +f 769/942/291 768/938/291 800/939/291 801/943/291
         2988  +f 756/944/292 755/940/292 787/941/292 788/945/292
         2989  +f 743/946/293 742/947/293 774/948/293 775/949/293
         2990  +f 770/950/294 769/942/294 801/943/294 802/951/294
         2991  +f 757/952/295 756/944/295 788/945/295 789/953/295
         2992  +f 744/954/296 743/946/296 775/949/296 776/955/296
         2993  +f 771/956/297 770/950/297 802/951/297 803/957/297
         2994  +f 758/958/298 757/952/298 789/953/298 790/959/298
         2995  +f 745/960/299 744/954/299 776/955/299 777/961/299
         2996  +f 772/962/300 771/956/300 803/957/300 804/963/300
         2997  +f 759/964/301 758/958/301 790/959/301 791/965/301
         2998  +f 746/966/302 745/960/302 777/961/302 778/967/302
         2999  +f 773/968/303 772/962/303 804/963/303 805/969/303
         3000  +f 760/970/304 759/964/304 791/965/304 792/971/304
         3001  +f 747/907/305 746/966/305 778/967/305 779/908/305
         3002  +f 742/947/306 773/968/306 805/969/306 774/948/306
         3003  +f 761/911/307 760/970/307 792/971/307 793/912/307
         3004  +f 812/972/281 844/973/281 843/974/281 811/975/281
         3005  +f 826/976/302 858/977/302 857/978/302 825/979/302
         3006  +f 813/980/283 845/981/283 844/982/283 812/983/283
         3007  +f 827/984/305 859/985/305 858/977/305 826/976/305
         3008  +f 814/986/285 846/987/285 845/981/285 813/980/285
         3009  +f 828/988/276 860/989/276 859/985/276 827/984/276
         3010  +f 815/990/287 847/991/287 846/987/287 814/986/287
         3011  +f 829/992/278 861/993/278 860/989/278 828/988/278
         3012  +f 816/994/289 848/995/289 847/991/289 815/990/289
         3013  +f 830/996/280 862/997/280 861/993/280 829/992/280
         3014  +f 817/998/291 849/999/291 848/995/291 816/994/291
         3015  +f 831/1000/282 863/1001/282 862/997/282 830/996/282
         3016  +f 818/1002/294 850/1003/294 849/999/294 817/998/294
         3017  +f 832/1004/284 864/1005/284 863/1001/284 831/1000/284
         3018  +f 819/1006/297 851/1007/297 850/1003/297 818/1002/297
         3019  +f 833/1008/286 865/1009/286 864/1005/286 832/1004/286
         3020  +f 820/1010/300 852/1011/300 851/1007/300 819/1006/300
         3021  +f 807/1012/301 839/1013/301 838/1014/301 806/1015/301
         3022  +f 834/1016/288 866/1017/288 865/1009/288 833/1008/288
         3023  +f 821/1018/303 853/1019/303 852/1011/303 820/1010/303
         3024  +f 808/1020/304 840/1021/304 839/1013/304 807/1012/304
         3025  +f 835/1022/290 867/1023/290 866/1017/290 834/1016/290
         3026  +f 822/1024/306 854/1025/306 853/1019/306 821/1018/306
         3027  +f 809/1026/307 841/1027/307 840/1021/307 808/1020/307
         3028  +f 836/1028/292 868/1029/292 867/1023/292 835/1022/292
         3029  +f 823/1030/293 855/1031/293 854/1025/293 822/1024/293
         3030  +f 810/1032/277 842/1033/277 841/1027/277 809/1026/277
         3031  +f 837/1034/295 869/1035/295 868/1029/295 836/1028/295
         3032  +f 824/1036/296 856/1037/296 855/1031/296 823/1030/296
         3033  +f 811/975/279 843/974/279 842/1033/279 810/1032/279
         3034  +f 806/1015/298 838/1014/298 869/1035/298 837/1034/298
         3035  +f 825/979/299 857/978/299 856/1037/299 824/1036/299
         3036  +f 742/947/308 743/946/308 807/1012/308 806/1015/308
         3037  +f 743/946/308 744/954/308 808/1020/308 807/1012/308
         3038  +f 744/954/308 745/960/308 809/1026/308 808/1020/308
         3039  +f 745/960/308 746/966/308 810/1032/308 809/1026/308
         3040  +f 746/966/308 747/907/308 811/975/308 810/1032/308
         3041  +f 747/907/308 748/906/308 812/972/308 811/975/308
         3042  +f 748/915/308 749/914/308 813/980/308 812/983/308
         3043  +f 749/914/308 750/920/308 814/986/308 813/980/308
         3044  +f 750/920/308 751/924/308 815/990/308 814/986/308
         3045  +f 751/924/308 752/928/308 816/994/308 815/990/308
         3046  +f 752/928/308 753/932/308 817/998/308 816/994/308
         3047  +f 753/932/308 754/936/308 818/1002/308 817/998/308
         3048  +f 754/936/308 755/940/308 819/1006/308 818/1002/308
         3049  +f 755/940/308 756/944/308 820/1010/308 819/1006/308
         3050  +f 756/944/308 757/952/308 821/1018/308 820/1010/308
         3051  +f 757/952/308 758/958/308 822/1024/308 821/1018/308
         3052  +f 758/958/308 759/964/308 823/1030/308 822/1024/308
         3053  +f 759/964/308 760/970/308 824/1036/308 823/1030/308
         3054  +f 760/970/308 761/911/308 825/979/308 824/1036/308
         3055  +f 761/911/308 762/910/308 826/976/308 825/979/308
         3056  +f 762/910/308 763/918/308 827/984/308 826/976/308
         3057  +f 763/918/308 764/922/308 828/988/308 827/984/308
         3058  +f 764/922/308 765/926/308 829/992/308 828/988/308
         3059  +f 765/926/308 766/930/308 830/996/308 829/992/308
         3060  +f 766/930/308 767/934/308 831/1000/308 830/996/308
         3061  +f 767/934/308 768/938/308 832/1004/308 831/1000/308
         3062  +f 768/938/308 769/942/308 833/1008/308 832/1004/308
         3063  +f 769/942/308 770/950/308 834/1016/308 833/1008/308
         3064  +f 770/950/308 771/956/308 835/1022/308 834/1016/308
         3065  +f 771/956/308 772/962/308 836/1028/308 835/1022/308
         3066  +f 772/962/308 773/968/308 837/1034/308 836/1028/308
         3067  +f 773/968/308 742/947/308 806/1015/308 837/1034/308
         3068  +f 775/949/309 774/948/309 838/1014/309 839/1013/309
         3069  +f 776/955/309 775/949/309 839/1013/309 840/1021/309
         3070  +f 777/961/309 776/955/309 840/1021/309 841/1027/309
         3071  +f 778/967/309 777/961/309 841/1027/309 842/1033/309
         3072  +f 779/908/309 778/967/309 842/1033/309 843/974/309
         3073  +f 780/909/309 779/908/309 843/974/309 844/973/309
         3074  +f 781/917/309 780/916/309 844/982/309 845/981/309
         3075  +f 782/921/309 781/917/309 845/981/309 846/987/309
         3076  +f 783/925/309 782/921/309 846/987/309 847/991/309
         3077  +f 784/929/309 783/925/309 847/991/309 848/995/309
         3078  +f 785/933/309 784/929/309 848/995/309 849/999/309
         3079  +f 786/937/309 785/933/309 849/999/309 850/1003/309
         3080  +f 787/941/309 786/937/309 850/1003/309 851/1007/309
         3081  +f 788/945/309 787/941/309 851/1007/309 852/1011/309
         3082  +f 789/953/309 788/945/309 852/1011/309 853/1019/309
         3083  +f 790/959/309 789/953/309 853/1019/309 854/1025/309
         3084  +f 791/965/309 790/959/309 854/1025/309 855/1031/309
         3085  +f 792/971/309 791/965/309 855/1031/309 856/1037/309
         3086  +f 793/912/309 792/971/309 856/1037/309 857/978/309
         3087  +f 794/913/309 793/912/309 857/978/309 858/977/309
         3088  +f 795/919/309 794/913/309 858/977/309 859/985/309
         3089  +f 796/923/309 795/919/309 859/985/309 860/989/309
         3090  +f 797/927/309 796/923/309 860/989/309 861/993/309
         3091  +f 798/931/309 797/927/309 861/993/309 862/997/309
         3092  +f 799/935/309 798/931/309 862/997/309 863/1001/309
         3093  +f 800/939/309 799/935/309 863/1001/309 864/1005/309
         3094  +f 801/943/309 800/939/309 864/1005/309 865/1009/309
         3095  +f 802/951/309 801/943/309 865/1009/309 866/1017/309
         3096  +f 803/957/309 802/951/309 866/1017/309 867/1023/309
         3097  +f 804/963/309 803/957/309 867/1023/309 868/1029/309
         3098  +f 805/969/309 804/963/309 868/1029/309 869/1035/309
         3099  +f 774/948/309 805/969/309 869/1035/309 838/1014/309
         3100  +o wood
         3101  +v -0.354512 -0.038922 -0.198873
         3102  +v -0.386499 -0.038922 -0.125890
         3103  +v -0.362313 -0.038922 0.184278
         3104  +v -0.319401 -0.038922 0.251421
         3105  +v 0.354512 -0.038922 0.198873
         3106  +v 0.386498 -0.038922 0.125889
         3107  +v 0.362313 -0.038922 -0.184279
         3108  +v 0.319400 -0.038922 -0.251422
         3109  +v -0.406839 -0.038922 -0.228228
         3110  +v -0.443547 -0.038922 -0.144472
         3111  +v -0.415792 -0.038922 0.211478
         3112  +v -0.366545 -0.038922 0.288532
         3113  +v 0.406839 -0.038922 0.228227
         3114  +v 0.443547 -0.038922 0.144471
         3115  +v 0.415792 -0.038922 -0.211479
         3116  +v 0.366545 -0.038922 -0.288532
         3117  +v -0.386499 -0.500000 -0.125890
         3118  +v -0.354512 -0.500000 -0.198873
         3119  +v -0.319401 -0.500000 0.251421
         3120  +v -0.362313 -0.500000 0.184278
         3121  +v 0.386498 -0.500000 0.125889
         3122  +v 0.354512 -0.500000 0.198873
         3123  +v 0.319400 -0.500000 -0.251422
         3124  +v 0.362313 -0.500000 -0.184279
         3125  +v -0.443547 -0.500000 -0.144472
         3126  +v -0.406839 -0.500000 -0.228228
         3127  +v -0.366545 -0.500000 0.288532
         3128  +v -0.415792 -0.500000 0.211478
         3129  +v 0.443547 -0.500000 0.144471
         3130  +v 0.406839 -0.500000 0.228227
         3131  +v 0.366545 -0.500000 -0.288532
         3132  +v 0.415792 -0.500000 -0.211479
         3133  +vt 1.388065 0.664137
         3134  +vt 1.486764 0.664137
         3135  +vt 0.030939 0.664137
         3136  +vt 1.519146 0.664137
         3137  +vt -0.486764 0.664137
         3138  +vt -0.388064 0.664137
         3139  +vt -0.180972 0.664137
         3140  +vt -0.632414 0.664137
         3141  +vt 1.486764 0.664137
         3142  +vt 1.388064 0.664137
         3143  +vt 1.180972 0.664137
         3144  +vt 1.632414 0.664137
         3145  +vt -0.388064 0.664137
         3146  +vt -0.486764 0.664137
         3147  +vt 0.969060 0.664137
         3148  +vt -0.519145 0.664137
         3149  +vt 1.632414 -0.547378
         3150  +vt 1.486764 -0.547378
         3151  +vt -0.519145 0.664137
         3152  +vt -0.388064 -0.547378
         3153  +vt -0.519145 -0.547378
         3154  +vt -0.093386 0.664137
         3155  +vt 0.091269 0.664137
         3156  +vt 0.091269 -0.547378
         3157  +vt -0.093386 -0.547378
         3158  +vt 0.030939 0.664137
         3159  +vt -0.180972 -0.547378
         3160  +vt 0.030939 -0.547378
         3161  +vt -0.486764 1.062816
         3162  +vt -0.388064 1.247470
         3163  +vt -0.519145 1.335056
         3164  +vt -0.632414 1.123146
         3165  +vt -0.388064 0.060699
         3166  +vt -0.486764 0.245354
         3167  +vt -0.632414 0.185024
         3168  +vt -0.519145 -0.026887
         3169  +vt 1.486764 0.245354
         3170  +vt 1.388065 0.060700
         3171  +vt 1.519146 -0.026887
         3172  +vt 1.632414 0.185025
         3173  +vt 1.388064 1.247471
         3174  +vt 1.486764 1.062817
         3175  +vt 1.632414 1.123147
         3176  +vt 1.519145 1.335057
         3177  +vt 0.969061 0.664137
         3178  +vt 1.180972 -0.547378
         3179  +vt 0.969061 -0.547378
         3180  +vt 1.093386 0.664137
         3181  +vt 0.908732 0.664137
         3182  +vt 0.908732 -0.547378
         3183  +vt 1.093386 -0.547378
         3184  +vt 1.519145 0.664137
         3185  +vt 1.388064 -0.547378
         3186  +vt 1.519145 -0.547378
         3187  +vt -0.519145 -0.547378
         3188  +vt -0.388064 -0.547378
         3189  +vt 1.180971 0.664137
         3190  +vt 0.969060 -0.547378
         3191  +vt 1.180971 -0.547378
         3192  +vt 0.908731 0.664137
         3193  +vt 1.093385 0.664137
         3194  +vt 1.093385 -0.547378
         3195  +vt 0.908731 -0.547378
         3196  +vt -0.632414 0.664137
         3197  +vt -0.486764 -0.547378
         3198  +vt -0.632414 -0.547378
         3199  +vt 1.519146 -0.547378
         3200  +vt 1.388065 -0.547378
         3201  +vt -0.180972 0.664137
         3202  +vt 0.030939 -0.547378
         3203  +vt -0.180972 -0.547378
         3204  +vt 0.091269 0.664137
         3205  +vt -0.093385 0.664137
         3206  +vt -0.093385 -0.547378
         3207  +vt 0.091269 -0.547378
         3208  +vt 1.632414 0.664137
         3209  +vt 1.486764 -0.547378
         3210  +vt 1.632414 -0.547378
         3211  +vt -0.632414 -0.547378
         3212  +vt -0.486764 -0.547378
         3213  +vn 0.0000 -1.0000 -0.0000
         3214  +vn -0.4533 0.0000 -0.8913
         3215  +vn -0.6185 0.0000 -0.7858
         3216  +vn -0.8426 0.0000 0.5385
         3217  +vn 0.8426 0.0000 -0.5385
         3218  +vn 0.0000 1.0000 0.0000
         3219  +vn 0.6185 0.0000 0.7858
         3220  +vn -0.4893 0.0000 0.8721
         3221  +vn 0.9159 0.0000 0.4014
         3222  +vn -0.9159 0.0000 -0.4014
         3223  +vn 0.3097 -0.0000 -0.9508
         3224  +vn 0.4893 -0.0000 -0.8721
         3225  +vn -0.3097 0.0000 0.9508
         3226  +vn 0.4533 0.0000 0.8913
         3227  +g wood_wood_wood
         3228  +usemtl wood
         3229  +s off
         3230  +f 874/1038/310 875/1039/310 883/1040/310 882/1041/310
         3231  +f 872/1042/310 873/1043/310 881/1044/310 880/1045/310
         3232  +f 876/1046/310 877/1047/310 885/1048/310 884/1049/310
         3233  +f 870/1050/310 871/1051/310 879/1052/310 878/1053/310
         3234  +f 876/1046/311 884/1049/311 901/1054/311 893/1055/311
         3235  +f 881/1056/312 873/1043/312 888/1057/312 896/1058/312
         3236  +f 873/1059/313 872/1060/313 889/1061/313 888/1062/313
         3237  +f 880/1063/314 881/1044/314 896/1064/314 897/1065/314
         3238  +f 886/1066/315 887/1067/315 895/1068/315 894/1069/315
         3239  +f 888/1070/315 889/1071/315 897/1072/315 896/1073/315
         3240  +f 890/1074/315 891/1075/315 899/1076/315 898/1077/315
         3241  +f 892/1078/315 893/1079/315 901/1080/315 900/1081/315
         3242  +f 884/1082/313 885/1048/313 900/1083/313 901/1084/313
         3243  +f 877/1085/314 876/1086/314 893/1087/314 892/1088/314
         3244  +f 885/1089/316 877/1047/316 892/1090/316 900/1091/316
         3245  +f 870/1050/317 878/1053/317 895/1092/317 887/1093/317
         3246  +f 878/1094/318 879/1052/318 894/1095/318 895/1096/318
         3247  +f 871/1097/319 870/1098/319 887/1099/319 886/1100/319
         3248  +f 879/1101/320 871/1051/320 886/1102/320 894/1103/320
         3249  +f 874/1038/321 882/1041/321 899/1104/321 891/1105/321
         3250  +f 882/1106/319 883/1040/319 898/1107/319 899/1108/319
         3251  +f 875/1109/318 874/1110/318 891/1111/318 890/1112/318
         3252  +f 883/1113/322 875/1039/322 890/1114/322 898/1115/322
         3253  +f 872/1042/323 880/1045/323 897/1116/323 889/1117/323

Modified potions.lua from [6c72918b5d] to [ed6c69759e].

     1      1   local u = sorcery.lib
     2         -sorcery.data.infusions = {} -- not sure where to put this tbh
     3         -sorcery.data.infusion_leftovers = {}
            2  +sorcery.registry.mk('infusions',false)
            3  +sorcery.registry.mk('residue',false)
     4      4   
     5      5   sorcery.register_potion = function(name,label,desc,color,imgvariant,glow,extra)
     6      6   	local image = 'sorcery_liquid_'..(imgvariant or 'dull')..'.png' .. 
     7      7   		'^[multiply:'..tostring(color)..
     8      8   		'^vessels_glass_bottle.png'
     9      9   
    10         -	sorcery.data.register.infusion_leftover('sorcery:' .. name, 'vessels:glass_bottle')
           10  +	sorcery.register.residue.link('sorcery:' .. name, 'vessels:glass_bottle')
    11     11   	local node = {
    12     12   		description = color:darken(0.8):bg(
    13     13   			sorcery.lib.ui.tooltip {
    14     14   				title = label;
    15     15   				desc = desc;
    16     16   				color = color:readable();
    17     17   			}
................................................................................
    44     44   	node.groups.vessel = 1;
    45     45   	node.groups.not_in_creative_inventory = 1;
    46     46   	minetest.register_node("sorcery:"..name, node)
    47     47   end
    48     48   
    49     49   sorcery.register_oil = function(name,label,desc,color,imgvariant,extra)
    50     50   	local image = 'xdecor_bowl.png^(sorcery_oil_' .. (imgvariant or 'dull') .. '.png^[colorize:'..tostring(color)..':140)'
    51         -	sorcery.data.register.infusion_leftover('sorcery:' .. name, 'xdecor:bowl')
           51  +	sorcery.register.residue.link('sorcery:' .. name, 'xdecor:bowl')
    52     52   	extra.description = label;
    53     53   	extra.inventory_image = image;
    54     54   	if not extra.groups then extra.groups = {} end
    55     55   	minetest.register_craftitem('sorcery:' .. name, extra)
    56     56   end
    57     57   
    58     58   sorcery.register_potion('blood', 'Blood', 'A bottle of sacrificial blood, imbued\nwith stolen life force', u.color(219,19,14))
    59     59   sorcery.register_potion('potion_water', 'Water Bottle', 'A bottle of plain water', u.color(43,90,162))
    60     60   sorcery.register_potion('holy_water', 'Holy Water','A bottle of consecrated water',u.color(94,138,206),'sparkle',6)
    61     61   
    62     62   local create_infusion_recipe = function(id,potion,default_basis,proto)
    63     63   	if potion.infusion then
    64         -		sorcery.data.register.infusion {
           64  +		sorcery.register.infusions.link {
    65     65   			infuse = potion.infusion;
    66     66   			into = potion.basis or default_basis;
    67     67   			output = 'sorcery:' .. id;
    68     68   			_proto = proto;
    69     69   		}
    70     70   	end
    71     71   end
    72     72   
    73         -for n,v in pairs(sorcery.data.potions) do
           73  +-- for n,v in pairs(sorcery.data.potions) do
           74  +sorcery.register.potions.foreach('sorcery:mknodes',{},function(n,v)
    74     75   	local color = u.color(v.color)
    75     76   	local kind = v.style
    76     77   	local glow = v.glow
    77     78   	local id = 'potion_' .. string.lower(n)
    78     79   	local desc = 'A ' .. ((glow and 'glowing ') or '') ..
    79     80   		'bottle of ' .. string.lower(n) .. 
    80     81   		((kind == 'sparkle' and ', fiercely bubbling') or '') ..
................................................................................
    84     85   		_proto = v;
    85     86   		groups = {
    86     87   			sorcery_potion = 1;
    87     88   			sorcery_magical = 1;
    88     89   		};
    89     90   	})
    90     91   	create_infusion_recipe(id,v,'sorcery:potion_serene',{data=v,name=fullname})
    91         -end
           92  +end)
    92     93   
    93         -for n,potion in pairs(sorcery.data.draughts) do
           94  +-- for n,potion in pairs(sorcery.data.draughts) do
           95  +sorcery.register.draughts.foreach('sorcery:mknodes',{},function(n,potion)
    94     96   	local name = 'draught_' .. n
    95     97   	local behavior = {
    96     98   		_proto = potion;
    97     99   		groups = {
    98    100   			sorcery_potion = 2;
    99    101   			sorcery_draught = 1;
   100    102   			sorcery_magical = 1;
................................................................................
   101    103   			sorcery_usable_magic = 1;
   102    104   		};
   103    105   		on_use = function(stack, user, pointat)
   104    106   			local pproto = stack:get_definition()._proto
   105    107   			if potion.effect(stack, user, pproto) == false then return nil end
   106    108   			local meta = stack:get_meta()
   107    109   			local force = meta:get_int('force');
          110  +			local duration = pproto:duration(meta);
   108    111   			minetest.add_particlespawner {
   109         -				amount = 200 + (30 * force);
   110         -				time = pproto:duration(meta);
          112  +				amount = (7 + (10 * force)) * duration;
          113  +				time = duration;
   111    114   				minpos = { x = -0.1; y = 0; z = -0.1; };
   112    115   				maxpos = { x = 0.1; y = 2; z = 0.1; };
   113    116   				minvel = { x = -0.1; y = 0; z = -0.1; };
   114    117   				maxvel = { x = 0.1; y = 0; z = 0.1; };
   115    118   				minacc = { x = 0; y = 0.1; z = 0; };
   116    119   				maxacc = { x = 0; y = 1; z = 0; };
   117    120   				minexptime = 1;
................................................................................
   141    144   	sorcery.register_potion(name, fullname,
   142    145   		potion.desc,
   143    146   		u.color(potion.color),
   144    147   		potion.style or 'dull',
   145    148   		potion.glow or 0,
   146    149   		behavior)
   147    150   	create_infusion_recipe(name,potion,'sorcery:potion_luminous',{data=potion,name=fullname})
   148         -end
          151  +end)
   149    152   
   150         -for n,elixir in pairs(sorcery.data.elixirs) do
          153  +-- for n,elixir in pairs(sorcery.data.elixirs) do
          154  +sorcery.register.elixirs.foreach('sorcery:mknodes',{},function(n,elixir)
   151    155   	local color = u.color(elixir.color)
   152    156   	local id = 'elixir_' .. string.lower(n)
   153    157   	local fullname = 'Elixir of ' .. n
   154    158   	sorcery.register_potion(id, fullname, nil, color, 'dull', false, {
   155    159   		_proto = elixir;
   156    160   		groups = {
   157    161   			sorcery_elixir = 1;
   158    162   			sorcery_magical = 1;
   159    163   		};
   160    164   	})
   161    165   	create_infusion_recipe(id,elixir,'sorcery:potion_misty',{data=elixir,name=fullname})
   162         -end
          166  +end)
   163    167   
   164         -for n,v in pairs(sorcery.data.oils) do
          168  +-- for n,v in pairs(sorcery.data.oils) do
          169  +sorcery.register.oils.foreach('sorcery:mknodes',{},function(n,v)
   165    170   	local color = u.color(v.color)
   166    171   	local kind = v.style
   167    172   	local id = 'oil_' .. n
   168    173   	n = v.name or u.str.capitalize(n)
   169    174   	sorcery.register_oil(id, n .. ' Oil', nil, color, kind, {
   170    175   		groups = { sorcery_oil = 1 };
   171    176   	})
   172         -end
          177  +end)
   173    178   
   174         -for n,v in pairs(sorcery.data.greases) do
          179  +-- for n,v in pairs(sorcery.data.greases) do
          180  +sorcery.register.greases.foreach('sorcery:mknodes',{},function(n,v)
   175    181   	local color = u.color(v.color)
   176    182   	local kind = v.style
   177    183   	sorcery.register_oil('grease_' .. n, u.str.capitalize(n) .. ' Grease', nil, color, kind, {
   178    184   		groups = { sorcery_grease = 1 }
   179    185   	})
   180         -end
          186  +end)
   181    187   
   182         -for n,v in pairs(sorcery.data.philters) do
          188  +-- for n,v in pairs(sorcery.data.philters) do
          189  +sorcery.register.philters.foreach('sorcery:mknodes',{},function(n,v)
   183    190   	local color = u.color(v.color)
   184    191   	local id = 'philter_' .. n
   185    192   	local name = v.name or u.str.capitalize(n)
   186    193   	local fullname = name .. ' Philter'
   187    194   	sorcery.register_potion(id, fullname, v.desc, color, 'sparkle',v.glow or 4, {
   188    195   		_proto = v;
   189    196   		_protoname = n;
   190    197   		groups = {
   191    198   			sorcery_magical = 1;
   192    199   			sorcery_philter = 1;
   193    200   		};
   194    201   	})
   195    202   	create_infusion_recipe(id,v,'sorcery:potion_viscous',{data=v,name=fullname})
   196         -end
          203  +end)
   197    204   
   198         -for n,v in pairs(sorcery.data.extracts) do
          205  +-- for n,v in pairs(sorcery.data.extracts) do
          206  +sorcery.register.extracts.foreach('sorcery:mknodes',{},function(n,v)
   199    207   	local item = v[1]
   200    208   	local color = u.color(v[2])
   201    209   	local name = 'extract_' .. n
   202    210   	sorcery.register_potion(name, u.str.capitalize(n) .. ' Extract', nil, color, 'sparkle', false, {
   203    211   		groups = {
   204         -			sorcery_extracts = 1;
          212  +			sorcery_extract = 1;
   205    213   		};
   206    214   	})
   207    215   
   208    216   	local add_alcohol = function(booze)
   209    217   		minetest.register_craft {
   210    218   			type = "shapeless";
   211    219   			recipe = {
................................................................................
   220    228   			};
   221    229   		}
   222    230   	end
   223    231   	-- need a relatively pure alcohol for this, tho other alcohols can be used
   224    232   	-- for potionmaking in other ways
   225    233   	add_alcohol('farming:bottle_ethanol')
   226    234   	add_alcohol('wine:glass_vodka')
   227         -end
          235  +end)

Added precipitator.lua version [74e73185fe].

            1  +-- the precipitator is a ley device that takes fluids as input
            2  +-- and produces solid outputs in the form of powder. for instance,
            3  +-- water can be poured in to precipitate out magnesium(?)

Modified recipes.lua from [b5f23ba87a] to [41529558e5].

   648    648   		{'group:wood','default:stick','group:wood'};
   649    649   	};
   650    650   	replacements = {
   651    651   		{'screwdriver:screwdriver','screwdriver:screwdriver'};
   652    652   	};
   653    653   };
   654    654   
   655         -sorcery.data.register.infusion_leftover('sorcery:ink','vessels:glass_bottle')
   656         -sorcery.data.register.infusion_leftover('sorcery:erasure_fluid','vessels:glass_bottle')
          655  +sorcery.register.residue.link('sorcery:ink','vessels:glass_bottle')
          656  +sorcery.register.residue.link('sorcery:erasure_fluid','vessels:glass_bottle')
   657    657   
   658    658   ---- altar
   659    659   minetest.register_craftitem('sorcery:candle', {
   660    660   	-- TODO make candle node
   661    661   	inventory_image = 'sorcery_candle.png';
   662    662   	description = 'Votive Candle';
   663    663   	groups = {
................................................................................
   708    708   		recipe = sorcery.lib.tbl.append(recipe, substance.core)
   709    709   	elseif container then
   710    710   		recipe[#recipe + 1] = container
   711    711   	end
   712    712   	if substance.mix and #substance.mix > 0 then
   713    713   		recipe = sorcery.lib.tbl.append(recipe, substance.mix)
   714    714   		for _,r in pairs(substance.mix) do
   715         -			if sorcery.data.infusion_leftovers[r] then
          715  +			if sorcery.register.residue.db[r] then
   716    716   				replace[#replace + 1] = {
   717         -					r, sorcery.data.infusion_leftovers[r]
          717  +					r, sorcery.register.residue.db[r]
   718    718   				}
   719    719   			end
   720    720   		end
   721    721   	end
   722    722   
   723    723   	minetest.register_craft {
   724    724   		type = 'shapeless';

Added registration.lua version [d98f045dad].

            1  +if not sorcery then sorcery = {DEBUG=true} end
            2  +sorcery.register = {}
            3  +sorcery.registry = {
            4  +	defercheck = function() return true end
            5  +	-- used to warn about deferments that have not been discharged by a certain threshold
            6  +}
            7  +sorcery.registry.mk = function(name,db)
            8  +	local reg = {}
            9  +	if db == nil then
           10  +		-- predefined db
           11  +		db = sorcery.data[name]
           12  +	elseif db == false then -- auxiliary db, stored in registry itself
           13  +		reg.db = {}
           14  +		db = reg.db
           15  +	end
           16  +	local dat = {
           17  +		iters = {};
           18  +		state = {};
           19  +		defer = {};
           20  +	}
           21  +	reg.invoke = function(fnid,tgtid)
           22  +		local fno = dat.iters[fnid]
           23  +		if not fno then return false end
           24  +
           25  +		local runid = fnid .. '@' ..tgtid
           26  +		if dat.state[runid] then return true end
           27  +
           28  +		if fno.deps then for k,f in pairs(fno.deps) do
           29  +			if reg.invoke(f,tgtid) == false then return false end
           30  +		end end
           31  +		
           32  +		fno.fn(tgtid, db[tgtid])
           33  +
           34  +		dat.state[runid] = true
           35  +		return true
           36  +	end
           37  +	reg.foreach = function(ident,deps,fn)
           38  +		dat.iters[ident] = {deps = deps, fn = fn}
           39  +		for k in pairs(db) do
           40  +			if reg.invoke(ident,k) == false then
           41  +				-- not all dependencies are available
           42  +				-- to run yet; must defer until then
           43  +				dat.defer[#dat.defer+1] = ident
           44  +				return false
           45  +			end
           46  +		end
           47  +		for i,dfn in pairs(dat.defer) do
           48  +			local deferred = dat.iters[dfn]
           49  +			for _,d in pairs(deferred.deps) do
           50  +				if not dat.iters[d] then goto skipdfmt end
           51  +			end
           52  +			-- a deferred function can now be run, do so
           53  +			table.remove(dat.defer,i)
           54  +			reg.foreach(dfn,deferred.deps,deferred.fn)
           55  +		::skipdfmt::end
           56  +
           57  +		return true
           58  +	end
           59  +	reg.link = function(key,value)
           60  +		-- support simple arrays as well as kv stores
           61  +		if value == nil then
           62  +			value = key
           63  +			key = #db+1
           64  +		end
           65  +		db[key] = value
           66  +		for id in pairs(dat.iters) do 
           67  +			reg.invoke(id,key)
           68  +		end
           69  +	end
           70  +	reg.meld = function(tbl)
           71  +		for k,v in pairs(tbl) do reg.add(k,v) end
           72  +	end
           73  +	sorcery.register[name] = reg
           74  +
           75  +	local nextfn = sorcery.registry.defercheck
           76  +	sorcery.registry.defercheck = function()
           77  +		if #dat.defer ~= 0 then
           78  +			print('WARNING: ' .. tostring(#dat.defer) .. ' deferred iterator(s) have not yet been discharged for registry “' .. name .. '”')
           79  +			local log = sorcery.log and function(text)
           80  +				sorcery.log('registry',text)
           81  +			end or print
           82  +			for i,v in pairs(dat.defer) do
           83  +				log('\t' .. tostring(i) .. ') ' .. v)
           84  +			end
           85  +			log('there is likely a missing dependency or dependency ordering problem. also make sure you have spelled the names of the iterator dependencies correctly')
           86  +			return false
           87  +		end
           88  +		nextfn()
           89  +	end
           90  +	return reg
           91  +end
           92  +
           93  +if sorcery.DEBUG then
           94  +	local function dump(tbl,indent)
           95  +		indent = indent or 0
           96  +		local space = string.rep(' ',indent*4)
           97  +		for k,v in pairs(tbl) do
           98  +			if type(v) == 'table' then
           99  +				print(string.format('%s%s = {',space,k))
          100  +				dump(v,indent + 1)
          101  +				print(string.format('%s}', space))
          102  +			else
          103  +				print(string.format('%s%s = %q',space,k,tostring(v)))
          104  +			end
          105  +		end
          106  +	end 
          107  +
          108  +	local metals = {
          109  +		oregonium = {desc = 'Oregonium'};
          110  +		nevadite = {desc = 'Nevadite'};
          111  +	}
          112  +	local myreg = sorcery.registry.mk('metals',metals)
          113  +
          114  +	sorcery.register.metals.link('californium', {
          115  +		desc = "Californium";
          116  +	})
          117  +
          118  +	sorcery.register.metals.foreach('sorcery:mkingot',{'sorcery:mkfrag'}, function(k,v)
          119  +		local ingot = 'sorcery:' .. k .. '_ingot'
          120  +		print('registered',ingot)
          121  +		v.parts = v.parts or {}
          122  +		v.parts.ingot = ingot;
          123  +	end)
          124  +
          125  +	sorcery.registry.defercheck()
          126  +
          127  +	sorcery.register.metals.link('washingtonium', {
          128  +		desc = "Washingtonium";
          129  +	})
          130  +
          131  +	sorcery.register.metals.foreach('sorcery:mkfrag',{}, function(k,v)
          132  +		local fragment = 'sorcery:' .. k .. '_fragment'
          133  +		print('registered',fragment)
          134  +		v.parts = v.parts or {}
          135  +		v.parts.fragment = fragment;
          136  +	end)
          137  +
          138  +	sorcery.register.metals.link('biloxite', {
          139  +		desc = "Biloxite";
          140  +	})
          141  +	
          142  +	dump(metals)
          143  +	if sorcery.registry.defercheck() then
          144  +		print('lingering deferments!')
          145  +	else
          146  +		print('all good!')
          147  +	end
          148  +end

Added sorcery.md version [f0c3989e05].

            1  +# sorcery
            2  +
            3  +`sorcery` is a wide-ranging mod that adds many features, devices, powers, and mechanics to the minetest default game. it aims to add a distinctive cosmology, or world-system, to the game, based around mese, alchemy, spellcasting, and worship. it is intended to be pro-social, lore-flexible, and to interoperate well with other mods wherever possible.
            4  +
            5  +# dependencies
            6  +
            7  +## first-party
            8  + * default
            9  + * stairs
           10  + * screwdriver
           11  + * vessels
           12  +
           13  +## third-party
           14  + * **xdecor** for various tools and ingredients, especially honey and the hammer
           15  + * **basic_materials** for crafting ingredients
           16  + * **instant_ores** for ore generation. temporary, will be removed and replaced with home-grown mechanism soon
           17  + * **farming redo** for potion ingredients
           18  + * **late** for spell, potion, and gravitator effects
           19  +   * **note**: in order for the gravitator to work, the late condition interval must be lowered from its default of 1.0 to 0.1. this currently can only be done by altering a variable at the top of conditions.lua, though a note in the source suggests a configuration option will be added eventually. hopefully this is so.
           20  +
           21  +# interoperability
           22  +sorcery has special functionality to ensure it can cooperate with various other modules, although they are not required for it to function.
           23  +
           24  +## xdecor
           25  +by default, `sorcery` disables the xdecor enchanter, since `sorcery` offers its own, much more sophisticated enchantment mechanism. however, the two can coexist if you really want; a configuration flag can be used to prevent `sorcery` disabling the xdecor enchanter.
           26  +
           27  +## hopper
           28  +many `sorcery` devices support interactions with the hopper. devices that produce outputs after a period of time like the infuser will automatically inject their output into a hopper if one is placed below it, and if the device has multiple slots, they can usually be accessed by configuring a hopper to insert from the side or from above.
           29  +
           30  +## others
           31  +* if `moreores` is in use, `sorcery` will use its silver rather than creating its own. mithril is not used by `sorcery`.
           32  +* `sorcery` will use `new_campfire`'s ash if it's available, otherwise creating its own.
           33  +
           34  +# lore
           35  +`sorcery` supplies a default system of lore (that is, the arbitrary objects that the basic principles of the setting operate over) but this can be augmented or replaced on a per-world basis. for instance, you can substitute your own gods for the Harvest Goddess, Blood God, change their names, and so on, or simply make your own additions to the pantheon. since lore overrides are stored outside the minetest tree, it can be updated without destroying your changes.
           36  +
           37  +lore is stored separately from the rest of the game logic, in the 'data' directory of the `sorcery` mod. it is arranged in a hierarchy of thematically-organized tables. for instance, the table of gods can be found in data/gods.lua. ideally, lore tables should contain plain data, though they can also contain lambdas if necessary. lore files are evaluated in the second stage of the init process, after library code has been loaded but before any game logic has been instantiated. lore can thus depend on libraries where reasonable (though e.g. colors should be stored as 3-tuples rather than `sorcery.lib.color` objects, and images as texture strings, unless there is a very good reason to do otherwise).
           38  +
           39  +lore files should never depend on functions in the `minetest` or `core` namespace! if you really need such functionality, gate it off with an if statement and be sure to return something useful in the event that the namespace isn't defined. *lore is just data:* as a general principle, non-minetest code should be able to evaluate and make use of the lore files, for instance to produce an HTML file tabulating the various potions and how to create them. lore should also not mutate the global environment: while there is currently nothing preventing it from doing so, steps will likely be taken in the future to give each lore module a clean environment to keep it from contaminating the global namespace. right now, all functions and variables declared in a lore file should be defined `local`. the only job of a lore file is to return a table.
           40  +
           41  +`sorcery` looks in a directory called `sorcery` in the world-data directory for world-specific lore and other overrides. below are three example lore modifications to give you a sense for how this system works.
           42  +
           43  +## replacing the gods
           44  +this is probably the most common action you'll want to take -- if your world has its own defined setting and already has its own gods, or you just want to give it a bit of a local flavor, you probably won't want the default pantheon that `sorcery` comes with.
           45  +
           46  +to do this, we'll need to create a file called `$world/sorcery/lore-gods.lua` where $world is the world's root data directory, e.g. `/srv/mt/geographica`
           47  +
           48  +```
           49  +-- /srv/mt/geographica/sorcery/lore-gods.lua
           50  +
           51  +return {
           52  +	fire = {
           53  +		name = 'Aduram the Scorching';
           54  +
           55  +		-- personality
           56  +		laziness = 3; -- controls how frequently the god takes action upon the mortal world
           57  +		stinginess = 5; -- the higher the stinginess value, the less frequently the god will give gifts to worshippers
           58  +		generosity = 7; -- likeliness to overlook disfavored behavior and give items of high value
           59  +		color = {255,0,0};
           60  +
           61  +		idol = {
           62  +			desc = 'Fiery Idol';
           63  +			width = 0.5, height = 1;
           64  +			tex = { ‹list of textures› };
           65  +		};
           66  +		sacrifice = {
           67  +			['tnt:gunpowder'] = 2; -- players can leave gunpowder on his altars to gain 2 points of favor
           68  +		};
           69  +		gifts = {
           70  +			['fire:flint'] = {30, 3}; -- one-in-three likelihood of gifting flint at idols that have reached 30 favor
           71  +		};
           72  +		consecrate = {
           73  +			['default:steel_ingot'] = {5, 'fire:flint_and_steel'} -- transform steel ingots on his altar into firestarter at a cost of 5 favor
           74  +		};
           75  +		bless = {
           76  +			potions = {
           77  +				Force = {favor=70, cost=5, chance=15} -- 1-in-15 chance of applying the Elixir of Force effect to a potion on his altar once the attached idol has reached 30 favor, at a cost of 5 favor
           78  +			};
           79  +			tools = {
           80  +				speed = {favor=120, cost=25, chance=5} -- apply speed enchantment
           81  +			};
           82  +		}
           83  +	};
           84  +	water = {
           85  +		name = 'Uskaluth the Drenched';
           86  +		‹···›
           87  +	};
           88  +}
           89  +```
           90  +
           91  +when you define gods, be mindful of the personality you wish to create and worship practices you wish to provoke. how attentive must their worshippers be to maintain a useful relationship? how often are sacrifices required? how many sacrifices are necessary before the god will start performing miracles? it's easy to make gods completely overpowered gamebreakers, so be cautious, and don't gift anything terribly valuable -- or if you do, give it very rarely.
           92  +
           93  +note that you would also need to supply idol models called `sorcery-idol-fire.obj` and `sorcery-idol-water.obj`. gods with the ids `harvest` or `blood` will use predefined idols.
           94  +
           95  +## adding gods
           96  +if you're happy with the default pantheon, but your spiritual life just isn't complete without the fiery rage of Aduram, you can change the name of `sorcery/lore-gods.lua` to `sorcery/lore-gods-extra.lua`. this way, the table it returns will be merged preferentially into the table of default gods.
           97  +
           98  +## modifying gods
           99  +more complex operations can also be performed. let's say the Blood God is ruining your vibe and you want to delete him (her? it?) from the pantheon. or the Harvest Goddess needs a name more in line with your local cosmology. these are both easy:
          100  +
          101  +```
          102  +-- /srv/mt/geographica/sorcery/lore-gods.lua
          103  +local gods = ...
          104  +gods.harvest.name = 'Disastra bel-Malphegor'
          105  +gods.blood = nil
          106  +return gods
          107  +```
          108  +
          109  +this has the handy property that any changes made upstream to the Harvest Goddess will be respected if you update the mod, without overriding the changes made in lore-gods.lua.
          110  +
          111  +or, if you want to extract a specific god from the default pantheon and include it with your own:
          112  +
          113  +```
          114  +-- /srv/mt/geographica/sorcery/lore-gods.lua
          115  +local gods = ...
          116  +local mygods = dofile('pantheon.lua')
          117  +mygods.harvest = gods.harvest
          118  +mygods.harvest.name = 'Disastra bel-Malphegor'
          119  +return mygods
          120  +```
          121  +
          122  +## compatibility tables
          123  +if you use a mod that neither supports `sorcery` nor is supported by it, the proper solution is of course to open a ticket in the former's bug tracker, but as a quick fix you can also tweak the `sorcery` compatibility tables with a `$world/sorcery/lore-compat.lua` file.
          124  +
          125  +```
          126  +-- /srv/mt/geographica/sorcery/lore-compat.lua
          127  +return sorcery.lib.tbl.deepmerge((...), {
          128  +	grindables = {
          129  +		['bonemeal:bone'] = {
          130  +			powder = 'bonemeal:bonemeal';
          131  +			hardness = 3;
          132  +			value = 3;
          133  +			grindcost = 1;
          134  +		};
          135  +	};
          136  +})
          137  +```
          138  +
          139  +note that we have to use deepmerge instead of naming the file `lore-compat-extra.lua` and returning a simple table because the init routine only performs a shallow merge, meaning that it would wipe out the entire provided version of `sorcery.data.compat.grindables`! no bueno.
          140  +
          141  +## local tweaks
          142  +if you need to change `sorcery`'s behavior in a way that isn't possible through modifying the lore, you can create a file `$world/sorcery/finalize.lua` which will be run at the end of the init process and which will have access to all of the machinery created by the various modules of the mod. `worldbuilding.lua` is like `finalize.lua` but it is run before any lore is loaded. finally, `bootstrap.lua` will be run before anything else, including library code, is loaded, but after the core `sorcery` structure and its loading functions have been created.
          143  +
          144  +in the unlikely event that the lore-loading process itself is incompatible with the changes you're trying to make, you can create a `loadlore.lua` file that will be run instead of the usual routine. you'll then be responsible for loading all of the game's lore; the default lore will not even be read! this will be most useful if you're loading or generating your own lore from an unusual source, such as somewhere on the network.
          145  +
          146  +if you want to write a lore loader but include some of the default lore, you can use the loading function passed to `loadlore.lua`:
          147  +
          148  +```
          149  +-- /srv/mt/geographica/loadlore.lua
          150  +local load_lore, load_module = ...
          151  +sorcery.data = dofile('load-remote-lore.lua')
          152  +load_lore {'enchants', 'spells'}
          153  +```
          154  +
          155  +as you can see here, once the lore is loaded, it is stored in the variable `data`. there is a subtle distinction you need to bear in mind: `data` represents the full set of lore-derived information `sorcery` has to work with, which is not necessarily the same as the lore itself. for example, certain modules could generate extra information and attach them to the entries in the `data` table, which can be (and is) written to at runtime. the one invariant that the `data` table should observe is that once a record is added, it may neither be mutated nor removed (though additional sub-records can always be added) -- `sorcery` is not written to handle such eventualities and it may produce anything from glitches to crashes. the term `lore` references specifically the core records stored on disk from which the `data` table is generated, and a `lorepack` is a full, integrated collection of lore. (there are cases where modifying or deleting from `data` may be necessary for a `sorcery`-aware mod, for instance to prevent players from creating a certain default potion, but this is very fraught and you should only ever do it if you thoroughly understand the internals and exactly what you're doing, with the caveat that what works in this version may break the next.)
          156  +
          157  +# writing sorcery-aware mods
          158  +`sorcery` exposes an API that is usable by other mods. to use it, you need to understand a little about how `sorcery` handles lore. local tweaks are simple because they inject changes into the pipeline before `sorcery` makes use of any of the lore. part of the setup stage is the creation of various lore-derived recipes, items, nodes, and so on. so if your mod loads after `sorcery` is finished loading (which it must, if it expects to call into the `sorcery` API), it can't take advantage of the same mechanism that world tweaks can, as it needs to not just insert the data but notify `sorcery` that something has been added so it can create the appropriate objects.
          159  +
          160  +to handle this complex situation, `sorcery` uses *registers.* a register is set of functions and data used for tracking actions and dependencies between them. registers are automatically created for each lore category, except those specifically excluded by the bootstrapping routine. for instance, the extract register can be found at `sorcery.register.extract`. a register has several functions, only three of which are relevant to you: `link`, `meld`, and `foreach`.
          161  +
          162  +## link
          163  +`link([key,] value)` inserts a new entry into the database the register manages. so to add a new extract for, say, sand, we could call `sorcery.register.extracts.link('sand',{'default:sand',{255,255,0})`. this would insert the record `sand => {'default:sand, {255,255,0}}` into `sorcery.data.extracts`. it would also take all of the actions that would have been taken if the entry had been present in `sorcery.data.extracts` when the `sorcery` mod bootstrapped itself.
          164  +
          165  +```
          166  +sorcery.register.infusion.link {
          167  +	infuse = 'farming:sugar';
          168  +	into = 'sorcery:potion_serene';
          169  +	output = 'mymod:sweet_potion';
          170  +}
          171  +sorcery.register.residue.link('farming:sugar','sorcery:ash')
          172  +```
          173  +
          174  +this will permit use of the infuser to create a **Sweet Potion** (presumably defined by your own mod) by infusing **sugar** into a **Serene Potion**, leaving behind **ash**.
          175  +
          176  +new alloys can also be registered for use with the smelter:
          177  +
          178  +```
          179  +sorcery.register.alloys.link {
          180  +	output = {
          181  +		[1] = 'mymod:excelsium_fragment';
          182  +		[4] = 'mymod:excelsium_ingot';
          183  +		[4 * 9] = 'mymod:excelsium_block';
          184  +	};
          185  +	cooktime = 69;
          186  +	metals = {
          187  +		lithium = 1;
          188  +		silver = 4;
          189  +		aluminum = 4;
          190  +	};
          191  +}
          192  +```
          193  +
          194  +this defines an alloy called Excelsium that can be produced by mixing four parts silver, four parts aluminum, and one part lithium -- e.g. one lithium fragment, one aluminum ingot, and one silver ingot. `metals` must specify metals registered with the `sorcery` mod; `output` can be either the name of a registered metal or a table of items and part-values that can be produced. at least output[1] must always be present!
          195  +
          196  +the kiln is not currently functional, but once it is, it will be possible to create kiln recipes with the `sorcery.register.kilnrecs.link` function.
          197  +
          198  +## foreach
          199  +`foreach(id,deps,fn)` should be called for any registration actions that need to take place for a registry's contents. let's say you want to create a container than holds large volumes of an extract, like an extract keg. to do this, you'd need to create a node for each extract. but you can't just iterate `sorcery.data.extracts` because new extracts might be added long after your code is run. the solution is `foreach`: you give it an identifier, a list of dependency identifiers, and a function, and it then ensures that function will be called once for everything that winds up in `sorcery.data.extracts`.
          200  +
          201  +it is crucial to understand the difference between a data `for` loop and registry `foreach`, because they are not interchangeable. a function passed to `foreach` may be called immediately, ten minutes later, both, or never (if there are missing dependencies). for instance, you cannot write a function that uses `foreach` to tally the mass of all metals, because it would run whenever a new metal was created, long after your function had stopped running, and it would only run once ever for each metal. in that case, you would need to use `for`.
          202  +
          203  +let's consider our keg storage mod. we would want to create several things: first, the individual per-extract keg nodes; second, a node that takes an empty keg and, say, 99 of an extract, and transforms them into an extract keg. to register the kegs, we might use code like
          204  +
          205  +```
          206  +minetest.register_node('keg:empty', { description = 'Empty Keg'; ‹···›})
          207  +sorcery.register.extracts.foreach('keg:generate',{},function(name,data)
          208  +	minetest.register_node('keg:extract_' .. name, {
          209  +		description = sorcery.lib.str.capitalize(name) .. ' Extract Keg';
          210  +		color = sorcery.lib.color(data[2]):hex();
          211  +		‹···›
          212  +	})
          213  +end)
          214  +```
          215  +
          216  +but in the on_metadata_inventory_put code for keg-filling node, to identify the proper keg, we might instead use code like
          217  +
          218  +```
          219  +local inv = minetest.get_meta(pos):get_inventory()
          220  +local fluid = inv:get_stack('fluid',1)
          221  +if fluid:get_count() < 99 then return end
          222  +
          223  +local fname = fluid:get_name()
          224  +if minetest.get_item_group(fname, 'sorcery_extract') ~= 0 then
          225  +	for k,v in pairs(sorcery.data.extracts)
          226  +		if fname == 'sorcery:extract_' .. k then
          227  +			inv:set_stack('preview',1,ItemStack('keg:extract_' .. k))
          228  +			return
          229  +		end
          230  +	end
          231  +end
          232  +```
          233  +
          234  +`foreach` could NOT be used in this case.
          235  +
          236  +every time you register a `foreach`, you need to give it a unique identifier and list its dependencies. the identifier need only be unique among functions linked to that specific registry. dependencies are used so that when new items are linked to a registry, the queued functions are executed in the correct order. for instance, if you had a foreach function in the extracts registry that modified the definition table of the keg nodes, you would need to list `'keg:generate'` in its dependency array.
          237  +
          238  +spelling dependencies correctly is crucial. if you call `foreach` with the name of a dependency that is not yet known to the registry, it will not be executed until that dependency is added. so if you misspell a dependency, the `foreach` function you add will never execute!
          239  +
          240  +it's helpful therefore to insert calls to `sorcery.registry.defercheck()` at code boundaries, e.g. the end of your init file. this will print a warning to the logs and return false if there are any deferred iterators that have not yet been run. otherwise it will silently return true. `sorcery` checks its own iterators this way.
          241  +
          242  +## meld
          243  +registries also have the `meld(tbl)` convenience function, which is useful if you have a `sorcery`-like lore table you want to merge in, say a table of metals your mod adds. in this case, you could simply call `sorcery.register.metals.meld(mymod.data.metals)` instead of faffing around with for loops.
          244  +
          245  +## creating registries
          246  +you're not restricted to the registries already in existence. you can create registries of your own with the function `sorcery.registry.mk(name[,db])`. this will create (or overwrite!) registries in the `sorcery.register` table, and return a reference to that registry. the db argument can be absent, in which case it will look for a database under `sorcery.data[name]` or fail if one cannot be found. this will generally not be what you want if you're using it from another mod, so you'll want to either pass a reference to an existing table under your control, or the argument `false` which will tell `mk` to create a store in the registry itself under the table `db`, which is useful for ephemeral data that is generated entirely at runtime from existing lore entries like alloys or infusion residue.

Modified wands.lua from [a570130d91] to [2dc21e25ed].

    32     32   			};
    33     33   		};
    34     34   		core = {
    35     35   			obsidian = {
    36     36   				item = 'default:obsidian_shard';
    37     37   				sturdiness = 1.5;
    38     38   			};
           39  +			diamond = {
           40  +				item = 'sorcery:shard_diamond';
           41  +				sturdiness = 1.7;
           42  +				reliability = 0.75;
           43  +			};
           44  +			mese = {
           45  +				item = 'default:mese_fragment';
           46  +				generate = 2;
           47  +			};
    39     48   			cobalt = {
    40     49   				item = 'sorcery:powder_cobalt';
    41     50   				power = 1.4;
    42     51   			};
    43     52   			iridium = {
    44     53   				item = 'sorcery:powder_iridium';
    45     54   				sturdiness = 1.25;
................................................................................
   368    377   				after_dig_node = function(pos,node,meta,digger)
   369    378   					local stack = meta.inventory.wand[1]
   370    379   					if stack and not stack:is_empty() then
   371    380   						-- luv 2 defensive coding
   372    381   						minetest.add_item(pos, stack)
   373    382   					end
   374    383   				end;
          384  +				groups = {
          385  +					not_in_creative_inventory = 1;
          386  +					sorcery_wand_stand = 1;
          387  +					choppy = 2;
          388  +					oddly_breakable_by_hand = 2;
          389  +				};
   375    390   				on_rightclick = function(pos,node,user,stack)
   376    391   					local meta = minetest.get_meta(pos)
   377    392   					local stand = meta:get_inventory()
   378    393   					local wand = stand:get_stack('wand',1)
   379    394   					if stack:is_empty() then
   380    395   						stack = wand
   381    396   					else
................................................................................
   698    713   		"default_aspen_wood.png";
   699    714   		"sorcery_wandworking_station_side.png";
   700    715   	}
   701    716   	local base = {
   702    717   		description = "Wandworking Station";
   703    718   		groups = {
   704    719   			choppy = 2;
          720  +			not_in_creative_inventory = water and 1 or nil;
   705    721   		};
   706    722   		paramtype2 = 'facedir';
   707    723   		on_construct = function(pos)
   708    724   			local meta = minetest.get_meta(pos)
   709    725   			local inv = meta:get_inventory()
   710    726   			inv:set_size('tank',4)
   711    727   			inv:set_size('input',1)