~ubuntu-branches/ubuntu/precise/gnome-games/precise-proposed

« back to all changes in this revision

Viewing changes to glchess/src/lib/scene/opengl/models.py

  • Committer: Package Import Robot
  • Author(s): Rodrigo Moya
  • Date: 2011-05-30 13:32:04 UTC
  • mfrom: (1.3.4)
  • mto: (163.1.3 precise)
  • mto: This revision was merged to the branch mainline in revision 143.
  • Revision ID: package-import@ubuntu.com-20110530133204-celaq1v1dsxc48q1
Tags: upstream-3.0.2
ImportĀ upstreamĀ versionĀ 3.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
__author__ = 'Robert Ancell <bob27@users.sourceforge.net>, John-Paul Gignac  <jjgignac@users.sf.net>'
3
 
__license__ = 'GNU General Public License Version 2+'
4
 
__copyright__ = 'Copyright 2005-2006  Robert Ancell, Copyright 2006  John-Paul Gignac'
5
 
 
6
 
import math
7
 
from OpenGL.GL import *
8
 
from glchess.defaults import *
9
 
import glchess.scene
10
 
import texture
11
 
import os.path
12
 
 
13
 
WHITE_BASE      = (0.95, 0.81, 0.64)
14
 
WHITE_AMBIENT   = (0.7*WHITE_BASE[0], 0.7*WHITE_BASE[1], 0.7*WHITE_BASE[2], 1.0)
15
 
WHITE_DIFFUSE   = (0.7*WHITE_BASE[0], 0.7*WHITE_BASE[1], 0.7*WHITE_BASE[2], 1.0)
16
 
WHITE_SPECULAR  = (1.0*WHITE_BASE[0], 1.0*WHITE_BASE[1], 1.0*WHITE_BASE[2], 1.0)
17
 
WHITE_SHININESS = 64.0
18
 
 
19
 
BLACK_BASE      = (0.62, 0.45, 0.28)
20
 
BLACK_AMBIENT   = (0.7*BLACK_BASE[0], 0.7*BLACK_BASE[1], 0.7*BLACK_BASE[2], 1.0)
21
 
BLACK_DIFFUSE   = (0.7*BLACK_BASE[0], 0.7*BLACK_BASE[1], 0.7*BLACK_BASE[2], 1.0)
22
 
BLACK_SPECULAR  = (1.0*BLACK_BASE[0], 1.0*BLACK_BASE[1], 1.0*BLACK_BASE[2], 1.0)
23
 
BLACK_SHININESS = 64.0
24
 
 
25
 
# The display lists for each model
26
 
# NOTE: This will not work if rendered in different openGL contexts
27
 
_displayLists = {}
28
 
 
29
 
# Vector methods
30
 
    
31
 
def vectordiff(a, b):
32
 
    return (b[0] - a[0], b[1] - a[1], b[2] - a[2])
33
 
 
34
 
def vectoradd(a, b):
35
 
    return (a[0] + b[0], a[1] + b[1], a[2] + b[2])
36
 
 
37
 
def crossprod(a, b):
38
 
    return (a[1]*b[2] - a[2]*b[1], a[2]*b[0] - a[0]*b[2], a[0]*b[1] - a[1]*b[0])
39
 
 
40
 
def normalize(a):
41
 
    length = math.sqrt(a[0]**2 + a[1]**2 + a[2]**2)
42
 
    if length == 0.0:
43
 
        return (1.0, 0.0, 0.0)
44
 
    else:
45
 
        return (a[0] / length, a[1] / length, a[2] / length)
46
 
 
47
 
class BuiltinSet(glchess.scene.ChessSet):
48
 
    """
49
 
    """
50
 
    
51
 
    def __init__(self, textureFileName, ambient, diffuse, specular, shininess):
52
 
        self.__pawn = Pawn()
53
 
        self.__rook = Rook()
54
 
        self.__knight = Knight()
55
 
        self.__bishop = Bishop()
56
 
        self.__queen = Queen()
57
 
        self.__king = King()
58
 
        self.__modelsByName = {'pawn': self.__pawn,
59
 
                               'rook': self.__rook,
60
 
                               'knight': self.__knight,
61
 
                               'bishop': self.__bishop,
62
 
                               'queen': self.__queen,
63
 
                               'king': self.__king}
64
 
        self.__defaultState = None
65
 
        self.__stateColours = {}
66
 
        self.__rotation = 0.0 # The rotation in degrees of pieces in the set (i.e. 0.0 for white and 180.0 for black)
67
 
        self.__texture = texture.Texture(textureFileName, ambient = ambient, diffuse = diffuse,
68
 
                                         specular = specular, shininess = shininess)
69
 
                                         
70
 
    def setRotation(self, theta):
71
 
        """
72
 
        """
73
 
        self.__rotation = theta
74
 
        
75
 
    def addState(self, name, colour, default = False):
76
 
        """
77
 
        """
78
 
        self.__stateColours[name] = colour
79
 
        if default is True:
80
 
            self.__defaultState = colour
81
 
 
82
 
    def drawPiece(self, pieceName, state, context = None):
83
 
        """Draw a piece.
84
 
        
85
 
        'pieceName' is the piece name (string).
86
 
        'state' is the piece state (string).
87
 
        'context' is a reference to the openGL context being used (user-defined).
88
 
        
89
 
        If a context is provided then the models are rendered using display lists.
90
 
        """
91
 
        glRotatef(self.__rotation, 0.0, 1.0, 0.0)
92
 
        
93
 
        # Draw as white if textured
94
 
        if glGetBoolean(GL_TEXTURE_2D):
95
 
            glColor3f(1.0, 1.0, 1.0)
96
 
        else:
97
 
            try:
98
 
                colour = self.__stateColours[state]
99
 
            except KeyError:
100
 
                colour = self.__defaultState
101
 
            glColor3fv(colour)
102
 
        self.__texture.bind()
103
 
        
104
 
        # Render to a display list for optimisation
105
 
        # TODO: This lists should be able to be shared between colours and games
106
 
        try:
107
 
            list = _displayLists[(context, pieceName)]
108
 
        except KeyError:
109
 
            # Get model to render
110
 
            piece = self.__modelsByName[pieceName]
111
 
            
112
 
            # Attempt to make an optimised list, if none available just render normally
113
 
            list = 0
114
 
            # TEMP: Assume that the context is shared across all scenes
115
 
            if context is not None:
116
 
                list = _displayLists[(context, pieceName)] = glGenLists(1)
117
 
 
118
 
            # Draw the model
119
 
            if list != 0:
120
 
                glNewList(list, GL_COMPILE)
121
 
            piece.draw()
122
 
            if list != 0:
123
 
                glEndList()
124
 
                glCallList(list)
125
 
 
126
 
        # Draw pre-rendered model
127
 
        else:
128
 
            glCallList(list)
129
 
        
130
 
class WhiteBuiltinSet(BuiltinSet):
131
 
    """
132
 
    """
133
 
    
134
 
    def __init__(self):
135
 
        BuiltinSet.__init__(self, os.path.join(TEXTURE_DIR, 'piece.png'), WHITE_AMBIENT, WHITE_DIFFUSE, WHITE_SPECULAR, WHITE_SHININESS)
136
 
        self.setRotation(180.0)
137
 
        self.addState('unselected', (0.9, 0.9, 0.9), default = True)
138
 
 
139
 
