AceTime  1.11.6
Date and time classes for Arduino that support timezones from the TZ Database.
zone_policies.cpp
1 // This file was generated by the following script:
2 //
3 // $ /home/brian/src/AceTimeTools/src/acetimetools/tzcompiler.py
4 // --input_dir /home/brian/dev/tz
5 // --output_dir /home/brian/src/AceTime/src/ace_time/zonedb
6 // --tz_version 2022e
7 // --action zonedb
8 // --language arduino
9 // --scope basic
10 // --start_year 2000
11 // --until_year 2050
12 //
13 // using the TZ Database files
14 //
15 // africa
16 // antarctica
17 // asia
18 // australasia
19 // backward
20 // etcetera
21 // europe
22 // northamerica
23 // southamerica
24 //
25 // from https://github.com/eggert/tz/releases/tag/2022e
26 //
27 // Policies: 63
28 // Rules: 316
29 // Letter Size (bytes): 0
30 // Total Memory 8-bit (bytes): 3222
31 // Total Memory 32-bit (bytes): 4548
32 //
33 // DO NOT EDIT
34 
35 #include <ace_time/common/compat.h>
36 #include "zone_policies.h"
37 
38 namespace ace_time {
39 namespace zonedb {
40 
41 //---------------------------------------------------------------------------
42 // Policy name: AN
43 // Rules: 9
44 // Memory (8-bit): 87
45 // Memory (32-bit): 120
46 //---------------------------------------------------------------------------
47 
48 static const basic::ZoneRule kZoneRulesAN[] ACE_TIME_PROGMEM = {
49  // Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
50  {
51  -13 /*fromYearTiny*/,
52  -1 /*toYearTiny*/,
53  10 /*inMonth*/,
54  7 /*onDayOfWeek*/,
55  0 /*onDayOfMonth*/,
56  8 /*atTimeCode*/,
57  16 /*atTimeModifier (kSuffixS + minute=0)*/,
58  4 /*deltaCode ((deltaMinutes=60)/15)*/,
59  'D' /*letter*/,
60  },
61  // Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
62  {
63  -10 /*fromYearTiny*/,
64  -5 /*toYearTiny*/,
65  3 /*inMonth*/,
66  7 /*onDayOfWeek*/,
67  1 /*onDayOfMonth*/,
68  8 /*atTimeCode*/,
69  16 /*atTimeModifier (kSuffixS + minute=0)*/,
70  0 /*deltaCode ((deltaMinutes=0)/15)*/,
71  'S' /*letter*/,
72  },
73  // Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
74  {
75  -4 /*fromYearTiny*/,
76  5 /*toYearTiny*/,
77  3 /*inMonth*/,
78  7 /*onDayOfWeek*/,
79  0 /*onDayOfMonth*/,
80  8 /*atTimeCode*/,
81  16 /*atTimeModifier (kSuffixS + minute=0)*/,
82  0 /*deltaCode ((deltaMinutes=0)/15)*/,
83  'S' /*letter*/,
84  },
85  // Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
86  {
87  0 /*fromYearTiny*/,
88  0 /*toYearTiny*/,
89  8 /*inMonth*/,
90  7 /*onDayOfWeek*/,
91  0 /*onDayOfMonth*/,
92  8 /*atTimeCode*/,
93  16 /*atTimeModifier (kSuffixS + minute=0)*/,
94  4 /*deltaCode ((deltaMinutes=60)/15)*/,
95  'D' /*letter*/,
96  },
97  // Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
98  {
99  1 /*fromYearTiny*/,
100  7 /*toYearTiny*/,
101  10 /*inMonth*/,
102  7 /*onDayOfWeek*/,
103  0 /*onDayOfMonth*/,
104  8 /*atTimeCode*/,
105  16 /*atTimeModifier (kSuffixS + minute=0)*/,
106  4 /*deltaCode ((deltaMinutes=60)/15)*/,
107  'D' /*letter*/,
108  },
109  // Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
110  {
111  6 /*fromYearTiny*/,
112  6 /*toYearTiny*/,
113  4 /*inMonth*/,
114  7 /*onDayOfWeek*/,
115  1 /*onDayOfMonth*/,
116  8 /*atTimeCode*/,
117  16 /*atTimeModifier (kSuffixS + minute=0)*/,
118  0 /*deltaCode ((deltaMinutes=0)/15)*/,
119  'S' /*letter*/,
120  },
121  // Rule AN 2007 only - Mar lastSun 2:00s 0 S
122  {
123  7 /*fromYearTiny*/,
124  7 /*toYearTiny*/,
125  3 /*inMonth*/,
126  7 /*onDayOfWeek*/,
127  0 /*onDayOfMonth*/,
128  8 /*atTimeCode*/,
129  16 /*atTimeModifier (kSuffixS + minute=0)*/,
130  0 /*deltaCode ((deltaMinutes=0)/15)*/,
131  'S' /*letter*/,
132  },
133  // Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
134  {
135  8 /*fromYearTiny*/,
136  126 /*toYearTiny*/,
137  4 /*inMonth*/,
138  7 /*onDayOfWeek*/,
139  1 /*onDayOfMonth*/,
140  8 /*atTimeCode*/,
141  16 /*atTimeModifier (kSuffixS + minute=0)*/,
142  0 /*deltaCode ((deltaMinutes=0)/15)*/,
143  'S' /*letter*/,
144  },
145  // Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
146  {
147  8 /*fromYearTiny*/,
148  126 /*toYearTiny*/,
149  10 /*inMonth*/,
150  7 /*onDayOfWeek*/,
151  1 /*onDayOfMonth*/,
152  8 /*atTimeCode*/,
153  16 /*atTimeModifier (kSuffixS + minute=0)*/,
154  4 /*deltaCode ((deltaMinutes=60)/15)*/,
155  'D' /*letter*/,
156  },
157 
158 };
159 
160 
161 
162 const basic::ZonePolicy kPolicyAN ACE_TIME_PROGMEM = {
163  kZoneRulesAN /*rules*/,
164  nullptr /*letters*/,
165  9 /*numRules*/,
166  0 /*numLetters*/,
167 };
168 
169 //---------------------------------------------------------------------------
170 // Policy name: AQ
171 // Rules: 1
172 // Memory (8-bit): 15
173 // Memory (32-bit): 24
174 //---------------------------------------------------------------------------
175 
176 static const basic::ZoneRule kZoneRulesAQ[] ACE_TIME_PROGMEM = {
177  // Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
178  {
179  -10 /*fromYearTiny*/,
180  -8 /*toYearTiny*/,
181  3 /*inMonth*/,
182  7 /*onDayOfWeek*/,
183  1 /*onDayOfMonth*/,
184  8 /*atTimeCode*/,
185  16 /*atTimeModifier (kSuffixS + minute=0)*/,
186  0 /*deltaCode ((deltaMinutes=0)/15)*/,
187  'S' /*letter*/,
188  },
189 
190 };
191 
192 
193 
194 const basic::ZonePolicy kPolicyAQ ACE_TIME_PROGMEM = {
195  kZoneRulesAQ /*rules*/,
196  nullptr /*letters*/,
197  1 /*numRules*/,
198  0 /*numLetters*/,
199 };
200 
201 //---------------------------------------------------------------------------
202 // Policy name: AS
203 // Rules: 7
204 // Memory (8-bit): 69
205 // Memory (32-bit): 96
206 //---------------------------------------------------------------------------
207 
208 static const basic::ZoneRule kZoneRulesAS[] ACE_TIME_PROGMEM = {
209  // Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
210  {
211  -13 /*fromYearTiny*/,
212  7 /*toYearTiny*/,
213  10 /*inMonth*/,
214  7 /*onDayOfWeek*/,
215  0 /*onDayOfMonth*/,
216  8 /*atTimeCode*/,
217  16 /*atTimeModifier (kSuffixS + minute=0)*/,
218  4 /*deltaCode ((deltaMinutes=60)/15)*/,
219  'D' /*letter*/,
220  },
221  // Rule AS 1994 only - Mar 20 2:00s 0 S
222  {
223  -6 /*fromYearTiny*/,
224  -6 /*toYearTiny*/,
225  3 /*inMonth*/,
226  0 /*onDayOfWeek*/,
227  20 /*onDayOfMonth*/,
228  8 /*atTimeCode*/,
229  16 /*atTimeModifier (kSuffixS + minute=0)*/,
230  0 /*deltaCode ((deltaMinutes=0)/15)*/,
231  'S' /*letter*/,
232  },
233  // Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
234  {
235  -5 /*fromYearTiny*/,
236  5 /*toYearTiny*/,
237  3 /*inMonth*/,
238  7 /*onDayOfWeek*/,
239  0 /*onDayOfMonth*/,
240  8 /*atTimeCode*/,
241  16 /*atTimeModifier (kSuffixS + minute=0)*/,
242  0 /*deltaCode ((deltaMinutes=0)/15)*/,
243  'S' /*letter*/,
244  },
245  // Rule AS 2006 only - Apr 2 2:00s 0 S
246  {
247  6 /*fromYearTiny*/,
248  6 /*toYearTiny*/,
249  4 /*inMonth*/,
250  0 /*onDayOfWeek*/,
251  2 /*onDayOfMonth*/,
252  8 /*atTimeCode*/,
253  16 /*atTimeModifier (kSuffixS + minute=0)*/,
254  0 /*deltaCode ((deltaMinutes=0)/15)*/,
255  'S' /*letter*/,
256  },
257  // Rule AS 2007 only - Mar lastSun 2:00s 0 S
258  {
259  7 /*fromYearTiny*/,
260  7 /*toYearTiny*/,
261  3 /*inMonth*/,
262  7 /*onDayOfWeek*/,
263  0 /*onDayOfMonth*/,
264  8 /*atTimeCode*/,
265  16 /*atTimeModifier (kSuffixS + minute=0)*/,
266  0 /*deltaCode ((deltaMinutes=0)/15)*/,
267  'S' /*letter*/,
268  },
269  // Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
270  {
271  8 /*fromYearTiny*/,
272  126 /*toYearTiny*/,
273  4 /*inMonth*/,
274  7 /*onDayOfWeek*/,
275  1 /*onDayOfMonth*/,
276  8 /*atTimeCode*/,
277  16 /*atTimeModifier (kSuffixS + minute=0)*/,
278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
279  'S' /*letter*/,
280  },
281  // Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
282  {
283  8 /*fromYearTiny*/,
284  126 /*toYearTiny*/,
285  10 /*inMonth*/,
286  7 /*onDayOfWeek*/,
287  1 /*onDayOfMonth*/,
288  8 /*atTimeCode*/,
289  16 /*atTimeModifier (kSuffixS + minute=0)*/,
290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
291  'D' /*letter*/,
292  },
293 
294 };
295 
296 
297 
298 const basic::ZonePolicy kPolicyAS ACE_TIME_PROGMEM = {
299  kZoneRulesAS /*rules*/,
300  nullptr /*letters*/,
301  7 /*numRules*/,
302  0 /*numLetters*/,
303 };
304 
305 //---------------------------------------------------------------------------
306 // Policy name: AT
307 // Rules: 8
308 // Memory (8-bit): 78
309 // Memory (32-bit): 108
310 //---------------------------------------------------------------------------
311 
312 static const basic::ZoneRule kZoneRulesAT[] ACE_TIME_PROGMEM = {
313  // Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
314  {
315  -12 /*fromYearTiny*/,
316  -10 /*toYearTiny*/,
317  10 /*inMonth*/,
318  7 /*onDayOfWeek*/,
319  0 /*onDayOfMonth*/,
320  8 /*atTimeCode*/,
321  16 /*atTimeModifier (kSuffixS + minute=0)*/,
322  4 /*deltaCode ((deltaMinutes=60)/15)*/,
323  'D' /*letter*/,
324  },
325  // Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
326  {
327  -9 /*fromYearTiny*/,
328  -1 /*toYearTiny*/,
329  10 /*inMonth*/,
330  7 /*onDayOfWeek*/,
331  1 /*onDayOfMonth*/,
332  8 /*atTimeCode*/,
333  16 /*atTimeModifier (kSuffixS + minute=0)*/,
334  4 /*deltaCode ((deltaMinutes=60)/15)*/,
335  'D' /*letter*/,
336  },
337  // Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
338  {
339  -9 /*fromYearTiny*/,
340  5 /*toYearTiny*/,
341  3 /*inMonth*/,
342  7 /*onDayOfWeek*/,
343  0 /*onDayOfMonth*/,
344  8 /*atTimeCode*/,
345  16 /*atTimeModifier (kSuffixS + minute=0)*/,
346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
347  'S' /*letter*/,
348  },
349  // Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
350  {
351  0 /*fromYearTiny*/,
352  0 /*toYearTiny*/,
353  8 /*inMonth*/,
354  7 /*onDayOfWeek*/,
355  0 /*onDayOfMonth*/,
356  8 /*atTimeCode*/,
357  16 /*atTimeModifier (kSuffixS + minute=0)*/,
358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
359  'D' /*letter*/,
360  },
361  // Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
362  {
363  1 /*fromYearTiny*/,
364  126 /*toYearTiny*/,
365  10 /*inMonth*/,
366  7 /*onDayOfWeek*/,
367  1 /*onDayOfMonth*/,
368  8 /*atTimeCode*/,
369  16 /*atTimeModifier (kSuffixS + minute=0)*/,
370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
371  'D' /*letter*/,
372  },
373  // Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
374  {
375  6 /*fromYearTiny*/,
376  6 /*toYearTiny*/,
377  4 /*inMonth*/,
378  7 /*onDayOfWeek*/,
379  1 /*onDayOfMonth*/,
380  8 /*atTimeCode*/,
381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
383  'S' /*letter*/,
384  },
385  // Rule AT 2007 only - Mar lastSun 2:00s 0 S
386  {
387  7 /*fromYearTiny*/,
388  7 /*toYearTiny*/,
389  3 /*inMonth*/,
390  7 /*onDayOfWeek*/,
391  0 /*onDayOfMonth*/,
392  8 /*atTimeCode*/,
393  16 /*atTimeModifier (kSuffixS + minute=0)*/,
394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
395  'S' /*letter*/,
396  },
397  // Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
398  {
399  8 /*fromYearTiny*/,
400  126 /*toYearTiny*/,
401  4 /*inMonth*/,
402  7 /*onDayOfWeek*/,
403  1 /*onDayOfMonth*/,
404  8 /*atTimeCode*/,
405  16 /*atTimeModifier (kSuffixS + minute=0)*/,
406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
407  'S' /*letter*/,
408  },
409 
410 };
411 
412 
413 
414 const basic::ZonePolicy kPolicyAT ACE_TIME_PROGMEM = {
415  kZoneRulesAT /*rules*/,
416  nullptr /*letters*/,
417  8 /*numRules*/,
418  0 /*numLetters*/,
419 };
420 
421 //---------------------------------------------------------------------------
422 // Policy name: AV
423 // Rules: 9
424 // Memory (8-bit): 87
425 // Memory (32-bit): 120
426 //---------------------------------------------------------------------------
427 
428 static const basic::ZoneRule kZoneRulesAV[] ACE_TIME_PROGMEM = {
429  // Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
430  {
431  -12 /*fromYearTiny*/,
432  -1 /*toYearTiny*/,
433  10 /*inMonth*/,
434  7 /*onDayOfWeek*/,
435  0 /*onDayOfMonth*/,
436  8 /*atTimeCode*/,
437  16 /*atTimeModifier (kSuffixS + minute=0)*/,
438  4 /*deltaCode ((deltaMinutes=60)/15)*/,
439  'D' /*letter*/,
440  },
441  // Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
442  {
443  -9 /*fromYearTiny*/,
444  -6 /*toYearTiny*/,
445  3 /*inMonth*/,
446  7 /*onDayOfWeek*/,
447  1 /*onDayOfMonth*/,
448  8 /*atTimeCode*/,
449  16 /*atTimeModifier (kSuffixS + minute=0)*/,
450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
451  'S' /*letter*/,
452  },
453  // Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
454  {
455  -5 /*fromYearTiny*/,
456  5 /*toYearTiny*/,
457  3 /*inMonth*/,
458  7 /*onDayOfWeek*/,
459  0 /*onDayOfMonth*/,
460  8 /*atTimeCode*/,
461  16 /*atTimeModifier (kSuffixS + minute=0)*/,
462  0 /*deltaCode ((deltaMinutes=0)/15)*/,
463  'S' /*letter*/,
464  },
465  // Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
466  {
467  0 /*fromYearTiny*/,
468  0 /*toYearTiny*/,
469  8 /*inMonth*/,
470  7 /*onDayOfWeek*/,
471  0 /*onDayOfMonth*/,
472  8 /*atTimeCode*/,
473  16 /*atTimeModifier (kSuffixS + minute=0)*/,
474  4 /*deltaCode ((deltaMinutes=60)/15)*/,
475  'D' /*letter*/,
476  },
477  // Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
478  {
479  1 /*fromYearTiny*/,
480  7 /*toYearTiny*/,
481  10 /*inMonth*/,
482  7 /*onDayOfWeek*/,
483  0 /*onDayOfMonth*/,
484  8 /*atTimeCode*/,
485  16 /*atTimeModifier (kSuffixS + minute=0)*/,
486  4 /*deltaCode ((deltaMinutes=60)/15)*/,
487  'D' /*letter*/,
488  },
489  // Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
490  {
491  6 /*fromYearTiny*/,
492  6 /*toYearTiny*/,
493  4 /*inMonth*/,
494  7 /*onDayOfWeek*/,
495  1 /*onDayOfMonth*/,
496  8 /*atTimeCode*/,
497  16 /*atTimeModifier (kSuffixS + minute=0)*/,
498  0 /*deltaCode ((deltaMinutes=0)/15)*/,
499  'S' /*letter*/,
500  },
501  // Rule AV 2007 only - Mar lastSun 2:00s 0 S
502  {
503  7 /*fromYearTiny*/,
504  7 /*toYearTiny*/,
505  3 /*inMonth*/,
506  7 /*onDayOfWeek*/,
507  0 /*onDayOfMonth*/,
508  8 /*atTimeCode*/,
509  16 /*atTimeModifier (kSuffixS + minute=0)*/,
510  0 /*deltaCode ((deltaMinutes=0)/15)*/,
511  'S' /*letter*/,
512  },
513  // Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
514  {
515  8 /*fromYearTiny*/,
516  126 /*toYearTiny*/,
517  4 /*inMonth*/,
518  7 /*onDayOfWeek*/,
519  1 /*onDayOfMonth*/,
520  8 /*atTimeCode*/,
521  16 /*atTimeModifier (kSuffixS + minute=0)*/,
522  0 /*deltaCode ((deltaMinutes=0)/15)*/,
523  'S' /*letter*/,
524  },
525  // Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
526  {
527  8 /*fromYearTiny*/,
528  126 /*toYearTiny*/,
529  10 /*inMonth*/,
530  7 /*onDayOfWeek*/,
531  1 /*onDayOfMonth*/,
532  8 /*atTimeCode*/,
533  16 /*atTimeModifier (kSuffixS + minute=0)*/,
534  4 /*deltaCode ((deltaMinutes=60)/15)*/,
535  'D' /*letter*/,
536  },
537 
538 };
539 
540 
541 
542 const basic::ZonePolicy kPolicyAV ACE_TIME_PROGMEM = {
543  kZoneRulesAV /*rules*/,
544  nullptr /*letters*/,
545  9 /*numRules*/,
546  0 /*numLetters*/,
547 };
548 
549 //---------------------------------------------------------------------------
550 // Policy name: AW
551 // Rules: 4
552 // Memory (8-bit): 42
553 // Memory (32-bit): 60
554 //---------------------------------------------------------------------------
555 
556 static const basic::ZoneRule kZoneRulesAW[] ACE_TIME_PROGMEM = {
557  // Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
558  {
559  -8 /*fromYearTiny*/,
560  -8 /*toYearTiny*/,
561  3 /*inMonth*/,
562  7 /*onDayOfWeek*/,
563  1 /*onDayOfMonth*/,
564  8 /*atTimeCode*/,
565  16 /*atTimeModifier (kSuffixS + minute=0)*/,
566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
567  'S' /*letter*/,
568  },
569  // Rule AW 2006 only - Dec 3 2:00s 1:00 D
570  {
571  6 /*fromYearTiny*/,
572  6 /*toYearTiny*/,
573  12 /*inMonth*/,
574  0 /*onDayOfWeek*/,
575  3 /*onDayOfMonth*/,
576  8 /*atTimeCode*/,
577  16 /*atTimeModifier (kSuffixS + minute=0)*/,
578  4 /*deltaCode ((deltaMinutes=60)/15)*/,
579  'D' /*letter*/,
580  },
581  // Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
582  {
583  7 /*fromYearTiny*/,
584  9 /*toYearTiny*/,
585  3 /*inMonth*/,
586  7 /*onDayOfWeek*/,
587  0 /*onDayOfMonth*/,
588  8 /*atTimeCode*/,
589  16 /*atTimeModifier (kSuffixS + minute=0)*/,
590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
591  'S' /*letter*/,
592  },
593  // Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
594  {
595  7 /*fromYearTiny*/,
596  8 /*toYearTiny*/,
597  10 /*inMonth*/,
598  7 /*onDayOfWeek*/,
599  0 /*onDayOfMonth*/,
600  8 /*atTimeCode*/,
601  16 /*atTimeModifier (kSuffixS + minute=0)*/,
602  4 /*deltaCode ((deltaMinutes=60)/15)*/,
603  'D' /*letter*/,
604  },
605 
606 };
607 
608 
609 
610 const basic::ZonePolicy kPolicyAW ACE_TIME_PROGMEM = {
611  kZoneRulesAW /*rules*/,
612  nullptr /*letters*/,
613  4 /*numRules*/,
614  0 /*numLetters*/,
615 };
616 
617 //---------------------------------------------------------------------------
618 // Policy name: Armenia
619 // Rules: 3
620 // Memory (8-bit): 33
621 // Memory (32-bit): 48
622 //---------------------------------------------------------------------------
623 
624 static const basic::ZoneRule kZoneRulesArmenia[] ACE_TIME_PROGMEM = {
625  // Anchor: Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
626  {
627  -127 /*fromYearTiny*/,
628  -127 /*toYearTiny*/,
629  1 /*inMonth*/,
630  0 /*onDayOfWeek*/,
631  1 /*onDayOfMonth*/,
632  0 /*atTimeCode*/,
633  0 /*atTimeModifier (kSuffixW + minute=0)*/,
634  0 /*deltaCode ((deltaMinutes=0)/15)*/,
635  '-' /*letter*/,
636  },
637  // Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
638  {
639  11 /*fromYearTiny*/,
640  11 /*toYearTiny*/,
641  3 /*inMonth*/,
642  7 /*onDayOfWeek*/,
643  0 /*onDayOfMonth*/,
644  8 /*atTimeCode*/,
645  16 /*atTimeModifier (kSuffixS + minute=0)*/,
646  4 /*deltaCode ((deltaMinutes=60)/15)*/,
647  '-' /*letter*/,
648  },
649  // Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
650  {
651  11 /*fromYearTiny*/,
652  11 /*toYearTiny*/,
653  10 /*inMonth*/,
654  7 /*onDayOfWeek*/,
655  0 /*onDayOfMonth*/,
656  8 /*atTimeCode*/,
657  16 /*atTimeModifier (kSuffixS + minute=0)*/,
658  0 /*deltaCode ((deltaMinutes=0)/15)*/,
659  '-' /*letter*/,
660  },
661 
662 };
663 
664 
665 
666 const basic::ZonePolicy kPolicyArmenia ACE_TIME_PROGMEM = {
667  kZoneRulesArmenia /*rules*/,
668  nullptr /*letters*/,
669  3 /*numRules*/,
670  0 /*numLetters*/,
671 };
672 
673 //---------------------------------------------------------------------------
674 // Policy name: Aus
675 // Rules: 1
676 // Memory (8-bit): 15
677 // Memory (32-bit): 24
678 //---------------------------------------------------------------------------
679 
680 static const basic::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
681  // Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
682  {
683  -57 /*fromYearTiny*/,
684  -56 /*toYearTiny*/,
685  3 /*inMonth*/,
686  7 /*onDayOfWeek*/,
687  0 /*onDayOfMonth*/,
688  8 /*atTimeCode*/,
689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
691  'S' /*letter*/,
692  },
693 
694 };
695 
696 
697 
698 const basic::ZonePolicy kPolicyAus ACE_TIME_PROGMEM = {
699  kZoneRulesAus /*rules*/,
700  nullptr /*letters*/,
701  1 /*numRules*/,
702  0 /*numLetters*/,
703 };
704 
705 //---------------------------------------------------------------------------
706 // Policy name: Azer
707 // Rules: 2
708 // Memory (8-bit): 24
709 // Memory (32-bit): 36
710 //---------------------------------------------------------------------------
711 
712 static const basic::ZoneRule kZoneRulesAzer[] ACE_TIME_PROGMEM = {
713  // Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
714  {
715  -3 /*fromYearTiny*/,
716  15 /*toYearTiny*/,
717  3 /*inMonth*/,
718  7 /*onDayOfWeek*/,
719  0 /*onDayOfMonth*/,
720  16 /*atTimeCode*/,
721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
723  '-' /*letter*/,
724  },
725  // Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
726  {
727  -3 /*fromYearTiny*/,
728  15 /*toYearTiny*/,
729  10 /*inMonth*/,
730  7 /*onDayOfWeek*/,
731  0 /*onDayOfMonth*/,
732  20 /*atTimeCode*/,
733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
735  '-' /*letter*/,
736  },
737 
738 };
739 
740 
741 
742 const basic::ZonePolicy kPolicyAzer ACE_TIME_PROGMEM = {
743  kZoneRulesAzer /*rules*/,
744  nullptr /*letters*/,
745  2 /*numRules*/,
746  0 /*numLetters*/,
747 };
748 
749 //---------------------------------------------------------------------------
750 // Policy name: Barb
751 // Rules: 1
752 // Memory (8-bit): 15
753 // Memory (32-bit): 24
754 //---------------------------------------------------------------------------
755 
756 static const basic::ZoneRule kZoneRulesBarb[] ACE_TIME_PROGMEM = {
757  // Rule Barb 1980 only - Sep 25 2:00 0 S
758  {
759  -20 /*fromYearTiny*/,
760  -20 /*toYearTiny*/,
761  9 /*inMonth*/,
762  0 /*onDayOfWeek*/,
763  25 /*onDayOfMonth*/,
764  8 /*atTimeCode*/,
765  0 /*atTimeModifier (kSuffixW + minute=0)*/,
766  0 /*deltaCode ((deltaMinutes=0)/15)*/,
767  'S' /*letter*/,
768  },
769 
770 };
771 
772 
773 
774 const basic::ZonePolicy kPolicyBarb ACE_TIME_PROGMEM = {
775  kZoneRulesBarb /*rules*/,
776  nullptr /*letters*/,
777  1 /*numRules*/,
778  0 /*numLetters*/,
779 };
780 
781 //---------------------------------------------------------------------------
782 // Policy name: Brazil
783 // Rules: 20
784 // Memory (8-bit): 186
785 // Memory (32-bit): 252
786 //---------------------------------------------------------------------------
787 
788 static const basic::ZoneRule kZoneRulesBrazil[] ACE_TIME_PROGMEM = {
789  // Rule Brazil 1998 only - Oct 11 0:00 1:00 -
790  {
791  -2 /*fromYearTiny*/,
792  -2 /*toYearTiny*/,
793  10 /*inMonth*/,
794  0 /*onDayOfWeek*/,
795  11 /*onDayOfMonth*/,
796  0 /*atTimeCode*/,
797  0 /*atTimeModifier (kSuffixW + minute=0)*/,
798  4 /*deltaCode ((deltaMinutes=60)/15)*/,
799  '-' /*letter*/,
800  },
801  // Rule Brazil 1999 only - Feb 21 0:00 0 -
802  {
803  -1 /*fromYearTiny*/,
804  -1 /*toYearTiny*/,
805  2 /*inMonth*/,
806  0 /*onDayOfWeek*/,
807  21 /*onDayOfMonth*/,
808  0 /*atTimeCode*/,
809  0 /*atTimeModifier (kSuffixW + minute=0)*/,
810  0 /*deltaCode ((deltaMinutes=0)/15)*/,
811  '-' /*letter*/,
812  },
813  // Rule Brazil 1999 only - Oct 3 0:00 1:00 -
814  {
815  -1 /*fromYearTiny*/,
816  -1 /*toYearTiny*/,
817  10 /*inMonth*/,
818  0 /*onDayOfWeek*/,
819  3 /*onDayOfMonth*/,
820  0 /*atTimeCode*/,
821  0 /*atTimeModifier (kSuffixW + minute=0)*/,
822  4 /*deltaCode ((deltaMinutes=60)/15)*/,
823  '-' /*letter*/,
824  },
825  // Rule Brazil 2000 only - Feb 27 0:00 0 -
826  {
827  0 /*fromYearTiny*/,
828  0 /*toYearTiny*/,
829  2 /*inMonth*/,
830  0 /*onDayOfWeek*/,
831  27 /*onDayOfMonth*/,
832  0 /*atTimeCode*/,
833  0 /*atTimeModifier (kSuffixW + minute=0)*/,
834  0 /*deltaCode ((deltaMinutes=0)/15)*/,
835  '-' /*letter*/,
836  },
837  // Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
838  {
839  0 /*fromYearTiny*/,
840  1 /*toYearTiny*/,
841  10 /*inMonth*/,
842  7 /*onDayOfWeek*/,
843  8 /*onDayOfMonth*/,
844  0 /*atTimeCode*/,
845  0 /*atTimeModifier (kSuffixW + minute=0)*/,
846  4 /*deltaCode ((deltaMinutes=60)/15)*/,
847  '-' /*letter*/,
848  },
849  // Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
850  {
851  1 /*fromYearTiny*/,
852  6 /*toYearTiny*/,
853  2 /*inMonth*/,
854  7 /*onDayOfWeek*/,
855  15 /*onDayOfMonth*/,
856  0 /*atTimeCode*/,
857  0 /*atTimeModifier (kSuffixW + minute=0)*/,
858  0 /*deltaCode ((deltaMinutes=0)/15)*/,
859  '-' /*letter*/,
860  },
861  // Rule Brazil 2002 only - Nov 3 0:00 1:00 -
862  {
863  2 /*fromYearTiny*/,
864  2 /*toYearTiny*/,
865  11 /*inMonth*/,
866  0 /*onDayOfWeek*/,
867  3 /*onDayOfMonth*/,
868  0 /*atTimeCode*/,
869  0 /*atTimeModifier (kSuffixW + minute=0)*/,
870  4 /*deltaCode ((deltaMinutes=60)/15)*/,
871  '-' /*letter*/,
872  },
873  // Rule Brazil 2003 only - Oct 19 0:00 1:00 -
874  {
875  3 /*fromYearTiny*/,
876  3 /*toYearTiny*/,
877  10 /*inMonth*/,
878  0 /*onDayOfWeek*/,
879  19 /*onDayOfMonth*/,
880  0 /*atTimeCode*/,
881  0 /*atTimeModifier (kSuffixW + minute=0)*/,
882  4 /*deltaCode ((deltaMinutes=60)/15)*/,
883  '-' /*letter*/,
884  },
885  // Rule Brazil 2004 only - Nov 2 0:00 1:00 -
886  {
887  4 /*fromYearTiny*/,
888  4 /*toYearTiny*/,
889  11 /*inMonth*/,
890  0 /*onDayOfWeek*/,
891  2 /*onDayOfMonth*/,
892  0 /*atTimeCode*/,
893  0 /*atTimeModifier (kSuffixW + minute=0)*/,
894  4 /*deltaCode ((deltaMinutes=60)/15)*/,
895  '-' /*letter*/,
896  },
897  // Rule Brazil 2005 only - Oct 16 0:00 1:00 -
898  {
899  5 /*fromYearTiny*/,
900  5 /*toYearTiny*/,
901  10 /*inMonth*/,
902  0 /*onDayOfWeek*/,
903  16 /*onDayOfMonth*/,
904  0 /*atTimeCode*/,
905  0 /*atTimeModifier (kSuffixW + minute=0)*/,
906  4 /*deltaCode ((deltaMinutes=60)/15)*/,
907  '-' /*letter*/,
908  },
909  // Rule Brazil 2006 only - Nov 5 0:00 1:00 -
910  {
911  6 /*fromYearTiny*/,
912  6 /*toYearTiny*/,
913  11 /*inMonth*/,
914  0 /*onDayOfWeek*/,
915  5 /*onDayOfMonth*/,
916  0 /*atTimeCode*/,
917  0 /*atTimeModifier (kSuffixW + minute=0)*/,
918  4 /*deltaCode ((deltaMinutes=60)/15)*/,
919  '-' /*letter*/,
920  },
921  // Rule Brazil 2007 only - Feb 25 0:00 0 -
922  {
923  7 /*fromYearTiny*/,
924  7 /*toYearTiny*/,
925  2 /*inMonth*/,
926  0 /*onDayOfWeek*/,
927  25 /*onDayOfMonth*/,
928  0 /*atTimeCode*/,
929  0 /*atTimeModifier (kSuffixW + minute=0)*/,
930  0 /*deltaCode ((deltaMinutes=0)/15)*/,
931  '-' /*letter*/,
932  },
933  // Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
934  {
935  7 /*fromYearTiny*/,
936  7 /*toYearTiny*/,
937  10 /*inMonth*/,
938  7 /*onDayOfWeek*/,
939  8 /*onDayOfMonth*/,
940  0 /*atTimeCode*/,
941  0 /*atTimeModifier (kSuffixW + minute=0)*/,
942  4 /*deltaCode ((deltaMinutes=60)/15)*/,
943  '-' /*letter*/,
944  },
945  // Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
946  {
947  8 /*fromYearTiny*/,
948  17 /*toYearTiny*/,
949  10 /*inMonth*/,
950  7 /*onDayOfWeek*/,
951  15 /*onDayOfMonth*/,
952  0 /*atTimeCode*/,
953  0 /*atTimeModifier (kSuffixW + minute=0)*/,
954  4 /*deltaCode ((deltaMinutes=60)/15)*/,
955  '-' /*letter*/,
956  },
957  // Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
958  {
959  8 /*fromYearTiny*/,
960  11 /*toYearTiny*/,
961  2 /*inMonth*/,
962  7 /*onDayOfWeek*/,
963  15 /*onDayOfMonth*/,
964  0 /*atTimeCode*/,
965  0 /*atTimeModifier (kSuffixW + minute=0)*/,
966  0 /*deltaCode ((deltaMinutes=0)/15)*/,
967  '-' /*letter*/,
968  },
969  // Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
970  {
971  12 /*fromYearTiny*/,
972  12 /*toYearTiny*/,
973  2 /*inMonth*/,
974  7 /*onDayOfWeek*/,
975  22 /*onDayOfMonth*/,
976  0 /*atTimeCode*/,
977  0 /*atTimeModifier (kSuffixW + minute=0)*/,
978  0 /*deltaCode ((deltaMinutes=0)/15)*/,
979  '-' /*letter*/,
980  },
981  // Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
982  {
983  13 /*fromYearTiny*/,
984  14 /*toYearTiny*/,
985  2 /*inMonth*/,
986  7 /*onDayOfWeek*/,
987  15 /*onDayOfMonth*/,
988  0 /*atTimeCode*/,
989  0 /*atTimeModifier (kSuffixW + minute=0)*/,
990  0 /*deltaCode ((deltaMinutes=0)/15)*/,
991  '-' /*letter*/,
992  },
993  // Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
994  {
995  15 /*fromYearTiny*/,
996  15 /*toYearTiny*/,
997  2 /*inMonth*/,
998  7 /*onDayOfWeek*/,
999  22 /*onDayOfMonth*/,
1000  0 /*atTimeCode*/,
1001  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1002  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1003  '-' /*letter*/,
1004  },
1005  // Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
1006  {
1007  16 /*fromYearTiny*/,
1008  19 /*toYearTiny*/,
1009  2 /*inMonth*/,
1010  7 /*onDayOfWeek*/,
1011  15 /*onDayOfMonth*/,
1012  0 /*atTimeCode*/,
1013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1014  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1015  '-' /*letter*/,
1016  },
1017  // Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
1018  {
1019  18 /*fromYearTiny*/,
1020  18 /*toYearTiny*/,
1021  11 /*inMonth*/,
1022  7 /*onDayOfWeek*/,
1023  1 /*onDayOfMonth*/,
1024  0 /*atTimeCode*/,
1025  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1026  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1027  '-' /*letter*/,
1028  },
1029 
1030 };
1031 
1032 
1033 
1034 const basic::ZonePolicy kPolicyBrazil ACE_TIME_PROGMEM = {
1035  kZoneRulesBrazil /*rules*/,
1036  nullptr /*letters*/,
1037  20 /*numRules*/,
1038  0 /*numLetters*/,
1039 };
1040 
1041 //---------------------------------------------------------------------------
1042 // Policy name: C_Eur
1043 // Rules: 3
1044 // Memory (8-bit): 33
1045 // Memory (32-bit): 48
1046 //---------------------------------------------------------------------------
1047 
1048 static const basic::ZoneRule kZoneRulesC_Eur[] ACE_TIME_PROGMEM = {
1049  // Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
1050  {
1051  -21 /*fromYearTiny*/,
1052  -5 /*toYearTiny*/,
1053  9 /*inMonth*/,
1054  7 /*onDayOfWeek*/,
1055  0 /*onDayOfMonth*/,
1056  8 /*atTimeCode*/,
1057  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1058  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1059  '-' /*letter*/,
1060  },
1061  // Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
1062  {
1063  -19 /*fromYearTiny*/,
1064  126 /*toYearTiny*/,
1065  3 /*inMonth*/,
1066  7 /*onDayOfWeek*/,
1067  0 /*onDayOfMonth*/,
1068  8 /*atTimeCode*/,
1069  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1070  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1071  'S' /*letter*/,
1072  },
1073  // Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
1074  {
1075  -4 /*fromYearTiny*/,
1076  126 /*toYearTiny*/,
1077  10 /*inMonth*/,
1078  7 /*onDayOfWeek*/,
1079  0 /*onDayOfMonth*/,
1080  8 /*atTimeCode*/,
1081  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1082  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1083  '-' /*letter*/,
1084  },
1085 
1086 };
1087 
1088 
1089 
1090 const basic::ZonePolicy kPolicyC_Eur ACE_TIME_PROGMEM = {
1091  kZoneRulesC_Eur /*rules*/,
1092  nullptr /*letters*/,
1093  3 /*numRules*/,
1094  0 /*numLetters*/,
1095 };
1096 
1097 //---------------------------------------------------------------------------
1098 // Policy name: CO
1099 // Rules: 1
1100 // Memory (8-bit): 15
1101 // Memory (32-bit): 24
1102 //---------------------------------------------------------------------------
1103 
1104 static const basic::ZoneRule kZoneRulesCO[] ACE_TIME_PROGMEM = {
1105  // Rule CO 1993 only - Apr 4 0:00 0 -
1106  {
1107  -7 /*fromYearTiny*/,
1108  -7 /*toYearTiny*/,
1109  4 /*inMonth*/,
1110  0 /*onDayOfWeek*/,
1111  4 /*onDayOfMonth*/,
1112  0 /*atTimeCode*/,
1113  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1114  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1115  '-' /*letter*/,
1116  },
1117 
1118 };
1119 
1120 
1121 
1122 const basic::ZonePolicy kPolicyCO ACE_TIME_PROGMEM = {
1123  kZoneRulesCO /*rules*/,
1124  nullptr /*letters*/,
1125  1 /*numRules*/,
1126  0 /*numLetters*/,
1127 };
1128 
1129 //---------------------------------------------------------------------------
1130 // Policy name: CR
1131 // Rules: 1
1132 // Memory (8-bit): 15
1133 // Memory (32-bit): 24
1134 //---------------------------------------------------------------------------
1135 
1136 static const basic::ZoneRule kZoneRulesCR[] ACE_TIME_PROGMEM = {
1137  // Rule CR 1992 only - Mar 15 0:00 0 S
1138  {
1139  -8 /*fromYearTiny*/,
1140  -8 /*toYearTiny*/,
1141  3 /*inMonth*/,
1142  0 /*onDayOfWeek*/,
1143  15 /*onDayOfMonth*/,
1144  0 /*atTimeCode*/,
1145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1146  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1147  'S' /*letter*/,
1148  },
1149 
1150 };
1151 
1152 
1153 
1154 const basic::ZonePolicy kPolicyCR ACE_TIME_PROGMEM = {
1155  kZoneRulesCR /*rules*/,
1156  nullptr /*letters*/,
1157  1 /*numRules*/,
1158  0 /*numLetters*/,
1159 };
1160 
1161 //---------------------------------------------------------------------------
1162 // Policy name: Canada
1163 // Rules: 5
1164 // Memory (8-bit): 51
1165 // Memory (32-bit): 72
1166 //---------------------------------------------------------------------------
1167 
1168 static const basic::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
1169  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
1170  {
1171  -26 /*fromYearTiny*/,
1172  -14 /*toYearTiny*/,
1173  4 /*inMonth*/,
1174  7 /*onDayOfWeek*/,
1175  0 /*onDayOfMonth*/,
1176  8 /*atTimeCode*/,
1177  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1178  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1179  'D' /*letter*/,
1180  },
1181  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
1182  {
1183  -26 /*fromYearTiny*/,
1184  6 /*toYearTiny*/,
1185  10 /*inMonth*/,
1186  7 /*onDayOfWeek*/,
1187  0 /*onDayOfMonth*/,
1188  8 /*atTimeCode*/,
1189  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1190  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1191  'S' /*letter*/,
1192  },
1193  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
1194  {
1195  -13 /*fromYearTiny*/,
1196  6 /*toYearTiny*/,
1197  4 /*inMonth*/,
1198  7 /*onDayOfWeek*/,
1199  1 /*onDayOfMonth*/,
1200  8 /*atTimeCode*/,
1201  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1202  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1203  'D' /*letter*/,
1204  },
1205  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
1206  {
1207  7 /*fromYearTiny*/,
1208  126 /*toYearTiny*/,
1209  3 /*inMonth*/,
1210  7 /*onDayOfWeek*/,
1211  8 /*onDayOfMonth*/,
1212  8 /*atTimeCode*/,
1213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1214  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1215  'D' /*letter*/,
1216  },
1217  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
1218  {
1219  7 /*fromYearTiny*/,
1220  126 /*toYearTiny*/,
1221  11 /*inMonth*/,
1222  7 /*onDayOfWeek*/,
1223  1 /*onDayOfMonth*/,
1224  8 /*atTimeCode*/,
1225  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1226  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1227  'S' /*letter*/,
1228  },
1229 
1230 };
1231 
1232 
1233 
1234 const basic::ZonePolicy kPolicyCanada ACE_TIME_PROGMEM = {
1235  kZoneRulesCanada /*rules*/,
1236  nullptr /*letters*/,
1237  5 /*numRules*/,
1238  0 /*numLetters*/,
1239 };
1240 
1241 //---------------------------------------------------------------------------
1242 // Policy name: Chatham
1243 // Rules: 5
1244 // Memory (8-bit): 51
1245 // Memory (32-bit): 72
1246 //---------------------------------------------------------------------------
1247 
1248 static const basic::ZoneRule kZoneRulesChatham[] ACE_TIME_PROGMEM = {
1249  // Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
1250  {
1251  -11 /*fromYearTiny*/,
1252  -11 /*toYearTiny*/,
1253  10 /*inMonth*/,
1254  7 /*onDayOfWeek*/,
1255  8 /*onDayOfMonth*/,
1256  11 /*atTimeCode*/,
1257  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1258  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1259  '-' /*letter*/,
1260  },
1261  // Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
1262  {
1263  -10 /*fromYearTiny*/,
1264  6 /*toYearTiny*/,
1265  10 /*inMonth*/,
1266  7 /*onDayOfWeek*/,
1267  1 /*onDayOfMonth*/,
1268  11 /*atTimeCode*/,
1269  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1270  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1271  '-' /*letter*/,
1272  },
1273  // Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
1274  {
1275  -10 /*fromYearTiny*/,
1276  7 /*toYearTiny*/,
1277  3 /*inMonth*/,
1278  7 /*onDayOfWeek*/,
1279  15 /*onDayOfMonth*/,
1280  11 /*atTimeCode*/,
1281  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1282  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1283  '-' /*letter*/,
1284  },
1285  // Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
1286  {
1287  7 /*fromYearTiny*/,
1288  126 /*toYearTiny*/,
1289  9 /*inMonth*/,
1290  7 /*onDayOfWeek*/,
1291  0 /*onDayOfMonth*/,
1292  11 /*atTimeCode*/,
1293  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1294  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1295  '-' /*letter*/,
1296  },
1297  // Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
1298  {
1299  8 /*fromYearTiny*/,
1300  126 /*toYearTiny*/,
1301  4 /*inMonth*/,
1302  7 /*onDayOfWeek*/,
1303  1 /*onDayOfMonth*/,
1304  11 /*atTimeCode*/,
1305  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1306  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1307  '-' /*letter*/,
1308  },
1309 
1310 };
1311 
1312 
1313 
1314 const basic::ZonePolicy kPolicyChatham ACE_TIME_PROGMEM = {
1315  kZoneRulesChatham /*rules*/,
1316  nullptr /*letters*/,
1317  5 /*numRules*/,
1318  0 /*numLetters*/,
1319 };
1320 
1321 //---------------------------------------------------------------------------
1322 // Policy name: Chile
1323 // Rules: 17
1324 // Memory (8-bit): 159
1325 // Memory (32-bit): 216
1326 //---------------------------------------------------------------------------
1327 
1328 static const basic::ZoneRule kZoneRulesChile[] ACE_TIME_PROGMEM = {
1329  // Rule Chile 1998 only - Sep 27 4:00u 1:00 -
1330  {
1331  -2 /*fromYearTiny*/,
1332  -2 /*toYearTiny*/,
1333  9 /*inMonth*/,
1334  0 /*onDayOfWeek*/,
1335  27 /*onDayOfMonth*/,
1336  16 /*atTimeCode*/,
1337  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1338  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1339  '-' /*letter*/,
1340  },
1341  // Rule Chile 1999 only - Apr 4 3:00u 0 -
1342  {
1343  -1 /*fromYearTiny*/,
1344  -1 /*toYearTiny*/,
1345  4 /*inMonth*/,
1346  0 /*onDayOfWeek*/,
1347  4 /*onDayOfMonth*/,
1348  12 /*atTimeCode*/,
1349  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1350  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1351  '-' /*letter*/,
1352  },
1353  // Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
1354  {
1355  -1 /*fromYearTiny*/,
1356  10 /*toYearTiny*/,
1357  10 /*inMonth*/,
1358  7 /*onDayOfWeek*/,
1359  9 /*onDayOfMonth*/,
1360  16 /*atTimeCode*/,
1361  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1362  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1363  '-' /*letter*/,
1364  },
1365  // Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
1366  {
1367  0 /*fromYearTiny*/,
1368  7 /*toYearTiny*/,
1369  3 /*inMonth*/,
1370  7 /*onDayOfWeek*/,
1371  9 /*onDayOfMonth*/,
1372  12 /*atTimeCode*/,
1373  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1374  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1375  '-' /*letter*/,
1376  },
1377  // Rule Chile 2008 only - Mar 30 3:00u 0 -
1378  {
1379  8 /*fromYearTiny*/,
1380  8 /*toYearTiny*/,
1381  3 /*inMonth*/,
1382  0 /*onDayOfWeek*/,
1383  30 /*onDayOfMonth*/,
1384  12 /*atTimeCode*/,
1385  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1386  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1387  '-' /*letter*/,
1388  },
1389  // Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
1390  {
1391  9 /*fromYearTiny*/,
1392  9 /*toYearTiny*/,
1393  3 /*inMonth*/,
1394  7 /*onDayOfWeek*/,
1395  9 /*onDayOfMonth*/,
1396  12 /*atTimeCode*/,
1397  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1398  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1399  '-' /*letter*/,
1400  },
1401  // Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
1402  {
1403  10 /*fromYearTiny*/,
1404  10 /*toYearTiny*/,
1405  4 /*inMonth*/,
1406  7 /*onDayOfWeek*/,
1407  1 /*onDayOfMonth*/,
1408  12 /*atTimeCode*/,
1409  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1410  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1411  '-' /*letter*/,
1412  },
1413  // Rule Chile 2011 only - May Sun>=2 3:00u 0 -
1414  {
1415  11 /*fromYearTiny*/,
1416  11 /*toYearTiny*/,
1417  5 /*inMonth*/,
1418  7 /*onDayOfWeek*/,
1419  2 /*onDayOfMonth*/,
1420  12 /*atTimeCode*/,
1421  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1422  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1423  '-' /*letter*/,
1424  },
1425  // Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
1426  {
1427  11 /*fromYearTiny*/,
1428  11 /*toYearTiny*/,
1429  8 /*inMonth*/,
1430  7 /*onDayOfWeek*/,
1431  16 /*onDayOfMonth*/,
1432  16 /*atTimeCode*/,
1433  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1434  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1435  '-' /*letter*/,
1436  },
1437  // Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
1438  {
1439  12 /*fromYearTiny*/,
1440  14 /*toYearTiny*/,
1441  4 /*inMonth*/,
1442  7 /*onDayOfWeek*/,
1443  23 /*onDayOfMonth*/,
1444  12 /*atTimeCode*/,
1445  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1446  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1447  '-' /*letter*/,
1448  },
1449  // Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
1450  {
1451  12 /*fromYearTiny*/,
1452  14 /*toYearTiny*/,
1453  9 /*inMonth*/,
1454  7 /*onDayOfWeek*/,
1455  2 /*onDayOfMonth*/,
1456  16 /*atTimeCode*/,
1457  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1458  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1459  '-' /*letter*/,
1460  },
1461  // Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
1462  {
1463  16 /*fromYearTiny*/,
1464  18 /*toYearTiny*/,
1465  5 /*inMonth*/,
1466  7 /*onDayOfWeek*/,
1467  9 /*onDayOfMonth*/,
1468  12 /*atTimeCode*/,
1469  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1471  '-' /*letter*/,
1472  },
1473  // Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
1474  {
1475  16 /*fromYearTiny*/,
1476  18 /*toYearTiny*/,
1477  8 /*inMonth*/,
1478  7 /*onDayOfWeek*/,
1479  9 /*onDayOfMonth*/,
1480  16 /*atTimeCode*/,
1481  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1482  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1483  '-' /*letter*/,
1484  },
1485  // Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
1486  {
1487  19 /*fromYearTiny*/,
1488  126 /*toYearTiny*/,
1489  4 /*inMonth*/,
1490  7 /*onDayOfWeek*/,
1491  2 /*onDayOfMonth*/,
1492  12 /*atTimeCode*/,
1493  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1494  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1495  '-' /*letter*/,
1496  },
1497  // Rule Chile 2019 2021 - Sep Sun>=2 4:00u 1:00 -
1498  {
1499  19 /*fromYearTiny*/,
1500  21 /*toYearTiny*/,
1501  9 /*inMonth*/,
1502  7 /*onDayOfWeek*/,
1503  2 /*onDayOfMonth*/,
1504  16 /*atTimeCode*/,
1505  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1506  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1507  '-' /*letter*/,
1508  },
1509  // Rule Chile 2022 only - Sep Sun>=9 4:00u 1:00 -
1510  {
1511  22 /*fromYearTiny*/,
1512  22 /*toYearTiny*/,
1513  9 /*inMonth*/,
1514  7 /*onDayOfWeek*/,
1515  9 /*onDayOfMonth*/,
1516  16 /*atTimeCode*/,
1517  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1518  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1519  '-' /*letter*/,
1520  },
1521  // Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
1522  {
1523  23 /*fromYearTiny*/,
1524  126 /*toYearTiny*/,
1525  9 /*inMonth*/,
1526  7 /*onDayOfWeek*/,
1527  2 /*onDayOfMonth*/,
1528  16 /*atTimeCode*/,
1529  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1530  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1531  '-' /*letter*/,
1532  },
1533 
1534 };
1535 
1536 
1537 
1538 const basic::ZonePolicy kPolicyChile ACE_TIME_PROGMEM = {
1539  kZoneRulesChile /*rules*/,
1540  nullptr /*letters*/,
1541  17 /*numRules*/,
1542  0 /*numLetters*/,
1543 };
1544 
1545 //---------------------------------------------------------------------------
1546 // Policy name: Cook
1547 // Rules: 1
1548 // Memory (8-bit): 15
1549 // Memory (32-bit): 24
1550 //---------------------------------------------------------------------------
1551 
1552 static const basic::ZoneRule kZoneRulesCook[] ACE_TIME_PROGMEM = {
1553  // Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
1554  {
1555  -21 /*fromYearTiny*/,
1556  -9 /*toYearTiny*/,
1557  3 /*inMonth*/,
1558  7 /*onDayOfWeek*/,
1559  1 /*onDayOfMonth*/,
1560  0 /*atTimeCode*/,
1561  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1562  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1563  '-' /*letter*/,
1564  },
1565 
1566 };
1567 
1568 
1569 
1570 const basic::ZonePolicy kPolicyCook ACE_TIME_PROGMEM = {
1571  kZoneRulesCook /*rules*/,
1572  nullptr /*letters*/,
1573  1 /*numRules*/,
1574  0 /*numLetters*/,
1575 };
1576 
1577 //---------------------------------------------------------------------------
1578 // Policy name: Cuba
1579 // Rules: 14
1580 // Memory (8-bit): 132
1581 // Memory (32-bit): 180
1582 //---------------------------------------------------------------------------
1583 
1584 static const basic::ZoneRule kZoneRulesCuba[] ACE_TIME_PROGMEM = {
1585  // Rule Cuba 1997 only - Oct 12 0:00s 0 S
1586  {
1587  -3 /*fromYearTiny*/,
1588  -3 /*toYearTiny*/,
1589  10 /*inMonth*/,
1590  0 /*onDayOfWeek*/,
1591  12 /*onDayOfMonth*/,
1592  0 /*atTimeCode*/,
1593  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1594  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1595  'S' /*letter*/,
1596  },
1597  // Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
1598  {
1599  -2 /*fromYearTiny*/,
1600  -1 /*toYearTiny*/,
1601  3 /*inMonth*/,
1602  7 /*onDayOfWeek*/,
1603  0 /*onDayOfMonth*/,
1604  0 /*atTimeCode*/,
1605  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1606  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1607  'D' /*letter*/,
1608  },
1609  // Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
1610  {
1611  -2 /*fromYearTiny*/,
1612  3 /*toYearTiny*/,
1613  10 /*inMonth*/,
1614  7 /*onDayOfWeek*/,
1615  0 /*onDayOfMonth*/,
1616  0 /*atTimeCode*/,
1617  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1618  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1619  'S' /*letter*/,
1620  },
1621  // Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
1622  {
1623  0 /*fromYearTiny*/,
1624  3 /*toYearTiny*/,
1625  4 /*inMonth*/,
1626  7 /*onDayOfWeek*/,
1627  1 /*onDayOfMonth*/,
1628  0 /*atTimeCode*/,
1629  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1630  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1631  'D' /*letter*/,
1632  },
1633  // Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
1634  {
1635  4 /*fromYearTiny*/,
1636  4 /*toYearTiny*/,
1637  3 /*inMonth*/,
1638  7 /*onDayOfWeek*/,
1639  0 /*onDayOfMonth*/,
1640  0 /*atTimeCode*/,
1641  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1642  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1643  'D' /*letter*/,
1644  },
1645  // Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
1646  {
1647  6 /*fromYearTiny*/,
1648  10 /*toYearTiny*/,
1649  10 /*inMonth*/,
1650  7 /*onDayOfWeek*/,
1651  0 /*onDayOfMonth*/,
1652  0 /*atTimeCode*/,
1653  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1654  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1655  'S' /*letter*/,
1656  },
1657  // Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
1658  {
1659  7 /*fromYearTiny*/,
1660  7 /*toYearTiny*/,
1661  3 /*inMonth*/,
1662  7 /*onDayOfWeek*/,
1663  8 /*onDayOfMonth*/,
1664  0 /*atTimeCode*/,
1665  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1666  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1667  'D' /*letter*/,
1668  },
1669  // Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
1670  {
1671  8 /*fromYearTiny*/,
1672  8 /*toYearTiny*/,
1673  3 /*inMonth*/,
1674  7 /*onDayOfWeek*/,
1675  15 /*onDayOfMonth*/,
1676  0 /*atTimeCode*/,
1677  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1678  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1679  'D' /*letter*/,
1680  },
1681  // Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
1682  {
1683  9 /*fromYearTiny*/,
1684  10 /*toYearTiny*/,
1685  3 /*inMonth*/,
1686  7 /*onDayOfWeek*/,
1687  8 /*onDayOfMonth*/,
1688  0 /*atTimeCode*/,
1689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1690  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1691  'D' /*letter*/,
1692  },
1693  // Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
1694  {
1695  11 /*fromYearTiny*/,
1696  11 /*toYearTiny*/,
1697  3 /*inMonth*/,
1698  7 /*onDayOfWeek*/,
1699  15 /*onDayOfMonth*/,
1700  0 /*atTimeCode*/,
1701  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1702  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1703  'D' /*letter*/,
1704  },
1705  // Rule Cuba 2011 only - Nov 13 0:00s 0 S
1706  {
1707  11 /*fromYearTiny*/,
1708  11 /*toYearTiny*/,
1709  11 /*inMonth*/,
1710  0 /*onDayOfWeek*/,
1711  13 /*onDayOfMonth*/,
1712  0 /*atTimeCode*/,
1713  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1714  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1715  'S' /*letter*/,
1716  },
1717  // Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
1718  {
1719  12 /*fromYearTiny*/,
1720  12 /*toYearTiny*/,
1721  4 /*inMonth*/,
1722  0 /*onDayOfWeek*/,
1723  1 /*onDayOfMonth*/,
1724  0 /*atTimeCode*/,
1725  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1726  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1727  'D' /*letter*/,
1728  },
1729  // Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
1730  {
1731  12 /*fromYearTiny*/,
1732  126 /*toYearTiny*/,
1733  11 /*inMonth*/,
1734  7 /*onDayOfWeek*/,
1735  1 /*onDayOfMonth*/,
1736  0 /*atTimeCode*/,
1737  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1738  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1739  'S' /*letter*/,
1740  },
1741  // Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
1742  {
1743  13 /*fromYearTiny*/,
1744  126 /*toYearTiny*/,
1745  3 /*inMonth*/,
1746  7 /*onDayOfWeek*/,
1747  8 /*onDayOfMonth*/,
1748  0 /*atTimeCode*/,
1749  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1750  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1751  'D' /*letter*/,
1752  },
1753 
1754 };
1755 
1756 
1757 
1758 const basic::ZonePolicy kPolicyCuba ACE_TIME_PROGMEM = {
1759  kZoneRulesCuba /*rules*/,
1760  nullptr /*letters*/,
1761  14 /*numRules*/,
1762  0 /*numLetters*/,
1763 };
1764 
1765 //---------------------------------------------------------------------------
1766 // Policy name: Dhaka
1767 // Rules: 3
1768 // Memory (8-bit): 33
1769 // Memory (32-bit): 48
1770 //---------------------------------------------------------------------------
1771 
1772 static const basic::ZoneRule kZoneRulesDhaka[] ACE_TIME_PROGMEM = {
1773  // Anchor: Rule Dhaka 2009 only - Dec 31 24:00 0 -
1774  {
1775  -127 /*fromYearTiny*/,
1776  -127 /*toYearTiny*/,
1777  1 /*inMonth*/,
1778  0 /*onDayOfWeek*/,
1779  1 /*onDayOfMonth*/,
1780  0 /*atTimeCode*/,
1781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1782  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1783  '-' /*letter*/,
1784  },
1785  // Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
1786  {
1787  9 /*fromYearTiny*/,
1788  9 /*toYearTiny*/,
1789  6 /*inMonth*/,
1790  0 /*onDayOfWeek*/,
1791  19 /*onDayOfMonth*/,
1792  92 /*atTimeCode*/,
1793  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1794  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1795  '-' /*letter*/,
1796  },
1797  // Rule Dhaka 2009 only - Dec 31 24:00 0 -
1798  {
1799  9 /*fromYearTiny*/,
1800  9 /*toYearTiny*/,
1801  12 /*inMonth*/,
1802  0 /*onDayOfWeek*/,
1803  31 /*onDayOfMonth*/,
1804  96 /*atTimeCode*/,
1805  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1806  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1807  '-' /*letter*/,
1808  },
1809 
1810 };
1811 
1812 
1813 
1814 const basic::ZonePolicy kPolicyDhaka ACE_TIME_PROGMEM = {
1815  kZoneRulesDhaka /*rules*/,
1816  nullptr /*letters*/,
1817  3 /*numRules*/,
1818  0 /*numLetters*/,
1819 };
1820 
1821 //---------------------------------------------------------------------------
1822 // Policy name: EU
1823 // Rules: 3
1824 // Memory (8-bit): 33
1825 // Memory (32-bit): 48
1826 //---------------------------------------------------------------------------
1827 
1828 static const basic::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
1829  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
1830  {
1831  -21 /*fromYearTiny*/,
1832  -5 /*toYearTiny*/,
1833  9 /*inMonth*/,
1834  7 /*onDayOfWeek*/,
1835  0 /*onDayOfMonth*/,
1836  4 /*atTimeCode*/,
1837  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1838  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1839  '-' /*letter*/,
1840  },
1841  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
1842  {
1843  -19 /*fromYearTiny*/,
1844  126 /*toYearTiny*/,
1845  3 /*inMonth*/,
1846  7 /*onDayOfWeek*/,
1847  0 /*onDayOfMonth*/,
1848  4 /*atTimeCode*/,
1849  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1850  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1851  'S' /*letter*/,
1852  },
1853  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
1854  {
1855  -4 /*fromYearTiny*/,
1856  126 /*toYearTiny*/,
1857  10 /*inMonth*/,
1858  7 /*onDayOfWeek*/,
1859  0 /*onDayOfMonth*/,
1860  4 /*atTimeCode*/,
1861  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1862  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1863  '-' /*letter*/,
1864  },
1865 
1866 };
1867 
1868 
1869 
1870 const basic::ZonePolicy kPolicyEU ACE_TIME_PROGMEM = {
1871  kZoneRulesEU /*rules*/,
1872  nullptr /*letters*/,
1873  3 /*numRules*/,
1874  0 /*numLetters*/,
1875 };
1876 
1877 //---------------------------------------------------------------------------
1878 // Policy name: EUAsia
1879 // Rules: 3
1880 // Memory (8-bit): 33
1881 // Memory (32-bit): 48
1882 //---------------------------------------------------------------------------
1883 
1884 static const basic::ZoneRule kZoneRulesEUAsia[] ACE_TIME_PROGMEM = {
1885  // Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
1886  {
1887  -19 /*fromYearTiny*/,
1888  126 /*toYearTiny*/,
1889  3 /*inMonth*/,
1890  7 /*onDayOfWeek*/,
1891  0 /*onDayOfMonth*/,
1892  4 /*atTimeCode*/,
1893  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1894  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1895  'S' /*letter*/,
1896  },
1897  // Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
1898  {
1899  -21 /*fromYearTiny*/,
1900  -5 /*toYearTiny*/,
1901  9 /*inMonth*/,
1902  7 /*onDayOfWeek*/,
1903  0 /*onDayOfMonth*/,
1904  4 /*atTimeCode*/,
1905  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1906  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1907  '-' /*letter*/,
1908  },
1909  // Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
1910  {
1911  -4 /*fromYearTiny*/,
1912  126 /*toYearTiny*/,
1913  10 /*inMonth*/,
1914  7 /*onDayOfWeek*/,
1915  0 /*onDayOfMonth*/,
1916  4 /*atTimeCode*/,
1917  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1918  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1919  '-' /*letter*/,
1920  },
1921 
1922 };
1923 
1924 
1925 
1926 const basic::ZonePolicy kPolicyEUAsia ACE_TIME_PROGMEM = {
1927  kZoneRulesEUAsia /*rules*/,
1928  nullptr /*letters*/,
1929  3 /*numRules*/,
1930  0 /*numLetters*/,
1931 };
1932 
1933 //---------------------------------------------------------------------------
1934 // Policy name: Ecuador
1935 // Rules: 1
1936 // Memory (8-bit): 15
1937 // Memory (32-bit): 24
1938 //---------------------------------------------------------------------------
1939 
1940 static const basic::ZoneRule kZoneRulesEcuador[] ACE_TIME_PROGMEM = {
1941  // Rule Ecuador 1993 only - Feb 5 0:00 0 -
1942  {
1943  -7 /*fromYearTiny*/,
1944  -7 /*toYearTiny*/,
1945  2 /*inMonth*/,
1946  0 /*onDayOfWeek*/,
1947  5 /*onDayOfMonth*/,
1948  0 /*atTimeCode*/,
1949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1950  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1951  '-' /*letter*/,
1952  },
1953 
1954 };
1955 
1956 
1957 
1958 const basic::ZonePolicy kPolicyEcuador ACE_TIME_PROGMEM = {
1959  kZoneRulesEcuador /*rules*/,
1960  nullptr /*letters*/,
1961  1 /*numRules*/,
1962  0 /*numLetters*/,
1963 };
1964 
1965 //---------------------------------------------------------------------------
1966 // Policy name: Eire
1967 // Rules: 3
1968 // Memory (8-bit): 33
1969 // Memory (32-bit): 48
1970 //---------------------------------------------------------------------------
1971 
1972 static const basic::ZoneRule kZoneRulesEire[] ACE_TIME_PROGMEM = {
1973  // Rule Eire 1981 max - Mar lastSun 1:00u 0 -
1974  {
1975  -19 /*fromYearTiny*/,
1976  126 /*toYearTiny*/,
1977  3 /*inMonth*/,
1978  7 /*onDayOfWeek*/,
1979  0 /*onDayOfMonth*/,
1980  4 /*atTimeCode*/,
1981  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1982  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1983  '-' /*letter*/,
1984  },
1985  // Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
1986  {
1987  -10 /*fromYearTiny*/,
1988  -5 /*toYearTiny*/,
1989  10 /*inMonth*/,
1990  7 /*onDayOfWeek*/,
1991  22 /*onDayOfMonth*/,
1992  4 /*atTimeCode*/,
1993  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1994  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1995  '-' /*letter*/,
1996  },
1997  // Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
1998  {
1999  -4 /*fromYearTiny*/,
2000  126 /*toYearTiny*/,
2001  10 /*inMonth*/,
2002  7 /*onDayOfWeek*/,
2003  0 /*onDayOfMonth*/,
2004  4 /*atTimeCode*/,
2005  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2006  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
2007  '-' /*letter*/,
2008  },
2009 
2010 };
2011 
2012 
2013 
2014 const basic::ZonePolicy kPolicyEire ACE_TIME_PROGMEM = {
2015  kZoneRulesEire /*rules*/,
2016  nullptr /*letters*/,
2017  3 /*numRules*/,
2018  0 /*numLetters*/,
2019 };
2020 
2021 //---------------------------------------------------------------------------
2022 // Policy name: Fiji
2023 // Rules: 14
2024 // Memory (8-bit): 132
2025 // Memory (32-bit): 180
2026 //---------------------------------------------------------------------------
2027 
2028 static const basic::ZoneRule kZoneRulesFiji[] ACE_TIME_PROGMEM = {
2029  // Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
2030  {
2031  -2 /*fromYearTiny*/,
2032  -1 /*toYearTiny*/,
2033  11 /*inMonth*/,
2034  7 /*onDayOfWeek*/,
2035  1 /*onDayOfMonth*/,
2036  8 /*atTimeCode*/,
2037  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2038  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2039  '-' /*letter*/,
2040  },
2041  // Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
2042  {
2043  -1 /*fromYearTiny*/,
2044  0 /*toYearTiny*/,
2045  2 /*inMonth*/,
2046  7 /*onDayOfWeek*/,
2047  0 /*onDayOfMonth*/,
2048  12 /*atTimeCode*/,
2049  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2050  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2051  '-' /*letter*/,
2052  },
2053  // Rule Fiji 2009 only - Nov 29 2:00 1:00 -
2054  {
2055  9 /*fromYearTiny*/,
2056  9 /*toYearTiny*/,
2057  11 /*inMonth*/,
2058  0 /*onDayOfWeek*/,
2059  29 /*onDayOfMonth*/,
2060  8 /*atTimeCode*/,
2061  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2062  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2063  '-' /*letter*/,
2064  },
2065  // Rule Fiji 2010 only - Mar lastSun 3:00 0 -
2066  {
2067  10 /*fromYearTiny*/,
2068  10 /*toYearTiny*/,
2069  3 /*inMonth*/,
2070  7 /*onDayOfWeek*/,
2071  0 /*onDayOfMonth*/,
2072  12 /*atTimeCode*/,
2073  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2074  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2075  '-' /*letter*/,
2076  },
2077  // Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
2078  {
2079  10 /*fromYearTiny*/,
2080  13 /*toYearTiny*/,
2081  10 /*inMonth*/,
2082  7 /*onDayOfWeek*/,
2083  21 /*onDayOfMonth*/,
2084  8 /*atTimeCode*/,
2085  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2086  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2087  '-' /*letter*/,
2088  },
2089  // Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
2090  {
2091  11 /*fromYearTiny*/,
2092  11 /*toYearTiny*/,
2093  3 /*inMonth*/,
2094  7 /*onDayOfWeek*/,
2095  1 /*onDayOfMonth*/,
2096  12 /*atTimeCode*/,
2097  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2098  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2099  '-' /*letter*/,
2100  },
2101  // Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
2102  {
2103  12 /*fromYearTiny*/,
2104  13 /*toYearTiny*/,
2105  1 /*inMonth*/,
2106  7 /*onDayOfWeek*/,
2107  18 /*onDayOfMonth*/,
2108  12 /*atTimeCode*/,
2109  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2110  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2111  '-' /*letter*/,
2112  },
2113  // Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
2114  {
2115  14 /*fromYearTiny*/,
2116  14 /*toYearTiny*/,
2117  1 /*inMonth*/,
2118  7 /*onDayOfWeek*/,
2119  18 /*onDayOfMonth*/,
2120  8 /*atTimeCode*/,
2121  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2122  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2123  '-' /*letter*/,
2124  },
2125  // Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
2126  {
2127  14 /*fromYearTiny*/,
2128  18 /*toYearTiny*/,
2129  11 /*inMonth*/,
2130  7 /*onDayOfWeek*/,
2131  1 /*onDayOfMonth*/,
2132  8 /*atTimeCode*/,
2133  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2134  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2135  '-' /*letter*/,
2136  },
2137  // Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 -
2138  {
2139  15 /*fromYearTiny*/,
2140  21 /*toYearTiny*/,
2141  1 /*inMonth*/,
2142  7 /*onDayOfWeek*/,
2143  12 /*onDayOfMonth*/,
2144  12 /*atTimeCode*/,
2145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2146  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2147  '-' /*letter*/,
2148  },
2149  // Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
2150  {
2151  19 /*fromYearTiny*/,
2152  19 /*toYearTiny*/,
2153  11 /*inMonth*/,
2154  7 /*onDayOfWeek*/,
2155  8 /*onDayOfMonth*/,
2156  8 /*atTimeCode*/,
2157  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2158  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2159  '-' /*letter*/,
2160  },
2161  // Rule Fiji 2020 only - Dec 20 2:00 1:00 -
2162  {
2163  20 /*fromYearTiny*/,
2164  20 /*toYearTiny*/,
2165  12 /*inMonth*/,
2166  0 /*onDayOfWeek*/,
2167  20 /*onDayOfMonth*/,
2168  8 /*atTimeCode*/,
2169  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2170  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2171  '-' /*letter*/,
2172  },
2173  // Rule Fiji 2022 max - Nov Sun>=8 2:00 1:00 -
2174  {
2175  22 /*fromYearTiny*/,
2176  126 /*toYearTiny*/,
2177  11 /*inMonth*/,
2178  7 /*onDayOfWeek*/,
2179  8 /*onDayOfMonth*/,
2180  8 /*atTimeCode*/,
2181  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2182  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2183  '-' /*letter*/,
2184  },
2185  // Rule Fiji 2023 max - Jan Sun>=12 3:00 0 -
2186  {
2187  23 /*fromYearTiny*/,
2188  126 /*toYearTiny*/,
2189  1 /*inMonth*/,
2190  7 /*onDayOfWeek*/,
2191  12 /*onDayOfMonth*/,
2192  12 /*atTimeCode*/,
2193  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2194  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2195  '-' /*letter*/,
2196  },
2197 
2198 };
2199 
2200 
2201 
2202 const basic::ZonePolicy kPolicyFiji ACE_TIME_PROGMEM = {
2203  kZoneRulesFiji /*rules*/,
2204  nullptr /*letters*/,
2205  14 /*numRules*/,
2206  0 /*numLetters*/,
2207 };
2208 
2209 //---------------------------------------------------------------------------
2210 // Policy name: Guat
2211 // Rules: 3
2212 // Memory (8-bit): 33
2213 // Memory (32-bit): 48
2214 //---------------------------------------------------------------------------
2215 
2216 static const basic::ZoneRule kZoneRulesGuat[] ACE_TIME_PROGMEM = {
2217  // Rule Guat 1991 only - Sep 7 0:00 0 S
2218  {
2219  -9 /*fromYearTiny*/,
2220  -9 /*toYearTiny*/,
2221  9 /*inMonth*/,
2222  0 /*onDayOfWeek*/,
2223  7 /*onDayOfMonth*/,
2224  0 /*atTimeCode*/,
2225  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2226  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2227  'S' /*letter*/,
2228  },
2229  // Rule Guat 2006 only - Apr 30 0:00 1:00 D
2230  {
2231  6 /*fromYearTiny*/,
2232  6 /*toYearTiny*/,
2233  4 /*inMonth*/,
2234  0 /*onDayOfWeek*/,
2235  30 /*onDayOfMonth*/,
2236  0 /*atTimeCode*/,
2237  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2238  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2239  'D' /*letter*/,
2240  },
2241  // Rule Guat 2006 only - Oct 1 0:00 0 S
2242  {
2243  6 /*fromYearTiny*/,
2244  6 /*toYearTiny*/,
2245  10 /*inMonth*/,
2246  0 /*onDayOfWeek*/,
2247  1 /*onDayOfMonth*/,
2248  0 /*atTimeCode*/,
2249  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2250  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2251  'S' /*letter*/,
2252  },
2253 
2254 };
2255 
2256 
2257 
2258 const basic::ZonePolicy kPolicyGuat ACE_TIME_PROGMEM = {
2259  kZoneRulesGuat /*rules*/,
2260  nullptr /*letters*/,
2261  3 /*numRules*/,
2262  0 /*numLetters*/,
2263 };
2264 
2265 //---------------------------------------------------------------------------
2266 // Policy name: HK
2267 // Rules: 1
2268 // Memory (8-bit): 15
2269 // Memory (32-bit): 24
2270 //---------------------------------------------------------------------------
2271 
2272 static const basic::ZoneRule kZoneRulesHK[] ACE_TIME_PROGMEM = {
2273  // Rule HK 1979 only - Oct 21 3:30 0 -
2274  {
2275  -21 /*fromYearTiny*/,
2276  -21 /*toYearTiny*/,
2277  10 /*inMonth*/,
2278  0 /*onDayOfWeek*/,
2279  21 /*onDayOfMonth*/,
2280  14 /*atTimeCode*/,
2281  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2282  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2283  '-' /*letter*/,
2284  },
2285 
2286 };
2287 
2288 
2289 
2290 const basic::ZonePolicy kPolicyHK ACE_TIME_PROGMEM = {
2291  kZoneRulesHK /*rules*/,
2292  nullptr /*letters*/,
2293  1 /*numRules*/,
2294  0 /*numLetters*/,
2295 };
2296 
2297 //---------------------------------------------------------------------------
2298 // Policy name: Haiti
2299 // Rules: 7
2300 // Memory (8-bit): 69
2301 // Memory (32-bit): 96
2302 //---------------------------------------------------------------------------
2303 
2304 static const basic::ZoneRule kZoneRulesHaiti[] ACE_TIME_PROGMEM = {
2305  // Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
2306  {
2307  -12 /*fromYearTiny*/,
2308  -3 /*toYearTiny*/,
2309  10 /*inMonth*/,
2310  7 /*onDayOfWeek*/,
2311  0 /*onDayOfMonth*/,
2312  4 /*atTimeCode*/,
2313  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2314  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2315  'S' /*letter*/,
2316  },
2317  // Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
2318  {
2319  5 /*fromYearTiny*/,
2320  6 /*toYearTiny*/,
2321  4 /*inMonth*/,
2322  7 /*onDayOfWeek*/,
2323  1 /*onDayOfMonth*/,
2324  0 /*atTimeCode*/,
2325  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2326  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2327  'D' /*letter*/,
2328  },
2329  // Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
2330  {
2331  5 /*fromYearTiny*/,
2332  6 /*toYearTiny*/,
2333  10 /*inMonth*/,
2334  7 /*onDayOfWeek*/,
2335  0 /*onDayOfMonth*/,
2336  0 /*atTimeCode*/,
2337  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2338  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2339  'S' /*letter*/,
2340  },
2341  // Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
2342  {
2343  12 /*fromYearTiny*/,
2344  15 /*toYearTiny*/,
2345  3 /*inMonth*/,
2346  7 /*onDayOfWeek*/,
2347  8 /*onDayOfMonth*/,
2348  8 /*atTimeCode*/,
2349  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2350  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2351  'D' /*letter*/,
2352  },
2353  // Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
2354  {
2355  12 /*fromYearTiny*/,
2356  15 /*toYearTiny*/,
2357  11 /*inMonth*/,
2358  7 /*onDayOfWeek*/,
2359  1 /*onDayOfMonth*/,
2360  8 /*atTimeCode*/,
2361  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2362  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2363  'S' /*letter*/,
2364  },
2365  // Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
2366  {
2367  17 /*fromYearTiny*/,
2368  126 /*toYearTiny*/,
2369  3 /*inMonth*/,
2370  7 /*onDayOfWeek*/,
2371  8 /*onDayOfMonth*/,
2372  8 /*atTimeCode*/,
2373  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2374  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2375  'D' /*letter*/,
2376  },
2377  // Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
2378  {
2379  17 /*fromYearTiny*/,
2380  126 /*toYearTiny*/,
2381  11 /*inMonth*/,
2382  7 /*onDayOfWeek*/,
2383  1 /*onDayOfMonth*/,
2384  8 /*atTimeCode*/,
2385  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2386  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2387  'S' /*letter*/,
2388  },
2389 
2390 };
2391 
2392 
2393 
2394 const basic::ZonePolicy kPolicyHaiti ACE_TIME_PROGMEM = {
2395  kZoneRulesHaiti /*rules*/,
2396  nullptr /*letters*/,
2397  7 /*numRules*/,
2398  0 /*numLetters*/,
2399 };
2400 
2401 //---------------------------------------------------------------------------
2402 // Policy name: Holiday
2403 // Rules: 1
2404 // Memory (8-bit): 15
2405 // Memory (32-bit): 24
2406 //---------------------------------------------------------------------------
2407 
2408 static const basic::ZoneRule kZoneRulesHoliday[] ACE_TIME_PROGMEM = {
2409  // Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
2410  {
2411  -7 /*fromYearTiny*/,
2412  -6 /*toYearTiny*/,
2413  3 /*inMonth*/,
2414  7 /*onDayOfWeek*/,
2415  1 /*onDayOfMonth*/,
2416  8 /*atTimeCode*/,
2417  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2418  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2419  'S' /*letter*/,
2420  },
2421 
2422 };
2423 
2424 
2425 
2426 const basic::ZonePolicy kPolicyHoliday ACE_TIME_PROGMEM = {
2427  kZoneRulesHoliday /*rules*/,
2428  nullptr /*letters*/,
2429  1 /*numRules*/,
2430  0 /*numLetters*/,
2431 };
2432 
2433 //---------------------------------------------------------------------------
2434 // Policy name: Hond
2435 // Rules: 3
2436 // Memory (8-bit): 33
2437 // Memory (32-bit): 48
2438 //---------------------------------------------------------------------------
2439 
2440 static const basic::ZoneRule kZoneRulesHond[] ACE_TIME_PROGMEM = {
2441  // Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
2442  {
2443  -13 /*fromYearTiny*/,
2444  -12 /*toYearTiny*/,
2445  9 /*inMonth*/,
2446  7 /*onDayOfWeek*/,
2447  0 /*onDayOfMonth*/,
2448  0 /*atTimeCode*/,
2449  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2451  'S' /*letter*/,
2452  },
2453  // Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
2454  {
2455  6 /*fromYearTiny*/,
2456  6 /*toYearTiny*/,
2457  5 /*inMonth*/,
2458  7 /*onDayOfWeek*/,
2459  1 /*onDayOfMonth*/,
2460  0 /*atTimeCode*/,
2461  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2462  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2463  'D' /*letter*/,
2464  },
2465  // Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
2466  {
2467  6 /*fromYearTiny*/,
2468  6 /*toYearTiny*/,
2469  8 /*inMonth*/,
2470  1 /*onDayOfWeek*/,
2471  1 /*onDayOfMonth*/,
2472  0 /*atTimeCode*/,
2473  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2474  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2475  'S' /*letter*/,
2476  },
2477 
2478 };
2479 
2480 
2481 
2482 const basic::ZonePolicy kPolicyHond ACE_TIME_PROGMEM = {
2483  kZoneRulesHond /*rules*/,
2484  nullptr /*letters*/,
2485  3 /*numRules*/,
2486  0 /*numLetters*/,
2487 };
2488 
2489 //---------------------------------------------------------------------------
2490 // Policy name: Iran
2491 // Rules: 27
2492 // Memory (8-bit): 249
2493 // Memory (32-bit): 336
2494 //---------------------------------------------------------------------------
2495 
2496 static const basic::ZoneRule kZoneRulesIran[] ACE_TIME_PROGMEM = {
2497  // Rule Iran 1996 only - Sep 20 24:00 0 -
2498  {
2499  -4 /*fromYearTiny*/,
2500  -4 /*toYearTiny*/,
2501  9 /*inMonth*/,
2502  0 /*onDayOfWeek*/,
2503  20 /*onDayOfMonth*/,
2504  96 /*atTimeCode*/,
2505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2506  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2507  '-' /*letter*/,
2508  },
2509  // Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
2510  {
2511  -3 /*fromYearTiny*/,
2512  -1 /*toYearTiny*/,
2513  3 /*inMonth*/,
2514  0 /*onDayOfWeek*/,
2515  21 /*onDayOfMonth*/,
2516  96 /*atTimeCode*/,
2517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2518  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2519  '-' /*letter*/,
2520  },
2521  // Rule Iran 1997 1999 - Sep 21 24:00 0 -
2522  {
2523  -3 /*fromYearTiny*/,
2524  -1 /*toYearTiny*/,
2525  9 /*inMonth*/,
2526  0 /*onDayOfWeek*/,
2527  21 /*onDayOfMonth*/,
2528  96 /*atTimeCode*/,
2529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2530  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2531  '-' /*letter*/,
2532  },
2533  // Rule Iran 2000 only - Mar 20 24:00 1:00 -
2534  {
2535  0 /*fromYearTiny*/,
2536  0 /*toYearTiny*/,
2537  3 /*inMonth*/,
2538  0 /*onDayOfWeek*/,
2539  20 /*onDayOfMonth*/,
2540  96 /*atTimeCode*/,
2541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2542  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2543  '-' /*letter*/,
2544  },
2545  // Rule Iran 2000 only - Sep 20 24:00 0 -
2546  {
2547  0 /*fromYearTiny*/,
2548  0 /*toYearTiny*/,
2549  9 /*inMonth*/,
2550  0 /*onDayOfWeek*/,
2551  20 /*onDayOfMonth*/,
2552  96 /*atTimeCode*/,
2553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2554  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2555  '-' /*letter*/,
2556  },
2557  // Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
2558  {
2559  1 /*fromYearTiny*/,
2560  3 /*toYearTiny*/,
2561  3 /*inMonth*/,
2562  0 /*onDayOfWeek*/,
2563  21 /*onDayOfMonth*/,
2564  96 /*atTimeCode*/,
2565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2566  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2567  '-' /*letter*/,
2568  },
2569  // Rule Iran 2001 2003 - Sep 21 24:00 0 -
2570  {
2571  1 /*fromYearTiny*/,
2572  3 /*toYearTiny*/,
2573  9 /*inMonth*/,
2574  0 /*onDayOfWeek*/,
2575  21 /*onDayOfMonth*/,
2576  96 /*atTimeCode*/,
2577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2578  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2579  '-' /*letter*/,
2580  },
2581  // Rule Iran 2004 only - Mar 20 24:00 1:00 -
2582  {
2583  4 /*fromYearTiny*/,
2584  4 /*toYearTiny*/,
2585  3 /*inMonth*/,
2586  0 /*onDayOfWeek*/,
2587  20 /*onDayOfMonth*/,
2588  96 /*atTimeCode*/,
2589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2590  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2591  '-' /*letter*/,
2592  },
2593  // Rule Iran 2004 only - Sep 20 24:00 0 -
2594  {
2595  4 /*fromYearTiny*/,
2596  4 /*toYearTiny*/,
2597  9 /*inMonth*/,
2598  0 /*onDayOfWeek*/,
2599  20 /*onDayOfMonth*/,
2600  96 /*atTimeCode*/,
2601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2602  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2603  '-' /*letter*/,
2604  },
2605  // Rule Iran 2005 only - Mar 21 24:00 1:00 -
2606  {
2607  5 /*fromYearTiny*/,
2608  5 /*toYearTiny*/,
2609  3 /*inMonth*/,
2610  0 /*onDayOfWeek*/,
2611  21 /*onDayOfMonth*/,
2612  96 /*atTimeCode*/,
2613  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2614  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2615  '-' /*letter*/,
2616  },
2617  // Rule Iran 2005 only - Sep 21 24:00 0 -
2618  {
2619  5 /*fromYearTiny*/,
2620  5 /*toYearTiny*/,
2621  9 /*inMonth*/,
2622  0 /*onDayOfWeek*/,
2623  21 /*onDayOfMonth*/,
2624  96 /*atTimeCode*/,
2625  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2626  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2627  '-' /*letter*/,
2628  },
2629  // Rule Iran 2008 only - Mar 20 24:00 1:00 -
2630  {
2631  8 /*fromYearTiny*/,
2632  8 /*toYearTiny*/,
2633  3 /*inMonth*/,
2634  0 /*onDayOfWeek*/,
2635  20 /*onDayOfMonth*/,
2636  96 /*atTimeCode*/,
2637  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2638  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2639  '-' /*letter*/,
2640  },
2641  // Rule Iran 2008 only - Sep 20 24:00 0 -
2642  {
2643  8 /*fromYearTiny*/,
2644  8 /*toYearTiny*/,
2645  9 /*inMonth*/,
2646  0 /*onDayOfWeek*/,
2647  20 /*onDayOfMonth*/,
2648  96 /*atTimeCode*/,
2649  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2650  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2651  '-' /*letter*/,
2652  },
2653  // Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
2654  {
2655  9 /*fromYearTiny*/,
2656  11 /*toYearTiny*/,
2657  3 /*inMonth*/,
2658  0 /*onDayOfWeek*/,
2659  21 /*onDayOfMonth*/,
2660  96 /*atTimeCode*/,
2661  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2662  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2663  '-' /*letter*/,
2664  },
2665  // Rule Iran 2009 2011 - Sep 21 24:00 0 -
2666  {
2667  9 /*fromYearTiny*/,
2668  11 /*toYearTiny*/,
2669  9 /*inMonth*/,
2670  0 /*onDayOfWeek*/,
2671  21 /*onDayOfMonth*/,
2672  96 /*atTimeCode*/,
2673  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2674  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2675  '-' /*letter*/,
2676  },
2677  // Rule Iran 2012 only - Mar 20 24:00 1:00 -
2678  {
2679  12 /*fromYearTiny*/,
2680  12 /*toYearTiny*/,
2681  3 /*inMonth*/,
2682  0 /*onDayOfWeek*/,
2683  20 /*onDayOfMonth*/,
2684  96 /*atTimeCode*/,
2685  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2686  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2687  '-' /*letter*/,
2688  },
2689  // Rule Iran 2012 only - Sep 20 24:00 0 -
2690  {
2691  12 /*fromYearTiny*/,
2692  12 /*toYearTiny*/,
2693  9 /*inMonth*/,
2694  0 /*onDayOfWeek*/,
2695  20 /*onDayOfMonth*/,
2696  96 /*atTimeCode*/,
2697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2698  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2699  '-' /*letter*/,
2700  },
2701  // Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
2702  {
2703  13 /*fromYearTiny*/,
2704  15 /*toYearTiny*/,
2705  3 /*inMonth*/,
2706  0 /*onDayOfWeek*/,
2707  21 /*onDayOfMonth*/,
2708  96 /*atTimeCode*/,
2709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2710  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2711  '-' /*letter*/,
2712  },
2713  // Rule Iran 2013 2015 - Sep 21 24:00 0 -
2714  {
2715  13 /*fromYearTiny*/,
2716  15 /*toYearTiny*/,
2717  9 /*inMonth*/,
2718  0 /*onDayOfWeek*/,
2719  21 /*onDayOfMonth*/,
2720  96 /*atTimeCode*/,
2721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2722  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2723  '-' /*letter*/,
2724  },
2725  // Rule Iran 2016 only - Mar 20 24:00 1:00 -
2726  {
2727  16 /*fromYearTiny*/,
2728  16 /*toYearTiny*/,
2729  3 /*inMonth*/,
2730  0 /*onDayOfWeek*/,
2731  20 /*onDayOfMonth*/,
2732  96 /*atTimeCode*/,
2733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2734  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2735  '-' /*letter*/,
2736  },
2737  // Rule Iran 2016 only - Sep 20 24:00 0 -
2738  {
2739  16 /*fromYearTiny*/,
2740  16 /*toYearTiny*/,
2741  9 /*inMonth*/,
2742  0 /*onDayOfWeek*/,
2743  20 /*onDayOfMonth*/,
2744  96 /*atTimeCode*/,
2745  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2746  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2747  '-' /*letter*/,
2748  },
2749  // Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
2750  {
2751  17 /*fromYearTiny*/,
2752  19 /*toYearTiny*/,
2753  3 /*inMonth*/,
2754  0 /*onDayOfWeek*/,
2755  21 /*onDayOfMonth*/,
2756  96 /*atTimeCode*/,
2757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2758  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2759  '-' /*letter*/,
2760  },
2761  // Rule Iran 2017 2019 - Sep 21 24:00 0 -
2762  {
2763  17 /*fromYearTiny*/,
2764  19 /*toYearTiny*/,
2765  9 /*inMonth*/,
2766  0 /*onDayOfWeek*/,
2767  21 /*onDayOfMonth*/,
2768  96 /*atTimeCode*/,
2769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2770  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2771  '-' /*letter*/,
2772  },
2773  // Rule Iran 2020 only - Mar 20 24:00 1:00 -
2774  {
2775  20 /*fromYearTiny*/,
2776  20 /*toYearTiny*/,
2777  3 /*inMonth*/,
2778  0 /*onDayOfWeek*/,
2779  20 /*onDayOfMonth*/,
2780  96 /*atTimeCode*/,
2781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2782  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2783  '-' /*letter*/,
2784  },
2785  // Rule Iran 2020 only - Sep 20 24:00 0 -
2786  {
2787  20 /*fromYearTiny*/,
2788  20 /*toYearTiny*/,
2789  9 /*inMonth*/,
2790  0 /*onDayOfWeek*/,
2791  20 /*onDayOfMonth*/,
2792  96 /*atTimeCode*/,
2793  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2794  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2795  '-' /*letter*/,
2796  },
2797  // Rule Iran 2021 2022 - Mar 21 24:00 1:00 -
2798  {
2799  21 /*fromYearTiny*/,
2800  22 /*toYearTiny*/,
2801  3 /*inMonth*/,
2802  0 /*onDayOfWeek*/,
2803  21 /*onDayOfMonth*/,
2804  96 /*atTimeCode*/,
2805  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2806  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2807  '-' /*letter*/,
2808  },
2809  // Rule Iran 2021 2022 - Sep 21 24:00 0 -
2810  {
2811  21 /*fromYearTiny*/,
2812  22 /*toYearTiny*/,
2813  9 /*inMonth*/,
2814  0 /*onDayOfWeek*/,
2815  21 /*onDayOfMonth*/,
2816  96 /*atTimeCode*/,
2817  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2818  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2819  '-' /*letter*/,
2820  },
2821 
2822 };
2823 
2824 
2825 
2826 const basic::ZonePolicy kPolicyIran ACE_TIME_PROGMEM = {
2827  kZoneRulesIran /*rules*/,
2828  nullptr /*letters*/,
2829  27 /*numRules*/,
2830  0 /*numLetters*/,
2831 };
2832 
2833 //---------------------------------------------------------------------------
2834 // Policy name: Iraq
2835 // Rules: 3
2836 // Memory (8-bit): 33
2837 // Memory (32-bit): 48
2838 //---------------------------------------------------------------------------
2839 
2840 static const basic::ZoneRule kZoneRulesIraq[] ACE_TIME_PROGMEM = {
2841  // Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
2842  {
2843  -15 /*fromYearTiny*/,
2844  -10 /*toYearTiny*/,
2845  9 /*inMonth*/,
2846  7 /*onDayOfWeek*/,
2847  0 /*onDayOfMonth*/,
2848  4 /*atTimeCode*/,
2849  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2850  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2851  '-' /*letter*/,
2852  },
2853  // Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
2854  {
2855  -9 /*fromYearTiny*/,
2856  7 /*toYearTiny*/,
2857  4 /*inMonth*/,
2858  0 /*onDayOfWeek*/,
2859  1 /*onDayOfMonth*/,
2860  12 /*atTimeCode*/,
2861  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2862  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2863  '-' /*letter*/,
2864  },
2865  // Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
2866  {
2867  -9 /*fromYearTiny*/,
2868  7 /*toYearTiny*/,
2869  10 /*inMonth*/,
2870  0 /*onDayOfWeek*/,
2871  1 /*onDayOfMonth*/,
2872  12 /*atTimeCode*/,
2873  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2874  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2875  '-' /*letter*/,
2876  },
2877 
2878 };
2879 
2880 
2881 
2882 const basic::ZonePolicy kPolicyIraq ACE_TIME_PROGMEM = {
2883  kZoneRulesIraq /*rules*/,
2884  nullptr /*letters*/,
2885  3 /*numRules*/,
2886  0 /*numLetters*/,
2887 };
2888 
2889 //---------------------------------------------------------------------------
2890 // Policy name: Japan
2891 // Rules: 1
2892 // Memory (8-bit): 15
2893 // Memory (32-bit): 24
2894 //---------------------------------------------------------------------------
2895 
2896 static const basic::ZoneRule kZoneRulesJapan[] ACE_TIME_PROGMEM = {
2897  // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
2898  {
2899  -52 /*fromYearTiny*/,
2900  -49 /*toYearTiny*/,
2901  9 /*inMonth*/,
2902  6 /*onDayOfWeek*/,
2903  8 /*onDayOfMonth*/,
2904  100 /*atTimeCode*/,
2905  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2906  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2907  'S' /*letter*/,
2908  },
2909 
2910 };
2911 
2912 
2913 
2914 const basic::ZonePolicy kPolicyJapan ACE_TIME_PROGMEM = {
2915  kZoneRulesJapan /*rules*/,
2916  nullptr /*letters*/,
2917  1 /*numRules*/,
2918  0 /*numLetters*/,
2919 };
2920 
2921 //---------------------------------------------------------------------------
2922 // Policy name: Jordan
2923 // Rules: 4
2924 // Memory (8-bit): 42
2925 // Memory (32-bit): 60
2926 //---------------------------------------------------------------------------
2927 
2928 static const basic::ZoneRule kZoneRulesJordan[] ACE_TIME_PROGMEM = {
2929  // Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
2930  {
2931  -5 /*fromYearTiny*/,
2932  -2 /*toYearTiny*/,
2933  9 /*inMonth*/,
2934  5 /*onDayOfWeek*/,
2935  15 /*onDayOfMonth*/,
2936  0 /*atTimeCode*/,
2937  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2938  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2939  '-' /*letter*/,
2940  },
2941  // Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
2942  {
2943  -1 /*fromYearTiny*/,
2944  -1 /*toYearTiny*/,
2945  7 /*inMonth*/,
2946  0 /*onDayOfWeek*/,
2947  1 /*onDayOfMonth*/,
2948  0 /*atTimeCode*/,
2949  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2950  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2951  'S' /*letter*/,
2952  },
2953  // Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
2954  {
2955  -1 /*fromYearTiny*/,
2956  2 /*toYearTiny*/,
2957  9 /*inMonth*/,
2958  5 /*onDayOfWeek*/,
2959  0 /*onDayOfMonth*/,
2960  0 /*atTimeCode*/,
2961  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2962  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2963  '-' /*letter*/,
2964  },
2965  // Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
2966  {
2967  0 /*fromYearTiny*/,
2968  1 /*toYearTiny*/,
2969  3 /*inMonth*/,
2970  4 /*onDayOfWeek*/,
2971  0 /*onDayOfMonth*/,
2972  0 /*atTimeCode*/,
2973  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2974  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2975  'S' /*letter*/,
2976  },
2977 
2978 };
2979 
2980 
2981 
2982 const basic::ZonePolicy kPolicyJordan ACE_TIME_PROGMEM = {
2983  kZoneRulesJordan /*rules*/,
2984  nullptr /*letters*/,
2985  4 /*numRules*/,
2986  0 /*numLetters*/,
2987 };
2988 
2989 //---------------------------------------------------------------------------
2990 // Policy name: LH
2991 // Rules: 9
2992 // Memory (8-bit): 87
2993 // Memory (32-bit): 120
2994 //---------------------------------------------------------------------------
2995 
2996 static const basic::ZoneRule kZoneRulesLH[] ACE_TIME_PROGMEM = {
2997  // Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
2998  {
2999  -13 /*fromYearTiny*/,
3000  -1 /*toYearTiny*/,
3001  10 /*inMonth*/,
3002  7 /*onDayOfWeek*/,
3003  0 /*onDayOfMonth*/,
3004  8 /*atTimeCode*/,
3005  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3006  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3007  '-' /*letter*/,
3008  },
3009  // Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
3010  {
3011  -10 /*fromYearTiny*/,
3012  -5 /*toYearTiny*/,
3013  3 /*inMonth*/,
3014  7 /*onDayOfWeek*/,
3015  1 /*onDayOfMonth*/,
3016  8 /*atTimeCode*/,
3017  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3018  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3019  '-' /*letter*/,
3020  },
3021  // Rule LH 1996 2005 - Mar lastSun 2:00 0 -
3022  {
3023  -4 /*fromYearTiny*/,
3024  5 /*toYearTiny*/,
3025  3 /*inMonth*/,
3026  7 /*onDayOfWeek*/,
3027  0 /*onDayOfMonth*/,
3028  8 /*atTimeCode*/,
3029  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3030  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3031  '-' /*letter*/,
3032  },
3033  // Rule LH 2000 only - Aug lastSun 2:00 0:30 -
3034  {
3035  0 /*fromYearTiny*/,
3036  0 /*toYearTiny*/,
3037  8 /*inMonth*/,
3038  7 /*onDayOfWeek*/,
3039  0 /*onDayOfMonth*/,
3040  8 /*atTimeCode*/,
3041  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3042  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3043  '-' /*letter*/,
3044  },
3045  // Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
3046  {
3047  1 /*fromYearTiny*/,
3048  7 /*toYearTiny*/,
3049  10 /*inMonth*/,
3050  7 /*onDayOfWeek*/,
3051  0 /*onDayOfMonth*/,
3052  8 /*atTimeCode*/,
3053  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3054  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3055  '-' /*letter*/,
3056  },
3057  // Rule LH 2006 only - Apr Sun>=1 2:00 0 -
3058  {
3059  6 /*fromYearTiny*/,
3060  6 /*toYearTiny*/,
3061  4 /*inMonth*/,
3062  7 /*onDayOfWeek*/,
3063  1 /*onDayOfMonth*/,
3064  8 /*atTimeCode*/,
3065  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3066  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3067  '-' /*letter*/,
3068  },
3069  // Rule LH 2007 only - Mar lastSun 2:00 0 -
3070  {
3071  7 /*fromYearTiny*/,
3072  7 /*toYearTiny*/,
3073  3 /*inMonth*/,
3074  7 /*onDayOfWeek*/,
3075  0 /*onDayOfMonth*/,
3076  8 /*atTimeCode*/,
3077  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3078  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3079  '-' /*letter*/,
3080  },
3081  // Rule LH 2008 max - Apr Sun>=1 2:00 0 -
3082  {
3083  8 /*fromYearTiny*/,
3084  126 /*toYearTiny*/,
3085  4 /*inMonth*/,
3086  7 /*onDayOfWeek*/,
3087  1 /*onDayOfMonth*/,
3088  8 /*atTimeCode*/,
3089  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3090  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3091  '-' /*letter*/,
3092  },
3093  // Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
3094  {
3095  8 /*fromYearTiny*/,
3096  126 /*toYearTiny*/,
3097  10 /*inMonth*/,
3098  7 /*onDayOfWeek*/,
3099  1 /*onDayOfMonth*/,
3100  8 /*atTimeCode*/,
3101  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3102  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3103  '-' /*letter*/,
3104  },
3105 
3106 };
3107 
3108 
3109 
3110 const basic::ZonePolicy kPolicyLH ACE_TIME_PROGMEM = {
3111  kZoneRulesLH /*rules*/,
3112  nullptr /*letters*/,
3113  9 /*numRules*/,
3114  0 /*numLetters*/,
3115 };
3116 
3117 //---------------------------------------------------------------------------
3118 // Policy name: Lebanon
3119 // Rules: 3
3120 // Memory (8-bit): 33
3121 // Memory (32-bit): 48
3122 //---------------------------------------------------------------------------
3123 
3124 static const basic::ZoneRule kZoneRulesLebanon[] ACE_TIME_PROGMEM = {
3125  // Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
3126  {
3127  -7 /*fromYearTiny*/,
3128  126 /*toYearTiny*/,
3129  3 /*inMonth*/,
3130  7 /*onDayOfWeek*/,
3131  0 /*onDayOfMonth*/,
3132  0 /*atTimeCode*/,
3133  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3134  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3135  'S' /*letter*/,
3136  },
3137  // Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
3138  {
3139  -7 /*fromYearTiny*/,
3140  -2 /*toYearTiny*/,
3141  9 /*inMonth*/,
3142  7 /*onDayOfWeek*/,
3143  0 /*onDayOfMonth*/,
3144  0 /*atTimeCode*/,
3145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3146  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3147  '-' /*letter*/,
3148  },
3149  // Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
3150  {
3151  -1 /*fromYearTiny*/,
3152  126 /*toYearTiny*/,
3153  10 /*inMonth*/,
3154  7 /*onDayOfWeek*/,
3155  0 /*onDayOfMonth*/,
3156  0 /*atTimeCode*/,
3157  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3158  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3159  '-' /*letter*/,
3160  },
3161 
3162 };
3163 
3164 
3165 
3166 const basic::ZonePolicy kPolicyLebanon ACE_TIME_PROGMEM = {
3167  kZoneRulesLebanon /*rules*/,
3168  nullptr /*letters*/,
3169  3 /*numRules*/,
3170  0 /*numLetters*/,
3171 };
3172 
3173 //---------------------------------------------------------------------------
3174 // Policy name: Macau
3175 // Rules: 1
3176 // Memory (8-bit): 15
3177 // Memory (32-bit): 24
3178 //---------------------------------------------------------------------------
3179 
3180 static const basic::ZoneRule kZoneRulesMacau[] ACE_TIME_PROGMEM = {
3181  // Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
3182  {
3183  -21 /*fromYearTiny*/,
3184  -21 /*toYearTiny*/,
3185  10 /*inMonth*/,
3186  7 /*onDayOfWeek*/,
3187  16 /*onDayOfMonth*/,
3188  14 /*atTimeCode*/,
3189  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3190  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3191  'S' /*letter*/,
3192  },
3193 
3194 };
3195 
3196 
3197 
3198 const basic::ZonePolicy kPolicyMacau ACE_TIME_PROGMEM = {
3199  kZoneRulesMacau /*rules*/,
3200  nullptr /*letters*/,
3201  1 /*numRules*/,
3202  0 /*numLetters*/,
3203 };
3204 
3205 //---------------------------------------------------------------------------
3206 // Policy name: Mauritius
3207 // Rules: 3
3208 // Memory (8-bit): 33
3209 // Memory (32-bit): 48
3210 //---------------------------------------------------------------------------
3211 
3212 static const basic::ZoneRule kZoneRulesMauritius[] ACE_TIME_PROGMEM = {
3213  // Rule Mauritius 1983 only - Mar 21 0:00 0 -
3214  {
3215  -17 /*fromYearTiny*/,
3216  -17 /*toYearTiny*/,
3217  3 /*inMonth*/,
3218  0 /*onDayOfWeek*/,
3219  21 /*onDayOfMonth*/,
3220  0 /*atTimeCode*/,
3221  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3222  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3223  '-' /*letter*/,
3224  },
3225  // Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
3226  {
3227  8 /*fromYearTiny*/,
3228  8 /*toYearTiny*/,
3229  10 /*inMonth*/,
3230  7 /*onDayOfWeek*/,
3231  0 /*onDayOfMonth*/,
3232  8 /*atTimeCode*/,
3233  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3234  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3235  '-' /*letter*/,
3236  },
3237  // Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
3238  {
3239  9 /*fromYearTiny*/,
3240  9 /*toYearTiny*/,
3241  3 /*inMonth*/,
3242  7 /*onDayOfWeek*/,
3243  0 /*onDayOfMonth*/,
3244  8 /*atTimeCode*/,
3245  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3246  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3247  '-' /*letter*/,
3248  },
3249 
3250 };
3251 
3252 
3253 
3254 const basic::ZonePolicy kPolicyMauritius ACE_TIME_PROGMEM = {
3255  kZoneRulesMauritius /*rules*/,
3256  nullptr /*letters*/,
3257  3 /*numRules*/,
3258  0 /*numLetters*/,
3259 };
3260 
3261 //---------------------------------------------------------------------------
3262 // Policy name: Mexico
3263 // Rules: 7
3264 // Memory (8-bit): 69
3265 // Memory (32-bit): 96
3266 //---------------------------------------------------------------------------
3267 
3268 static const basic::ZoneRule kZoneRulesMexico[] ACE_TIME_PROGMEM = {
3269  // Rule Mexico 1950 only - Jul 30 0:00 0 S
3270  {
3271  -50 /*fromYearTiny*/,
3272  -50 /*toYearTiny*/,
3273  7 /*inMonth*/,
3274  0 /*onDayOfWeek*/,
3275  30 /*onDayOfMonth*/,
3276  0 /*atTimeCode*/,
3277  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3279  'S' /*letter*/,
3280  },
3281  // Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
3282  {
3283  -4 /*fromYearTiny*/,
3284  0 /*toYearTiny*/,
3285  4 /*inMonth*/,
3286  7 /*onDayOfWeek*/,
3287  1 /*onDayOfMonth*/,
3288  8 /*atTimeCode*/,
3289  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3291  'D' /*letter*/,
3292  },
3293  // Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
3294  {
3295  -4 /*fromYearTiny*/,
3296  0 /*toYearTiny*/,
3297  10 /*inMonth*/,
3298  7 /*onDayOfWeek*/,
3299  0 /*onDayOfMonth*/,
3300  8 /*atTimeCode*/,
3301  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3302  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3303  'S' /*letter*/,
3304  },
3305  // Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
3306  {
3307  1 /*fromYearTiny*/,
3308  1 /*toYearTiny*/,
3309  5 /*inMonth*/,
3310  7 /*onDayOfWeek*/,
3311  1 /*onDayOfMonth*/,
3312  8 /*atTimeCode*/,
3313  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3314  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3315  'D' /*letter*/,
3316  },
3317  // Rule Mexico 2001 only - Sep lastSun 2:00 0 S
3318  {
3319  1 /*fromYearTiny*/,
3320  1 /*toYearTiny*/,
3321  9 /*inMonth*/,
3322  7 /*onDayOfWeek*/,
3323  0 /*onDayOfMonth*/,
3324  8 /*atTimeCode*/,
3325  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3326  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3327  'S' /*letter*/,
3328  },
3329  // Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
3330  {
3331  2 /*fromYearTiny*/,
3332  126 /*toYearTiny*/,
3333  4 /*inMonth*/,
3334  7 /*onDayOfWeek*/,
3335  1 /*onDayOfMonth*/,
3336  8 /*atTimeCode*/,
3337  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3338  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3339  'D' /*letter*/,
3340  },
3341  // Rule Mexico 2002 max - Oct lastSun 2:00 0 S
3342  {
3343  2 /*fromYearTiny*/,
3344  126 /*toYearTiny*/,
3345  10 /*inMonth*/,
3346  7 /*onDayOfWeek*/,
3347  0 /*onDayOfMonth*/,
3348  8 /*atTimeCode*/,
3349  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3350  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3351  'S' /*letter*/,
3352  },
3353 
3354 };
3355 
3356 
3357 
3358 const basic::ZonePolicy kPolicyMexico ACE_TIME_PROGMEM = {
3359  kZoneRulesMexico /*rules*/,
3360  nullptr /*letters*/,
3361  7 /*numRules*/,
3362  0 /*numLetters*/,
3363 };
3364 
3365 //---------------------------------------------------------------------------
3366 // Policy name: Moldova
3367 // Rules: 2
3368 // Memory (8-bit): 24
3369 // Memory (32-bit): 36
3370 //---------------------------------------------------------------------------
3371 
3372 static const basic::ZoneRule kZoneRulesMoldova[] ACE_TIME_PROGMEM = {
3373  // Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
3374  {
3375  -3 /*fromYearTiny*/,
3376  126 /*toYearTiny*/,
3377  3 /*inMonth*/,
3378  7 /*onDayOfWeek*/,
3379  0 /*onDayOfMonth*/,
3380  8 /*atTimeCode*/,
3381  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3382  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3383  'S' /*letter*/,
3384  },
3385  // Rule Moldova 1997 max - Oct lastSun 3:00 0 -
3386  {
3387  -3 /*fromYearTiny*/,
3388  126 /*toYearTiny*/,
3389  10 /*inMonth*/,
3390  7 /*onDayOfWeek*/,
3391  0 /*onDayOfMonth*/,
3392  12 /*atTimeCode*/,
3393  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3395  '-' /*letter*/,
3396  },
3397 
3398 };
3399 
3400 
3401 
3402 const basic::ZonePolicy kPolicyMoldova ACE_TIME_PROGMEM = {
3403  kZoneRulesMoldova /*rules*/,
3404  nullptr /*letters*/,
3405  2 /*numRules*/,
3406  0 /*numLetters*/,
3407 };
3408 
3409 //---------------------------------------------------------------------------
3410 // Policy name: Moncton
3411 // Rules: 3
3412 // Memory (8-bit): 33
3413 // Memory (32-bit): 48
3414 //---------------------------------------------------------------------------
3415 
3416 static const basic::ZoneRule kZoneRulesMoncton[] ACE_TIME_PROGMEM = {
3417  // Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
3418  {
3419  -43 /*fromYearTiny*/,
3420  -28 /*toYearTiny*/,
3421  10 /*inMonth*/,
3422  7 /*onDayOfWeek*/,
3423  0 /*onDayOfMonth*/,
3424  8 /*atTimeCode*/,
3425  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3426  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3427  'S' /*letter*/,
3428  },
3429  // Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
3430  {
3431  -7 /*fromYearTiny*/,
3432  6 /*toYearTiny*/,
3433  4 /*inMonth*/,
3434  7 /*onDayOfWeek*/,
3435  1 /*onDayOfMonth*/,
3436  0 /*atTimeCode*/,
3437  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3438  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3439  'D' /*letter*/,
3440  },
3441  // Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
3442  {
3443  -7 /*fromYearTiny*/,
3444  6 /*toYearTiny*/,
3445  10 /*inMonth*/,
3446  7 /*onDayOfWeek*/,
3447  0 /*onDayOfMonth*/,
3448  0 /*atTimeCode*/,
3449  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3451  'S' /*letter*/,
3452  },
3453 
3454 };
3455 
3456 
3457 
3458 const basic::ZonePolicy kPolicyMoncton ACE_TIME_PROGMEM = {
3459  kZoneRulesMoncton /*rules*/,
3460  nullptr /*letters*/,
3461  3 /*numRules*/,
3462  0 /*numLetters*/,
3463 };
3464 
3465 //---------------------------------------------------------------------------
3466 // Policy name: Mongol
3467 // Rules: 6
3468 // Memory (8-bit): 60
3469 // Memory (32-bit): 84
3470 //---------------------------------------------------------------------------
3471 
3472 static const basic::ZoneRule kZoneRulesMongol[] ACE_TIME_PROGMEM = {
3473  // Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
3474  {
3475  -16 /*fromYearTiny*/,
3476  -2 /*toYearTiny*/,
3477  9 /*inMonth*/,
3478  7 /*onDayOfWeek*/,
3479  0 /*onDayOfMonth*/,
3480  0 /*atTimeCode*/,
3481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3482  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3483  '-' /*letter*/,
3484  },
3485  // Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
3486  {
3487  1 /*fromYearTiny*/,
3488  1 /*toYearTiny*/,
3489  4 /*inMonth*/,
3490  6 /*onDayOfWeek*/,
3491  0 /*onDayOfMonth*/,
3492  8 /*atTimeCode*/,
3493  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3494  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3495  '-' /*letter*/,
3496  },
3497  // Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
3498  {
3499  1 /*fromYearTiny*/,
3500  6 /*toYearTiny*/,
3501  9 /*inMonth*/,
3502  6 /*onDayOfWeek*/,
3503  0 /*onDayOfMonth*/,
3504  8 /*atTimeCode*/,
3505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3506  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3507  '-' /*letter*/,
3508  },
3509  // Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
3510  {
3511  2 /*fromYearTiny*/,
3512  6 /*toYearTiny*/,
3513  3 /*inMonth*/,
3514  6 /*onDayOfWeek*/,
3515  0 /*onDayOfMonth*/,
3516  8 /*atTimeCode*/,
3517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3518  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3519  '-' /*letter*/,
3520  },
3521  // Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
3522  {
3523  15 /*fromYearTiny*/,
3524  16 /*toYearTiny*/,
3525  3 /*inMonth*/,
3526  6 /*onDayOfWeek*/,
3527  0 /*onDayOfMonth*/,
3528  8 /*atTimeCode*/,
3529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3530  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3531  '-' /*letter*/,
3532  },
3533  // Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
3534  {
3535  15 /*fromYearTiny*/,
3536  16 /*toYearTiny*/,
3537  9 /*inMonth*/,
3538  6 /*onDayOfWeek*/,
3539  0 /*onDayOfMonth*/,
3540  0 /*atTimeCode*/,
3541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3542  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3543  '-' /*letter*/,
3544  },
3545 
3546 };
3547 
3548 
3549 
3550 const basic::ZonePolicy kPolicyMongol ACE_TIME_PROGMEM = {
3551  kZoneRulesMongol /*rules*/,
3552  nullptr /*letters*/,
3553  6 /*numRules*/,
3554  0 /*numLetters*/,
3555 };
3556 
3557 //---------------------------------------------------------------------------
3558 // Policy name: NC
3559 // Rules: 1
3560 // Memory (8-bit): 15
3561 // Memory (32-bit): 24
3562 //---------------------------------------------------------------------------
3563 
3564 static const basic::ZoneRule kZoneRulesNC[] ACE_TIME_PROGMEM = {
3565  // Rule NC 1997 only - Mar 2 2:00s 0 -
3566  {
3567  -3 /*fromYearTiny*/,
3568  -3 /*toYearTiny*/,
3569  3 /*inMonth*/,
3570  0 /*onDayOfWeek*/,
3571  2 /*onDayOfMonth*/,
3572  8 /*atTimeCode*/,
3573  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3574  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3575  '-' /*letter*/,
3576  },
3577 
3578 };
3579 
3580 
3581 
3582 const basic::ZonePolicy kPolicyNC ACE_TIME_PROGMEM = {
3583  kZoneRulesNC /*rules*/,
3584  nullptr /*letters*/,
3585  1 /*numRules*/,
3586  0 /*numLetters*/,
3587 };
3588 
3589 //---------------------------------------------------------------------------
3590 // Policy name: NZ
3591 // Rules: 5
3592 // Memory (8-bit): 51
3593 // Memory (32-bit): 72
3594 //---------------------------------------------------------------------------
3595 
3596 static const basic::ZoneRule kZoneRulesNZ[] ACE_TIME_PROGMEM = {
3597  // Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
3598  {
3599  -11 /*fromYearTiny*/,
3600  -11 /*toYearTiny*/,
3601  10 /*inMonth*/,
3602  7 /*onDayOfWeek*/,
3603  8 /*onDayOfMonth*/,
3604  8 /*atTimeCode*/,
3605  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3606  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3607  'D' /*letter*/,
3608  },
3609  // Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
3610  {
3611  -10 /*fromYearTiny*/,
3612  6 /*toYearTiny*/,
3613  10 /*inMonth*/,
3614  7 /*onDayOfWeek*/,
3615  1 /*onDayOfMonth*/,
3616  8 /*atTimeCode*/,
3617  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3618  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3619  'D' /*letter*/,
3620  },
3621  // Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
3622  {
3623  -10 /*fromYearTiny*/,
3624  7 /*toYearTiny*/,
3625  3 /*inMonth*/,
3626  7 /*onDayOfWeek*/,
3627  15 /*onDayOfMonth*/,
3628  8 /*atTimeCode*/,
3629  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3630  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3631  'S' /*letter*/,
3632  },
3633  // Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
3634  {
3635  7 /*fromYearTiny*/,
3636  126 /*toYearTiny*/,
3637  9 /*inMonth*/,
3638  7 /*onDayOfWeek*/,
3639  0 /*onDayOfMonth*/,
3640  8 /*atTimeCode*/,
3641  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3642  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3643  'D' /*letter*/,
3644  },
3645  // Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
3646  {
3647  8 /*fromYearTiny*/,
3648  126 /*toYearTiny*/,
3649  4 /*inMonth*/,
3650  7 /*onDayOfWeek*/,
3651  1 /*onDayOfMonth*/,
3652  8 /*atTimeCode*/,
3653  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3654  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3655  'S' /*letter*/,
3656  },
3657 
3658 };
3659 
3660 
3661 
3662 const basic::ZonePolicy kPolicyNZ ACE_TIME_PROGMEM = {
3663  kZoneRulesNZ /*rules*/,
3664  nullptr /*letters*/,
3665  5 /*numRules*/,
3666  0 /*numLetters*/,
3667 };
3668 
3669 //---------------------------------------------------------------------------
3670 // Policy name: Nic
3671 // Rules: 5
3672 // Memory (8-bit): 51
3673 // Memory (32-bit): 72
3674 //---------------------------------------------------------------------------
3675 
3676 static const basic::ZoneRule kZoneRulesNic[] ACE_TIME_PROGMEM = {
3677  // Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
3678  {
3679  -21 /*fromYearTiny*/,
3680  -20 /*toYearTiny*/,
3681  6 /*inMonth*/,
3682  1 /*onDayOfWeek*/,
3683  23 /*onDayOfMonth*/,
3684  0 /*atTimeCode*/,
3685  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3686  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3687  'S' /*letter*/,
3688  },
3689  // Rule Nic 2005 only - Apr 10 0:00 1:00 D
3690  {
3691  5 /*fromYearTiny*/,
3692  5 /*toYearTiny*/,
3693  4 /*inMonth*/,
3694  0 /*onDayOfWeek*/,
3695  10 /*onDayOfMonth*/,
3696  0 /*atTimeCode*/,
3697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3698  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3699  'D' /*letter*/,
3700  },
3701  // Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
3702  {
3703  5 /*fromYearTiny*/,
3704  5 /*toYearTiny*/,
3705  10 /*inMonth*/,
3706  7 /*onDayOfWeek*/,
3707  1 /*onDayOfMonth*/,
3708  0 /*atTimeCode*/,
3709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3710  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3711  'S' /*letter*/,
3712  },
3713  // Rule Nic 2006 only - Apr 30 2:00 1:00 D
3714  {
3715  6 /*fromYearTiny*/,
3716  6 /*toYearTiny*/,
3717  4 /*inMonth*/,
3718  0 /*onDayOfWeek*/,
3719  30 /*onDayOfMonth*/,
3720  8 /*atTimeCode*/,
3721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3723  'D' /*letter*/,
3724  },
3725  // Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
3726  {
3727  6 /*fromYearTiny*/,
3728  6 /*toYearTiny*/,
3729  10 /*inMonth*/,
3730  7 /*onDayOfWeek*/,
3731  1 /*onDayOfMonth*/,
3732  4 /*atTimeCode*/,
3733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3735  'S' /*letter*/,
3736  },
3737 
3738 };
3739 
3740 
3741 
3742 const basic::ZonePolicy kPolicyNic ACE_TIME_PROGMEM = {
3743  kZoneRulesNic /*rules*/,
3744  nullptr /*letters*/,
3745  5 /*numRules*/,
3746  0 /*numLetters*/,
3747 };
3748 
3749 //---------------------------------------------------------------------------
3750 // Policy name: PRC
3751 // Rules: 1
3752 // Memory (8-bit): 15
3753 // Memory (32-bit): 24
3754 //---------------------------------------------------------------------------
3755 
3756 static const basic::ZoneRule kZoneRulesPRC[] ACE_TIME_PROGMEM = {
3757  // Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
3758  {
3759  -14 /*fromYearTiny*/,
3760  -9 /*toYearTiny*/,
3761  9 /*inMonth*/,
3762  7 /*onDayOfWeek*/,
3763  11 /*onDayOfMonth*/,
3764  8 /*atTimeCode*/,
3765  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3766  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3767  'S' /*letter*/,
3768  },
3769 
3770 };
3771 
3772 
3773 
3774 const basic::ZonePolicy kPolicyPRC ACE_TIME_PROGMEM = {
3775  kZoneRulesPRC /*rules*/,
3776  nullptr /*letters*/,
3777  1 /*numRules*/,
3778  0 /*numLetters*/,
3779 };
3780 
3781 //---------------------------------------------------------------------------
3782 // Policy name: Pakistan
3783 // Rules: 6
3784 // Memory (8-bit): 60
3785 // Memory (32-bit): 84
3786 //---------------------------------------------------------------------------
3787 
3788 static const basic::ZoneRule kZoneRulesPakistan[] ACE_TIME_PROGMEM = {
3789  // Anchor: Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
3790  {
3791  -127 /*fromYearTiny*/,
3792  -127 /*toYearTiny*/,
3793  1 /*inMonth*/,
3794  0 /*onDayOfWeek*/,
3795  1 /*onDayOfMonth*/,
3796  0 /*atTimeCode*/,
3797  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3798  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3799  '-' /*letter*/,
3800  },
3801  // Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
3802  {
3803  2 /*fromYearTiny*/,
3804  2 /*toYearTiny*/,
3805  4 /*inMonth*/,
3806  7 /*onDayOfWeek*/,
3807  2 /*onDayOfMonth*/,
3808  0 /*atTimeCode*/,
3809  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3810  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3811  'S' /*letter*/,
3812  },
3813  // Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
3814  {
3815  2 /*fromYearTiny*/,
3816  2 /*toYearTiny*/,
3817  10 /*inMonth*/,
3818  7 /*onDayOfWeek*/,
3819  2 /*onDayOfMonth*/,
3820  0 /*atTimeCode*/,
3821  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3822  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3823  '-' /*letter*/,
3824  },
3825  // Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
3826  {
3827  8 /*fromYearTiny*/,
3828  8 /*toYearTiny*/,
3829  6 /*inMonth*/,
3830  0 /*onDayOfWeek*/,
3831  1 /*onDayOfMonth*/,
3832  0 /*atTimeCode*/,
3833  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3834  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3835  'S' /*letter*/,
3836  },
3837  // Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
3838  {
3839  8 /*fromYearTiny*/,
3840  9 /*toYearTiny*/,
3841  11 /*inMonth*/,
3842  0 /*onDayOfWeek*/,
3843  1 /*onDayOfMonth*/,
3844  0 /*atTimeCode*/,
3845  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3846  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3847  '-' /*letter*/,
3848  },
3849  // Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
3850  {
3851  9 /*fromYearTiny*/,
3852  9 /*toYearTiny*/,
3853  4 /*inMonth*/,
3854  0 /*onDayOfWeek*/,
3855  15 /*onDayOfMonth*/,
3856  0 /*atTimeCode*/,
3857  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3858  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3859  'S' /*letter*/,
3860  },
3861 
3862 };
3863 
3864 
3865 
3866 const basic::ZonePolicy kPolicyPakistan ACE_TIME_PROGMEM = {
3867  kZoneRulesPakistan /*rules*/,
3868  nullptr /*letters*/,
3869  6 /*numRules*/,
3870  0 /*numLetters*/,
3871 };
3872 
3873 //---------------------------------------------------------------------------
3874 // Policy name: Para
3875 // Rules: 10
3876 // Memory (8-bit): 96
3877 // Memory (32-bit): 132
3878 //---------------------------------------------------------------------------
3879 
3880 static const basic::ZoneRule kZoneRulesPara[] ACE_TIME_PROGMEM = {
3881  // Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
3882  {
3883  -4 /*fromYearTiny*/,
3884  1 /*toYearTiny*/,
3885  10 /*inMonth*/,
3886  7 /*onDayOfWeek*/,
3887  1 /*onDayOfMonth*/,
3888  0 /*atTimeCode*/,
3889  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3890  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3891  '-' /*letter*/,
3892  },
3893  // Rule Para 1997 only - Feb lastSun 0:00 0 -
3894  {
3895  -3 /*fromYearTiny*/,
3896  -3 /*toYearTiny*/,
3897  2 /*inMonth*/,
3898  7 /*onDayOfWeek*/,
3899  0 /*onDayOfMonth*/,
3900  0 /*atTimeCode*/,
3901  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3902  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3903  '-' /*letter*/,
3904  },
3905  // Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
3906  {
3907  -2 /*fromYearTiny*/,
3908  1 /*toYearTiny*/,
3909  3 /*inMonth*/,
3910  7 /*onDayOfWeek*/,
3911  1 /*onDayOfMonth*/,
3912  0 /*atTimeCode*/,
3913  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3914  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3915  '-' /*letter*/,
3916  },
3917  // Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
3918  {
3919  2 /*fromYearTiny*/,
3920  4 /*toYearTiny*/,
3921  4 /*inMonth*/,
3922  7 /*onDayOfWeek*/,
3923  1 /*onDayOfMonth*/,
3924  0 /*atTimeCode*/,
3925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3926  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3927  '-' /*letter*/,
3928  },
3929  // Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
3930  {
3931  2 /*fromYearTiny*/,
3932  3 /*toYearTiny*/,
3933  9 /*inMonth*/,
3934  7 /*onDayOfWeek*/,
3935  1 /*onDayOfMonth*/,
3936  0 /*atTimeCode*/,
3937  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3938  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3939  '-' /*letter*/,
3940  },
3941  // Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
3942  {
3943  4 /*fromYearTiny*/,
3944  9 /*toYearTiny*/,
3945  10 /*inMonth*/,
3946  7 /*onDayOfWeek*/,
3947  15 /*onDayOfMonth*/,
3948  0 /*atTimeCode*/,
3949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3950  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3951  '-' /*letter*/,
3952  },
3953  // Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
3954  {
3955  5 /*fromYearTiny*/,
3956  9 /*toYearTiny*/,
3957  3 /*inMonth*/,
3958  7 /*onDayOfWeek*/,
3959  8 /*onDayOfMonth*/,
3960  0 /*atTimeCode*/,
3961  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3962  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3963  '-' /*letter*/,
3964  },
3965  // Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
3966  {
3967  10 /*fromYearTiny*/,
3968  126 /*toYearTiny*/,
3969  10 /*inMonth*/,
3970  7 /*onDayOfWeek*/,
3971  1 /*onDayOfMonth*/,
3972  0 /*atTimeCode*/,
3973  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3974  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3975  '-' /*letter*/,
3976  },
3977  // Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
3978  {
3979  10 /*fromYearTiny*/,
3980  12 /*toYearTiny*/,
3981  4 /*inMonth*/,
3982  7 /*onDayOfWeek*/,
3983  8 /*onDayOfMonth*/,
3984  0 /*atTimeCode*/,
3985  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3986  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3987  '-' /*letter*/,
3988  },
3989  // Rule Para 2013 max - Mar Sun>=22 0:00 0 -
3990  {
3991  13 /*fromYearTiny*/,
3992  126 /*toYearTiny*/,
3993  3 /*inMonth*/,
3994  7 /*onDayOfWeek*/,
3995  22 /*onDayOfMonth*/,
3996  0 /*atTimeCode*/,
3997  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3998  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3999  '-' /*letter*/,
4000  },
4001 
4002 };
4003 
4004 
4005 
4006 const basic::ZonePolicy kPolicyPara ACE_TIME_PROGMEM = {
4007  kZoneRulesPara /*rules*/,
4008  nullptr /*letters*/,
4009  10 /*numRules*/,
4010  0 /*numLetters*/,
4011 };
4012 
4013 //---------------------------------------------------------------------------
4014 // Policy name: Peru
4015 // Rules: 1
4016 // Memory (8-bit): 15
4017 // Memory (32-bit): 24
4018 //---------------------------------------------------------------------------
4019 
4020 static const basic::ZoneRule kZoneRulesPeru[] ACE_TIME_PROGMEM = {
4021  // Rule Peru 1994 only - Apr 1 0:00 0 -
4022  {
4023  -6 /*fromYearTiny*/,
4024  -6 /*toYearTiny*/,
4025  4 /*inMonth*/,
4026  0 /*onDayOfWeek*/,
4027  1 /*onDayOfMonth*/,
4028  0 /*atTimeCode*/,
4029  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4030  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4031  '-' /*letter*/,
4032  },
4033 
4034 };
4035 
4036 
4037 
4038 const basic::ZonePolicy kPolicyPeru ACE_TIME_PROGMEM = {
4039  kZoneRulesPeru /*rules*/,
4040  nullptr /*letters*/,
4041  1 /*numRules*/,
4042  0 /*numLetters*/,
4043 };
4044 
4045 //---------------------------------------------------------------------------
4046 // Policy name: Phil
4047 // Rules: 1
4048 // Memory (8-bit): 15
4049 // Memory (32-bit): 24
4050 //---------------------------------------------------------------------------
4051 
4052 static const basic::ZoneRule kZoneRulesPhil[] ACE_TIME_PROGMEM = {
4053  // Rule Phil 1978 only - Sep 21 0:00 0 S
4054  {
4055  -22 /*fromYearTiny*/,
4056  -22 /*toYearTiny*/,
4057  9 /*inMonth*/,
4058  0 /*onDayOfWeek*/,
4059  21 /*onDayOfMonth*/,
4060  0 /*atTimeCode*/,
4061  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4062  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4063  'S' /*letter*/,
4064  },
4065 
4066 };
4067 
4068 
4069 
4070 const basic::ZonePolicy kPolicyPhil ACE_TIME_PROGMEM = {
4071  kZoneRulesPhil /*rules*/,
4072  nullptr /*letters*/,
4073  1 /*numRules*/,
4074  0 /*numLetters*/,
4075 };
4076 
4077 //---------------------------------------------------------------------------
4078 // Policy name: ROK
4079 // Rules: 1
4080 // Memory (8-bit): 15
4081 // Memory (32-bit): 24
4082 //---------------------------------------------------------------------------
4083 
4084 static const basic::ZoneRule kZoneRulesROK[] ACE_TIME_PROGMEM = {
4085  // Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
4086  {
4087  -13 /*fromYearTiny*/,
4088  -12 /*toYearTiny*/,
4089  10 /*inMonth*/,
4090  7 /*onDayOfWeek*/,
4091  8 /*onDayOfMonth*/,
4092  12 /*atTimeCode*/,
4093  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4094  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4095  'S' /*letter*/,
4096  },
4097 
4098 };
4099 
4100 
4101 
4102 const basic::ZonePolicy kPolicyROK ACE_TIME_PROGMEM = {
4103  kZoneRulesROK /*rules*/,
4104  nullptr /*letters*/,
4105  1 /*numRules*/,
4106  0 /*numLetters*/,
4107 };
4108 
4109 //---------------------------------------------------------------------------
4110 // Policy name: RussiaAsia
4111 // Rules: 3
4112 // Memory (8-bit): 33
4113 // Memory (32-bit): 48
4114 //---------------------------------------------------------------------------
4115 
4116 static const basic::ZoneRule kZoneRulesRussiaAsia[] ACE_TIME_PROGMEM = {
4117  // Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
4118  {
4119  -16 /*fromYearTiny*/,
4120  -5 /*toYearTiny*/,
4121  9 /*inMonth*/,
4122  7 /*onDayOfWeek*/,
4123  0 /*onDayOfMonth*/,
4124  8 /*atTimeCode*/,
4125  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4126  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4127  '-' /*letter*/,
4128  },
4129  // Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
4130  {
4131  -15 /*fromYearTiny*/,
4132  10 /*toYearTiny*/,
4133  3 /*inMonth*/,
4134  7 /*onDayOfWeek*/,
4135  0 /*onDayOfMonth*/,
4136  8 /*atTimeCode*/,
4137  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4138  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4139  '-' /*letter*/,
4140  },
4141  // Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
4142  {
4143  -4 /*fromYearTiny*/,
4144  10 /*toYearTiny*/,
4145  10 /*inMonth*/,
4146  7 /*onDayOfWeek*/,
4147  0 /*onDayOfMonth*/,
4148  8 /*atTimeCode*/,
4149  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4150  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4151  '-' /*letter*/,
4152  },
4153 
4154 };
4155 
4156 
4157 
4158 const basic::ZonePolicy kPolicyRussiaAsia ACE_TIME_PROGMEM = {
4159  kZoneRulesRussiaAsia /*rules*/,
4160  nullptr /*letters*/,
4161  3 /*numRules*/,
4162  0 /*numLetters*/,
4163 };
4164 
4165 //---------------------------------------------------------------------------
4166 // Policy name: SA
4167 // Rules: 1
4168 // Memory (8-bit): 15
4169 // Memory (32-bit): 24
4170 //---------------------------------------------------------------------------
4171 
4172 static const basic::ZoneRule kZoneRulesSA[] ACE_TIME_PROGMEM = {
4173  // Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
4174  {
4175  -57 /*fromYearTiny*/,
4176  -56 /*toYearTiny*/,
4177  3 /*inMonth*/,
4178  7 /*onDayOfWeek*/,
4179  15 /*onDayOfMonth*/,
4180  8 /*atTimeCode*/,
4181  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4182  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4183  '-' /*letter*/,
4184  },
4185 
4186 };
4187 
4188 
4189 
4190 const basic::ZonePolicy kPolicySA ACE_TIME_PROGMEM = {
4191  kZoneRulesSA /*rules*/,
4192  nullptr /*letters*/,
4193  1 /*numRules*/,
4194  0 /*numLetters*/,
4195 };
4196 
4197 //---------------------------------------------------------------------------
4198 // Policy name: Salv
4199 // Rules: 1
4200 // Memory (8-bit): 15
4201 // Memory (32-bit): 24
4202 //---------------------------------------------------------------------------
4203 
4204 static const basic::ZoneRule kZoneRulesSalv[] ACE_TIME_PROGMEM = {
4205  // Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
4206  {
4207  -13 /*fromYearTiny*/,
4208  -12 /*toYearTiny*/,
4209  9 /*inMonth*/,
4210  7 /*onDayOfWeek*/,
4211  0 /*onDayOfMonth*/,
4212  0 /*atTimeCode*/,
4213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4214  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4215  'S' /*letter*/,
4216  },
4217 
4218 };
4219 
4220 
4221 
4222 const basic::ZonePolicy kPolicySalv ACE_TIME_PROGMEM = {
4223  kZoneRulesSalv /*rules*/,
4224  nullptr /*letters*/,
4225  1 /*numRules*/,
4226  0 /*numLetters*/,
4227 };
4228 
4229 //---------------------------------------------------------------------------
4230 // Policy name: Taiwan
4231 // Rules: 1
4232 // Memory (8-bit): 15
4233 // Memory (32-bit): 24
4234 //---------------------------------------------------------------------------
4235 
4236 static const basic::ZoneRule kZoneRulesTaiwan[] ACE_TIME_PROGMEM = {
4237  // Rule Taiwan 1979 only - Oct 1 0:00 0 S
4238  {
4239  -21 /*fromYearTiny*/,
4240  -21 /*toYearTiny*/,
4241  10 /*inMonth*/,
4242  0 /*onDayOfWeek*/,
4243  1 /*onDayOfMonth*/,
4244  0 /*atTimeCode*/,
4245  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4246  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4247  'S' /*letter*/,
4248  },
4249 
4250 };
4251 
4252 
4253 
4254 const basic::ZonePolicy kPolicyTaiwan ACE_TIME_PROGMEM = {
4255  kZoneRulesTaiwan /*rules*/,
4256  nullptr /*letters*/,
4257  1 /*numRules*/,
4258  0 /*numLetters*/,
4259 };
4260 
4261 //---------------------------------------------------------------------------
4262 // Policy name: Thule
4263 // Rules: 5
4264 // Memory (8-bit): 51
4265 // Memory (32-bit): 72
4266 //---------------------------------------------------------------------------
4267 
4268 static const basic::ZoneRule kZoneRulesThule[] ACE_TIME_PROGMEM = {
4269  // Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
4270  {
4271  -9 /*fromYearTiny*/,
4272  -8 /*toYearTiny*/,
4273  9 /*inMonth*/,
4274  7 /*onDayOfWeek*/,
4275  0 /*onDayOfMonth*/,
4276  8 /*atTimeCode*/,
4277  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4279  'S' /*letter*/,
4280  },
4281  // Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
4282  {
4283  -7 /*fromYearTiny*/,
4284  6 /*toYearTiny*/,
4285  4 /*inMonth*/,
4286  7 /*onDayOfWeek*/,
4287  1 /*onDayOfMonth*/,
4288  8 /*atTimeCode*/,
4289  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4291  'D' /*letter*/,
4292  },
4293  // Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
4294  {
4295  -7 /*fromYearTiny*/,
4296  6 /*toYearTiny*/,
4297  10 /*inMonth*/,
4298  7 /*onDayOfWeek*/,
4299  0 /*onDayOfMonth*/,
4300  8 /*atTimeCode*/,
4301  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4302  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4303  'S' /*letter*/,
4304  },
4305  // Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
4306  {
4307  7 /*fromYearTiny*/,
4308  126 /*toYearTiny*/,
4309  3 /*inMonth*/,
4310  7 /*onDayOfWeek*/,
4311  8 /*onDayOfMonth*/,
4312  8 /*atTimeCode*/,
4313  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4314  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4315  'D' /*letter*/,
4316  },
4317  // Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
4318  {
4319  7 /*fromYearTiny*/,
4320  126 /*toYearTiny*/,
4321  11 /*inMonth*/,
4322  7 /*onDayOfWeek*/,
4323  1 /*onDayOfMonth*/,
4324  8 /*atTimeCode*/,
4325  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4326  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4327  'S' /*letter*/,
4328  },
4329 
4330 };
4331 
4332 
4333 
4334 const basic::ZonePolicy kPolicyThule ACE_TIME_PROGMEM = {
4335  kZoneRulesThule /*rules*/,
4336  nullptr /*letters*/,
4337  5 /*numRules*/,
4338  0 /*numLetters*/,
4339 };
4340 
4341 //---------------------------------------------------------------------------
4342 // Policy name: Tonga
4343 // Rules: 7
4344 // Memory (8-bit): 69
4345 // Memory (32-bit): 96
4346 //---------------------------------------------------------------------------
4347 
4348 static const basic::ZoneRule kZoneRulesTonga[] ACE_TIME_PROGMEM = {
4349  // Anchor: Rule Tonga 2000 only - Mar 19 2:00s 0 -
4350  {
4351  -127 /*fromYearTiny*/,
4352  -127 /*toYearTiny*/,
4353  1 /*inMonth*/,
4354  0 /*onDayOfWeek*/,
4355  1 /*onDayOfMonth*/,
4356  0 /*atTimeCode*/,
4357  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4358  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4359  '-' /*letter*/,
4360  },
4361  // Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
4362  {
4363  -1 /*fromYearTiny*/,
4364  -1 /*toYearTiny*/,
4365  10 /*inMonth*/,
4366  0 /*onDayOfWeek*/,
4367  7 /*onDayOfMonth*/,
4368  8 /*atTimeCode*/,
4369  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4371  '-' /*letter*/,
4372  },
4373  // Rule Tonga 2000 only - Mar 19 2:00s 0 -
4374  {
4375  0 /*fromYearTiny*/,
4376  0 /*toYearTiny*/,
4377  3 /*inMonth*/,
4378  0 /*onDayOfWeek*/,
4379  19 /*onDayOfMonth*/,
4380  8 /*atTimeCode*/,
4381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4383  '-' /*letter*/,
4384  },
4385  // Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
4386  {
4387  0 /*fromYearTiny*/,
4388  1 /*toYearTiny*/,
4389  11 /*inMonth*/,
4390  7 /*onDayOfWeek*/,
4391  1 /*onDayOfMonth*/,
4392  8 /*atTimeCode*/,
4393  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4394  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4395  '-' /*letter*/,
4396  },
4397  // Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
4398  {
4399  1 /*fromYearTiny*/,
4400  2 /*toYearTiny*/,
4401  1 /*inMonth*/,
4402  7 /*onDayOfWeek*/,
4403  0 /*onDayOfMonth*/,
4404  8 /*atTimeCode*/,
4405  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4407  '-' /*letter*/,
4408  },
4409  // Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
4410  {
4411  16 /*fromYearTiny*/,
4412  16 /*toYearTiny*/,
4413  11 /*inMonth*/,
4414  7 /*onDayOfWeek*/,
4415  1 /*onDayOfMonth*/,
4416  8 /*atTimeCode*/,
4417  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4418  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4419  '-' /*letter*/,
4420  },
4421  // Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
4422  {
4423  17 /*fromYearTiny*/,
4424  17 /*toYearTiny*/,
4425  1 /*inMonth*/,
4426  7 /*onDayOfWeek*/,
4427  15 /*onDayOfMonth*/,
4428  12 /*atTimeCode*/,
4429  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4430  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4431  '-' /*letter*/,
4432  },
4433 
4434 };
4435 
4436 
4437 
4438 const basic::ZonePolicy kPolicyTonga ACE_TIME_PROGMEM = {
4439  kZoneRulesTonga /*rules*/,
4440  nullptr /*letters*/,
4441  7 /*numRules*/,
4442  0 /*numLetters*/,
4443 };
4444 
4445 //---------------------------------------------------------------------------
4446 // Policy name: Tunisia
4447 // Rules: 5
4448 // Memory (8-bit): 51
4449 // Memory (32-bit): 72
4450 //---------------------------------------------------------------------------
4451 
4452 static const basic::ZoneRule kZoneRulesTunisia[] ACE_TIME_PROGMEM = {
4453  // Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
4454  {
4455  -12 /*fromYearTiny*/,
4456  -10 /*toYearTiny*/,
4457  9 /*inMonth*/,
4458  7 /*onDayOfWeek*/,
4459  0 /*onDayOfMonth*/,
4460  0 /*atTimeCode*/,
4461  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4462  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4463  '-' /*letter*/,
4464  },
4465  // Rule Tunisia 2005 only - May 1 0:00s 1:00 S
4466  {
4467  5 /*fromYearTiny*/,
4468  5 /*toYearTiny*/,
4469  5 /*inMonth*/,
4470  0 /*onDayOfWeek*/,
4471  1 /*onDayOfMonth*/,
4472  0 /*atTimeCode*/,
4473  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4474  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4475  'S' /*letter*/,
4476  },
4477  // Rule Tunisia 2005 only - Sep 30 1:00s 0 -
4478  {
4479  5 /*fromYearTiny*/,
4480  5 /*toYearTiny*/,
4481  9 /*inMonth*/,
4482  0 /*onDayOfWeek*/,
4483  30 /*onDayOfMonth*/,
4484  4 /*atTimeCode*/,
4485  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4486  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4487  '-' /*letter*/,
4488  },
4489  // Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
4490  {
4491  6 /*fromYearTiny*/,
4492  8 /*toYearTiny*/,
4493  3 /*inMonth*/,
4494  7 /*onDayOfWeek*/,
4495  0 /*onDayOfMonth*/,
4496  8 /*atTimeCode*/,
4497  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4498  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4499  'S' /*letter*/,
4500  },
4501  // Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
4502  {
4503  6 /*fromYearTiny*/,
4504  8 /*toYearTiny*/,
4505  10 /*inMonth*/,
4506  7 /*onDayOfWeek*/,
4507  0 /*onDayOfMonth*/,
4508  8 /*atTimeCode*/,
4509  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4510  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4511  '-' /*letter*/,
4512  },
4513 
4514 };
4515 
4516 
4517 
4518 const basic::ZonePolicy kPolicyTunisia ACE_TIME_PROGMEM = {
4519  kZoneRulesTunisia /*rules*/,
4520  nullptr /*letters*/,
4521  5 /*numRules*/,
4522  0 /*numLetters*/,
4523 };
4524 
4525 //---------------------------------------------------------------------------
4526 // Policy name: US
4527 // Rules: 5
4528 // Memory (8-bit): 51
4529 // Memory (32-bit): 72
4530 //---------------------------------------------------------------------------
4531 
4532 static const basic::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
4533  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
4534  {
4535  -33 /*fromYearTiny*/,
4536  6 /*toYearTiny*/,
4537  10 /*inMonth*/,
4538  7 /*onDayOfWeek*/,
4539  0 /*onDayOfMonth*/,
4540  8 /*atTimeCode*/,
4541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4542  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4543  'S' /*letter*/,
4544  },
4545  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
4546  {
4547  -24 /*fromYearTiny*/,
4548  -14 /*toYearTiny*/,
4549  4 /*inMonth*/,
4550  7 /*onDayOfWeek*/,
4551  0 /*onDayOfMonth*/,
4552  8 /*atTimeCode*/,
4553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4554  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4555  'D' /*letter*/,
4556  },
4557  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
4558  {
4559  -13 /*fromYearTiny*/,
4560  6 /*toYearTiny*/,
4561  4 /*inMonth*/,
4562  7 /*onDayOfWeek*/,
4563  1 /*onDayOfMonth*/,
4564  8 /*atTimeCode*/,
4565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4566  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4567  'D' /*letter*/,
4568  },
4569  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
4570  {
4571  7 /*fromYearTiny*/,
4572  126 /*toYearTiny*/,
4573  3 /*inMonth*/,
4574  7 /*onDayOfWeek*/,
4575  8 /*onDayOfMonth*/,
4576  8 /*atTimeCode*/,
4577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4578  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4579  'D' /*letter*/,
4580  },
4581  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
4582  {
4583  7 /*fromYearTiny*/,
4584  126 /*toYearTiny*/,
4585  11 /*inMonth*/,
4586  7 /*onDayOfWeek*/,
4587  1 /*onDayOfMonth*/,
4588  8 /*atTimeCode*/,
4589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4591  'S' /*letter*/,
4592  },
4593 
4594 };
4595 
4596 
4597 
4598 const basic::ZonePolicy kPolicyUS ACE_TIME_PROGMEM = {
4599  kZoneRulesUS /*rules*/,
4600  nullptr /*letters*/,
4601  5 /*numRules*/,
4602  0 /*numLetters*/,
4603 };
4604 
4605 //---------------------------------------------------------------------------
4606 // Policy name: Uruguay
4607 // Rules: 6
4608 // Memory (8-bit): 60
4609 // Memory (32-bit): 84
4610 //---------------------------------------------------------------------------
4611 
4612 static const basic::ZoneRule kZoneRulesUruguay[] ACE_TIME_PROGMEM = {
4613  // Rule Uruguay 1993 only - Feb 28 0:00 0 -
4614  {
4615  -7 /*fromYearTiny*/,
4616  -7 /*toYearTiny*/,
4617  2 /*inMonth*/,
4618  0 /*onDayOfWeek*/,
4619  28 /*onDayOfMonth*/,
4620  0 /*atTimeCode*/,
4621  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4622  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4623  '-' /*letter*/,
4624  },
4625  // Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
4626  {
4627  4 /*fromYearTiny*/,
4628  4 /*toYearTiny*/,
4629  9 /*inMonth*/,
4630  0 /*onDayOfWeek*/,
4631  19 /*onDayOfMonth*/,
4632  0 /*atTimeCode*/,
4633  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4634  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4635  '-' /*letter*/,
4636  },
4637  // Rule Uruguay 2005 only - Mar 27 2:00 0 -
4638  {
4639  5 /*fromYearTiny*/,
4640  5 /*toYearTiny*/,
4641  3 /*inMonth*/,
4642  0 /*onDayOfWeek*/,
4643  27 /*onDayOfMonth*/,
4644  8 /*atTimeCode*/,
4645  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4646  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4647  '-' /*letter*/,
4648  },
4649  // Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
4650  {
4651  5 /*fromYearTiny*/,
4652  5 /*toYearTiny*/,
4653  10 /*inMonth*/,
4654  0 /*onDayOfWeek*/,
4655  9 /*onDayOfMonth*/,
4656  8 /*atTimeCode*/,
4657  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4658  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4659  '-' /*letter*/,
4660  },
4661  // Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
4662  {
4663  6 /*fromYearTiny*/,
4664  15 /*toYearTiny*/,
4665  3 /*inMonth*/,
4666  7 /*onDayOfWeek*/,
4667  8 /*onDayOfMonth*/,
4668  8 /*atTimeCode*/,
4669  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4670  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4671  '-' /*letter*/,
4672  },
4673  // Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
4674  {
4675  6 /*fromYearTiny*/,
4676  14 /*toYearTiny*/,
4677  10 /*inMonth*/,
4678  7 /*onDayOfWeek*/,
4679  1 /*onDayOfMonth*/,
4680  8 /*atTimeCode*/,
4681  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4682  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4683  '-' /*letter*/,
4684  },
4685 
4686 };
4687 
4688 
4689 
4690 const basic::ZonePolicy kPolicyUruguay ACE_TIME_PROGMEM = {
4691  kZoneRulesUruguay /*rules*/,
4692  nullptr /*letters*/,
4693  6 /*numRules*/,
4694  0 /*numLetters*/,
4695 };
4696 
4697 //---------------------------------------------------------------------------
4698 // Policy name: Vanuatu
4699 // Rules: 1
4700 // Memory (8-bit): 15
4701 // Memory (32-bit): 24
4702 //---------------------------------------------------------------------------
4703 
4704 static const basic::ZoneRule kZoneRulesVanuatu[] ACE_TIME_PROGMEM = {
4705  // Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
4706  {
4707  -8 /*fromYearTiny*/,
4708  -7 /*toYearTiny*/,
4709  1 /*inMonth*/,
4710  6 /*onDayOfWeek*/,
4711  22 /*onDayOfMonth*/,
4712  96 /*atTimeCode*/,
4713  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4714  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4715  '-' /*letter*/,
4716  },
4717 
4718 };
4719 
4720 
4721 
4722 const basic::ZonePolicy kPolicyVanuatu ACE_TIME_PROGMEM = {
4723  kZoneRulesVanuatu /*rules*/,
4724  nullptr /*letters*/,
4725  1 /*numRules*/,
4726  0 /*numLetters*/,
4727 };
4728 
4729 //---------------------------------------------------------------------------
4730 // Policy name: Winn
4731 // Rules: 3
4732 // Memory (8-bit): 33
4733 // Memory (32-bit): 48
4734 //---------------------------------------------------------------------------
4735 
4736 static const basic::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
4737  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
4738  {
4739  -34 /*fromYearTiny*/,
4740  -14 /*toYearTiny*/,
4741  4 /*inMonth*/,
4742  7 /*onDayOfWeek*/,
4743  0 /*onDayOfMonth*/,
4744  8 /*atTimeCode*/,
4745  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4746  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4747  'D' /*letter*/,
4748  },
4749  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
4750  {
4751  -34 /*fromYearTiny*/,
4752  5 /*toYearTiny*/,
4753  10 /*inMonth*/,
4754  7 /*onDayOfWeek*/,
4755  0 /*onDayOfMonth*/,
4756  8 /*atTimeCode*/,
4757  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4758  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4759  'S' /*letter*/,
4760  },
4761  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
4762  {
4763  -13 /*fromYearTiny*/,
4764  5 /*toYearTiny*/,
4765  4 /*inMonth*/,
4766  7 /*onDayOfWeek*/,
4767  1 /*onDayOfMonth*/,
4768  8 /*atTimeCode*/,
4769  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4770  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4771  'D' /*letter*/,
4772  },
4773 
4774 };
4775 
4776 
4777 
4778 const basic::ZonePolicy kPolicyWinn ACE_TIME_PROGMEM = {
4779  kZoneRulesWinn /*rules*/,
4780  nullptr /*letters*/,
4781  3 /*numRules*/,
4782  0 /*numLetters*/,
4783 };
4784 
4785 //---------------------------------------------------------------------------
4786 // Policy name: Zion
4787 // Rules: 24
4788 // Memory (8-bit): 222
4789 // Memory (32-bit): 300
4790 //---------------------------------------------------------------------------
4791 
4792 static const basic::ZoneRule kZoneRulesZion[] ACE_TIME_PROGMEM = {
4793  // Rule Zion 1998 only - Sep 6 0:00 0 S
4794  {
4795  -2 /*fromYearTiny*/,
4796  -2 /*toYearTiny*/,
4797  9 /*inMonth*/,
4798  0 /*onDayOfWeek*/,
4799  6 /*onDayOfMonth*/,
4800  0 /*atTimeCode*/,
4801  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4802  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4803  'S' /*letter*/,
4804  },
4805  // Rule Zion 1999 only - Apr 2 2:00 1:00 D
4806  {
4807  -1 /*fromYearTiny*/,
4808  -1 /*toYearTiny*/,
4809  4 /*inMonth*/,
4810  0 /*onDayOfWeek*/,
4811  2 /*onDayOfMonth*/,
4812  8 /*atTimeCode*/,
4813  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4814  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4815  'D' /*letter*/,
4816  },
4817  // Rule Zion 1999 only - Sep 3 2:00 0 S
4818  {
4819  -1 /*fromYearTiny*/,
4820  -1 /*toYearTiny*/,
4821  9 /*inMonth*/,
4822  0 /*onDayOfWeek*/,
4823  3 /*onDayOfMonth*/,
4824  8 /*atTimeCode*/,
4825  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4826  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4827  'S' /*letter*/,
4828  },
4829  // Rule Zion 2000 only - Apr 14 2:00 1:00 D
4830  {
4831  0 /*fromYearTiny*/,
4832  0 /*toYearTiny*/,
4833  4 /*inMonth*/,
4834  0 /*onDayOfWeek*/,
4835  14 /*onDayOfMonth*/,
4836  8 /*atTimeCode*/,
4837  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4838  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4839  'D' /*letter*/,
4840  },
4841  // Rule Zion 2000 only - Oct 6 1:00 0 S
4842  {
4843  0 /*fromYearTiny*/,
4844  0 /*toYearTiny*/,
4845  10 /*inMonth*/,
4846  0 /*onDayOfWeek*/,
4847  6 /*onDayOfMonth*/,
4848  4 /*atTimeCode*/,
4849  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4850  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4851  'S' /*letter*/,
4852  },
4853  // Rule Zion 2001 only - Apr 9 1:00 1:00 D
4854  {
4855  1 /*fromYearTiny*/,
4856  1 /*toYearTiny*/,
4857  4 /*inMonth*/,
4858  0 /*onDayOfWeek*/,
4859  9 /*onDayOfMonth*/,
4860  4 /*atTimeCode*/,
4861  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4862  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4863  'D' /*letter*/,
4864  },
4865  // Rule Zion 2001 only - Sep 24 1:00 0 S
4866  {
4867  1 /*fromYearTiny*/,
4868  1 /*toYearTiny*/,
4869  9 /*inMonth*/,
4870  0 /*onDayOfWeek*/,
4871  24 /*onDayOfMonth*/,
4872  4 /*atTimeCode*/,
4873  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4874  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4875  'S' /*letter*/,
4876  },
4877  // Rule Zion 2002 only - Mar 29 1:00 1:00 D
4878  {
4879  2 /*fromYearTiny*/,
4880  2 /*toYearTiny*/,
4881  3 /*inMonth*/,
4882  0 /*onDayOfWeek*/,
4883  29 /*onDayOfMonth*/,
4884  4 /*atTimeCode*/,
4885  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4886  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4887  'D' /*letter*/,
4888  },
4889  // Rule Zion 2002 only - Oct 7 1:00 0 S
4890  {
4891  2 /*fromYearTiny*/,
4892  2 /*toYearTiny*/,
4893  10 /*inMonth*/,
4894  0 /*onDayOfWeek*/,
4895  7 /*onDayOfMonth*/,
4896  4 /*atTimeCode*/,
4897  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4898  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4899  'S' /*letter*/,
4900  },
4901  // Rule Zion 2003 only - Mar 28 1:00 1:00 D
4902  {
4903  3 /*fromYearTiny*/,
4904  3 /*toYearTiny*/,
4905  3 /*inMonth*/,
4906  0 /*onDayOfWeek*/,
4907  28 /*onDayOfMonth*/,
4908  4 /*atTimeCode*/,
4909  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4910  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4911  'D' /*letter*/,
4912  },
4913  // Rule Zion 2003 only - Oct 3 1:00 0 S
4914  {
4915  3 /*fromYearTiny*/,
4916  3 /*toYearTiny*/,
4917  10 /*inMonth*/,
4918  0 /*onDayOfWeek*/,
4919  3 /*onDayOfMonth*/,
4920  4 /*atTimeCode*/,
4921  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4922  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4923  'S' /*letter*/,
4924  },
4925  // Rule Zion 2004 only - Apr 7 1:00 1:00 D
4926  {
4927  4 /*fromYearTiny*/,
4928  4 /*toYearTiny*/,
4929  4 /*inMonth*/,
4930  0 /*onDayOfWeek*/,
4931  7 /*onDayOfMonth*/,
4932  4 /*atTimeCode*/,
4933  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4934  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4935  'D' /*letter*/,
4936  },
4937  // Rule Zion 2004 only - Sep 22 1:00 0 S
4938  {
4939  4 /*fromYearTiny*/,
4940  4 /*toYearTiny*/,
4941  9 /*inMonth*/,
4942  0 /*onDayOfWeek*/,
4943  22 /*onDayOfMonth*/,
4944  4 /*atTimeCode*/,
4945  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4946  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4947  'S' /*letter*/,
4948  },
4949  // Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
4950  {
4951  5 /*fromYearTiny*/,
4952  12 /*toYearTiny*/,
4953  4 /*inMonth*/,
4954  5 /*onDayOfWeek*/,
4955  -1 /*onDayOfMonth*/,
4956  8 /*atTimeCode*/,
4957  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4958  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4959  'D' /*letter*/,
4960  },
4961  // Rule Zion 2005 only - Oct 9 2:00 0 S
4962  {
4963  5 /*fromYearTiny*/,
4964  5 /*toYearTiny*/,
4965  10 /*inMonth*/,
4966  0 /*onDayOfWeek*/,
4967  9 /*onDayOfMonth*/,
4968  8 /*atTimeCode*/,
4969  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4970  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4971  'S' /*letter*/,
4972  },
4973  // Rule Zion 2006 only - Oct 1 2:00 0 S
4974  {
4975  6 /*fromYearTiny*/,
4976  6 /*toYearTiny*/,
4977  10 /*inMonth*/,
4978  0 /*onDayOfWeek*/,
4979  1 /*onDayOfMonth*/,
4980  8 /*atTimeCode*/,
4981  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4982  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4983  'S' /*letter*/,
4984  },
4985  // Rule Zion 2007 only - Sep 16 2:00 0 S
4986  {
4987  7 /*fromYearTiny*/,
4988  7 /*toYearTiny*/,
4989  9 /*inMonth*/,
4990  0 /*onDayOfWeek*/,
4991  16 /*onDayOfMonth*/,
4992  8 /*atTimeCode*/,
4993  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4994  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4995  'S' /*letter*/,
4996  },
4997  // Rule Zion 2008 only - Oct 5 2:00 0 S
4998  {
4999  8 /*fromYearTiny*/,
5000  8 /*toYearTiny*/,
5001  10 /*inMonth*/,
5002  0 /*onDayOfWeek*/,
5003  5 /*onDayOfMonth*/,
5004  8 /*atTimeCode*/,
5005  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5006  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5007  'S' /*letter*/,
5008  },
5009  // Rule Zion 2009 only - Sep 27 2:00 0 S
5010  {
5011  9 /*fromYearTiny*/,
5012  9 /*toYearTiny*/,
5013  9 /*inMonth*/,
5014  0 /*onDayOfWeek*/,
5015  27 /*onDayOfMonth*/,
5016  8 /*atTimeCode*/,
5017  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5018  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5019  'S' /*letter*/,
5020  },
5021  // Rule Zion 2010 only - Sep 12 2:00 0 S
5022  {
5023  10 /*fromYearTiny*/,
5024  10 /*toYearTiny*/,
5025  9 /*inMonth*/,
5026  0 /*onDayOfWeek*/,
5027  12 /*onDayOfMonth*/,
5028  8 /*atTimeCode*/,
5029  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5030  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5031  'S' /*letter*/,
5032  },
5033  // Rule Zion 2011 only - Oct 2 2:00 0 S
5034  {
5035  11 /*fromYearTiny*/,
5036  11 /*toYearTiny*/,
5037  10 /*inMonth*/,
5038  0 /*onDayOfWeek*/,
5039  2 /*onDayOfMonth*/,
5040  8 /*atTimeCode*/,
5041  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5042  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5043  'S' /*letter*/,
5044  },
5045  // Rule Zion 2012 only - Sep 23 2:00 0 S
5046  {
5047  12 /*fromYearTiny*/,
5048  12 /*toYearTiny*/,
5049  9 /*inMonth*/,
5050  0 /*onDayOfWeek*/,
5051  23 /*onDayOfMonth*/,
5052  8 /*atTimeCode*/,
5053  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5054  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5055  'S' /*letter*/,
5056  },
5057  // Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
5058  {
5059  13 /*fromYearTiny*/,
5060  126 /*toYearTiny*/,
5061  3 /*inMonth*/,
5062  5 /*onDayOfWeek*/,
5063  23 /*onDayOfMonth*/,
5064  8 /*atTimeCode*/,
5065  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5066  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5067  'D' /*letter*/,
5068  },
5069  // Rule Zion 2013 max - Oct lastSun 2:00 0 S
5070  {
5071  13 /*fromYearTiny*/,
5072  126 /*toYearTiny*/,
5073  10 /*inMonth*/,
5074  7 /*onDayOfWeek*/,
5075  0 /*onDayOfMonth*/,
5076  8 /*atTimeCode*/,
5077  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5078  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5079  'S' /*letter*/,
5080  },
5081 
5082 };
5083 
5084 
5085 
5086 const basic::ZonePolicy kPolicyZion ACE_TIME_PROGMEM = {
5087  kZoneRulesZion /*rules*/,
5088  nullptr /*letters*/,
5089  24 /*numRules*/,
5090  0 /*numLetters*/,
5091 };
5092 
5093 
5094 
5095 }
5096 }
Macros and definitions that provide a consistency layer among the various Arduino boards for compatib...