-
Notifications
You must be signed in to change notification settings - Fork 2
/
storedatatocart4r.p8
307 lines (292 loc) · 35 KB
/
storedatatocart4r.p8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
pico-8 cartridge // http://www.pico-8.com
version 32
__lua__
--storedatatocart4u.p8
--icegoat, Sep 2021
--for development of PICOhaven.p8
--store and load strings in cart memory
-- (e.g. unused sfx/gfx space)
--for example, a single large string containing game
-- data, to be parsed with split() and similar,
-- if a game has hit Characters or Compressed Size limits
--this does not include any data compression-- instead it's
-- focused on simple+minimal token use to extract this data
--use this cart to store data, and copy just the
-- extractgamedata4r() function to the game cart
--WARNING: will (after prompting) overwrite data in the
-- named cart, potentially overwriting existing sprite/sfx data!
function _init()
--comment out cart_to_write to test on local cart first
--cart_to_overwrite="picohaven.p8"
cls()
lvlpretxt="game testing text.;guarding a cemetary against vandalism is one of the more boring jobs you've had.\nbut tonight is different-- you hear noise from within a tomb and investigate.;the elgin family mausoleum is more elaborate, and shows signs of recent visitors.\nas your eyes adjust, you see skeletons closing in from each side!;you choose another tomb at random and make your way inside...;you choose another tomb at random...;you choose another tomb at random...;on the road to the manor, you reach the guard house.\nyou call out cautiously and are greeted by a hail of arrows.;a merchant group offers good pay to guard a caravan.\nyou're only one day into the journey when you are waylaid! the merchants duck into the wagons as you turn to face the bandits.;a member of the town guard approaches you asking for help: her partner has not returned from an overnight hunting trip, but she can't leave her post.\nyou follow old game trails to a clearing in the woods...;tbd;you approch elgin manor cautiously. the gate hangs open and the guard towers seem abandoned, but you see the glow of torches from the inner rooms.\nsteeling yourself, you press forward.;a robed woman beckons you from the guild library. 'i've heard of your discoveries, and sense a dark force at work beneath the chapel--'\nsuddenly, a flash of blue light envelops her and the door bursts open. 'it's a trap!' she cries, 'destroy the runes and free me!';this chapel has been abandoned as long as you've lived in town, but the road shows signs of recent traffic.\nthe door swings open at a touch and an army of creaking bones turn toward you.;you follow the road north from town into the mountains. as you approach a river, you see the debris of a destroyed caravan on either side of the road...;the wizard said old town maps were kept in this sub-basement.\nyou hear the sounds of splintering wood and tearing paper from every room-- you just need to find any pieces of map and escape...;it's a tight squeeze into the drainage tunnel, but you make your way toward the chapel.\nwhen it opens up into a larger chamber you feel the same sick energy you felt in the library...;you walk into catacombs lined with niches holding the bones of the town's past.\na robed figure turns, gestures, and several still-armored bodies rise to their feet.;a velvet-robed figure pulls back its hood-- it is noah, of elgin.\n'they say the youngest son can not inherit,' he sneers. 'but what if he creates for himself?'\nwith a wave of his hand, he raises a barrier of crackling blue energy."
lvlfintxt="level complete message here.;bones animated by dark magic- something you've only heard tales of.\nthey wore tattered shreds of the elgin family colors-- perhaps you should investigate.;you wipe away the residue of dark necromancy as you stagger back to the surface.\nyou consider making your way to elgin manor to learn more, or returning to the simpler life of hired guardwork and letting these horrors lie.;you find no additional clues and move on.;you find no additional clues.;you find no additional clues.;the manor guard post abandoned to bandits?\nthis does not bode well for the family.;the rest of the journey is uneventful.\naway from town, you put the dark magic of recent days behind you. a week later, you return to picohaven.;as the last beast flees, you turn to the figure crouched behind a jumble of rocks. 'thank goodness you're here-- i was out of arrows and had to barricade myself in.'\nlater, you watch their tearful reunion and your heart twinges.;tbd;searching the manor confirms your fears-- the elgin family lie here, all dead.\nexcept noah, the youngest-- perhaps there's still a chance to save him.\nexploring town for clues, you hear of strange lights at the mage guild + activity at a ruined chapel.;as you destroy the last rune, the blue light dissipates, and the wizard unleases bolts of lightning that clear the room.\n'thank you! that elemental may be a problem: no mortal metal can harm it. alas, our silversteel caravan from the mountains is late...';somehow, against all odds, you leave the foul creatures in smoking piles behind you.\nno one, not even the game author, can believe you managed this, but somehow, you did.\nstairs beckon you downward...;the drake spreads its wings and flees the clearing, bellowing.\nyou move quickly before it returns, rummaging through the top of its hoard to find a blade of iridescent metal matching the wizard's description.;with the final piece of map in hand, you dart out, bolting the stairway behind you.\nback with the wizard, she points out a path from a drainage outlet to what should be the sewers under the chapel.;bested by your silversteel, the abominations fade away as if they'd never existed.\nyou hear chanting ahead and expect a major confrontation is near.;as the last cultist gasps in front of you, you ask 'where is he? the son of elgin?'\nher lip curls and she smiles, 'below.' you eye the staircase as well as the tunnels back to town.;noah stares in shock as your sword pierces his defenses. 'you-- it's not possible-- i was promised eternal power--'\nhis voice cuts off. you imagine you see a twist of purple smoke escape his mouth as his eyes go empty..."
txt=lvlpretxt
local addr=0x42ff --end of SFX memory
storecartdata4rwrapper(txt,addr,true,cart_to_overwrite)
while (btnp(🅾️)) do end
print("\fc🅾️: proceed to next data to store")
while (not btnp(🅾️)) do end
cls()
txt=lvlfintxt
local addr=0x1fff --end of extended sprite memory
storecartdata4rwrapper(txt,addr,true,cart_to_overwrite)
end
--extract string data from cart
-- (typically unused spr / sfx mem)
--works backwards from specified addr,
-- so typ use end of spr/sfx memory
--ends when chr255 found
--25 tokens
function extractcartdata4r(a)
str=""
while @a!=255 do
str..=chr(@a)
a-=1
end
return str
end
--store a string moving backwards from an address
-- by default, will only do this in memory and not write
-- this to the cart
--if savetocart==true, will write data to a cart on disk:
-- if cartname exists, it will save to that cart name
-- (overwriting existing data! caution!)
-- otherwise it will save to this cart
function storecartdata4r(txt,addr,savetocart,cartname)
txt..=chr(255)
for i=1,#txt do
poke(addr+1-i,ord(sub(txt,i,i)))
end
local addrf=addr+1-#txt
if savetocart then
if not cartname then
cstore(addrf,addrf,#txt)
else
cstore(addrf,addrf,#txt,cartname)
end
end
return addrf --last location stored
end
function storecartdata4rwrapper(txt,addr,savetocart,cartname)
print("\fcstoring "..#txt.." chars to cart mem...")
local addrf = storecartdata4r(txt,addr) --store only to local memory
print("\f7\n "..tostr(#txt+1).." bytes stored from\n address "..sub(tostr(addrf,true),1,6).." to "..sub(tostr(addr,true),1,6))
print("\fc\npress 🅾️ to decode and view\n a subset of data")
while (btnp(🅾️)) do end
while (not btnp(🅾️)) do end
cls()
color(6)
printwrap(sub(extractcartdata4r(addr),1,300).."\n")
if savetocart then
print("\n\f8warning: next step will\n overwrite a file on disk",8)
cartstr = cartname and cartname or "this cart (save needed after)"
print("\fcpress ❎ to overwrite data in\n "..cartstr.."\n\f8 or press esc to abort",6)
while (btnp(❎)) do end
while (not btnp(❎)) do end
addrf=storecartdata4r(txt,addr,true,cartname)
print("\f7\n "..tostr(#txt+1).." bytes stored from\n address "..sub(tostr(addrf,true),1,6).." to "..sub(tostr(addr,true),1,6).."\n")
end
end
function printwrap(txt,w)
w=w or 32
while (#txt>w) do
print(sub(txt,1,w))
txt=sub(txt,w+1)
end
print(txt)
end
__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffe2974707d65602
f67602375697560237968602e65686470246e61602c2864757f6d602379686025607163637560256b6f6d6370256c6072757070266f602c62796773702160256
56370257f6970256e6967616d6960257f6970246e616026666f6023747573602563696f66702379686a072d2d2275677f607ffe2e2e2974707d65602f6760237
5697560237968602371602864757f6d602379686025607163637560256b6f6d6370256c6072757070266f60247379677470216025656370257f6970256e69676
16d6960257f69702e26666f6023747573602563696f66702379686a072d2d2275677f60702c616e6275647560246563796d6f6270702371677029602d2d256c6
26963737f6070247f6e6023772479602d2d257f6977202e2375637e656665646023796860237563627569607024627f67737022757f69702371602b636f68637
02e69602375627164737028616f6e6b3e2e677f64702f64702b63616260237c656e6e657470256864702371602c6c65677023716025637163627961647370256
8647025697560257f6970272e277f6c656267202c23756c696d637025686370246e6160237c6275736020796c602275686a072f3e69676c6560266f602e6f637
0256864702f356860237960256275686777202b637160257f69702c257f6970266f60247e6f6276602e6960237073716760247379647c6573602473716c60256
8647023716b3e2271656e602379602e6f696471647e6f62766e6f6360227f6a616d60216024736560787560246e6160246165686160276e69647e61686360227
1656860257f697a0e2465647379687560227566756e602467297568647026696023716029716771602564616660237e6f6964716e696d6f626160256864702c2
c656564737275667c69637022757f69702972602465647375626b3e2c656071686360256864702275646e65702372756775637025686470256260246c657f686
37024716867702f647024756c64757f602567616e696162746021602d6f6276602864716070216024757f6023747e696f6070256863702c2462716a796770256
8647028647967702b6361626a0e257f6970246e696865626029716772796164737025686470276e69647c6f62602c24757f602472716460257f69702c246e616
8602e696020716d60266f602563656960702c616e69666025686470286479677b3e2e6f6964707962736375646023772462716a79677025686470276e6968636
4716d602c6164756d60247e656363756469627960266f602564616c62602160246e6966602f64702462716f686023747960266f60207f6470256864702867657
f62786470276e6967616d6d6572702c237e62757475627024796025627f66656260297c6b636965717025667f6d60257f697a0e276e69677f6c6c6562602c276
e696271656c6360256864702375656c6660246e616023776e696770237479602374616562707370256b616274602568647b3e2e2e246271677e677f6460257f6
9702e6f6b636562602372796164737a0e24696460257f69702c277f68656d6f6370247572602c2379686470246567616e616d60257f6970256675696c6562602
e6163602c227f6864757160256d616760256864702e65667560247f6e602c256e6f602f6e6a0e257f6970246e696865626023756c696070276e696b6f6d63702
e6960237562757471656273602c657f666025686470256671656c60257f69702c2374646f602c6c616024737e69616761602c277f68656d6f637b372e2e2e256
4716c60237960237e6961647e657f6d60256864702d6f6276602e616671627163602c656564737275667c69637022757f602c23716c61602e2479602d6271686
02e6163602c6164756d602c6164727f6d602f6e602a3d656c626f627070216025626029716d602c61647e656d656c6560247168647021257f69702b6e6168647
72a0e2d6f6f6270256864702271656c63602471686470276e696e647867696c60266f6023747c6f626023756371656c6e65702462716a79677025686470246e6
1602c2375647160796373796460247867696c6025657c6260256864702c256e6572702473716c6025686470297f627473756460257f697023716b3e2c6560716
8636024656e6965727021602471602974796679647361602b20246c696577602567616d602568647024716023747867696c6025676e6162747370266f6022716
56860257f69702c2375657c6360227f66602e677f6470276e69627f6c6078756a0e2d69686025667163702f647025636e6168636021602c6c696473702377256
27568647023707168627560702d2d247375676e657f6970256864702c28616f6e602470756368756a0e24616564602c6c61602c256275686025696c60297c696
d6166602e69676c6560256864702d2d23727165666022757f6970237d6279666e6f6360227f6e616d6025686470276e696863627165637b3462647b3e2375676
e6967747024727165686022757f6970246e61602e6f696e657562702c65766271656470227965686470286364716770257f69702c227564716c6a072e2e69602
66c6563797d60256461636962727162602f647024616860246e616023777f62727160266f6024757f602371677029602d2d2562756860256277257f697023737
56e646f6f67602b6e61686477202e237b636f6270266f60256c626d657a602160246e696865626024656863657f62736025627577696660256864702f64702e6
2757470257f69702c2375656c66602473716562602473716c602568647023716b3e2e656671686f636960702f64702e627574756270257f69702c227564716c6
02b6565677021602e257f6970246e69686562602379716460247e6563656270266f60236967616d602b627164602568647024757070257f69702c2e677f64702
d6f627660297167716a0e2c6576647e6566756e657023796029756e62757f6a6025686470266f6024737562702568647b3e297c696d61666025686470227f666
02c6c65677025646f6260247f6e6023756f6460237968647a0f337479646e6162602f647024656e6f646e6162616024737f6070246271657760227f6e616d602
568647b3e2375657c63602c616e6f696479646461602f6e60246e696660257f697b3e2375657c63602c616e6f696479646461602f6e60246e696660257f697b3
e2e6f6025667f6d60246e61602375657c63602c616e6f696479646461602f6e60246e696660257f697b3e25696c6023727f62727f6860256375686470276e696
474756c60246e61602b627f67746271657760246562796860266f602566696c6022756c607d696370256864702f6470276e696e627574756270227f602c25627
f6d602e6271656c602f6470227f6e616d602e69676c65602f64702971677022757f6970276e696b616d6022756469637e6f6360257f697a0e256361666275737
0256864702f64702b636162602275676761647370257f697023716029736e616d6f6273656e602b62716460266f6025657469637562702568647029716771602
560796770257f697b3e2564716769647375667e6960246c657f686370257f697023707168627560702d2d23727f6c6f6360297c696d6166602e69676c6560256
86470266f602374656278637024656275647471647025627f6770297568647a0e266f6023756c616470246271656860297c6e6f60256677257f6970276e69686
4756d6f63702d236967616d602b62716460297260246564716d696e616023756e6f626b3e25627568602567616373756d602564756c607d6f63602c6566756c6
__sfx__
000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
756c622000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f3723f37239536325262e52620426
6d69682027176291662b516211172310226576200172554632117211162040620417255172950632102251462006224176211462041729146200362f102251372153720406200463454637150274732616625517
676e756f32576261023352634506251172310225146200362910234506285372002735116270022e41732526251763310225146204322c02729117251462e546200272f1762007621516200762f5172002733526
6966206439102251463410239506331023952628127270502e076295362c526200362f1022c046215762e1023354620027291022d462245762f1462041734546204562350622102331662c527301022511735536
6e61202c251162f1172d027251372c52636102215532e02725526261023254625146341022f12720426335463210233526291262f11620026251172f566325062d0662c546345172006621117251372551720026
646c6f68335263252734517255362006233176325273410225117355362913620026251162f117204060a07234517211072041727076375763410225146341022657620417251762f1162042628127204362e546
6620756f2041725146235462e102281272953720026251762916620417225662f51621127215162047634176291022b16621537204272f5473b0722e0723911721117225462c10225146341022e546200272c526
69206e653910239536325262e526204562354633102255662151720426281272006625526261023557639102325262256621146231023252627117211662040620476341762910230527204172e5263057620027
206f746e285370a0722c52630506285162042628127200263250637576341023950637102325272f547204262b5062d102355763910234527221022c066251762e52734102255362117629506321262042628127
65656e2029102251572552635507331023414627546341022110233532345463b0722e072251072151633526200262e5062000721566200362f102335262352629107204472e506200262e546261022f12720026
2073646e3451735156204272f547204622d4662f576321023911725137251022d57632136200172510721107204362e5463250625127200262e506200262f576371022717629117251272e5462c1073310226576
69617320355763310225146341023250625146204272f5470a072341762556625517211162d016355172041729146341022e54620027305262b102251172553720417305062d1022e5372f127200262c57620026
7369726224117211572953720426281273b0722e072245062f1172042628127200362f1022512629517200172514634546251022e5762007621137211172151620026255472f117345172512620406200362f102
206d6f722512620426281272042625517204272f547200623252636546321022110228516215763210730506204272f54720417211022e4172e546211272e5272f56620426281272047634176291022e5372f127
6d7261202610228127325762e102245062f1172042628127204372f1662c5762610235576395532e4272f547200263250637576341022e1173512720417251762f116204362e5462b50625117231022657620447
73776f682e506200262e50620046235272f1272040620027211022e5263057620417271762953733102325762f12620426281270a07223546261362111734102341762551625117200362f102331762754633102
6168206c33102245062f11720426281272002735116200622e5372f127200762910224526365462c10225137274272f5472041721102271762f1662041721102245262e5762417621116211022e5262511620417
7327746925107211462310233546281273b432214262d1022552632136200262e5062041725176351172042628127204472f1173451725126270022c417255463251620426285172043221007211173410221102
796c6e65270022e076251072f102331273311735116200172f57624102251463410224176211023252628102331072f166251372e5262002728536291662042635166221022657620046335062c1362040620062
766f637324126355170a4322d4622c52630506285162042628127200463450625176251162045632576371023450620426231172f13620456325062410221102255172e5263310224176211022c4172554632526
206465622912620017355763910226576200263250625146204263653229532200723911721117225462c10224166295272710225146341022d57632136204272f547204172e5762b5162511620076215662f537
207365682f117204063b0722411721537325762610233517251173010235576391022c0362c526331173557639102271762916625526345170a072335662f57632102325262e1762910225146341022d57632136
61206e65231172f127200362f102375762c53620426281272042625517204272f547200273511620062245262e5762417621116211022d5262551720417325263757634102241172152727102251463410224176
6f7720653057620417271762114620426345062710225146341022e4472c51735576291273550623102325762e5062d1022e5462716625102285162f1173010721102355763955324116345532e0722e41724576
276e61632812720076291022717629117215262c516204062047634102331662950632127204262d50627102241662f102375762c1662f136204272f5470a072345172f107200172514620426365062516620027
7020726520426285172002735116200623054632127204362e5463417635146200272853629176325263657620076211022d576321362002625176325273452632102345762e1023350628102325262e12732506
69646e61281023a0072c526281023257626102271762955633506204272f5472041725146235062f11730107211022411721527271022e5372f1272042628127200362f102325262256625566204063b07233127
616c7961221022514634102255162113620476341022e11735127204272f5472041721102331762f5362153720426281272047634176291022b51635126204173417621146231172556620426281272040224546
7261756737102251172110235576391022e526285372044725176325272f15620426281272047634176291023950624102251762f102391662e576204263253235576391502e0762113721117215162040620026
6720657220476341023950630102245762f5362041732526261362f102305272f1172710234176211462311725566204063b072335372f11732506200362f1022c54621146204062044722102245263452625117
6568742021102241762110239166335272f54634527215162002735576200662c5062310235576391502e426335272f1462002632506355362042628127200462350625117204272f54720062325762e5062d102
20626d6f2f12720026215763210225146341022e5763b0722e0722d57624176211172002721102225662f1272001725146345762e50620426335762f1462310235576395532e0722e4662f1262e5063210234506
726568743410232526281272f17621102255172f57628516204272f5473b0722e07225126295172e54620447215372001735576391022555621566200262e506204662f1262e5063210234506200162d57634102
6a6461202f17621102255172f57628516204272f5473b40225126295172004623506251022d57632136200762910227176295172f16623102331762f127251662555633102255263310235576391022c02733527
207369203352639526200173557639102335060a072331172f1272951729137200272e526235263210226576204172e53629517204173757628517200262e5062006225127211172f1162116625102251172f566
73696f6e2d527251662f517355062d10239166295662113620076295362c52620426281273b0722512721536291273352636176291022417621102225662f12720406200762914634546371022d5763213620426
6d20656820017215262810235576391022d4623417625117251362654624102335462002728536291762f12720027351160a072245062810225137274272f54720417225762a10227176291172f1162042632576
656d61673410226576204262e57620417291022d51729166211262e50636102345172e54621536211023911721127255662551620406204362e5462411721527275532e027385263410227176291273352634102