class BlackBuiltinSet(BuiltinSet):
140
 
    """
141
 
    """
142
 
    
143
 
    def __init__(self):
144
 
        BuiltinSet.__init__(self, os.path.join(TEXTURE_DIR, 'piece.png'), BLACK_AMBIENT, BLACK_DIFFUSE, BLACK_SPECULAR, BLACK_SHININESS)
145
 
        self.addState('unselected', (0.2, 0.2, 0.2), default = True)
146
 
 
147
 
ENDOFDATA      = 65535
148
 
SPIN           = 65534
149
 
VERTICES       = 65533
150
 
QUADS          = 65532
151
 
TRIANGLES      = 65531
152
 
POLARQUADSTRIP = 65530
153
 
QUADSTRIP      = 65529
154
 
SEAM           = 65528
155
 
PATTERN        = 65527
156
 
STEPUP         = 65526
157
 
STEPDOWN       = 65525
158
 
SETBACKREF     = 65524
159
 
BACKREF        = 65523
160
 
 
161
 
class SimpleModel:
162
 
    """
163
 
    """
164
 
    
165
 
    pos = (0,0,0)
166
 
    data = [ENDOFDATA]
167
 
    
168
 
    def __getTextureCoord(self, vertex, maxHeight):
169
 
        """
170
 
        """
171
 
        # FIXME: Change to a hemispherical projection so the top is not so flat
172
 
        
173
 
        # Conical transformation, get u and v based on vertex angle
174
 
        u = vertex[0]
175
 
        v = vertex[2]
176
 
        
177
 
        # Normalise 
178
 
        length = math.sqrt(u**2 + v**2)
179
 
        if length != 0.0:
180
 
            u /= length
181
 
            v /= length
182
 
 
183
 
        # Maximum height is in the middle of the texture, minimum on the boundary
184
 
        h = 1.0 - (vertex[1] / maxHeight)
185
 
        return (0.5 + 0.5 * h * u, 0.5 + 0.5 * h * v)
186
 
 
187
 
    def draw(self):
188
 
        """
189
 
        """
190
 
        # Collect the vertex coordinates
191
 
        # FIXME: How does the scaling work?
192
 
        vertices = []
193
 
        texcoords = []
194
 
        for v in self.__vertices( 11.0 * 0.3 / 8192):
195
 
            vertices.append(v)
196
 
            texcoords.append(self.__getTextureCoord(v, 16.783)) # FIXME: Max height not calculated
197
 
 
198
 
        # Zero out the normals
199
 
        normals = [(0,0,0)] * len(vertices)
200
 
 
201
 
        # Add up all the face normals at each vertex
202
 
        tris = []
203
 
        quads = []
204
 
        for f in self.__faces():
205
 
            if len(f) == 3:
206
 
                tris.append(f[0])
207
 
                tris.append(f[1])
208
 
                tris.append(f[2])
209
 
 
210
 
                d1 = vectordiff(vertices[f[1]], vertices[f[0]])
211
 
                d2 = vectordiff(vertices[f[2]], vertices[f[0]])
212
 
                normal = normalize(crossprod(d1,d2))
213
 
                normals[f[0]] = vectoradd(normals[f[0]],normal)
214
 
                normals[f[1]] = vectoradd(normals[f[1]],normal)
215
 
                normals[f[2]] = vectoradd(normals[f[2]],normal)
216
 
            else:
217
 
                quads.append(f[0])
218
 
                quads.append(f[1])
219
 
                quads.append(f[2])
220
 
                quads.append(f[3])
221
 
 
222
 
                d1 = vectordiff(vertices[f[1]], vertices[f[0]])
223
 
                d2 = vectordiff(vertices[f[3]], vertices[f[0]])
224
 
                normal = normalize(crossprod(d1,d2))
225
 
                normals[f[0]] = vectoradd(normals[f[0]],normal)
226
 
                d1 = vectordiff(vertices[f[2]], vertices[f[1]])
227
 
                d2 = vectordiff(vertices[f[0]], vertices[f[1]])
228
 
                normal = normalize(crossprod(d1,d2))
229
 
                normals[f[1]] = vectoradd(normals[f[1]],normal)
230
 
                d1 = vectordiff(vertices[f[3]], vertices[f[2]])
231
 
                d2 = vectordiff(vertices[f[1]], vertices[f[2]])
232
 
                normal = normalize(crossprod(d1,d2))
233
 
                normals[f[2]] = vectoradd(normals[f[2]],normal)
234
 
                d1 = vectordiff(vertices[f[0]], vertices[f[3]])
235
 
                d2 = vectordiff(vertices[f[2]], vertices[f[3]])
236
 
                normal = normalize(crossprod(d1,d2))
237
 
                normals[f[3]] = vectoradd(normals[f[3]],normal)
238
 
 
239
 
        # Normalize the vertex normals
240
 
        for i in xrange(len(normals)):
241
 
            normals[i] = normalize(normals[i])
242
 
                
243
 
        glEnableClientState(GL_VERTEX_ARRAY)
244
 
        glEnableClientState(GL_NORMAL_ARRAY)
245
 
        glEnableClientState(GL_TEXTURE_COORD_ARRAY)
246
 
 
247
 
        glVertexPointer(3, GL_FLOAT, 0, vertices)
248
 
        glNormalPointer(GL_FLOAT, 0, normals)
249
 
        glTexCoordPointer(2, GL_FLOAT, 0, texcoords)
250
 
 
251
 
        glDrawElementsui(GL_TRIANGLES, tris)
252
 
        glDrawElementsui(GL_QUADS, quads)
253
 
 
254
 
    def end(self):
255
 
        pass
256
 
     
257
 
    def __vertices(self, piece_size):
258
 
        """
259
 
        """
260
 
        i = 0
261
 
        while 1:
262
 
            if self.data[i] == SPIN:
263
 
                steps = self.data[i+1]
264
 
                i += 2
265
 
 
266
 
                while self.data[i] <= SEAM:
267
 
                    if self.data[i] in (SETBACKREF,BACKREF):
268
 
                        i += 2
269
 
                    elif self.data[i] == STEPUP:
270
 
                        steps *= 2
271
 
                        i += 1
272
 
                    elif self.data[i] == STEPDOWN:
273
 
                        steps /= 2
274
 
                        i += 1
275
 
                    elif self.data[i] == SEAM:
276
 
                        i += 1
277
 
                        for v in self.__ring_vertices( steps, i, piece_size):
278
 
                            yield v[0]
279
 
                        for v in self.__ring_vertices( steps, i, piece_size):
280
 
                            yield v[0]
281
 
                        i = v[1]
282
 
                    else:
283
 
                        for v in self.__ring_vertices( steps, i, piece_size):
284
 
                            yield v[0]
285
 
                        i = v[1]
286
 
            elif self.data[i] == POLARQUADSTRIP:
287
 
                steps = self.data[i+1]
288
 
                i += 2
289
 
 
290
 
                dtheta = math.pi * 2 / steps
291
 
 
292
 
                while self.data[i] <= SEAM:
293
 
                    if self.data[i] != BACKREF:
294
 
                        theta = dtheta * self.data[i]
295
 
                        r = self.data[i+1] * piece_size
296
 
                        y = self.data[i+2] * piece_size
297
 
                        yield (r * math.cos(theta), y, r * math.sin(theta))
298
 
                    i += 3
299
 
            elif self.data[i] in (QUADSTRIP,VERTICES):
