PPM image integration

PPM image integration
PPM image integration

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2026-05-11 09:46:12 +0200
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2026-05-11 09:54:59 +0200
Commit 5af8d0e3d9aa116af326ca91b5956a4774a03960 (patch)
-rw-r--r-- extern/ppm.lua 47
-rw-r--r-- main.c 96
-rw-r--r-- textures/test.ase bin 0 B -> 728 B
-rw-r--r-- textures/test.ppm 4
4 files changed, 142 insertions, 5 deletions
diff --git a/extern/ppm.lua b/extern/ppm.lua
  
1
local spr = app.activeSprite
  
2
  
  
3
if not spr then
  
4
	app.alert("No active sprite")
  
5
	return
  
6
end
  
7
  
  
8
local path = app.fs.filePath(spr.filename)
  
9
local name = app.fs.fileTitle(spr.filename)
  
10
  
  
11
if path == "" then
  
12
	path = app.fs.userDocsPath
  
13
end
  
14
  
  
15
local out_path = app.fs.joinPath(path, name .. ".ppm")
  
16
  
  
17
local img = Image(spr.width, spr.height, ColorMode.RGB)
  
18
  
  
19
-- Render visible layers / current frame into one image
  
20
img:drawSprite(spr, app.activeFrame.frameNumber)
  
21
  
  
22
local file = io.open(out_path, "wb")
  
23
  
  
24
if not file then
  
25
	app.alert("Could not write file:\n" .. out_path)
  
26
	return
  
27
end
  
28
  
  
29
-- PPM binary format, P6
  
30
file:write("P6\n")
  
31
file:write(tostring(spr.width) .. " " .. tostring(spr.height) .. "\n")
  
32
file:write("255\n")
  
33
  
  
34
for y = 0, spr.height - 1 do
  
35
	for x = 0, spr.width - 1 do
  
36
		local pixel = img:getPixel(x, y)
  
37
		local c = Color(pixel)
  
38
  
  
39
		file:write(string.char(c.red))
  
40
		file:write(string.char(c.green))
  
41
		file:write(string.char(c.blue))
  
42
	end
  
43
end
  
44
  
  
45
file:close()
  
46
  
  
47
app.alert("Exported PPM:\n" .. out_path)
diff --git a/main.c b/main.c
...
20
	float x_offset;
20
	float x_offset;
21
	float y_offset;
21
	float y_offset;
22
	float cube_angle;
22
	float cube_angle;
  
23
	GLuint texture_id;
23
} Game;
24
} Game;
24
  
25
  
25
Game game = {0};
26
Game game = {0};
26
  
27
  
  
28
unsigned char* load_ppm(const char* filename, int* width, int* height) {
  
29
	FILE* fp = fopen(filename, "rb");
  
30
	if (!fp) {
  
31
		fprintf(stderr, "Unable to open file '%s'\n", filename);
  
32
		return NULL;
  
33
	}
  
34
  
  
35
	char header[3];
  
36
	if (!fgets(header, sizeof(header), fp) || header[0] != 'P' || header[1] != '6') {
  
37
		fprintf(stderr, "Invalid PPM file (must be P6)\n");
  
38
		fclose(fp);
  
39
		return NULL;
  
40
	}
  
41
  
  
42
	// Skip comments
  
43
	int c = getc(fp);
  
44
	while (c == '#') {
  
45
		while (getc(fp) != '\n');
  
46
		c = getc(fp);
  
47
	}
  
48
	ungetc(c, fp);
  
49
  
  
50
	if (fscanf(fp, "%d %d", width, height) != 2) {
  
51
		fprintf(stderr, "Invalid PPM dimensions\n");
  
52
		fclose(fp);
  
53
		return NULL;
  
54
	}
  
55
  
  
56
	int max_val;
  
57
	if (fscanf(fp, "%d", &max_val) != 1 || max_val != 255) {
  
58
		fprintf(stderr, "Invalid PPM max value\n");
  
59
		fclose(fp);
  
60
		return NULL;
  
61
	}
  
62
  
  
63
	while (getc(fp) != '\n'); // skip single whitespace
  
64
  
  
65
	unsigned char* data = (unsigned char*)malloc((*width) * (*height) * 3);
  
66
	if (!data) {
  
67
		fprintf(stderr, "Memory allocation failed\n");
  
68
		fclose(fp);
  
69
		return NULL;
  
70
	}
  
71
  
  
72
	if (fread(data, 1, (*width) * (*height) * 3, fp) != (size_t)((*width) * (*height) * 3)) {
  
73
		fprintf(stderr, "Error reading PPM data\n");
  
74
		free(data);
  
75
		fclose(fp);
  
76
		return NULL;
  
77
	}
  
78
  
  
79
	fclose(fp);
  
80
	return data;
  
81
}
  
