1 //------------------------------------------------------------------------------
2 // emWorldClockPanel.cpp
3 //
4 // Copyright (C) 2006-2008,2010,2014,2016-2017 Oliver Hamann.
5 //
6 // Homepage: http://eaglemode.sourceforge.net/
7 //
8 // This program is free software: you can redistribute it and/or modify it under
9 // the terms of the GNU General Public License version 3 as published by the
10 // Free Software Foundation.
11 //
12 // This program is distributed in the hope that it will be useful, but WITHOUT
13 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 // FOR A PARTICULAR PURPOSE. See the GNU General Public License version 3 for
15 // more details.
16 //
17 // You should have received a copy of the GNU General Public License version 3
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
19 //------------------------------------------------------------------------------
20
21 #include <emClock/emWorldClockPanel.h>
22 #include <emClock/emClockPanel.h>
23
24
emWorldClockPanel(ParentArg parent,const emString & name,emClockFileModel * fileModel)25 emWorldClockPanel::emWorldClockPanel(
26 ParentArg parent, const emString & name, emClockFileModel * fileModel
27 )
28 : emFilePanel(parent,name,fileModel)
29 {
30 FileModel=fileModel;
31 TimeZonesModel=emTimeZonesModel::Acquire(GetRootContext());
32 Children.SetTuningLevel(4);
33 AddWakeUpSignal(GetVirFileStateSignal());
34 AddWakeUpSignal(FileModel->GetChangeSignal());
35 AddWakeUpSignal(TimeZonesModel->GetTimeSignal());
36 UpdateSunPosition();
37 }
38
39
~emWorldClockPanel()40 emWorldClockPanel::~emWorldClockPanel()
41 {
42 }
43
44
GetTitle() const45 emString emWorldClockPanel::GetTitle() const
46 {
47 return "World Clock";
48 }
49
50
Cycle()51 bool emWorldClockPanel::Cycle()
52 {
53 bool busy;
54
55 busy=emFilePanel::Cycle();
56
57 if (IsSignaled(GetVirFileStateSignal())) {
58 CreateOrDestroyChildren();
59 PreparePolygons(false);
60 }
61
62 if (IsSignaled(FileModel->GetChangeSignal())) {
63 InvalidatePainting();
64 }
65
66 if (IsSignaled(TimeZonesModel->GetTimeSignal())) {
67 UpdateSunPosition();
68 if (IsVFSGood() && IsViewed()) {
69 PreparePolygons(true);
70 InvalidatePainting();
71 }
72 }
73
74 return busy;
75 }
76
77
Notice(NoticeFlags flags)78 void emWorldClockPanel::Notice(NoticeFlags flags)
79 {
80 emFilePanel::Notice(flags);
81 if ((flags&(NF_VIEWING_CHANGED|NF_SOUGHT_NAME_CHANGED))!=0) {
82 CreateOrDestroyChildren();
83 PreparePolygons(false);
84 }
85 }
86
87
IsOpaque() const88 bool emWorldClockPanel::IsOpaque() const
89 {
90 if (!IsVFSGood()) return emFilePanel::IsOpaque();
91 return false;
92 }
93
94
Paint(const emPainter & painter,emColor canvasColor) const95 void emWorldClockPanel::Paint(const emPainter & painter, emColor canvasColor) const
96 {
97 emColor wcol,lcol,scol;
98 int i;
99
100 if (!IsVFSGood()) {
101 emFilePanel::Paint(painter,canvasColor);
102 return;
103 }
104
105 wcol=FileModel->WorldWaterColor;
106 lcol=FileModel->WorldLandColor;
107 scol=FileModel->WorldShadowColor;
108
109 painter.PaintPolygon(
110 WaterPolygon.Get(),
111 WaterPolygon.GetCount()/2,
112 wcol,
113 canvasColor
114 );
115
116 for (i=0; i<LandPolygons.GetCount(); i++) {
117 painter.PaintPolygon(
118 LandPolygons[i].Get(),
119 LandPolygons[i].GetCount()/2,
120 lcol,
121 wcol
122 );
123 }
124
125 painter.PaintPolygon(
126 ShadowPolygon.Get(),
127 ShadowPolygon.GetCount()/2,
128 scol
129 );
130
131 if (TimeZonesModel->GetCityCount()<=0) {
132 painter.PaintTextBoxed(
133 0.25,
134 GetHeight()/4,
135 0.5,
136 GetHeight()/2,
137 "Error:\n\nNo time zones found.",
138 0.08,
139 emColor(255,0,0),
140 0,
141 EM_ALIGN_CENTER,
142 EM_ALIGN_CENTER,
143 1.0
144 );
145 }
146 else {
147 painter.PaintTextBoxed(
148 0.45,
149 GetHeight()-0.025,
150 0.1,
151 0.007,
152 "Hint: If some clocks overlap each other, you can push a\n"
153 "clock to the front or to the back by clicking on its\n"
154 "border with the left or right mouse button, respectively.",
155 1.0,
156 FileModel->ClockForegroundColor,
157 0,
158 EM_ALIGN_CENTER,
159 EM_ALIGN_CENTER,
160 1.0
161 );
162 }
163 }
164
165
LayoutChildren()166 void emWorldClockPanel::LayoutChildren()
167 {
168 emArray<emClockPanel*> sorted;
169 emClockPanel * p, * p2;
170 int i,j,n;
171 double r,x,y,r2,x2,y2,rn,minR,maxR,ov,dTest;
172
173 emFilePanel::LayoutChildren();
174
175 minR=CalcClockMinRadius();
176 maxR=CalcClockMaxRadius();
177
178 n=Children.GetCount();
179
180 for (i=0; i<n; i++) {
181 p=Children.Get(i);
182 TransformCoords(
183 &x,
184 &y,
185 TimeZonesModel->GetCityLatitude(i),
186 TimeZonesModel->GetCityLongitude(i)
187 );
188 p->Layout(
189 x-maxR,
190 y-maxR,
191 2*maxR,
192 2*maxR
193 );
194 }
195
196 sorted=Children;
197 sorted.Sort(CmpClockPanelX);
198 ov=1.07;
199 dTest=maxR*2/ov;
200 for (i=0; i<n; i++) {
201 p=sorted.Get(i);
202 r=p->GetLayoutWidth()*0.5;
203 x=p->GetLayoutX()+r;
204 y=p->GetLayoutY()+r;
205 for (j=i+1; j<n; j++) {
206 p2=sorted.Get(j);
207 r2=p2->GetLayoutWidth()*0.5;
208 x2=p2->GetLayoutX()+r2;
209 if (x2-x>dTest) break;
210 y2=p2->GetLayoutY()+r2;
211 if (y2-y>dTest) continue;
212 rn=sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y))*0.5*ov;
213 if (rn<minR) rn=minR;
214 if (r>rn) {
215 r=rn;
216 p->Layout(x-r,y-r,2*r,2*r);
217 }
218 if (r2>rn) {
219 p2->Layout(x2-rn,y2-rn,2*rn,2*rn);
220 }
221 }
222 }
223 }
224
225
TransformCoords(double * pX,double * pY,double latitude,double longitude) const226 void emWorldClockPanel::TransformCoords(
227 double * pX, double * pY, double latitude, double longitude
228 ) const
229 {
230 double x,y,a,b,h,f;
231
232 // This is the Winkel Tripel Projection.
233 x=longitude*(1.0/180.0);
234 y=latitude*(M_PI/180.0);
235 a=cos(x*(M_PI*0.5));
236 if (a<0.999999) {
237 a=acos(a*cos(y));
238 b=sin(y)/sin(a);
239 y=(y+a*b)*0.5;
240 a*=sin(acos(b));
241 if (x<0) a=-a;
242 x+=a;
243 }
244
245 h=GetHeight();
246 f=emMin(1.0/(M_PI+2.0),h/M_PI);
247 *pX=0.5+x*f;
248 *pY=h*0.5-y*f;
249 }
250
251
CalcEarthWidth() const252 double emWorldClockPanel::CalcEarthWidth() const
253 {
254 double x1,y1,x2,y2;
255
256 TransformCoords(&x1,&y1,0.0,-180.0);
257 TransformCoords(&x2,&y2,0.0,180.0);
258 return x2-x1;
259 }
260
261
CalcEarthHeight() const262 double emWorldClockPanel::CalcEarthHeight() const
263 {
264 double x1,y1,x2,y2;
265
266 TransformCoords(&x1,&y1,90.0,0.0);
267 TransformCoords(&x2,&y2,-90.0,0.0);
268 return y2-y1;
269 }
270
271
CalcClockMinRadius() const272 double emWorldClockPanel::CalcClockMinRadius() const
273 {
274 return CalcEarthWidth()/360.0*FileModel->WorldClockMinRadius;
275 }
276
277
CalcClockMaxRadius() const278 double emWorldClockPanel::CalcClockMaxRadius() const
279 {
280 return
281 CalcEarthWidth()/360.0*
282 emMax(
283 FileModel->WorldClockMinRadius.Get(),
284 FileModel->WorldClockMaxRadius.Get()
285 )
286 ;
287 }
288
289
CreateOrDestroyChildren()290 void emWorldClockPanel::CreateOrDestroyChildren()
291 {
292 bool haveChildren;
293 int i,n;
294 double vr;
295
296 haveChildren=IsVFSGood();
297 if (!IsInViewedPath()) {
298 haveChildren=false;
299 }
300 else if (IsViewed() && !GetSoughtName()) {
301 vr=PanelToViewDeltaX(CalcClockMaxRadius());
302 if (vr<1.2) haveChildren=false;
303 }
304
305 if (haveChildren) {
306 if (Children.GetCount()==0) {
307 n=TimeZonesModel->GetCityCount();
308 Children.SetCount(n,true);
309 for (i=0; i<n; i++) {
310 Children.Set(
311 i,
312 new emClockPanel(
313 this,
314 TimeZonesModel->GetCityName(i),
315 FileModel,
316 TimeZonesModel->GetCityZoneId(i)
317 )
318 );
319 }
320 }
321 }
322 else {
323 n=Children.GetCount();
324 for (i=0; i<n; i++) {
325 delete Children.Get(i);
326 }
327 Children.SetCount(0,true);
328 }
329 }
330
331
UpdateSunPosition()332 void emWorldClockPanel::UpdateSunPosition()
333 {
334 double jd,m,t,la,lo;
335
336 jd=TimeZonesModel->GetJulianDate();
337
338 m=357.5291+0.98560028*(jd-2451545.0);
339
340 t=m*(M_PI/180.0);
341 m+=1.9148*sin(t)+0.02*sin(2*t)+0.0003*sin(3*t);
342
343 t=(m+102.9372+180.0)*(M_PI/180.0);
344
345 la=asin(sin(t)*sin(23.45*M_PI/180.0))*(180.0/M_PI);
346 while (la>180.0) la-=360.0;
347 while (la<-180.0) la+=360.0;
348
349 lo=atan2(sin(t)*cos(23.45*M_PI/180.0),cos(t))*(180.0/M_PI);
350 lo-=280.16+360.9856235*(jd-2451545.0);
351 lo=fmod(lo,360.0);
352 while (lo>180.0) lo-=360.0;
353 while (lo<-180.0) lo+=360.0;
354
355 SunLatitude=la;
356 SunLongitude=lo;
357 }
358
359
PreparePolygons(bool shadowOnly)360 void emWorldClockPanel::PreparePolygons(bool shadowOnly)
361 {
362 double fn;
363 int n;
364
365 if (IsViewed()) {
366 fn=PanelToViewDeltaY(CalcEarthHeight())*0.7;
367 if (fn<=8.0) n=8;
368 else if (fn>=150.0) n=150;
369 else n=(int)(fn+0.5);
370 }
371 else {
372 n=0;
373 }
374
375 if (!shadowOnly) {
376 PrepareWaterPolygon(n);
377 PrepareLandPolygons();
378 }
379 PrepareShadowPolygon(n);
380 }
381
382
PrepareWaterPolygon(int n)383 void emWorldClockPanel::PrepareWaterPolygon(int n)
384 {
385 double * xy;
386 int i;
387
388 if (!IsVFSGood() || !IsViewed()) {
389 WaterPolygon.Clear(true);
390 return;
391 }
392
393 WaterPolygon.SetTuningLevel(4);
394 WaterPolygon.SetCount(n*4,true);
395 xy=WaterPolygon.GetWritable();
396 for (i=0; i<n; i++) {
397 TransformCoords(
398 xy+i*2,
399 xy+i*2+1,
400 90.0-180.0*i/(n-1),
401 180.0
402 );
403 TransformCoords(
404 xy+(n*2-1-i)*2,
405 xy+(n*2-1-i)*2+1,
406 90.0-180.0*i/(n-1),
407 -180.0
408 );
409 }
410 }
411
412
PrepareLandPolygons()413 void emWorldClockPanel::PrepareLandPolygons()
414 {
415 const emInt16 * p;
416 emArray<double> * poly;
417 double * xy;
418 double vew;
419 int i,j,n;
420
421 if (!IsVFSGood() || !IsViewed()) {
422 LandPolygons.Clear(true);
423 return;
424 }
425
426 vew=PanelToViewDeltaX(CalcEarthWidth());
427 if (vew<100.0) p=MapData1;
428 else if (vew<400.0) p=MapData2;
429 else p=MapData3;
430 for (i=0; *p; i++) {
431 n=*p++;
432 if (LandPolygons.GetCount()<=i) LandPolygons.AddNew();
433 poly=&LandPolygons.GetWritable(i);
434 poly->SetTuningLevel(4);
435 poly->SetCount(n*2,true);
436 xy=poly->GetWritable();
437 for (j=0; j<n; j++) {
438 TransformCoords(xy,xy+1,p[1]/-100.0,p[0]/100.0);
439 xy+=2;
440 p+=2;
441 }
442 }
443 LandPolygons.SetCount(i,true);
444 }
445
446
PrepareShadowPolygon(int n)447 void emWorldClockPanel::PrepareShadowPolygon(int n)
448 {
449 double * tempMem, * sunrise, * sunset;
450 double * xy;
451 int pt[6],ps[6],pe[6],pd[6];
452 double cos_sla,sin_sla,t,r,s,la,lo;
453 int i,i1,i2,j,k;
454
455 if (!IsVFSGood() || !IsViewed()) {
456 ShadowPolygon.Clear(true);
457 return;
458 }
459
460 ShadowPolygon.SetTuningLevel(4);
461 tempMem=new double[n*2];
462 sunrise=tempMem;
463 sunset=tempMem+n;
464 cos_sla=cos(SunLatitude*(M_PI/180.0));
465 sin_sla=sin(SunLatitude*(M_PI/180.0));
466 i1=-1;
467 i2=n;
468 for (i=0; i<n; i++) {
469 la=(0.5-((double)i)/(n-1))*M_PI;
470 t=cos(la)*cos_sla;
471 if (fabs(t)<0.00000001) {
472 if (i1>=0) {
473 i2=i;
474 break;
475 }
476 }
477 else {
478 t=sin(la)*sin_sla/t;
479 if (fabs(t)>=1.0) {
480 if (i1>=0) {
481 i2=i;
482 break;
483 }
484 }
485 else {
486 t=acos(-t)*(180.0/M_PI);
487 r=SunLongitude-t;
488 s=SunLongitude+t;
489 while (r> 180) r-=360;
490 while (r<-180) r+=360;
491 while (s> 180) s-=360;
492 while (s<-180) s+=360;
493 sunrise[i]=r;
494 sunset[i]=s;
495 if (i1<0) i1=i;
496 }
497 }
498 }
499 if (i1<0) i1=i2=n/2;
500
501 if (SunLatitude<=0.0) {
502 for (k=i1; k<i2 && sunrise[k]<=sunset[k]; k++);
503 pt[0]=1; ps[0]=0; pe[0]=k; pd[0]=-1;
504 pt[1]=0; ps[1]=0; pe[1]=k; pd[1]=1;
505 t=1.0;
506 }
507 else {
508 for (k=i2; k>i1 && sunrise[k-1]<=sunset[k-1]; k--);
509 pt[0]=0; ps[0]=k; pe[0]=n; pd[0]=1;
510 pt[1]=1; ps[1]=k; pe[1]=n; pd[1]=-1;
511 t=-1.0;
512 }
513
514 if (
515 i2>i1 &&
516 (sunrise[i1]+sunset[i1]-sunrise[i2-1]-sunset[i2-1])*t<0.0
517 ) {
518 pt[2]=2; ps[2]=i1; pe[2]=k; pd[2]=-1;
519 pt[3]=3; ps[3]=i1; pe[3]=k; pd[3]=1;
520 pt[4]=3; ps[4]=k; pe[4]=i2; pd[4]=1;
521 pt[5]=2; ps[5]=k; pe[5]=i2; pd[5]=-1;
522 }
523 else {
524 pt[2]=3; ps[2]=k; pe[2]=i2; pd[2]=1;
525 pt[3]=2; ps[3]=k; pe[3]=i2; pd[3]=-1;
526 pt[4]=2; ps[4]=i1; pe[4]=k; pd[4]=-1;
527 pt[5]=3; ps[5]=i1; pe[5]=k; pd[5]=1;
528 }
529
530 for (j=0, i=0; i<6; i++) {
531 if (pe[i]<ps[i]) pe[i]=ps[i];
532 else j+=pe[i]-ps[i];
533 }
534 ShadowPolygon.SetCount(j*2,true);
535 xy=ShadowPolygon.GetWritable();
536 for (i=0; i<6; i++) {
537 for (j=0; j<pe[i]-ps[i]; j++) {
538 if (pd[i]>0) k=ps[i]+j; else k=pe[i]-1-j;
539 la=(0.5-((double)k)/(n-1))*180.0;
540 switch (pt[i]) {
541 case 0: lo=-180.0; break;
542 case 1: lo=180.0; break;
543 case 2: lo=sunrise[k]; break;
544 default: lo=sunset[k]; break;
545 }
546 TransformCoords(xy,xy+1,la,lo);
547 xy+=2;
548 }
549 }
550
551 delete [] tempMem;
552 }
553
554
CmpClockPanelX(emClockPanel * const * p1,emClockPanel * const * p2,void * context)555 int emWorldClockPanel::CmpClockPanelX(
556 emClockPanel * const * p1, emClockPanel * const * p2, void * context
557 )
558 {
559 double d;
560
561 d=(*p1)->GetLayoutX()-(*p2)->GetLayoutX();
562 if (d<0) return -1;
563 if (d>0) return 1;
564 return 0;
565 }
566
567
568 const emInt16 emWorldClockPanel::MapData1[] = {
569 3,4427,1730,5085,1260,4530,2760,6,-6213,6524,-6819,8250,5374,6617,16861,
570 6984,18000,9000,-18000,9000,46,10485,-7830,13185,-7155,14940,-7200,18000,
571 -6885,18000,-6480,15615,-5175,16155,-6210,13995,-5715,14130,-4815,12780,
572 -3825,11970,-3915,12285,-2835,10845,-1935,10800,-855,8910,-2340,7701,
573 -820,7020,-2385,6075,-2475,3915,540,4050,1485,2745,3420,1755,3375,945,
574 -405,-1125,-540,-1845,-2025,-630,-3465,1035,-3555,1800,-3150,3465,-3105,
575 3510,-3555,945,-4410,-630,-3645,-990,-4185,-45,-4500,-900,-5310,-450,
576 -5760,360,-5220,1080,-5580,1575,-5310,2475,-5760,2070,-6345,1440,-5580,
577 405,-6030,2250,-7110,4725,-6750,7020,-7245,8,-3510,630,-4230,2295,-6795,
578 4680,-6795,5535,-7470,5265,-6975,2025,-8146,430,-7200,-1305,3,11565,495,
579 10845,45,11790,-675,8,15390,2880,14715,4050,13185,3195,11745,3555,11295,
580 2340,13365,1125,14074,1765,14310,1260,3,14265,990,12915,0,15030,630,3,
581 10980,900,9495,-360,10215,-675,27,-12771,-7018,-11970,-7785,-7965,-8325,
582 -5940,-8190,-1215,-8190,-4365,-5985,-7065,-7920,-7965,-7470,-6120,-6570,
583 -6660,-6210,-8100,-6840,-9585,-5940,-7966,-5150,-7739,-6270,-6433,-6003,
584 -5579,-5256,-8235,-2925,-9810,-2700,-9495,-1800,-8910,-2070,-8370,-945,
585 -10395,-1845,-12375,-3915,-12555,-5130,-14580,-6120,-16065,-5760,-16695,
586 -6885,0
587 };
588
589
590 const emInt16 emWorldClockPanel::MapData2[] = {
591 3,10863,-1928,10981,-1816,11111,-1994,27,-7920,-900,-7920,-945,-7686,
592 -815,-7226,-1190,-6239,-983,-5153,-463,-4893,37,-3506,550,-3501,871,
593 -3883,1311,-4026,2117,-4673,2430,-5446,3530,-6126,3917,-6639,4424,-6693,
594 4810,-6919,5164,-6573,5490,-6993,5570,-7393,5324,-7566,4944,-7170,3348,
595 -6986,1857,-7623,1427,-8146,430,-8013,-16,-7673,-510,5,17807,3877,16927,
596 4670,16694,4624,17494,3904,17310,3475,10,13320,38,13521,330,13805,133,
597 14548,452,15062,1085,14534,790,14294,924,13821,837,13848,600,13101,184,4,
598 -2366,-6623,-1379,-6550,-1706,-6363,-2119,-6376,5,-8089,-2321,-7391,
599 -2005,-6653,-1823,-7119,-1830,-8366,-2256,6,-7793,-8303,-6106,-8256,
600 -7246,-7976,-7893,-7676,-8799,-7602,-9693,-8063,3,967,-3896,841,-3916,
601 914,-4256,6,9574,-8123,8891,-8120,8699,-7948,9554,-7930,10021,-7823,
602 10747,-7823,33,3240,-2970,3967,-1583,4481,-1016,5114,-1176,5081,-930,
603 4814,-436,4381,-90,3887,484,4081,1514,3492,1993,3563,2433,3301,2577,3107,
604 3064,2645,3385,1974,3444,1614,2847,1174,1690,1414,1064,934,110,994,-341,
605 361,-643,-859,-443,-1686,-1310,-1593,-2460,-986,-2953,-959,-3203,-546,
606 -3543,-199,-3516,954,-3730,1134,-3336,1947,-3016,2061,-3250,3240,-3105,3,
607 8001,-616,8207,-670,8027,-976,19,14621,1870,15316,2552,15297,3135,14995,
608 3748,14481,3924,13987,3764,13634,3337,12914,3150,11647,3530,11364,2674,
609 11407,2224,12127,1917,12695,1379,12964,1499,13099,1144,13674,1217,13540,
610 1483,14074,1765,14250,1075,16,-6054,-8184,-3359,-8356,-2399,-8283,-1186,
611 -8176,-2032,-7852,-1813,-7636,-2553,-6910,-3653,-6683,-4106,-6416,-4399,
612 -5970,-5017,-6243,-5353,-6710,-5286,-7203,-5853,-7556,-6966,-7656,-7317,
613 -7835,3,11987,-2330,12107,-2216,12194,-2536,5,14001,-7636,15074,-7496,
614 14061,-7503,14321,-7336,13654,-7563,7,12026,-105,12507,-103,12027,44,
615 12274,104,12234,464,12021,497,11874,310,3,15307,450,15027,637,14881,584,
616 5,-10906,-7870,-11273,-7663,-10406,-7530,-11331,-7444,-12293,-7616,3,
617 12767,157,12867,-96,12781,-250,12,-7099,-6730,-7773,-7010,-8886,-7036,
618 -8959,-7283,-9486,-7263,-9593,-7410,-8839,-7390,-7839,-7356,-6793,-6976,
619 -6253,-6656,-6606,-6203,-7746,-6463,11,10341,-56,10614,584,11621,810,
620 12707,850,12381,1037,12419,895,11939,935,10627,744,10561,610,10147,297,
621 9521,-583,4,-9760,-7399,-9648,-7208,-9887,-7133,-10283,-7287,4,-9593,
622 -7876,-9293,-7756,-10286,-7778,-10588,-7950,3,1551,-3810,1498,-3653,1246,
623 -3795,7,-12326,-7456,-10859,-7263,-10599,-7383,-10133,-6936,-11206,-6870,
624 -11799,-7096,-12619,-7190,153,4167,-6740,3967,-6620,3269,-6693,3701,
625 -6373,4501,-6733,5321,-6860,6107,-6846,5861,-7033,6914,-6820,6687,-7100,
626 7181,-7313,7301,-6813,7041,-6606,7494,-6740,7354,-7180,7874,-7246,9074,
627 -7566,10547,-7760,11401,-7606,11047,-7360,12834,-7333,12967,-7106,13801,
628 -7106,14341,-7260,15147,-7086,15934,-7093,16501,-6886,17221,-7000,18000,
629 -6885,18000,-6480,17747,-6266,16363,-5986,16174,-5506,15677,-5087,15556,
630 -5558,16501,-6233,15827,-6193,15301,-5933,14260,-5939,13487,-5480,14101,
631 -5326,14041,-4853,13507,-4346,12753,-3963,12967,-3553,12653,-3430,12627,
632 -3786,12230,-4072,11707,-3853,12241,-3706,11914,-3516,12236,-3025,11621,
633 -2261,10734,-2113,10541,-1926,10890,-1529,10919,-1137,10587,-906,10047,
634 -1353,9921,-980,10321,-393,10394,-120,10174,-326,9847,-886,9854,-1533,
635 9487,-1626,9127,-2300,8024,-1563,7981,-1040,7701,-820,7274,-1986,6647,
636 -2513,5781,-2593,5287,-2720,5018,-3026,4774,-2926,5274,-2346,5574,-2573,
637 6003,-2220,5374,-1626,4364,-1266,4234,-1706,3547,-2800,3427,-2773,3240,
638 -3015,3240,-3105,3494,-3153,3616,-3681,2907,-3626,2607,-4000,2951,-4066,
639 2835,-4095,2835,-4140,4071,-4092,4185,-4185,4860,-4185,4997,-4048,4841,
640 -3766,5396,-3657,5341,-4126,5067,-4446,5294,-4566,5174,-4746,4671,-4441,
641 4860,-4185,4185,-4185,3654,-4686,3454,-4466,3141,-4706,2767,-4249,2835,
642 -4140,2835,-4095,2521,-4086,2266,-4027,2421,-3800,2214,-3693,1927,-4160,
643 1341,-4560,1234,-4413,1827,-4033,1594,-3780,1607,-3973,941,-4413,354,
644 -4333,-253,-3666,-853,-3700,-879,-4333,-139,-4326,-106,-4626,-473,-4820,
645 114,-4973,627,-5346,903,-5380,831,-5676,1036,-5764,1087,-5426,2001,-5433,
646 2447,-5940,2947,-6013,2261,-6006,2119,-6259,2581,-6546,2274,-6586,1681,
647 -6166,1874,-5953,1361,-5533,1094,-5940,807,-5786,547,-5873,534,-6186,
648 1154,-6433,1527,-6840,2781,-7093,88,-15619,-7123,-13675,-6884,-12771,
649 -7018,-11059,-6763,-9919,-6816,-9506,-7196,-8639,-6810,-8535,-7000,-8106,
650 -6890,-8318,-6597,-8022,-6385,-8233,-6250,-8753,-6463,-9486,-6056,-9326,
651 -5796,-8259,-5510,-8159,-5196,-7966,-5150,-7746,-5656,-7739,-6270,-6626,
652 -5876,-6433,-6003,-5579,-5256,-5993,-5016,-6779,-4963,-6486,-4863,-6393,
653 -4630,-5993,-4576,-7026,-4356,-7028,-4157,-7335,-4095,-7650,-4320,-7629,
654 -4402,-8113,-4276,-8099,-4556,-8762,-4889,-9139,-4750,-8713,-4556,-8733,
655 -4243,-8426,-4636,-8219,-4110,-7650,-4320,-7335,-4095,-7633,-3536,-8125,
656 -3107,-7973,-2583,-8146,-2523,-8353,-3030,-9675,-2835,-9810,-2205,-9495,
657 -1800,-9090,-1845,-9039,-2080,-8678,-2147,-8889,-1571,-8339,-1536,-8359,
658 -1043,-8078,-877,-7920,-945,-7920,-900,-8038,-710,-8572,-992,-8666,-1230,
659 -9306,-1583,-9698,-1561,-10519,-1936,-10559,-2236,-11026,-2683,-11321,
660 -3125,-11498,-3167,-10935,-2317,-11059,-2316,-11446,-2803,-11751,-3342,
661 -12093,-3490,-12446,-4050,-12406,-4836,-13726,-5890,-14806,-6076,-16006,
662 -5556,-17033,-5230,-16039,-5636,-15726,-5810,-16613,-6143,-16092,-6350,
663 -16798,-6561,-16029,-6646,-16653,-6856,4,4514,-8063,5841,-8163,6701,
664 -7956,6441,-7896,9,174,-5156,-433,-5870,-579,-5576,-966,-5376,-993,-5143,
665 -619,-5250,-546,-5543,-300,-5399,-513,-5010,6,5780,-7565,6914,-7683,5927,
666 -7463,5529,-7216,5734,-7050,5141,-7156,8,12227,-1810,12167,-1496,12561,
667 -1221,12599,-605,12339,-705,12289,-1255,12027,-1316,12054,-1843,7,-9053,
668 -7650,-8887,-7549,-7826,-7550,-8057,-7425,-9346,-7470,-10153,-7543,
669 -10513,-7703,3,-5619,-5123,-5293,-4716,-5951,-4757,5,11874,-550,11629,
670 405,11079,325,10849,25,11702,-701,4,1567,-7703,2334,-7770,2701,-8003,
671 1061,-7963,6,4427,2564,4320,2175,4427,1730,4961,1264,5034,1517,4713,2519,
672 18,-18000,8415,-15840,8505,-15165,7740,-7605,7380,-6075,6345,-6345,6750,
673 -6030,7425,-7695,7920,-6120,8325,-990,7200,5374,6617,7067,7057,9487,6584,
674 16861,6984,16101,8110,18000,8460,18000,9000,-18000,9000,4,-16979,-6603,
675 -17293,-6470,-18000,-6480,-18000,-6885,3,14467,4110,14854,4124,14694,
676 4417,14,14014,-3810,14001,-4230,14207,-4506,14247,-5426,14454,-4930,
677 14241,-4563,14547,-4330,14087,-4223,14234,-3956,14034,-3490,13294,-3400,
678 13094,-3096,13007,-3270,13267,-3480,0
679 };
680
681
682 const emInt16 emWorldClockPanel::MapData3[] = {
683 3,-15938,-2219,-15932,-2171,-15994,-2213,3,-6135,-1521,-6115,-1553,-6153,
684 -1562,3,14385,-7354,14086,-7324,14039,-7440,3,-7757,-1754,-7810,-1855,
685 -7612,-1790,7,17082,4292,17283,4067,17325,4135,17436,4141,17153,4428,
686 16971,4683,16644,4577,3,-16588,-6045,-16573,-5974,-16730,-5986,3,822,
687 -331,881,-304,884,-372,9,-17505,-6750,-17415,-6615,-17280,-6705,-17100,
688 -6660,-17010,-6570,-17325,-6435,-17820,-6570,-18000,-6480,-18000,-6885,3,
689 -1520,-2775,-1573,-2763,-1567,-2814,3,-15826,7976,-16280,8009,-16213,
690 7903,3,-17175,1371,-17208,1406,-17264,1365,3,5387,-8069,6023,-8084,5760,
691 -8191,3,16680,-5461,16621,-5496,16612,-5546,3,12393,-944,12470,-983,
692 12399,-1057,3,16064,937,16067,1003,15937,943,3,-7796,-2670,-7840,-2638,
693 -7876,-2676,3,-9770,-6995,-9528,-6850,-9933,-6909,4,-15218,-5850,-15247,
694 -5733,-15413,-5653,-15468,-5735,5,14600,4370,14454,4072,14669,4119,14840,
695 4076,14754,4358,3,-2857,-3808,-2860,-3867,-2795,-3843,3,862,-4239,918,
696 -4141,959,-4283,23,13320,38,13407,90,13427,261,13521,330,13805,133,14199,
697 309,14548,452,14610,555,14776,634,14723,738,15062,1085,14782,1014,14628,
698 838,14485,762,14250,955,14004,838,13775,833,13859,720,13848,600,13599,
699 462,13320,391,13265,258,13064,119,3,11716,-850,11982,-1036,11940,-1078,3,
700 -6103,-1429,-6085,-1476,-6121,-1485,3,18000,-7155,17865,-7110,18000,
701 -7065,145,3240,-3105,3240,-2970,3384,-2723,3561,-2388,3555,-2297,3691,
702 -2206,3725,-2084,3735,-1886,3865,-1796,3941,-1543,4008,-1573,4012,-1510,
703 4107,-1465,4356,-1215,4278,-1163,4342,-1141,4424,-1037,4752,-1108,4929,
704 -1130,5077,-1191,5132,-1177,5132,-1067,5053,-886,4923,-669,4819,-464,
705 4574,-224,4389,-95,4030,285,3871,607,3947,714,3953,943,4058,1081,4081,
706 1514,3949,1692,3735,1755,3510,1440,3468,1006,3375,945,3105,855,3064,699,
707 2999,642,2970,450,3240,225,3344,252,3412,4,3208,-11,3182,220,3240,225,
708 2970,450,2920,317,2926,650,3105,855,3375,945,3431,1107,3411,1269,3510,
709 1440,3735,1755,3717,1801,3475,2002,3546,2215,3555,2428,3285,2561,3252,
710 2839,3111,2960,3017,3121,2836,3272,2645,3385,2241,3416,1997,3485,1790,
711 3331,1831,3199,1673,2908,1528,2750,1453,2434,1447,2248,1372,2145,1273,
712 1928,1183,1816,1173,1593,1222,1508,1269,1327,1387,1207,1376,1045,1301,
713 927,1350,816,1194,556,1184,467,871,113,944,5,994,-341,853,-448,585,-425,
714 447,-636,159,-626,-168,-476,-471,-519,-788,-433,-1234,-738,-1412,-1012,
715 -1699,-1261,-1662,-1374,-1739,-1464,-1643,-1598,-1588,-1832,-1641,-1942,
716 -1621,-2019,-1708,-2147,-1590,-2378,-1483,-2463,-1452,-2599,-1355,-2680,
717 -1310,-2798,-1180,-2810,-980,-2981,-980,-3166,-894,-3302,-666,-3410,-580,
718 -3573,-521,-3576,-465,-3505,-157,-3502,-103,-3560,119,-3652,554,-3664,
719 1011,-3718,1036,-3661,1113,-3693,1042,-3595,1122,-3524,990,-3395,1118,
720 -3373,1196,-3282,1386,-3294,1535,-3225,1557,-3141,1802,-3096,1918,-3020,
721 2033,-3094,1987,-3180,2070,-3263,2195,-3301,2387,-3210,2633,-3152,2927,
722 -3079,3100,-3156,3,-2682,-3888,-2703,-3843,-2747,-3876,19,13302,-3546,
723 13595,-3555,13672,-3682,13825,-3705,13964,-3847,14039,-4093,14151,-4090,
724 14240,-3951,14119,-3798,14065,-3518,13684,-3443,13580,-3315,13468,-3446,
725 13433,-3336,13272,-3273,13207,-3403,13140,-3114,13033,-3114,12950,-3327,
726 8,5780,-7565,6839,-7704,6869,-7609,5854,-7423,5529,-7216,5748,-7044,5357,
727 -7062,5144,-7195,69,14383,1418,14529,1489,14650,1908,14859,2022,14938,
728 2202,15074,2257,15092,2340,15316,2552,15313,2695,15357,2858,15297,3135,
729 15257,3230,15093,3426,15029,3598,14995,3748,14791,3793,14640,3909,14485,
730 3819,14335,3884,14042,3811,13977,3655,13912,3563,13654,3608,13858,3521,
731 13833,3456,13708,3527,13804,3280,13571,3492,13412,3251,13181,3161,12914,
732 3150,12814,3218,12565,3231,12355,3385,11972,3395,11807,3511,11641,3515,
733 11489,3397,11572,3353,11564,3146,11364,2674,11425,2598,11327,2450,11384,
734 2213,11668,2081,11800,2075,11900,2006,12088,1975,12238,1817,12208,1720,
735 12326,1632,12340,1699,12448,1607,12458,1541,12695,1379,12833,1492,12964,
736 1499,12953,1427,13127,1217,13252,1207,13099,1144,13337,1164,13674,1217,
737 13540,1483,13972,1771,14074,1765,14177,1526,14147,1359,14250,1075,3,
738 -8269,-2185,-8281,-2129,-8313,-2179,3,16153,940,16053,893,16082,843,3,
739 17955,1629,17967,1688,17863,1688,3,9780,-40,9789,-122,9715,-144,3,-2505,
740 -3793,-2540,-3754,-2573,-3786,9,-2233,-6652,-2076,-6543,-1597,-6643,
741 -1342,-6531,-1653,-6365,-2002,-6342,-2230,-6398,-2295,-6525,-2431,-6543,
742 10,12325,-850,12426,-832,12577,-967,12668,-685,12580,-696,12588,-595,
743 12504,-555,12417,-622,12394,-742,12193,-731,4,1121,-5571,1132,-5476,1209,
744 -5476,1254,-5601,3,2638,-3508,2449,-3499,2369,-3555,4,13437,546,13502,
745 561,13482,677,13420,677,3,13642,121,13594,136,13580,65,3,-6718,-1772,
746 -6526,-1811,-6721,-1849,3,-1691,-2803,-1629,-2787,-1641,-2836,6,10984,
747 -1991,10863,-1928,10868,-1837,10981,-1816,11058,-1878,11111,-1994,3,
748 -18000,-7200,-17763,-7137,-18000,-7110,3,10764,332,10838,282,10749,264,3,
749 14719,192,14704,234,14662,219,3,15834,828,15783,884,15641,769,3,11997,
750 -1154,12041,-1207,11991,-1233,3,15698,671,15774,745,15656,704,3,16698,
751 1576,16731,1523,16663,1491,5,2273,-3807,2344,-3733,2293,-3656,2178,-3682,
752 2122,-3798,3,-2304,-1580,-2259,-1604,-2280,-1642,9,4492,2562,4360,2438,
753 4330,2162,4462,1977,4391,1697,4740,1492,4927,1188,5061,1551,4713,2519,3,
754 -3656,5401,-3567,5498,-3783,5404,19,11923,-524,11775,-401,11789,-214,
755 11886,-115,11787,-63,11766,85,11659,159,11608,393,11318,321,11013,300,
756 10989,135,10902,46,10888,-125,11089,-190,11164,-285,11320,-299,11399,
757 -440,11559,-530,11702,-701,4,962,-4105,977,-3910,856,-3907,814,-4064,7,
758 17606,3751,17848,3826,17531,4165,17502,4017,17396,3923,17473,3787,17310,
759 3475,3,-7775,-2524,-7745,-2355,-7866,-2476,4,-10986,-7900,-10897,-7829,
760 -11062,-7727,-11483,-7802,3,15079,983,15082,935,15014,947,3,-16724,-5386,
761 -16665,-5332,-16630,-5403,18,12221,-1833,12239,-1663,12159,-1530,12193,
762 -1424,12420,-1391,12414,-1273,12561,-1221,12522,-997,12415,-1135,12482,
763 -1184,12287,-1340,12133,-1351,12145,-1208,12035,-1340,12110,-1359,11966,
764 -1588,12043,-1632,12067,-1848,6,13009,285,12802,288,12823,353,13009,362,
765 13089,409,13095,347,4,3431,-3543,3372,-3475,3283,-3458,3233,-3505,3,
766 13142,715,13189,736,13115,795,3,5798,2008,5759,2064,5727,2014,7,-8089,
767 -2321,-7380,-2025,-7654,-1983,-7827,-2119,-8055,-2205,-8244,-2237,-8461,
768 -2223,3,-84,-6068,-122,-5988,-181,-6026,4,12183,-1063,12266,-1027,12316,
769 -1113,12210,-1154,3,17854,1726,17824,1841,17721,1788,10,14290,-5403,
770 14325,-5134,14423,-4930,14299,-4886,14269,-4782,14394,-4630,14269,-4655,
771 14190,-4594,14231,-5031,14174,-5312,3,15156,288,15109,299,15091,267,3,
772 -8939,-7740,-9090,-7714,-9123,-7779,3,10213,-7966,10701,-7821,9950,-7803,
773 3,-7302,-2135,-7325,-2084,-7370,-2102,43,-6495,-7968,-6054,-8184,-5104,
774 -8222,-4069,-8340,-3047,-8370,-2136,-8266,-2110,-8142,-1804,-8240,-1127,
775 -8148,-1687,-8027,-2032,-7852,-1813,-7636,-2029,-7352,-2343,-7216,-2231,
776 -7000,-2713,-6811,-3204,-6820,-3482,-6627,-3790,-6556,-4000,-6533,-4121,
777 -6308,-4251,-6281,-4233,-6130,-4322,-5982,-4482,-5979,-4558,-6098,-4777,
778 -6074,-5017,-6243,-5209,-6471,-5369,-6610,-5374,-6775,-5261,-6864,-5082,
779 -6870,-5109,-6941,-5464,-6959,-5271,-7124,-5493,-7148,-5475,-7314,-6045,
780 -7619,-6743,-7613,-7065,-7660,-7095,-7758,-7317,-7835,6,-4486,7809,-4326,
781 7996,-5066,8109,-5446,8089,-5053,7983,-4940,7829,3,5461,-1264,5393,-1216,
782 5336,-1270,4,7145,-7353,7162,-7312,7008,-7312,7017,-7350,3,12716,311,
783 12731,400,12589,326,3,341,-3987,305,-3919,246,-3972,5,-10056,-7403,-9760,
784 -7399,-9648,-7208,-9887,-7133,-10283,-7287,3,-7725,-2590,-7698,-2629,
785 -7736,-2661,4,-7961,-6242,-7920,-6203,-8003,-6156,-8029,-6209,3,-6514,
786 -6121,-6467,-6162,-6517,-6180,3,-16801,-5359,-16733,-5321,-16881,-5303,
787 20,-11493,-7340,-10922,-7275,-10768,-7186,-10795,-7319,-10443,-7376,
788 -10516,-7243,-10372,-7083,-10063,-7008,-10230,-6879,-10514,-6896,-10659,
789 -6938,-10826,-6866,-11337,-6861,-11360,-6923,-11643,-6932,-11741,-7012,
790 -11221,-7043,-11821,-7092,-11532,-7150,-11914,-7181,3,2319,-5823,2203,
791 -5820,2283,-5888,5,13893,-7649,14549,-7566,14472,-7498,13928,-7457,13688,
792 -7531,9,1061,-8004,1271,-7806,1567,-7809,1372,-7708,1768,-7637,2047,
793 -7842,2286,-7670,2422,-7794,1777,-8004,10,15102,548,15195,411,15245,420,
794 15208,338,15360,452,15267,457,15203,523,15053,642,14949,618,14840,565,8,
795 9574,-8123,9237,-8052,8891,-8120,8699,-7948,9160,-7886,9468,-7948,9790,
796 -7877,10018,-7969,3,-661,-5689,-607,-5743,-655,-5760,3,-9862,-8016,-9877,
797 -7959,-10040,-8019,3,16269,1079,16168,1106,16144,1023,6,-11696,-7429,
798 -11550,-7363,-12020,-7208,-12286,-7097,-12557,-7208,-12473,-7452,8,-5596,
799 -5161,-5615,-5027,-5578,-4941,-5363,-4932,-5319,-4828,-5573,-4689,-5541,
800 -4757,-5951,-4757,19,11901,254,12026,-105,12405,-98,12535,-163,12437,-24,
801 12063,-40,12011,50,12094,139,12365,51,12343,157,12155,195,12340,528,
802 12225,573,12236,479,12162,482,12106,287,12032,284,12043,569,11971,560,4,
803 -9768,-7663,-9717,-7518,-10214,-7492,-10454,-7673,3,12085,-583,12148,
804 -580,12130,-621,4,-9460,-7855,-9300,-7758,-9635,-7748,-9863,-7882,3,
805 -6413,4303,-6366,4256,-6407,4230,6,-9040,-7403,-9160,-7283,-9351,-7230,
806 -9533,-7256,-9604,-7336,-9522,-7405,3,12627,166,12500,223,12426,163,3,
807 16480,-5921,16448,-5868,16377,-5880,8,12725,-130,12769,7,12701,54,12761,
808 101,12826,-26,12891,-156,12826,-162,12852,-251,4,9244,-1130,9274,-1133,
809 9310,-1328,9292,-1352,3,15124,-7517,14829,-7448,14627,-7564,4,-9983,
810 -7887,-9890,-7771,-10286,-7778,-10588,-7950,3,13032,177,13009,213,12982,
811 186,3,-6135,-1574,-6138,-1636,-6183,-1624,8,12323,1071,12489,864,11990,
812 901,12089,1037,11862,965,12010,817,12664,809,12733,866,3,-1422,-2820,
813 -1375,-2811,-1384,-2865,14,-11393,-7722,-11325,-7695,-11384,-7645,-11100,
814 -7571,-10897,-7563,-11049,-7639,-10875,-7698,-10742,-7600,-10517,-7609,
815 -10597,-7497,-11071,-7465,-11331,-7444,-11594,-7470,-11765,-7544,3,
816 -15604,-2064,-15421,-1940,-15581,-1884,3,13097,-9,13106,38,13065,32,3,
817 -708,-5811,-643,-5790,-628,-5852,3,-5797,5110,-5897,5231,-6102,5204,3,
818 12414,-1192,12361,-1195,12346,-1257,11,-614,-5228,-611,-5399,-534,-5453,
819 -623,-5521,-827,-5518,-842,-5423,-957,-5423,-1013,-5358,-919,-5290,-1034,
820 -5195,-933,-5142,4,10680,313,10600,283,10538,180,10591,162,4,-8337,-6280,
821 -8195,-6283,-8296,-6221,-8387,-6239,3,1551,-3810,1498,-3653,1246,-3795,3,
822 15526,-5011,15603,-5023,15627,-5070,6,-7037,-1983,-6840,-1845,-7138,
823 -1784,-7452,-1840,-7248,-1864,-7316,-1974,3,-13168,-5408,-13146,-5207,
824 -13324,-5402,3,12683,-3357,12671,-3313,12624,-3334,3,-10421,-7578,-10353,
825 -7498,-10498,-7515,6,-11852,-7753,-11545,-7753,-11591,-7671,-11866,-7538,
826 -11976,-7583,-12328,-7606,4,-6292,-4972,-6174,-4916,-6307,-4913,-6422,
827 -4984,3,15612,677,15532,695,15476,541,3,16816,1624,16778,1659,16739,1615,
828 16,9779,-503,9837,-403,10041,-245,10254,-137,10372,-34,10340,67,10443,
829 135,10622,344,10587,595,10440,573,10310,475,10103,274,10056,144,9879,
830 -164,9652,-375,9516,-553,14,10644,598,10934,692,11441,694,11279,761,
831 11577,832,11927,828,11922,886,11711,919,11565,862,11210,846,10972,779,
832 10650,757,10640,700,10544,677,3,-2324,-1512,-2372,-1479,-2387,-1521,6,
833 -9318,-7678,-9402,-7567,-9335,-7469,-9597,-7443,-9690,-7580,-9713,-7709,
834 5,12010,-2352,12025,-2236,12096,-2218,12188,-2414,12144,-2520,9,-8980,
835 -7660,-8887,-7549,-8048,-7580,-7853,-7514,-8057,-7425,-8390,-7460,-8869,
836 -7434,-9193,-7465,-9278,-7669,27,-303,-5056,58,-5095,138,-5112,90,-5160,
837 191,-5281,22,-5299,-31,-5441,-120,-5476,-176,-5583,-286,-5595,-152,-5763,
838 -404,-5772,-291,-5887,-513,-5849,-581,-5731,-620,-5618,-472,-5562,-490,
839 -5467,-360,-5482,-300,-5399,-324,-5313,-433,-5331,-419,-5251,-522,-5171,
840 -268,-5136,-445,-5089,-578,-4994,3,-7139,-2176,-7186,-2161,-7195,-2185,
841 21,-9415,-8144,-8443,-8251,-7564,-8337,-6522,-8290,-6106,-8237,-6460,
842 -8135,-6660,-8126,-7082,-7984,-7655,-7799,-7850,-7876,-8178,-7864,-8125,
843 -7749,-7761,-7696,-7925,-7620,-8302,-7651,-8799,-7602,-8955,-7691,-8728,
844 -7722,-8790,-7838,-9203,-7802,-9691,-8015,284,-16378,-6894,-16179,-7011,
845 -15578,-7117,-15159,-7046,-14554,-7008,-14090,-6977,-13675,-6884,-12771,
846 -7018,-12582,-6941,-12455,-7002,-12397,-6949,-12120,-6982,-12015,-6930,
847 -12015,-6705,-12510,-6615,-12142,-6602,-12327,-6474,-11743,-6604,-12015,
848 -6705,-12015,-6930,-11406,-6860,-11536,-6787,-11118,-6757,-10878,-6767,
849 -10765,-6675,-10698,-6827,-9977,-6768,-9728,-6807,-9538,-6747,-9368,
850 -6857,-9368,-6927,-9618,-6997,-9633,-7150,-9467,-7225,-9198,-7067,-9029,
851 -6860,-8888,-6927,-8735,-6774,-8558,-6817,-8535,-7000,-8138,-6907,-8138,
852 -6737,-8318,-6597,-8568,-6597,-8022,-6385,-8109,-6324,-8320,-6391,-8501,
853 -6306,-8661,-6377,-8603,-6602,-8802,-6436,-9066,-6326,-9278,-6228,-9446,
854 -6084,-9488,-5905,-9316,-5851,-9241,-5707,-8979,-5707,-8634,-5568,-8476,
855 -5517,-8258,-5508,-8212,-5289,-7998,-5129,-7875,-5149,-7853,-5230,-7942,
856 -5472,-7771,-5535,-7634,-5617,-7648,-5757,-7837,-5865,-7718,-6017,-7831,
857 -6246,-7522,-6222,-7322,-6232,-7151,-6124,-6952,-6088,-6954,-5899,-6774,
858 -5834,-6638,-5847,-6475,-6035,-6140,-5717,-6150,-5598,-5738,-5458,-5881,
859 -5401,-5716,-5409,-5560,-5324,-5596,-5186,-5850,-5112,-5987,-5020,-6413,
860 -5017,-6658,-4997,-6918,-4847,-7093,-4695,-6883,-4821,-6708,-4877,-6439,
861 -4911,-6499,-4789,-6468,-4647,-6228,-4567,-6048,-4687,-5948,-4577,-6288,
862 -4457,-6528,-4357,-6611,-4417,-6398,-4557,-6493,-4556,-6836,-4423,-7073,
863 -4319,-7088,-4221,-7028,-4157,-7335,-4095,-7650,-4320,-7629,-4402,-7898,
864 -4377,-7954,-4322,-8190,-4230,-8235,-4320,-8190,-4320,-8121,-4480,-8008,
865 -4459,-8048,-4577,-8251,-4610,-8460,-4590,-8460,-4680,-8545,-4815,-8762,
866 -4889,-9208,-4677,-8975,-4649,-8808,-4749,-8821,-4690,-8677,-4635,-8460,
867 -4680,-8460,-4590,-8647,-4585,-8761,-4482,-8778,-4187,-8698,-4137,-8588,
868 -4207,-8608,-4447,-8438,-4567,-8328,-4537,-8348,-4387,-8271,-4401,-8235,
869 -4320,-8190,-4230,-8340,-4190,-8318,-4137,-7978,-4197,-7927,-4308,-7874,
870 -4313,-7650,-4320,-7335,-4095,-7515,-3870,-7618,-3727,-7528,-3537,-7857,
871 -3382,-8050,-3224,-8125,-3107,-8138,-2977,-8008,-2627,-8021,-2528,-8084,
872 -2491,-8248,-2677,-8278,-2862,-8348,-3007,-8506,-2968,-8638,-3027,-8906,
873 -3010,-8886,-2889,-9133,-2919,-9333,-2963,-9479,-2928,-9537,-2861,-9643,
874 -2839,-9742,-2748,-9707,-2546,-9776,-2511,-9788,-2220,-9721,-2059,-9579,
875 -1873,-9429,-1826,-9120,-1853,-9039,-2080,-8877,-2149,-8678,-2147,-8733,
876 -2001,-8806,-1752,-8889,-1571,-8420,-1583,-8323,-1502,-8368,-1117,-8268,
877 -927,-8078,-877,-7920,-945,-7920,-900,-8018,-816,-8038,-710,-8182,-800,
878 -8342,-830,-8387,-929,-8572,-992,-8582,-1110,-8769,-1317,-9173,-1406,
879 -9410,-1614,-9698,-1561,-10357,-1848,-10556,-2003,-10527,-2193,-10907,
880 -2546,-10954,-2646,-11211,-2901,-11321,-3125,-11498,-3167,-11453,-2993,
881 -11323,-2893,-11114,-2538,-10935,-2317,-10992,-2294,-11195,-2477,-11219,
882 -2595,-11351,-2680,-11471,-2757,-11398,-2838,-11552,-2974,-11751,-3342,
883 -12048,-3462,-12230,-3743,-12421,-4017,-12427,-4360,-12403,-4545,-12397,
884 -4682,-12470,-4811,-12378,-4787,-12228,-4787,-12298,-4957,-12516,-5033,
885 -12344,-4864,-12378,-4827,-12683,-4970,-12823,-5075,-12667,-5059,-12874,
886 -5254,-13008,-5384,-13138,-5517,-13298,-5507,-13438,-5647,-13658,-5817,
887 -13970,-5960,-14518,-6037,-14798,-6077,-14805,-5992,-14935,-5980,-15164,
888 -5903,-15188,-6007,-14990,-6118,-15184,-6104,-15418,-5907,-15318,-5873,
889 -15850,-5615,-16220,-5493,-16478,-5417,-16498,-5475,-16008,-5637,-15769,
890 -5751,-15710,-5877,-15889,-5848,-16051,-5893,-16177,-5867,-16198,-6007,
891 -16388,-5977,-16516,-6062,-16601,-6173,-16448,-6307,-16092,-6350,-16108,
892 -6477,-16569,-6439,-16798,-6561,-16425,-6662,-16358,-6603,-16029,-6646,
893 -16335,-6721,-16618,-6837,-16611,-6886,3,-9134,120,-9024,73,-9143,14,4,
894 -7743,-7370,-7601,-7287,-7962,-7284,-8051,-7364,3,15062,-4626,14869,
895 -4514,14704,-4475,3,-785,-7115,-856,-7059,-921,-7092,3,-15734,-2145,
896 -15790,-2106,-15831,-2160,82,-7839,-830,-7920,-900,-7920,-945,-7686,-815,
897 -7565,-954,-7546,-1073,-7111,-1256,-7166,-1075,-7054,-1133,-6998,-1210,
898 -6787,-1051,-6504,-1018,-6261,-1068,-6202,-982,-6122,-1059,-6072,-867,
899 -5935,-822,-5699,-580,-5395,-587,-5152,-431,-4992,-130,-5063,4,-4965,-2,
900 -4486,149,-4409,261,-3954,291,-3682,521,-3528,510,-3469,735,-3501,871,
901 -3883,1311,-3961,1905,-4198,2283,-4461,2310,-4838,2553,-4861,2836,-5130,
902 3106,-5436,3507,-5865,3415,-5655,3662,-5776,3829,-6203,3913,-6235,4108,
903 -6516,4095,-6442,4273,-6575,4501,-6791,4596,-6569,4758,-6912,5056,-6903,
904 5246,-6676,5455,-6413,5484,-6853,5567,-7226,5449,-7451,5302,-7540,5094,
905 -7552,4813,-7436,4734,-7525,4639,-7329,4445,-7273,4235,-7439,4345,-7338,
906 3934,-7359,3750,-7170,3348,-7158,3028,-7042,2522,-7007,2137,-7039,1827,
907 -7400,1613,-7623,1427,-7641,1317,-8001,665,-8103,619,-8126,419,-8004,298,
908 -8091,217,-7999,-61,-7910,-135,-7830,-262,-7727,-327,-7736,-647,4,5680,
909 -7963,5860,-8040,6526,-8001,6698,-7907,3,9925,232,9934,153,9854,102,41,
910 -8490,-7394,-8687,-7265,-8468,-7099,-8557,-7282,-8370,-7350,-8108,-7363,
911 -7975,-7212,-7687,-7252,-7305,-7150,-6737,-7017,-6670,-6915,-6857,-6879,
912 -6124,-6671,-6364,-6502,-6715,-6657,-6795,-6591,-6409,-6359,-6506,-6259,
913 -6855,-6374,-6590,-6196,-6912,-6250,-7092,-6279,-7355,-6436,-7838,-6444,
914 -7749,-6534,-7340,-6546,-7420,-6635,-7198,-6719,-7283,-6799,-7494,-6842,
915 -7515,-6735,-7704,-6719,-7645,-6942,-7847,-7040,-7991,-6960,-8163,-7013,
916 -8554,-7040,-8829,-7034,-9027,-7149,-8960,-7274,-8863,-7367,3,-16996,
917 -6359,-16893,-6291,-17192,-6371,3,-17322,-5211,-17458,-5193,-17417,-5250,
918 3,-1747,-2852,-1789,-2852,-1786,-2885,3,16011,828,15937,852,15851,766,4,
919 2473,-7859,2792,-8001,2337,-8081,1872,-8013,8,14154,-4371,13991,-4211,
920 14053,-4167,14157,-4250,14328,-4199,14553,-4353,14343,-4418,14172,-4552,
921 3,-10398,-7714,-10513,-7702,-10614,-7799,646,2668,-7104,2680,-7034,2795,
922 -7110,3109,-7045,2938,-6990,3272,-6948,3582,-6915,3914,-6820,4124,-6744,
923 4100,-6667,3902,-6602,3642,-6631,3269,-6693,3455,-6606,3464,-6498,3505,
924 -6445,3671,-6400,3775,-6380,3799,-6431,3650,-6474,3751,-6525,3804,-6480,
925 3955,-6442,4053,-6483,3991,-6542,4248,-6646,4399,-6616,4464,-6699,4375,
926 -6738,4437,-6844,4582,-6853,4656,-6812,4511,-6729,4588,-6693,4785,-6684,
927 4809,-6767,5111,-6832,5250,-6832,5377,-6900,5350,-6818,5486,-6806,5516,
928 -6847,5770,-6856,5939,-6889,5924,-6829,6016,-6838,6128,-6891,6004,-6954,
929 5851,-7026,5999,-7014,6053,-6976,6253,-6980,6679,-6886,6847,-6812,6901,
930 -6874,6696,-6968,6747,-7007,6741,-7069,6661,-7113,6850,-7164,6918,-7291,
931 7087,-7273,7285,-7264,7196,-7140,7291,-7066,7250,-6989,7253,-6874,7353,
932 -6850,7306,-6761,7152,-6681,6981,-6650,7229,-6619,7418,-6714,7495,-6797,
933 7457,-6868,7673,-6891,7741,-6741,7809,-6758,7795,-6865,7697,-6930,7380,
934 -6912,7368,-7007,7439,-7054,7321,-7155,7546,-7255,7567,-7134,7824,-7096,
935 7623,-7184,7812,-7181,7750,-7261,8010,-7217,8176,-7149,8303,-7161,8218,
936 -7087,8363,-7051,8327,-7178,8215,-7238,8081,-7235,8055,-7353,8724,-7383,
937 8576,-7460,8957,-7551,9449,-7625,9804,-7596,9913,-7658,10150,-7643,10091,
938 -7702,10351,-7782,10768,-7749,10679,-7661,10966,-7687,11265,-7664,11401,
939 -7590,11363,-7522,11020,-7442,10567,-7312,10910,-7338,11014,-7391,11305,
940 -7378,11382,-7333,11579,-7374,11860,-7353,11882,-7300,12356,-7297,12341,
941 -7386,12782,-7356,12968,-7300,12885,-7175,13128,-7057,13261,-7193,13402,
942 -7129,13632,-7167,14007,-7143,13940,-7230,14245,-7277,14928,-7215,15265,
943 -7078,15914,-7099,16080,-6954,16700,-6948,16911,-7011,16885,-6916,17100,
944 -6889,17050,-6993,17662,-6986,18000,-6885,18000,-6480,17674,-6471,17872,
945 -6397,17958,-6247,17709,-6267,17393,-6178,17023,-6007,16890,-6057,16617,
946 -5968,16606,-6039,16363,-5986,16304,-5892,16177,-5791,16307,-5770,16316,
947 -5616,16194,-5590,16182,-5474,16012,-5422,15982,-5315,15873,-5312,15861,
948 -5200,15677,-5087,15660,-5226,15585,-5365,15556,-5558,15668,-5735,15876,
949 -5806,16080,-5975,16358,-6078,16485,-6259,16331,-6250,16302,-6149,16204,
950 -6161,16065,-6058,16000,-6120,16056,-6191,15751,-6188,15411,-5975,15524,
951 -5922,15136,-5871,15210,-5925,14926,-5981,14852,-5916,14651,-5951,14618,
952 -5910,14580,-5936,14260,-5939,14014,-5771,13780,-5629,13522,-5496,13552,
953 -5425,13670,-5463,13673,-5380,13765,-5434,13789,-5357,13866,-5354,13890,
954 -5416,14006,-5404,14133,-5324,14129,-5170,14040,-5076,14025,-4874,13753,
955 -4567,13511,-4351,13321,-4259,13200,-4327,12975,-4191,12969,-4073,12753,
956 -3963,12780,-3874,12839,-3857,12940,-3718,12937,-3513,12653,-3430,12621,
957 -3516,12683,-3599,12647,-3687,12677,-3735,12624,-3803,12514,-3797,12502,
958 -3841,12544,-3933,12420,-3977,12266,-3945,12165,-3896,12139,-3961,12213,
959 -4013,12230,-4072,12094,-4081,12035,-4010,11952,-3998,11914,-3918,11781,
960 -3930,11745,-3880,11795,-3812,11914,-3815,11914,-3726,11994,-3720,12076,
961 -3788,12263,-3729,12236,-3667,12112,-3670,11914,-3516,11940,-3457,12029,
962 -3439,12094,-3235,12201,-3184,12165,-3143,12189,-3093,12047,-3013,12236,
963 -3025,12162,-2903,12142,-2797,12076,-2776,11973,-2640,11964,-2522,11704,
964 -2359,11621,-2261,11405,-2264,11254,-2161,11067,-2125,11040,-2037,10990,
965 -2046,10969,-2144,10786,-2158,10567,-1954,10576,-1849,10686,-1727,10890,
966 -1529,10934,-1285,10919,-1137,10688,-1040,10635,-925,10475,-848,10499,
967 -1001,10366,-1051,10285,-1212,10116,-1268,10104,-1327,10011,-1332,9993,
968 -1184,9901,-1016,9913,-927,9981,-930,10055,-697,10162,-671,10351,-481,
969 10345,-280,10449,-96,10117,-298,10032,-517,10026,-646,9827,-845,9865,
970 -1123,9860,-1306,9789,-1463,9724,-1720,9560,-1573,9427,-1587,9459,-1812,
971 9371,-1895,9362,-1978,9267,-2028,9190,-2238,9119,-2327,9098,-2202,8713,
972 -2161,8687,-2028,8616,-1960,8530,-1963,8373,-1791,8252,-1732,8228,-1634,
973 8145,-1629,8113,-1566,8024,-1563,8024,-1342,8018,-1235,7974,-1179,7981,
974 -1040,7895,-996,7906,-915,7823,-895,7778,-791,7704,-830,7628,-969,7595,
975 -1123,7486,-1291,7453,-1418,7355,-1593,7296,-1827,7275,-2025,7299,-2099,
976 7246,-2214,7202,-2126,7095,-2069,6894,-2222,7042,-2263,7039,-2307,6912,
977 -2287,6811,-2387,6746,-2384,6648,-2556,6157,-2515,5746,-2568,5693,-2713,
978 5471,-2648,5296,-2695,5225,-2772,5137,-2799,5018,-3026,4906,-3029,4805,
979 -2929,4908,-2751,5027,-2654,5062,-2479,5136,-2606,5166,-2390,5420,-2405,
980 5630,-2615,5657,-2449,5790,-2364,5882,-2352,6003,-2220,5781,-1989,5772,
981 -1897,5672,-1873,5636,-1788,5539,-1778,5520,-1702,5240,-1654,5209,-1536,
982 4952,-1465,4747,-1359,4591,-1347,4482,-1272,4364,-1266,4272,-1544,4266,
983 -1704,4127,-1870,4080,-1997,3965,-2044,3920,-2133,3879,-2334,3742,-2453,
984 3719,-2526,3541,-2795,3467,-2819,3488,-2946,3408,-2774,3240,-3015,3240,
985 -3105,3432,-3118,3603,-3443,3616,-3681,3468,-3684,3381,-3603,3260,-3597,
986 3180,-3677,3068,-3680,3038,-3606,2914,-3618,2908,-3671,2778,-3689,2713,
987 -3801,2630,-3819,2692,-3852,2683,-3943,2606,-3943,2634,-4018,2951,-4066,
988 2835,-4095,2835,-4140,3125,-4116,3396,-4205,3615,-4154,3772,-4098,4071,
989 -4092,4185,-4185,4860,-4185,4997,-4048,4881,-3865,4951,-3743,5151,-3646,
990 5396,-3657,5390,-3865,5294,-4007,5304,-4092,5482,-4098,5340,-4217,5287,
991 -4128,5230,-4178,5290,-4285,5193,-4294,5006,-4456,5304,-4563,5310,-4590,
992 5895,-4590,5823,-4427,5923,-4507,5935,-4406,6051,-4463,6039,-4607,6210,
993 -4545,7335,-4545,7418,-4531,7527,-4628,7906,-4643,7920,-4680,10395,-5130,
994 10555,-5137,10912,-5332,11034,-5536,10966,-5578,10850,-5403,10596,-5220,
995 10427,-5193,10395,-5130,7920,-4680,7450,-4664,7335,-4545,6210,-4545,6169,
996 -4631,6000,-4670,5895,-4590,5310,-4590,5310,-4687,5038,-4702,4864,-4572,
997 4742,-4557,4671,-4441,4781,-4370,4751,-4267,4860,-4185,4185,-4185,4151,
998 -4273,3869,-4421,3689,-4504,3822,-4613,3908,-4717,3485,-4640,3509,-4533,
999 3631,-4521,3369,-4430,3272,-4551,3372,-4616,3118,-4669,2952,-4539,2864,
1000 -4382,2767,-4249,2835,-4140,2835,-4095,2603,-4066,2390,-4078,2266,-4027,
1001 2440,-3740,2254,-3844,2130,-3841,1958,-4030,1967,-4172,1580,-4376,1464,
1002 -4527,1387,-4486,1367,-4560,1233,-4551,1260,-4391,1381,-4350,1426,-4231,
1003 1592,-4172,1852,-4030,1835,-3986,1696,-4048,1663,-3989,1731,-3909,1577,
1004 -3799,1624,-3900,1553,-4009,1233,-4157,1057,-4299,1026,-4397,887,-4441,
1005 787,-4379,609,-4302,417,-4347,301,-4323,313,-4172,97,-4104,-18,-3953,-20,
1006 -3859,-76,-3776,-242,-3669,-441,-3663,-533,-3604,-598,-3613,-669,-3714,
1007 -865,-3711,-865,-3832,-947,-3867,-853,-4060,-873,-4205,-918,-4308,-743,
1008 -4362,-400,-4344,-163,-4332,-110,-4427,-122,-4625,-249,-4749,-439,-4794,
1009 -459,-4867,-152,-4856,-175,-4965,-34,-4930,147,-5004,171,-5083,378,-5146,
1010 507,-5306,545,-5241,568,-5329,903,-5380,829,-5578,831,-5676,1036,-5764,
1011 1071,-5646,1003,-5587,1065,-5519,965,-5516,1091,-5387,1343,-5448,1432,
1012 -5359,1761,-5477,1923,-5430,2116,-5498,2119,-5668,2208,-5762,2385,-5685,
1013 2444,-5733,2450,-5830,2362,-5878,2403,-5937,2655,-5949,2962,-5975,3288,
1014 -6032,3261,-6108,3110,-6171,3030,-6123,3107,-6032,2953,-6014,2850,-6064,
1015 2365,-5990,2134,-6058,2202,-6182,2119,-6259,2187,-6332,2406,-6414,2447,
1016 -6488,2548,-6494,2542,-6585,2234,-6588,2110,-6494,2131,-6408,1734,-6229,
1017 1726,-6088,1924,-5976,1817,-5878,1681,-5857,1640,-5701,1687,-5677,1462,
1018 -5606,1397,-5534,1300,-5560,1285,-5664,1071,-5971,965,-5877,829,-5789,
1019 687,-5804,560,-5860,628,-5923,539,-5937,551,-5994,491,-6099,545,-6213,
1020 764,-6307,853,-6278,858,-6342,1024,-6334,1115,-6372,1015,-6395,1131,
1021 -6476,1249,-6517,1231,-6579,1417,-6700,1648,-6806,1464,-6845,1778,-6880,
1022 1705,-6934,1905,-6996,2157,-6991,2314,-7065,2562,-7099,2509,-7014,3,8086,
1023 -8099,7958,-8058,7881,-8108,3,-6753,7829,-7066,8023,-7240,7969,4,-5313,
1024 -4799,-5248,-4736,-5304,-4668,-5407,-4686,88,-18000,8415,-15165,8550,
1025 -16155,8415,-15273,8236,-15660,8100,-14926,8076,-15680,7789,-13680,7470,
1026 -12555,7380,-11320,7456,-11126,7429,-10886,7523,-10093,7503,-10413,7263,
1027 -9630,7200,-8546,7383,-8100,7380,-7886,7283,-7650,7335,-7515,7155,-7155,
1028 7065,-7213,6929,-6660,6885,-6926,6743,-6615,6660,-6345,6435,-5760,6345,
1029 -5670,6435,-6030,6525,-6120,6615,-6480,6750,-6435,6840,-6210,6930,-6093,
1030 7096,-6013,7369,-6380,7569,-7290,7695,-7425,7830,-7740,7830,-7786,7923,
1031 -7633,7963,-7515,8100,-6885,8100,-5960,8369,-5445,8235,-4635,8190,-4545,
1032 8280,-4095,8145,-2973,8009,-3626,7849,-2610,7605,-1840,7576,-1710,7380,
1033 -686,7109,-440,7189,1347,7056,2540,7116,3240,7020,3330,6885,3900,7023,
1034 4005,6885,5310,6615,5985,6750,7020,6795,6920,7029,6795,7245,7065,7200,
1035 7300,7003,7634,6956,8674,6663,9855,6660,10215,6570,10800,6705,11267,6616,
1036 11655,6750,14000,6676,15210,6930,15427,6856,16200,7065,17100,7176,16307,
1037 7496,16245,7650,16707,7869,16020,7920,16194,8196,18000,8460,18000,9000,
1038 -18000,9000,4,12236,-938,12337,-891,12346,-1024,12337,-1086,3,-2484,
1039 -1692,-2534,-1675,-2517,-1722,3,-649,-6216,-696,-6183,-735,-6216,3,5597,
1040 2092,5561,2149,5517,2104,3,7061,4938,6922,4994,6880,4902,3,12804,145,
1041 12778,177,12745,151,4,16701,2219,16671,2257,16440,2088,16428,2014,3,5165,
1042 -8111,5135,-7984,4511,-8069,3,-6789,-6065,-6801,-6014,-6851,-6035,5,7974,
1043 -760,8030,-580,8187,-627,8199,-760,8027,-976,3,4819,-6851,5050,-6907,
1044 4831,-6945,3,1813,-5746,1860,-5704,1911,-5802,0
1045 };
1046