300
 
                i += 1
301
 
 
302
 
                while self.data[i] <= SEAM:
303
 
                    if self.data[i] == SETBACKREF:
304
 
                        i += 2
305
 
                        continue
306
 
 
307
 
                    if self.data[i] != BACKREF:
308
 
                        yield (self.data[i] * piece_size,
309
 
                            self.data[i+1] * piece_size,
310
 
                            self.data[i+2] * piece_size)
311
 
 
312
 
                    i += 3
313
 
            elif self.data[i] in (QUADS,TRIANGLES):
314
 
                i += 1
315
 
                while self.data[i] <= SEAM: i += 1
316
 
            else:
317
 
                break
318
 
 
319
 
    def __faces(self):
320
 
        basevertex = 0
321
 
        startofvertices = 0
322
 
        backrefs = [0,0,0,0,0]
323
 
 
324
 
        i = 0
325
 
        while 1:
326
 
            if self.data[i] == SPIN:
327
 
                prevsteps = -1
328
 
                prevbase = 0
329
 
 
330
 
                steps = self.data[i+1]
331
 
                i += 2
332
 
 
333
 
                while self.data[i] <= SEAM:
334
 
                    if self.data[i] == SETBACKREF:
335
 
                        backrefs[self.data[i+1]] = basevertex
336
 
                        i += 2
337
 
                        continue
338
 
 
339
 
                    if self.data[i] == STEPUP:
340
 
                        steps *= 2
341
 
                        i += 1
342
 
                        continue
343
 
 
344
 
                    if self.data[i] == STEPDOWN:
345
 
                        steps /= 2
346
 
                        i += 1
347
 
                        continue
348
 
 
349
 
                    if self.data[i] == BACKREF:
350
 
                        if prevsteps != -1:
351
 
                            for f in self.__ring_faces(
352
 
                                backrefs[self.data[i+1]],
353
 
                                steps, prevbase, prevsteps): yield f
354
 
 
355
 
                        prevbase = backrefs[self.data[i+1]]
356
 
                        i += 2
357
 
                    else:
358
 
                        isseam = 0
359
 
                        if self.data[i] == SEAM:
360
 
                            isseam = 1
361
 
                            i += 1
362
 
 
363
 
                        if self.data[i] == PATTERN:
364
 
                            i += 2 + self.data[i+1] * 2
365
 
                        else:
366
 
                            if self.data[i] == 0: steps = 1
367
 
                            i += 2
368
 
 
369
 
                        if prevsteps != -1:
370
 
                            for f in self.__ring_faces( basevertex,
371
 
                                steps, prevbase, prevsteps): yield f
372
 
 
373
 
                        if isseam: basevertex += steps
374
 
                        prevbase = basevertex
375
 
                        basevertex += steps
376
 
 
377
 
                    prevsteps = steps
378
 
 
379
 
            elif self.data[i] in (POLARQUADSTRIP,QUADSTRIP):
380
 
                v0 = -1
381
 
 
382
 
                if self.data[i] == POLARQUADSTRIP: i += 1
383
 
                i += 1
384
 
 
385
 
                while self.data[i] <= SEAM:
386
 
                    if self.data[i] == BACKREF:
387
 
                        v2 = backrefs[self.data[i+1]] + self.data[i+2]
388
 
                    else:
389
 
                        v2 = basevertex
390
 
                        basevertex += 1
391
 
 
392
 
                    if self.data[i+3] == BACKREF:
393
 
                        v3 = backrefs[self.data[i+4]] + self.data[i+5]
394
 
                    else:
395
 
                        v3 = basevertex
396
 
                        basevertex += 1
397
 
 
398
 
                    i += 6
399
 
 
400
 
                    if v0 != -1: yield (v0,v1,v3,v2)
401
 
 
402
 
                    v0 = v2
403
 
                    v1 = v3
404
 
 
405
 
            elif self.data[i] == VERTICES:
406
 
                i += 1
407
 
                startofvertices = basevertex
408
 
 
409
 
                while self.data[i] <= SEAM:
410
 
                    if self.data[i] == SETBACKREF:
411
 
                        backrefs[self.data[i+1]] = basevertex
412
 
                        i += 2
413
 
                        continue
414
 
 
415
 
                    i += 3
416
 
                    basevertex += 1
417
 
 
418
 
            elif self.data[i] == QUADS:
419
 
                i += 1
420
 
                while self.data[i] <= SEAM:
421
 
                    yield (self.data[i] + startofvertices,
422
 
                        self.data[i+1] + startofvertices,
423
 
                        self.data[i+2] + startofvertices,
424
 
                        self.data[i+3] + startofvertices)
425
 
                    i += 4
426
 
 
427
 
            elif self.data[i] == TRIANGLES:
428
 
                i += 1
429
 
                while self.data[i] <= SEAM:
430
 
                    yield (self.data[i] + startofvertices,
431
 
                        self.data[i+1] + startofvertices,
432
 
                        self.data[i+2] + startofvertices)
433
 
                    i += 3
434
 
            else:
435
 
                break
436
 
 
437
 
    def __ring_vertices(self, steps, i, piece_size):
438
 
        patlen = 1
439
 
        dtheta = math.pi * 2 / steps
440
 
 
441
 
        if self.data[i] == PATTERN:
442
 
            patlen = self.data[i+1]
443
 
            i += 2
444
 
 
445
 
        if self.data[i] == 0: steps = 1
446
 
 
447
 
        endindex = i + patlen * 2
448
 
 
449
 
        for j in xrange(steps):
450
 
            r = self.data[i + (j % patlen) * 2] * piece_size
451
 
            y = self.data[i + (j % patlen) * 2 + 1] * piece_size
452
 
            theta = dtheta * j
453
 
            yield ((r * math.cos(theta), y, r * math.sin(theta)), endindex)
454
 
 
455
 
    def __ring_faces(self, basevertex, steps, prevbase, prevsteps):
456
 
        if steps == 1:
457
 
            for i in xrange(prevsteps):
458
 
                yield (basevertex, prevbase + i, prevbase + (i-1)%prevsteps)
459
 
        elif steps == prevsteps:
460
 
            for i in xrange(steps):
461
 
                yield (basevertex + i, prevbase + i,
462
 
                    prevbase + (i-1)%steps, basevertex + (i-1)%steps)
463
 
        else:
464
 
            j = 0
465
 
            i = 0
466
 
            while 1:
467
 
                while j < prevsteps and steps*(1+2*j) < prevsteps*(1+2*i):
468
 
                    yield (basevertex + i%steps,
469
 
                        prevbase + (j+1)%prevsteps,
470
 
                        prevbase + j)
471
 
                    j += 1
472
 
                if i == steps: break
473
 
                yield (basevertex + i, basevertex + (i+1)%steps,
474
 
                    prevbase + j%prevsteps)
475
 
                i += 1
476
 
 
477
 
class Pawn(SimpleModel):
478
 
    """
479
 
    """
480
 
 
481
 
    data = (SPIN,16,
482
 
            7395,0,7395,609,
483
 
            SEAM,7102,910,7345,1199,7345,1572,7191,1910,
484
 
            STEPDOWN,5826,2484,4941,3446,4625,4781,
485
 
            STEPUP,4492,6371,4358,6508,
486
 
            STEPDOWN,3691,6794,2912,7657,2473,10091,
487
 
            SEAM,2100,15344,
488
 
            STEPUP,4518,15697,4695,15900,4649,16218,4509,16382,
489
 
            STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905,
490
 
            4303,21058,3858,22132,
491
 
            STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360,
492
 
            ENDOFDATA)