82
  
  
83
void init_texture(void) {
  
84
	int width, height;
  
85
	unsigned char* data = load_ppm("textures/test.ppm", &width, &height);
  
86
	if (!data) return;
  
87
  
  
88
	glGenTextures(1, &game.texture_id);
  
89
	glBindTexture(GL_TEXTURE_2D, game.texture_id);
  
90
  
  
91
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  
92
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  
93
  
  
94
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
  
95
  
  
96
	free(data);
  
97
}
  
98
  
27
void render_text(float x, float y, void* font, const char* string) {
99
void render_text(float x, float y, void* font, const char* string) {
28
	glRasterPos2f(x, y);
100
	glRasterPos2f(x, y);
29
	for (const char* c = string; *c != '\0'; c++) {
101
	for (const char* c = string; *c != '\0'; c++) {
...
32
}
104
}
33
  
105
  
34
void draw_cube(void) {
106
void draw_cube(void) {
  
107
	glEnable(GL_TEXTURE_2D);
  
108
	glBindTexture(GL_TEXTURE_2D, game.texture_id);
35
	glBegin(GL_QUADS);
109
	glBegin(GL_QUADS);
36
		// Front Face (White)
110
		// Front Face (Textured)
37
		glColor3f(1.0f, 1.0f, 1.0f);
111
		glColor3f(1.0f, 1.0f, 1.0f);
38
		glVertex3f(-0.1f, -0.1f,  0.1f);
112
  
39
		glVertex3f( 0.1f, -0.1f,  0.1f);
113
		// Backface
40
		glVertex3f( 0.1f,  0.1f,  0.1f);
114
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, -0.1f,  0.1f);
41
		glVertex3f(-0.1f,  0.1f,  0.1f);
115
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.1f, -0.1f,  0.1f);
  
116
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.1f,  0.1f,  0.1f);
  
117
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.1f,  0.1f,  0.1f);
  
118
  
  
119
		// Top face
  
120
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f,  0.1f, -0.1f);
  
121
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.1f,  0.1f,  0.1f);
  
122
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.1f,  0.1f,  0.1f);
  
123
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.1f,  0.1f, -0.1f);
  
124
	glEnd();
  
125
	glDisable(GL_TEXTURE_2D);
42
  
126
  
  
127
	glBegin(GL_QUADS);
43
		// Back Face (Yellow)
128
		// Back Face (Yellow)
44
		glColor3f(1.0f, 1.0f, 0.0f);
129
		glColor3f(1.0f, 1.0f, 0.0f);
45
		glVertex3f(-0.1f, -0.1f, -0.1f);
130
		glVertex3f(-0.1f, -0.1f, -0.1f);
...
226
	glutCreateWindow("floating");
311
	glutCreateWindow("floating");
227
	
312
	
228
	init_display();
313
	init_display();
  
314
	init_texture();
229
  
315
  
230
	game.last_time = glutGet(GLUT_ELAPSED_TIME);
316
	game.last_time = glutGet(GLUT_ELAPSED_TIME);
231
	
317
	
...
diff --git a/textures/test.ase b/textures/test.ase
diff --git a/textures/test.ppm b/textures/test.ppm
  
1
P6
  
2
64 64
  
3
255
  
4
ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿRK$c›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&