493
 
 
494
 
class Rook(SimpleModel):
495
 
    """
496
 
    """
497
 
     
498
 
    data = (SPIN,20,
499
 
            9374,0,9374,756,SEAM,9003,1062,9311,1487,
500
 
            9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595,
501
 
            6167,7812,6138,8066,5926,8460,5216,12608,
502
 
            SEAM,4883,21434,
503
 
            SEAM,5140,21608,
504
 
            SEAM,5176,22792,
505
 
            SEAM,5953,23030,
506
 
 
507
 
            SETBACKREF,0,
508
 
            6103,26819,
509
 
     
510
 
            SETBACKREF,1,
511
 
            SPIN,20,
512
 
            5020,26819,5020,26114,4906,25858,0,25666,
513
 
 
514
 
            POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971,
515
 
            BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971,
516
 
            POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971,
517
 
            BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971,
518
 
            POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971,
519
 
            BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971,
520
 
            POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971,
521
 
            BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971,
522
 
 
523
 
            POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2,
524
 
            3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4,
525
 
            POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7,
526
 
            8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9,
527
 
            POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12,
528
 
            13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14,
529
 
            POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17,
530
 
            18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19,
531
 
 
532
 
            POLARQUADSTRIP,20,1,5020,26819,1,6103,26819,
533
 
            0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819,
534
 
            POLARQUADSTRIP,20,6,5020,26819,6,6103,26819,
535
 
            5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819,
536
 
            POLARQUADSTRIP,20,11,5020,26819,11,6103,26819,
537
 
            10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819,
538
 
            POLARQUADSTRIP,20,16,5020,26819,16,6103,26819,
539
 
            15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819,
540
 
 
541
 
            POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819,
542
 
            POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971,
543
 
            POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819,
544
 
            POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971,
545
 
            POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819,
546
 
            POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971,
547
 
            POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819,
548
 
            POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971,
549
 
 
550
 
            POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971,
551
 
            3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971,
552
 
            POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971,
553
 
            8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971,
554
 
            POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971,
555
 
            13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971,
556
 
            POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971,
557
 
            18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971,
558
 
            ENDOFDATA)
559
 
 
560
 
class Knight(SimpleModel):
561
 
    """
562
 
    """
563
 
 
564
 
    data = (VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611,
565
 
            6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611,
566
 
            2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517,
567
 
            -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907,
568
 
            -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0,
569
 
            -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817,
570
 
            -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611,
571
 
            -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517,
572
 
            2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907,
573
 
            6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939,
574
 
            -1183,12003,7939, -1183,14019,6547, -1183,16307,5288,
575
 
            -1183,16555,5281, -1183,20128,2191, -1134,20304,2131,
576
 
            -1183,20516,2156, -1417,21874,1842, -1417,23109,2185,
577
 
            -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418,
578
 
            -1151,23389,6664, -1151,23501,6906, -1151,23806,6987,
579
 
            -1151,24102,6987, -1151,24209,7189, -1151,24371,7513,
580
 
            -1151,24605,7715, -1151,24939,7674, -1313,25568,7149,
581
 
            -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076,
582
 
            -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606,
583
 
            -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197,
584
 
            -1187,28523,5990, -1304,28447,4204, -1158,28789,1627,
585
 
            -561,28931,-1220, -357,29608,-1244, -357,30527,-1441,
586
 
            -357,31249,-1837, -357,31511,-2627, -357,31511,-3484,
587
 
            -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243,
588
 
            -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143,
589
 
            -806,23401,-6784, -812,20723,-6228, -796,16757,-6210,
590
 
            -1559,24934,7435, -1566,24633,7460, -1531,24429,7334,
591
 
            -1475,24293,7131, -1440,24203,7004, -1372,23935,7015,
592
 
            -1364,23606,6868, -1389,23515,6705, -1687,28010,6952,
593
 
            -1687,27926,7343, -1687,27629,7491, -1687,27324,7552,
594
 
            -1687,27032,7432, -1687,26791,7148, -1642,27135,7165,
595
 
            -1642,27254,7304, -1642,27397,7364, -1642,27546,7334,
596
 
            -1642,27693,7261, -1642,27737,7088, -1611,10591,8159,
597
 
            -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397,
598
 
            -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248,
599
 
            -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638,
600
 
            -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878,
601
 
            -2569,20636,-797, -4348,11575,-324, -5584,10108,-169,
602
 
            -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651,
603
 
            -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951,
604
 
            -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735,
605
 
            -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931,
606
 
            -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430,
607
 
            -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417,
608
 
            -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048,
609
 
            -4155,14560,5246, -3546,16847,3719, -3334,17643,2937,
610
 
            -2860,20062,1230, -4822,12054,7102, -5325,10909,7208,
611
 
            -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175,
612
 
            -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464,
613
 
            -3301,17348,1117, -5931,10206,1996, -4695,11624,1840,
614
 
            -4445,11658,2844, -5681,10240,3000, -3074,17398,2202,
615
 
            -3456,15117,2468, -3840,13290,2683, -4642,13358,4019,
616
 
            -4257,15194,3908, -6017,10188,3746, -5237,11714,4039,
617
 
            -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154,
618
 
            -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750,
619
 
            -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843,
620
 
            -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248,
621
 
            -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952,
622
 
            -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298,
623
 
            -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389,
624
 
            -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789,
625
 
            -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679,
626
 
            -845,13482,-6604, -945,10997,-7893, -981,11110,-7735,
627
 
            -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100,
628
 
            -826,23358,-6656, -882,10149,-8148, -913,12323,-7139,
629
 
            -822,14910,-6353, -817,18235,-6210, -827,21937,-6382,
630
 
            -846,21937,-6341, -841,14912,-6313, -931,12326,-7098,
631
 
            -901,10152,-8107, -844,23359,-6615, -851,20681,-6059,
632
 
            -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694,
633
 
            -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796,
634
 
            -863,14065,-6404, -818,15760,-6221, -828,17367,-6171,
635
 
            -854,19800,-5994, -848,21309,-6200, -843,22566,-6482,
636
 
            -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048,
637
 
            -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191,
638
 
            -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304,
639
 
            -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534,
640
 
            -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616,
641
 
            -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339,
642
 
            -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368,
643
 
            -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475,
644
 
            -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922,
645
 
            -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813,
646
 
            -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971,
647
 
            -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139,
648
 
            -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318,
649
 
            -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375,
650
 
            -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457,
651
 
            -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518,
652
 
            -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597,
653
 
            -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671,
654
 
            -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767,
655
 
            -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777,
656
 
            -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957,
657
 
            -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937,
658
 
            -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049,
659
 
            -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242,
660
 
            -850,22569,-6438, -855,21313,-6156, -861,19804,-5949,
661
 
            -834,17371,-6127, -824,15765,-6176, -869,14070,-6360,
662
 
            -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211,
663
 
            -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354,
664
 
            -837,16490,-6061, -857,20684,-6015, -867,23379,-6515,
665
 
            -907,10157,-8062, -937,12331,-7053, -847,14917,-6268,
666
 
            -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724,
667
 
            -947,11969,-7255, -885,13125,-6649, -858,14493,-6314,
668
 
            -839,16049,-6111, -836,17735,-6083, -859,20244,-5982,
669
 
            -891,21559,-6157, -848,22883,-6508, -851,22255,-6367,
670
 
            -856,20999,-6085, -867,19042,-6000, -836,16930,-6094,
671
 
            -835,15341,-6222, -880,13646,-6405, -916,12540,-6953,
672
 
            -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174,
673
 
            -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865,
674
 
            -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567,
675
 
            -996,11458,-7405, -992,11582,-7342, -972,12080,-7057,
676
 
            -968,12210,-6984, -935,12620,-6792, -931,12759,-6714,
677
 
            -914,13199,-6441, -910,13346,-6359, -915,13767,-6194,
678
 
            -910,13941,-6175, -890,14633,-6107, -886,14783,-6091,
679
 
            -864,15476,-6035, -859,15645,-6017, -870,16062,-5957,
680
 
            -873,16231,-5936, -853,17048,-5965, -861,17185,-5974,
681
 
            -879,17812,-5997, -885,17961,-5997, -851,18486,-6138,
682
 
            -865,18526,-5933, -872,18761,-5875, -870,19337,-5971,
683
 
            -864,19470,-5784, -937,19590,-5786, -833,19023,-6126,
684
 
            -851,20344,-5894, -851,20576,-5912, -855,21086,-5973,
685
 
            -854,21224,-6003, -871,21651,-6070, -852,21853,-6116,
686
 
            -850,22332,-6224, -849,22490,-6259, -831,22924,-6338,
687
 
            -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312,
688
 
            -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565,
689
 
            -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643,
690
 
            -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516,
691
 
            -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628,
692
 
            -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370,
693
 
            -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569,
694
 
            -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566,
695
 
            -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493,
696
 
            -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723,
697
 
            -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650,
698
 
            -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432,
699
 
            -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945,
700
 
            -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056,
701
 
            -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101,
702
 
            -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581,
703
 
            -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930,
704
 
            -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692,
705
 
            -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759,
706
 
            -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940,
707
 
            -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351,
708
 
            -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571,
709
 
            -2823,20635,1307, -2741,20503,1328, -1490,23972,5392,
710
 
            -1489,24080,4226, -1489,24040,3095, -1489,23188,2159,
711
 
            -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131,
712
 
            -1599,24460,4263, -1580,24357,5431, -1448,23885,6743,
713
 
            -1252,24770,5442, -1271,24873,4274, -1277,24828,3142,
714
 
            -1389,24618,2016, -1479,24733,1993, -1301,25010,3165,
715
 
            -1295,25055,4297, -1391,24890,5460, -1512,25216,5507,
716
 
            -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928,
717
 
            -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150,
718
 
            -1850,26272,4298, -1578,27435,7117, -1658,27625,6884,
719
 
            -1671,27398,6846, -1678,27176,6937, -1715,27784,6626,
720
 
            -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688,
721
 
            -1555,28655,1620, -1658,28252,4204, -1581,28263,5997,
722
 
            -1567,28312,6790, -1935,27827,4220, -1818,28249,1603,
723
 
            -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228,
724
 
            -413,30264,-4539, -424,31094,-4152, -418,31478,-3497,
725
 
            -410,31453,-2653, -410,31190,-1863, -410,30468,-1467,
726
 
            -410,29550,-1270, -411,31041,-1902, -448,31253,-2696,
727
 
            -449,31323,-3466, -425,31182,-3496, -411,31060,-2738,
728
 
            -387,30899,-1932, -316,30806,-1957, -335,30952,-2766,
729
 
            -353,31089,-3521, -322,31007,-3540, -303,30871,-2786,
730
 
            -284,30725,-1976, -304,30630,-1993, -323,30776,-2802,
731
 
            -342,30912,-3557, -396,30843,-3565, -378,30707,-2811,
732
 
            -358,30561,-2001, -414,30477,-2013, -433,30623,-2822,
733
 
            -452,30759,-3576, -474,30560,-3616, -456,30424,-2861,
734
 
            -436,30278,-2052, -349,30194,-2077, -368,30340,-2886,
735
 
            -386,30477,-3641, -309,30389,-3665, -291,30253,-2911,
736
 
            -271,30107,-2102, -267,29996,-2124, -286,30142,-2933,
737
 
            -305,30278,-3688, -376,30179,-3700, -357,30043,-2945,
738
 
            -338,29897,-2136, -420,29789,-2150, -439,29935,-2959,
739
 
            -458,30071,-3713, -500,29883,-3751, -463,29601,-2187,
740
 
            -470,30974,-4049, -462,30153,-4391, -466,30563,-4220,
741
 
            -410,30009,-1368, -725,29372,-3225, -677,29335,-5130,
742
 
            -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408,
743
 
            -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612,
744
 
            -1904,26715,1801, -1394,25919,831, -2224,27270,-3994,
745
 
            -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163,
746
 
            -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507,
747
 
            -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128,
748
 
            -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252,
749
 
            -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070,
750
 
            -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485,
751
 
            -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303,
752
 
            -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726,
753
 
            -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270,
754
 
            -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738,
755
 
            -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776,
756
 
            -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691,
757
 
            -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898,
758
 
            -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428,
759
 
            -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100,
760
 
            -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42,
761
 
            -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562,
762
 
            -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929,
763
 
            6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159,
764
 
            2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179,
765
 
            6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487,
766
 
            -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274,
767
 
            -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559,
768
 
            -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487,
769
 
            -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325,
770
 
            -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325,
771
 
            807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939,
772
 
            1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547,
773
 
            1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281,
774
 
            1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131,
775
 
            1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842,
776
 
            1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121,
777
 
            1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664,
778
 
            0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987,
779
 
            0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189,
780
 
            0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715,
781
 
            0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149,
782
 
            0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610,
783
 
            1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723,
784
 
            1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893,
785
 
            1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062,
786
 
            357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655,
787
 
            357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302,
788
 
            357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356,
789
 
            357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763,
790
 
            914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784,
791
 
            0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210,
792
 
            0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334,
793
 
            1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868,
794
 
            1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491,
795
 
            1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165,
796
 
            1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261,
797
 
            1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032,
798
 
            3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240,
799
 
            6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132,
800
 
            3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535,
801
 
            3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324,
802
 
            5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888,
803
 
            2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077,
804
 
            3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519,
805
 
            2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931,
806
 
            5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858,
807
 
            3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726,
808
 
            5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719,
809
 
            3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208,
810
 
            5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175,
811
 
            3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464,
812
 
            3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844,
813
 
            5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683,
814
 
            4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039,
815
 
            5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336,
816
 
            2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529,
817
 
            3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211,
818
 
            4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510,
819
 
            3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148,
820
 
            4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470,
821
 
            4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367,
822
 
            3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567,
823
 
            3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893,
824
 
            0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439,
825
 
            813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148,
826
 
            913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382,
827
 
            846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107,
828
 
            844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399,
829
 
            869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958,
830
 
            962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221,
831
 
            828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482,
832
 
            3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048,
833
 
            3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191,
834
 
            4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304,
835
 
            4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534,
836
 
            2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616,
837
 
            5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339,
838
 
            3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368,
839
 
            5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475,
840
 
            2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922,
841
 
            2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813,
842
 
            3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971,
843
 
            3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139,
844
 
            4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318,
845
 
            4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375,
846
 
            5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457,
847
 
            4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518,
848
 
            4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597,
849
 
            4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671,
850
 
            3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767,
851
 
            3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777,
852
 
            3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957,
853
 
            3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937,
854
 
            2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049,
855
 
            2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438,
856
 
            855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176,
857
 
            869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895,
858
 
            865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354,
859
 
            837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062,
860
 
            937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297,
861
 
            885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649,
862
 
            858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982,
863
 
            891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085,
864
 
            867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405,
865
 
            916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285,
866
 
            931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996,
867
 
            952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567,
868
 
            996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984,
869
 
            935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359,
870
 
            915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091,
871
 
            864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936,
872
 
            853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997,
873
 
            851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971,
874
 
            864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894,
875
 
            851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070,
876
 
            852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338,
877
 
            834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469,
878
 
            2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593,
879
 
            2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392,
880
 
            2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573,
881
 
            2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556,
882
 
            2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580,
883
 
            2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652,
884
 
            2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886,
885
 
            1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723,
886
 
            2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650,
887
 
            1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432,
888
 
            2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096,
889
 
            3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101,
890
 
            5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581,
891
 
            3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080,
892
 
            2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25,
893
 
            2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691,
894
 
            2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830,
895
 
            2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936,
896
 
            2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328,
897
 
            1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159,
898
 
            1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131,
899
 
            1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442,
900
 
            1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993,
901
 
            1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507,
902
 
            1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928,
903
 
            1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150,
904
 
            1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846,
905
 
            1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776,
906
 
            1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997,
907
 
            1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195,
908
 
            1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539,
909
 
            424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863,
910
 
            410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696,
911
 
            449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932,
912
 
            316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540,
913
 
            303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802,
914
 
            342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001,
915
 
            414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616,
916
 
            456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886,
917
 
            386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102,
918
 
            267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700,
919
 
            357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959,
920
 
            458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049,
921
 
            462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225,
922
 
            677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408,
923
 
            2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612,
924
 
            1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011,
925
 
            2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523,
926
 
            2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972,
927
 
            2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971,
928
 
            2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749,
929
 
            2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014,
930
 
            2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362,
931
 
            2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822,
932
 
            2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686,
933
 
            1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682,
934
 
            2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309,
935
 
            2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135,
936
 
            1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19,
937
 
            1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132,
938
 
            2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34,
939
 
            2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229,
940
 
            2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103,
941
 
            1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607,
942
 
            -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607,
943
 
 
944
 
            TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901,
945
 
            1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070,
946
 
            1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076,
947
 
            1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086,
948
 
            1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095,
949
 
            1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149,
950
 
            1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105,
951
 
            1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112,
952
 
            1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113,
953
 
            1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154,
954
 
            1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796,
955
 
            1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121,
956
 
            1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761,
957
 
            1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124,
958
 
            1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155,
959
 
            1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281,
960
 
            1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163,
961
 
            1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266,
962
 
            1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175,
963
 
            1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168,
964
 
            1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191,
965
 
            119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198,
966
 
            1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230,
967
 
            1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226,
968
 
            1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226,
969
 
            1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195,
970
 
            1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225,
971
 
            1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218,
972
 
            1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228,
973
 
            1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234,
974
 
            1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233,
975
 
            1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266,
976
 
            1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251,
977
 
            1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272,
978
 
            1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273,
979
 
            1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081,
980
 
            1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265,
981
 
            1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276,
982
 
            1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281,
983
 
            1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291,
984
 
            1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156,
985
 
            1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298,
986
 
            660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138,
987
 
            140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142,
988
 
            143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183,
989
 
            145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138,
990
 
            147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159,
991
 
            150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158,
992
 
            157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163,
993
 
            160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156,
994
 
            176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151,
995
 
            180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144,
996
 
            182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148,
997
 
            186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202,
998
 
            187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199,
999
 
            189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204,
1000
 
            192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200,
1001
 
            193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194,
1002
 
            196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189,
1003
 
            198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245,
1004
 
            200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191,
1005
 
            205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208,
1006
 
            208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214,
1007
 
            210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224,
1008
 
            212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210,
1009
 
            214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209,
1010
 
            216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212,
1011
 
            218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234,
1012
 
            220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327,
1013
 
            223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324,
1014
 
            226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231,
1015
 
            228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222,
1016
 
            230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318,
1017
 
            232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227,
1018
 
            233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225,
1019
 
            235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219,
1020
 
            237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311,
1021
 
            239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203,
1022
 
            241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264,
1023
 
            244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274,
1024
 
            252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273,
1025
 
            257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248,
1026
 
            22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22,
1027
 
            275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445,
1028
 
            330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318,
1029
 
            335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313,
1030
 
            664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325,
1031
 
            344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328,
1032
 
            349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330,
1033
 
            405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407,
1034
 
            411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608,
1035
 
            418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419,
1036
 
            421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429,
1037
 
            430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437,
1038
 
            444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195,
1039
 
            447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413,
1040
 
            462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492,
1041
 
            488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489,
1042
 
            489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490,
1043
 
            495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110,
1044
 
            495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505,
1045
 
            505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505,
1046
 
            512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76,
1047
 
            519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525,
1048
 
            528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561,
1049
 
            535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563,
1050
 
            547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563,
1051
 
            559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557,
1052
 
            560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563,
1053
 
            562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555,
1054
 
            564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569,
1055
 
            568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571,
1056
 
            573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584,
1057
 
            587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654,
1058
 
            600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603,
1059
 
            604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604,
1060
 
            607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609,
1061
 
            608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601,
1062
 
            611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614,
1063
 
            615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630,
1064
 
            630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633,
1065
 
            633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668,
1066
 
            668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820,
1067
 
            677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172,
1068
 
            721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503,
1069
 
            730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744,
1070
 
            745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86,
1071
 
            747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752,
1072
 
            752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161,
1073
 
            770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642,
1074
 
            775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802,
1075
 
            801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800,
1076
 
            805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804,
1077
 
            807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856,
1078
 
            810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645,
1079
 
            812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839,
1080
 
            818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816,
1081
 
            820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644,
1082
 
            822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825,
1083
 
            826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831,
1084
 
            844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851,
1085
 
            847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811,
1086
 
            848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866,
1087
 
            850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861,
1088
 
            852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861,
1089
 
            854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916,
1090
 
            857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806,
1091
 
            858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854,
1092
 
            862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851,
1093
 
            864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850,
1094
 
            866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905,
1095
 
            868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775,
1096
 
            873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880,
1097
 
            874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881,
1098
 
            876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748,
1099
 
            878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874,
1100
 
            882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903,
1101
 
            885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896,
1102
 
            886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085,
1103
 
            888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902,
1104
 
            89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900,
1105
 
            891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898,
1106
 
            893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887,
1107
 
            896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159,
1108
 
            90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877,
1109
 
            902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927,
1110
 
            911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859,
1111
 
            913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853,
1112
 
            919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908,
1113
 
            93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904,
1114
 
            934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921,
1115
 
            939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006,
1116
 
            976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901,
1117
 
            979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899,
1118
 
            981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896,
1119
 
            983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997,
1120
 
            986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016,
1121
 
            988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008,
1122
 
            990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887,
1123
 
            993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045,
1124
 
            996,884,1007, 996,1005,884,
1125
 
            
1126
 
            QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14,
1127
 
            1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039,
1128
 
            1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056,
1129
 
            1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054,
1130
 
            1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041,
1131
 
            1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029,
1132
 
            1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017,
1133
 
            102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009,
1134
 
            1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106,
1135
 
            106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052,
1136
 
            1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054,
1137
 
            1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056,
1138
 
            1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058,
1139
 
            1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108,
1140
 
            1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074,
1141
 
            1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079,
1142
 
            108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083,
1143
 
            1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087,
1144
 
            1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090,
1145
 
            109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094,
1146
 
            1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098,
1147
 
            658,659,16,15, 110,99,499,496, 1100,1099,1102,1104,
1148
 
            1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107,
1149
 
            1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111,
1150
 
            1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116,
1151
 
            1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121,
1152
 
            1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126,
1153
 
            1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129,
1154
 
            1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124,
1155
 
            1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141,
1156
 
            1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130,
1157
 
            1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145,
1158
 
            114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143,
1159
 
            1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150,
1160
 
            1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153,
1161
 
            1149,1148,1153,1152, 115,116,121,122, 115,114,166,167,
1162
 
            1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150,
1163
 
            1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155,
1164
 
            1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166,
1165
 
            1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174,
1166
 
            1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176,
1167
 
            1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187,
1168
 
            1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190,
1169
 
            119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196,
1170
 
            1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199,
1171
 
            1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124,
1172
 
            1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205,
1173
 
            1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205,
1174
 
            1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214,
1175
 
            1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217,
1176
 
            1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220,
1177
 
            122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223,
1178
 
            1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126,
1179
 
            1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232,
1180
 
            1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246,
1181
 
            1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125,
1182
 
            1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261,
1183
 
            1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136,
1184
 
            1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259,
1185
 
            1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259,
1186
 
            126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260,
1187
 
            1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265,
1188
 
            1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277,
1189
 
            127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274,
1190
 
            1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273,
1191
 
            1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285,
1192
 
            1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288,
1193
 
            1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125,
1194
 
            1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290,
1195
 
            1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292,
1196
 
            660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300,
1197
 
            1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128,
1198
 
            131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138,
1199
 
            136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141,
1200
 
            154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162,
1201
 
            161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169,
1202
 
            164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164,
1203
 
            167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167,
1204
 
            173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173,
1205
 
            176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180,
1206
 
            180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264,
1207
 
            206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403,
1208
 
            265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301,
1209
 
            269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303,
1210
 
            273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353,
1211
 
            281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357,
1212
 
            285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361,
1213
 
            289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292,
1214
 
            292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369,
1215
 
            298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375,
1216
 
            304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662,
1217
 
            310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339,
1218
 
            314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335,
1219
 
            318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332,
1220
 
            321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345,
1221
 
            325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346,
1222
 
            663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354,
1223
 
            333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370,
1224
 
            337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663,
1225
 
            340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383,
1226
 
            345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364,
1227
 
            349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352,
1228
 
            352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354,
1229
 
            356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358,
1230
 
            36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363,
1231
 
            363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367,
1232
 
            367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674,
1233
 
            370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372,
1234
 
            374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376,
1235
 
            378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381,
1236
 
            381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385,
1237
 
            385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398,
1238
 
            39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391,
1239
 
            392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409,
1240
 
            396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679,
1241
 
            400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300,
1242
 
            406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414,
1243
 
            411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411,
1244
 
            419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423,
1245
 
            424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426,
1246
 
            427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096,
1247
 
            431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434,
1248
 
            434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432,
1249
 
            437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687,
1250
 
            441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465,
1251
 
            449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452,
1252
 
            451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460,
1253
 
            456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617,
1254
 
            463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98,
1255
 
            467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694,
1256
 
            470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474,
1257
 
            474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478,
1258
 
            48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483,
1259
 
            483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489,
1260
 
            488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48,
1261
 
            492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511,
1262
 
            497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9,
1263
 
            50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567,
1264
 
            504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508,
1265
 
            509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573,
1266
 
            513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522,
1267
 
            516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517,
1268
 
            52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527,
1269
 
            525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702,
1270
 
            530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536,
1271
 
            536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542,
1272
 
            54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542,
1273
 
            544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548,
1274
 
            55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557,
1275
 
            555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543,
1276
 
            566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710,
1277
 
            570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569,
1278
 
            577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580,
1279
 
            58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588,
1280
 
            583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593,
1281
 
            589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591,
1282
 
            591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604,
1283
 
            595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593,
1284
 
            653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611,
1285
 
            605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620,
1286
 
            612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622,
1287
 
            615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65,
1288
 
            620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629,
1289
 
            63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782,
1290
 
            1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5,
1291
 
            5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097,
1292
 
            29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100,
1293
 
            32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0,
1294
 
            0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674,
1295
 
            673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679,
1296
 
            679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683,
1297
 
            683,684,685,686, 684,681,824,1114, 685,684,1114,1131,
1298
 
            686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70,
1299
 
            690,689,692,691, 691,692,693,694, 692,689,1135,1134,
1300
 
            693,692,1134,1133, 694,693,695,48, 695,693,1133,1132,
1301
 
            696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760,
1302
 
            654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702,
1303
 
            702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706,
1304
 
            706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710,
1305
 
            71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714,
1306
 
            714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765,
1307
 
            718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170,
1308
 
            723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728,
1309
 
            728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735,
1310
 
            733,730,1184,1183, 734,733,1183,1182, 735,734,737,736,
1311
 
            736,737,738,739, 737,734,1182,1181, 738,737,1181,1180,
1312
 
            739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179,
1313
 
            742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728,
1314
 
            750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773,
1315
 
            763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769,
1316
 
            767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821,
1317
 
            775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830,
1318
 
            78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831,
1319
 
            783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787,
1320
 
            787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736,
1321
 
            790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794,
1322
 
            794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798,
1323
 
            798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739,
1324
 
            801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858,
1325
 
            81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825,
1326
 
            82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837,
1327
 
            828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834,
1328
 
            833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835,
1329
 
            837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838,
1330
 
            842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872,
1331
 
            872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13,
1332
 
            90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957,
1333
 
            912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929,
1334
 
            918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91,
1335
 
            920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013,
1336
 
            927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92,
1337
 
            930,907,979,1003, 931,906,1009,1048, 932,905,981,1001,
1338
 
            933,904,980,1002, 934,923,994,1011, 935,918,987,1012,
1339
 
            936,922,995,1045, 937,917,989,1010, 938,921,977,1005,
1340
 
            939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000,
1341
 
            942,912,985,997, 943,913,984,998, 944,925,1016,1017,
1342
 
            945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020,
1343
 
            948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94,
1344
 
            950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025,
1345
 
            953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028,
1346
 
            956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031,
1347
 
            959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034,
1348
 
            961,905,935,960, 962,932,1001,1035, 963,962,1035,1036,
1349
 
            963,923,932,962, 964,934,1011,1037, 965,964,1037,1038,
1350
 
            965,904,934,964, 966,933,1002,1039, 967,966,1039,1040,
1351
 
            967,917,933,966, 968,937,1010,1041, 969,968,1041,1042,
1352
 
            969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044,
1353
 
            971,922,930,970, 972,936,1045,1046, 973,972,1046,1047,
1354
 
            973,906,936,972, 974,931,1048,1049, 975,974,1049,1050,
1355
 
            975,916,931,974, 976,915,1069,1059, 977,921,1065,1055,
1356
 
            978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038,
1357
 
            981,905,961,1034, 982,911,957,1030, 983,910,953,1026,
1358
 
            984,913,949,1022, 985,912,945,1018, 986,914,951,1024,
1359
 
            987,918,959,1032, 989,917,967,1040, 990,909,1063,1053,
1360
 
            992,919,947,1020, 993,920,955,1028, 994,923,963,1036,
1361
 
            995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019,
1362
 
            998,986,1024,1023, 999,993,1028,1027,
1363
 
            
1364
 
            SPIN,18,
1365
 
            9510,0, 9510,756, SEAM, 9134,1129, 9447,1487,
1366
 
            9447,1951, 9103,2371, STEPDOWN, 8211,3083,
1367
 
            7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560,
1368
 
            STEPUP, BACKREF,0,
1369
 
            ENDOFDATA)
1370
 
    
1371
 
class Bishop(SimpleModel):
1372
 
    """
1373
 
    """
1374
 
 
1375
 
    data = (VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790,
1376
 
            4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532,
1377
 
            1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154,
1378
 
            -1790,26960,4918, -2617,26960,4532, -3364,26960,4009,
1379
 
            -4009,26960,3364, -4532,26960,2617, -4918,26960,1790,
1380
 
            -5154,26960,909, -5233,26960,0, -5154,26960,-909, -4918,26960,-1790,
1381
 
            -4532,26960,-2617, -4009,26960,-3364, -3364,26960,-4009,
1382
 
            -2617,26960,-4532, -1790,26960,-4918, -909,26960,-5154, 0,26833,-5233,
1383
 
            909,26960,-5154, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009,
1384
 
            4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909,
1385
 
            SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435,
1386
 
            3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102,
1387
 
            1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443,
1388
 
            -1481,30081,4214, -2190,30081,3884, -2830,30081,3435,
1389
 
            -3383,30081,2883, -3831,30081,2242, -4162,30081,1534,
1390
 
            -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534,
1391
 
            -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435,
1392
 
            -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511,
1393
 
            845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388,
1394
 
            3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729,
1395
 
            240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102,
1396
 
            2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153,
1397
 
            3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037,
1398
 
            1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233,
1399
 
            -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102,
1400
 
            2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435,
1401
 
            3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925,
1402
 
            4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401,
1403
 
            3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977,
1404
 
            4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248,
1405
 
            -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0,
1406
 
            -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453,
1407
 
            -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248,
1408
 
            -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883,
1409
 
            2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637,
1410
 
            0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037,
1411
 
            -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784,
1412
 
            240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0,
1413
 
            4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203,
1414
 
            3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705,
1415
 
            3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817,
1416
 
            2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310,
1417
 
            3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701,
1418
 
            4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537,
1419
 
            4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487,
1420
 
            3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901,
1421
 
            1608,28047,-4906,
1422
 
 
1423
 
            TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96,
1424
 
            122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95,
1425
 
            103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122,
1426
 
            33,105,34, 29,153,125, 26,124,122,
1427
 
 
1428
 
            QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20,
1429
 
            18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15,
1430
 
            13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48,
1431
 
            135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49,
1432
 
            147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144,
1433
 
            169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172,
1434
 
            111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74,
1435
 
            76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79,
1436
 
            81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52,
1437
 
            113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57,
1438
 
            118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97,
1439
 
            106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105,
1440
 
            104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103,
1441
 
            102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4,
1442
 
            99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98,
1443
 
            96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62,
1444
 
            0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25,
1445
 
            23,87,120,24,
1446
 
 
1447
 
            SPIN,18,
1448
 
            8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292,
1449
 
            STEPDOWN,6989,2980,5927,4133,5548,5735,
1450
 
            STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434,
1451
 
            3493,9185,2816,13524,SEAM,2690,18532,5301,18690,
1452
 
            STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845,
1453
 
            SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979,
1454
 
            STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705,
1455
 
            SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0,
1456
 
 
1457
 
            SPIN,36,
1458
 
            BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500,
1459
 
            2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372,
1460
 
            STEPDOWN,1233,35734,STEPDOWN,0,35891,
1461
 
 
1462
 
            ENDOFDATA)
1463
 
 
1464
 
class Queen(SimpleModel):
1465
 
    """
1466
 
    """
1467
 
 
1468
 
    data = (SPIN,24,
1469
 
            11092,0,11092,914,SEAM,10653,1284,
1470
 
            11018,1798,11018,2358,10787,2866,
1471
 
            STEPDOWN,8739,3726,7412,5168,6937,7171,
1472
 
            STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546,
1473
 
            4368,11485,3678,15137,SEAM,3259,26879,
1474
 
            5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751,
1475
 
            5654,29177,5538,29326,5542,29982,5377,30278,
1476
 
            STEPDOWN,SEAM,4194,30585,
1477
 
            SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774,
1478
 
            SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429,
1479
 
            STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977,
1480
 
            SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460,
1481
 
            SEAM,4349,40044,
1482
 
            STEPDOWN,SEAM,1381,41188,
1483
 
            1396,42332,STEPDOWN,1082,43072,481,43476,0,43543,
1484
 
            ENDOFDATA)
1485
 
 
1486
 
class King(SimpleModel):
1487
 
    """
1488
 
    """
1489
 
     
1490
 
    data = (SPIN,20,
1491
 
            11378,0,11378,856,SEAM,10928,1152,
1492
 
            11302,1684,11302,2209,11065,2684,
1493
 
            STEPDOWN,8964,3490,7603,4841,7116,6717,
1494
 
            STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878,
1495
 
            4481,10758,3696,14808,SEAM,3065,26979,
1496
 
            5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533,
1497
 
            5477,28882,5397,29010,5406,29363,4903,29934,
1498
 
            STEPDOWN,SEAM,3944,30227,
1499
 
            SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370,
1500
 
            SEAM,3975,32620,6899,39055,6877,39351,2833,39514,
1501
 
            2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969,
1502
 
 
1503
 
            SETBACKREF,0,
1504
 
            QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702,
1505
 
            -1531,40917,0,-1465,41008,702,
1506
 
            QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702,
1507
 
            -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702,
1508
 
            -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702,
1509
 
            QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702,
1510
 
            -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0,
1511
 
            1054,45576,702,1116,44636,0,1068,44554,702,
1512
 
            QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702,
1513
 
            3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0,
1514
 
            2829,41187,702,1531,40917,0,1465,41008,702,
1515
 
            QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702,
1516
 
            1613,39866,0,1543,39866,702,
1517
 
            QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702,
1518
 
            1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702,
1519
 
            2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702,
1520
 
            2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702,
1521
 
            1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702,
1522
 
            973,45747,702,
1523
 
            QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2,
1524
 
            -1465,41008,-702,BACKREF,0,4,
1525
 
            QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8,
1526
 
            -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12,
1527
 
            -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16,
1528
 
            QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702,
1529
 
            BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24,
1530
 
            1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28,
1531
 
            QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702,
1532
 
            BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36,
1533
 
            2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40,
1534
 
            QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702,
1535
 
            BACKREF,0,44,1543,39866,-702,BACKREF,0,46,
1536
 
            QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702,
1537
 
            -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702,
1538
 
            -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702,
1539
 
            -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702,
1540
 
            -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702,
1541
 
            -973,45747,-702,
1542
 
            ENDOFDATA)
1543