SLOPSHOPPER

tea-egg

Tea Egg: raise a pet egg that slowly marinates while you code

newpanebandguardcommandtoast
★ 2v0.4.1MITupdated 2026-10-08helenlin0621/tea-egg
A shopper browsing a rack in a slop shop
Preview · a replayed session in a sandbox
claude · ~/work/app · tea-egg
│ ┃ Tea Egg ✕ › fix the failing auth╭────────────────────────────────────────────╮ │ ┃ │ tea-egg │ │ ┃ ⏺ Read(src/auth.ts) │ 🥚 You got your first egg! Marinate it │ │ ┃ ⎿ Read 6 lines │ into a tea egg. Type /egg to take a look │ │ ┃ ▄▀ ▀ ⏺ Update(src/auth.ts) ╰────────────────────────────────────────────╯ │ ┃ ▀ ▄▀ ▄▀ ⎿ Added 2 lines, re╭────────────────────────────────────────────╮ │ ┃ ⏺ Bash(bun test) │ tea-egg │ │ ┃ ⎿ 3 pass, 1 fail │ 💥 Crack! `git push --force` startled the │ │ ┃ │ egg… it turned into: Fried Egg 🍳 (New in │ │ ┃ ● Done. refresh now re│ the Eggdex!) │ │ ┃ ╰────────────────────────────────────────────╯ │ ┃ ✻ Worked for 42s · done 4:20 PM │ ┃ │ ┃ › /egg │ ┃ ⎿ tea-egg: Tea egg panel opened │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ │ ┃ Eggy #2 (✧ᴗ✧) 🥚(✧ᴗ✧) Eggy #2 | Flavor ░░░░░░░░░░ 1% | Broth █████ Panel × ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── › ? for shortcuts

Draws

Band
🥚(✧ᴗ✧) Eggy #2 | Flavor ░░░░░░░░░░ 1% | Broth █████ Panel ×
Pane · Tea Egg
▄▀ ▀ ▀ ▄▀ ▄▀ Eggy #2 (✧ᴗ✧) Flavor ░░░░░░░░░░ 1% Broth ██████████ 100 Mood ███████░░░ 70 [ Refill ][ Flip ][ Dex ][ Hide band ]
README

🥚 Tea Egg (tea-egg)

繁體中文

Raise an egg soaking in tea broth inside Claude Code while you code. Every task you finish lets the flavor sink in a little more; in about a week it's done marinating.

 🥚(•ᴗ•)  Eggy #3 | Flavor ██████░░░░ 62% | Broth ███░░ | Smells of tea…

Install

In Claude Code, run:

/plugin marketplace add helenlin0621/tea-egg
/plugin install tea-egg@tea-egg

Requires Claude Code 2.1.289 or later (update with claude update).

Update

/plugin marketplace update tea-egg
/plugin update tea-egg@tea-egg

Then restart Claude Code.

Commands

CommandWhat it does
/eggOpen/close the panel
/egg refillTop up the broth
/egg flipFlip the egg
/egg dexShow the Eggdex
/egg bandHide/show the band above the prompt (stays that way until you run it again; the × on the band hides it too)
/egg name <name>Name the current egg
/egg helpHelp

How your egg turns out depends on your coding habits. Collect them all!

Language

The UI follows your system language: Chinese locales get Traditional Chinese, everything else gets English. To choose one yourself, set TEA_EGG_LANG to en or zh-TW before starting Claude Code:

ShellCommand
macOS / LinuxTEA_EGG_LANG=en claude
Windows cmdset TEA_EGG_LANG=en then claude
Windows PowerShell$env:TEA_EGG_LANG = "en" then claude

The language is picked when a session starts. Eggs you already have keep their names.

Security

NetworkRuns programsReads/writes filesCalls AISends dataBlocks or changes commands
NoNoNoNoNoNo
  • The Mod only "looks at" the text of Bash/PowerShell commands and whether they succeeded, to tell whether you ran tests or a dangerous command. The full list of patterns is public in hooks/detect.ts.
  • All data stays in the local storage Claude Code sets aside for this Mod.
  • The dex contents are encoded to avoid spoilers; see the note at the top of hooks/spoilers.ts.

License

MIT. See LICENSE.

Source 19 files
hooks/register.tsx 376 lines
1import { update, type EngineInterface, type Register, type Timer } from 'claude-code'
2import { localTime, parseFakeDate, systemOffset, type ClockConfig, type LocalTime } from './clock'
3import { observe, OBSERVED_TOOLS } from './detect'
4import { dexTitle, onCommand, onObserved, onSessionOpen, onTick, onTurn } from './flow'
5import { BAND_STORE_KEY, FAKE_STORE_KEY, STORE_KEY } from './model'
6import { dexArt, eggArt, nextPreview, panelLines, PREVIEW_KEYS, PREVIEW_LABELS, previewArt, SVG_PX, type Art } from './panel'
7import { dexCaption, dexHeader } from './rules'
8import { decodeSpoilers } from './spoilers'
9import { mutate, type StoreIo } from './store'
10import { detectLang, setLang } from './i18n'
11import { T, fill } from './text'
12import { RASTER_ROWS, SIZE } from './pixels'
13import { bandSegments, fitSegments, strWidth } from './view'
14
15// state refs' plugin / key must be literals, written in this file (the one that uses $.state)
16const SAVE_REF = { plugin: 'tea-egg', key: 'save' } as const
17const SHOW_DEX_REF = { plugin: 'tea-egg', key: 'showDex' } as const
18const COUNTED_REF = { plugin: 'tea-egg', key: 'sessionCounted' } as const
19const PREVIEW_REF = { plugin: 'tea-egg', key: 'preview' } as const
20const BAND_REF = { plugin: 'tea-egg', key: 'bandHidden' } as const
21
22export const PANE = 'tea-egg'
23const TICK_MS = 60_000
24const rng = Math.random
25
26let clock: ClockConfig = { offsetMinutes: systemOffset, fake: null, loadedAt: 0 }
27export const localNow = (now: number): LocalTime => localTime(now, clock)
28// Sessions nobody is watching (claude -p, SDK scripts, schedules) don't raise the egg; becomes true once a surface attaches
29let interactive = false
30// Read and write a separate save while a fake date is in effect
31const storeKey = () => (clock.fake ? FAKE_STORE_KEY : STORE_KEY)
32
33// "Preview n/total: label" in the current language
34function previewText(template: string, key: string): string {
35  const n = PREVIEW_KEYS.indexOf(key as (typeof PREVIEW_KEYS)[number]) + 1
36  return fill(template, { n: String(n), total: String(PREVIEW_KEYS.length), label: PREVIEW_LABELS[key] ?? key })
37}
38
39function commandOf(e: { tool: string }): string {
40  const command = (e as { command?: unknown }).command
41  return typeof command === 'string' ? command : ''
42}
43
44// The loader doesn't follow $ across imports: every $.xxx call is written in this file
45const ioOf = ($: EngineInterface): StoreIo => ({
46  now: () => $.clock.now(),
47  read: () => $.store.get(storeKey()),
48  write: async save => {
49    await $.store.set(storeKey(), save)
50    await $.state.set(SAVE_REF, save)
51  },
52  toast: text => {
53    $.ui.toast(text)
54  },
55})
56
57// Toggle the side pane: shared by /egg and the band button; returns the state after toggling
58async function togglePane($: EngineInterface): Promise<boolean> {
59  if ((await $.ui.panes()).some(p => p.id === PANE)) {
60    await $.ui.close({ id: PANE })
61    return false
62  }
63  await $.ui.open({ id: PANE, title: T().title })
64  return true
65}
66
67// The band's hidden flag lives in the store (kept across sessions); state mirrors it so render can read it
68async function loadBand($: EngineInterface): Promise<void> {
69  try {
70    await $.state.set(BAND_REF, (await $.store.get(BAND_STORE_KEY)) === true)
71  } catch {
72    // Show the band when the flag can't be read
73  }
74}
75
76// Flip the band's hidden flag; returns whether it is hidden now
77async function toggleBand($: EngineInterface): Promise<boolean> {
78  const hidden = (await $.state.get(BAND_REF)).value !== true
79  await $.store.set(BAND_STORE_KEY, hidden)
80  await $.state.set(BAND_REF, hidden)
81  return hidden
82}
83
84// Activate only once per load; keep the timer handle and cancel it before registering again
85let tick: Timer | null = null
86
87// On desktop a new session's surface often attaches after the Mod loads, so the attach signal is missed:
88// if session.start sees no surface, poll every 3 seconds for up to 10 minutes and activate once one shows up
89const WATCH_MS = 3_000
90const WATCH_LIMIT = 200
91let watch: Timer | null = null
92
93async function hasSurface($: EngineInterface): Promise<boolean> {
94  try {
95    return (await $.session.surfaces()).length > 0
96  } catch {
97    return false
98  }
99}
100
101function watchForSurface($: EngineInterface): void {
102  watch?.cancel()
103  let tries = 0
104  watch = $.clock.every(WATCH_MS, () => {
105    void (async () => {
106      tries++
107      if (interactive || tries > WATCH_LIMIT) {
108        watch?.cancel()
109        watch = null
110        return
111      }
112      if (await hasSurface($)) {
113        watch?.cancel()
114        watch = null
115        await activate($)
116      }
117    })().catch(() => undefined)
118  })
119}
120
121async function activate($: EngineInterface): Promise<void> {
122  // Claim the slot synchronously so start and attach arriving together don't activate twice
123  if (interactive) return
124  interactive = true
125  try {
126    // Also decided here in case this load never saw session.start
127    setLang(detectLang(await $.env.get('TEA_EGG_LANG')))
128    const now = await $.clock.now()
129    clock = {
130      offsetMinutes: systemOffset,
131      fake: parseFakeDate(await $.env.get('TEA_EGG_FAKE_DATE')),
132      loadedAt: now,
133    }
134    const counted = (await $.state.get(COUNTED_REF)).value === true
135    await mutate(ioOf($), (s, at) => onSessionOpen(s, at, localNow(at), !counted))
136    if (!counted) await $.state.set(COUNTED_REF, true)
137    tick?.cancel()
138    tick = $.clock.every(TICK_MS, () => {
139      void mutate(ioOf($), (s, at) => onTick(s, at, localNow(at), rng)).catch(() => undefined)
140    })
141  } catch {
142    // An egg error must never affect the user
143  }
144}
145
146export const register: Register = on => {
147  on('session.start', async ($, e, next) => {
148    try {
149      // Pick the language first: the command description below is already localized.
150      // A failed env read must not stop /egg from being registered, so fall back to the locale.
151      let envLang: string | undefined
152      try {
153        envLang = await $.env.get('TEA_EGG_LANG')
154      } catch {
155        envLang = undefined
156      }
157      setLang(detectLang(envLang))
158      await $.command.register({ name: 'egg', description: T().commandDescription })
159      await loadBand($)
160      // Activate only if someone is watching: an interactive session, or a surface already attached (a desktop hot reload sends no new attach)
161      const seen = e.isInteractive === true || (await hasSurface($))
162      if (seen) await activate($)
163      else watchForSurface($)
164    } catch {
165      // An egg error must never affect the user
166    }
167    return next(e)
168  })
169
170  // Desktop (SDK host): no surface at session.start; it connects later
171  on('session.attach', async ($, e, next) => {
172    try {
173      await activate($)
174    } catch {
175      // Ignore silently
176    }
177    return next(e)
178  })
179
180  // If a surface is attached when the user submits a message, activate here even if earlier signals were missed (so this turn's flavor counts)
181  on('prompt.submit', async ($, e, next) => {
182    try {
183      if (!interactive && (await hasSurface($))) await activate($)
184    } catch {
185      // Ignore silently
186    }
187    return next(e)
188  })
189
190  on('turn.complete', async ($, e, next) => {
191    const ran = await next(e)
192    try {
193      if (interactive && e.agentId === undefined && e.reason !== 'error') {
194        await mutate(ioOf($), (s, at) => onTurn(s, at, localNow(at), rng))
195      }
196    } catch {
197      // Ignore silently
198    }
199    return ran
200  })
201
202  // Observe only: always call next(e) and return its result unchanged
203  on('tool.call', async ($, e, next) => {
204    const ran = await next(e)
205    try {
206      if (!interactive) return ran
207      const tool = String(e.tool)
208      const command = (OBSERVED_TOOLS as readonly string[]).includes(tool) ? commandOf(e) : ''
209      const obs = observe(tool, command, ran)
210      if (obs !== null) await mutate(ioOf($), (s, at) => onObserved(s, at, localNow(at), obs, rng))
211    } catch {
212      // Ignore silently
213    }
214    return ran
215  })
216
217  // The band above the prompt; always steps aside on errors or when a survey is showing
218  on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
219    try {
220      // The prompt being drawn means a surface is attached; state can't be written during render, so activate on the next tick
221      if (!interactive) $.clock.after(0, () => void activate($))
222      if (e.props.hasSurvey) return next(e)
223      if ((await $.state.get(BAND_REF)).value === true) return next(e)
224      const save = (await $.state.get(SAVE_REF)).value
225      if (!save) return next(e)
226      const now = await $.clock.now()
227      const columns = e.props.bodyColumns ?? e.viewport?.columns ?? 80
228      // Reserve room on the right for the panel and × buttons (1 space + label + 1 space + × + 1 column of margin)
229      const reserve = strWidth(T().buttons.panel) + 4
230      const segs = fitSegments(bandSegments(save, localNow(now), now), Math.max(10, columns - reserve))
231      const { Box, Text, Button } = $.ui.resolve(e)
232      const onPanel = async () => {
233        try {
234          await togglePane($)
235        } catch {
236          // A button error must never affect the user
237        }
238      }
239      const onHide = async () => {
240        try {
241          if (await toggleBand($)) $.ui.toast(T().bandHidden)
242        } catch {
243          // A button error must never affect the user
244        }
245      }
246      return (
247        // Stats on the left; the panel and × buttons pinned to the right edge
248        <Box justifyContent="space-between" width="100%">
249          <Box key="stats">
250            {segs.map((seg, i) => (
251              <Text key={String(i)} color={seg.color} dimColor={seg.dim}>{seg.text}</Text>
252            ))}
253          </Box>
254          <Box key="actions">
255            <Text key="gap"> </Text>
256            <Button key="panel" label={T().buttons.panel} plain dimColor onPress={onPanel} />
257            <Text key="gap2"> </Text>
258            <Button key="hide" label="×" plain dimColor onPress={onHide} />
259          </Box>
260        </Box>
261      )
262    } catch {
263      return next(e)
264    }
265  })
266
267  on('ui.render', { component: 'Pane', requestId: PANE }, async ($, e, next) => {
268    try {
269      const { Box, Text, Button } = $.ui.resolve(e)
270      const save = (await $.state.get(SAVE_REF)).value
271      const showDex = (await $.state.get(SHOW_DEX_REF)).value === true
272      const bandHidden = (await $.state.get(BAND_REF)).value === true
273      if (!save) return <Text dimColor>{T().waiting}</Text>
274      const now = await $.clock.now()
275      const t = localNow(now)
276      const columns = e.props.bodyColumns ?? e.viewport?.columns ?? SIZE
277      // Only terminal has Raster; other surfaces only have Svg
278      const draw = (art: Art | null, key: string) => {
279        if (art === null) return null
280        if (art.kind === 'raster' && e.surface === 'terminal') {
281          const { Raster } = $.ui.resolve(e)
282          return <Raster key={key} columns={SIZE} rows={RASTER_ROWS} cells={art.cells} />
283        }
284        if (art.kind === 'svg' && e.surface !== 'terminal') {
285          const { Svg } = $.ui.resolve(e)
286          return <Svg key={key} source={art.source} alt={T().eggAlt} width={SVG_PX} height={SVG_PX} />
287        }
288        return art.kind === 'ascii' ? (
289          <Box key={key} flexDirection="column">{art.lines.map((l, i) => <Text key={String(i)}>{l}</Text>)}</Box>
290        ) : null
291      }
292      const press = (args: string) => async () => {
293        try {
294          const step = await mutate(ioOf($), (s, at) => onCommand(s, at, localNow(at), args, rng))
295          if (step.reply) $.ui.toast(step.reply)
296        } catch {
297          // A button error must never affect the user
298        }
299      }
300      const slots = decodeSpoilers().dexSlots
301      const preview = (await $.state.get(PREVIEW_REF)).value ?? null
302      const art = preview !== null ? previewArt(preview, e.surface, columns) : eggArt(save, t, now, e.surface, columns)
303      return (
304        <Box flexDirection="column">
305          {preview !== null && (
306            <Text key="preview" dimColor>
307              {previewText(T().previewBanner, preview)}
308            </Text>
309          )}
310          {draw(art, 'egg')}
311          {panelLines(save, t, now).map((line, i) => <Text key={String(i)}>{line}</Text>)}
312          <Box>
313            <Button key="refill" label={T().buttons.refill} onPress={press('refill')} />
314            <Button key="flip" label={T().buttons.flip} onPress={press('flip')} />
315            <Button key="dex" label={T().buttons.dex} onPress={() => update($, SHOW_DEX_REF, v => !v)} />
316            <Button
317              key="band"
318              label={bandHidden ? T().buttons.showBand : T().buttons.hideBand}
319              onPress={async () => {
320                try {
321                  await toggleBand($)
322                } catch {
323                  // A button error must never affect the user
324                }
325              }}
326            />
327          </Box>
328          {showDex && <Text>{dexHeader(save, dexTitle(t))}</Text>}
329          {showDex && (
330            <Box flexWrap="wrap">
331              {slots.map(id => {
332                const cap = dexCaption(save, id)
333                const owned = (save.dex[id] ?? 0) > 0
334                return (
335                  <Box key={`dex-${id}`} flexDirection="column" alignItems="center" marginRight={1}>
336                    {draw(dexArt(id, owned, e.surface), `dex-art-${id}`)}
337                    <Text key={`dex-name-${id}`} dimColor={!owned}>{cap.name}</Text>
338                    <Text key={`dex-count-${id}`} dimColor>{cap.count}</Text>
339                  </Box>
340                )
341              })}
342            </Box>
343          )}
344        </Box>
345      )
346    } catch {
347      return next(e)
348    }
349  })
350
351  on('command.run', { command: 'egg' }, async ($, e) => {
352    try {
353      // Someone typed /egg by hand, so someone is watching (on desktop the attach signal may come before the Mod loads and be missed)
354      if (!interactive && e.origin.kind !== 'plugin') await activate($)
355      if (!interactive) return { text: T().help }
356      const args = e.args.trim()
357      if (args === '') return { text: (await togglePane($)) ? T().paneOpened : T().paneClosed }
358      if (args === 'band') return { text: (await toggleBand($)) ? T().bandHidden : T().bandShown }
359      // Dev preview: only switches the displayed sprite; never reads or changes the save
360      if (args === 'preview' || args.startsWith('preview ')) {
361        const current = (await $.state.get(PREVIEW_REF)).value ?? null
362        const chosen = nextPreview(current, args.slice('preview'.length))
363        if (chosen === undefined) return { text: fill(T().previewUsage, { total: String(PREVIEW_KEYS.length) }) }
364        await $.state.set(PREVIEW_REF, chosen)
365        if (chosen === null) return { text: T().previewOff }
366        if (!(await $.ui.panes()).some(p => p.id === PANE)) await $.ui.open({ id: PANE, title: T().title })
367        return { text: previewText(T().previewReply, chosen) }
368      }
369      const step = await mutate(ioOf($), (s, at) => onCommand(s, at, localNow(at), args, rng))
370      return { text: step.reply ?? '' }
371    } catch {
372      return { text: T().error }
373    }
374  })
375}
376
hooks/clock.ts 45 lines
1import type { DateKey } from '../types'
2
3export type LocalTime = { date: DateKey; year: number; month: number; day: number; hour: number; minute: number }
4export type FakeDate = { wallMs: number; keepTimeOfDay: boolean }
5export type ClockConfig = { offsetMinutes: (nowMs: number) => number; fake: FakeDate | null; loadedAt: number }
6
7const DAY_MS = 86_400_000
8const pad = (n: number) => String(n).padStart(2, '0')
9
10// TEA_EGG_FAKE_DATE: 'YYYY-MM-DD' or 'YYYY-MM-DDTHH:mm' (for development and testing)
11export function parseFakeDate(raw: string | undefined): FakeDate | null {
12  const m = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2}))?$/.exec((raw ?? '').trim())
13  if (!m) return null
14  const [, y, mo, d, h, mi] = m
15  return {
16    wallMs: Date.UTC(Number(y), Number(mo) - 1, Number(d), Number(h ?? 0), Number(mi ?? 0)),
17    keepTimeOfDay: h === undefined,
18  }
19}
20
21// Always use the time zone of the Claude Code runtime itself (user's decision; not configurable)
22export function systemOffset(nowMs: number): number {
23  return -new Date(nowMs).getTimezoneOffset()
24}
25
26// "Wall time" is kept in the UTC fields so the runtime time zone doesn't convert it a second time
27export function localTime(nowMs: number, cfg: ClockConfig): LocalTime {
28  const realWall = nowMs + cfg.offsetMinutes(nowMs) * 60_000
29  let wall = realWall
30  if (cfg.fake) {
31    wall = cfg.fake.keepTimeOfDay
32      ? cfg.fake.wallMs + (((realWall % DAY_MS) + DAY_MS) % DAY_MS)
33      : cfg.fake.wallMs + (nowMs - cfg.loadedAt)
34  }
35  const d = new Date(wall)
36  const year = d.getUTCFullYear()
37  const month = d.getUTCMonth() + 1
38  const day = d.getUTCDate()
39  return { date: `${year}-${pad(month)}-${pad(day)}`, year, month, day, hour: d.getUTCHours(), minute: d.getUTCMinutes() }
40}
41
42export function daysBetween(a: DateKey, b: DateKey): number {
43  return Math.round((Date.parse(`${b}T00:00:00Z`) - Date.parse(`${a}T00:00:00Z`)) / DAY_MS)
44}
45
hooks/detect.ts 269 lines
1// Which of your commands this Mod looks at: only the text and success/failure of Bash / PowerShell commands,
2// used to tell "ran tests" and "ran a dangerous command". It only observes; it never blocks or modifies anything.
3// Only real execution counts: quoted strings, heredoc bodies and grep patterns are just "mentions" and don't count.
4
5export const OBSERVED_TOOLS = ['Bash', 'PowerShell'] as const
6
7// Test commands: the test runner must be the command word (first word) of a segment, or directly follow one of these launchers
8// - npm / pnpm / yarn [run] test (including test:unit and the like)
9// - npx jest, npx vitest
10// - vitest, jest, pytest, rspec, phpunit
11// - python -m pytest, python3 -m pytest, py -m pytest
12// - go / cargo / mvn / gradle / dotnet test
13// - gradlew test (including ./gradlew, .\gradlew, gradlew.bat)
14export const TEST_COMMANDS: readonly RegExp[] = [
15  /^(?:npm|pnpm|yarn)\s+(?:run\s+)?test\b/,
16  /^npx\s+(?:jest|vitest)\b/,
17  /^(?:vitest|jest|pytest|rspec|phpunit)(?=\s|$)/,
18  /^(?:python3?|py)\s+-m\s+pytest\b/,
19  /^(?:go|cargo|mvn|gradle|dotnet)\s+test\b/,
20  /^(?:\.(?:\/|\\))?gradlew(?:\.bat)?\s+test\b/,
21]
22
23export function isTestCommand(cmd: string): boolean {
24  return segments(cmd).some(words => {
25    const line = words.join(' ')
26    return TEST_COMMANDS.some(re => re.test(line))
27  })
28}
29
30// Strip heredoc bodies: from the line after <<WORD up to a line containing only WORD
31function withoutHeredocs(cmd: string): string {
32  const out: string[] = []
33  let end: string | null = null
34  for (const line of cmd.split('\n')) {
35    if (end !== null) {
36      if (line.trim() === end) end = null
37      continue
38    }
39    out.push(line)
40    const m = /<<-?\s*['"]?([A-Za-z_][A-Za-z0-9_]*)['"]?/.exec(line)
41    if (m) end = m[1]!
42  }
43  return out.join('\n')
44}
45
46// Strip quoted strings: merely "mentioning" a dangerous command (commit messages, grep patterns) doesn't count
47function unquoted(cmd: string): string {
48  return cmd.replace(/'[^']*'|"(?:\\.|[^"\\])*"/g, '""')
49}
50
51// Split on ; & | ( ) and newlines; drop a leading sudo and VAR=value
52function segments(cmd: string): string[][] {
53  return unquoted(withoutHeredocs(cmd))
54    .split(/[;&|()\n]+/)
55    .map(seg => seg.trim().split(/\s+/).filter(Boolean))
56    .map(words => {
57      let i = 0
58      while (i < words.length && (words[i] === 'sudo' || /^[A-Za-z_][A-Za-z0-9_]*=/.test(words[i]!))) i++
59      return words.slice(i)
60    })
61    .filter(words => words.length > 0)
62}
63
64function shortFlags(words: string[]): string {
65  return words.filter(w => /^-[A-Za-z]+$/.test(w)).map(w => w.slice(1)).join('')
66}
67
68// Split into segments of words like segments(), but keep what's inside quotes (rm targets are often quoted paths).
69// $(...) stays inside its word. Unquoted backslash escapes the next character, as in bash.
70function quotedSegments(cmd: string): string[][] {
71  const segs: string[][] = []
72  let words: string[] = []
73  let word: string | null = null
74  const endWord = () => { if (word !== null) words.push(word); word = null }
75  const endSeg = () => { endWord(); if (words.length > 0) segs.push(words); words = [] }
76  const text = withoutHeredocs(cmd)
77  for (let i = 0; i < text.length; i++) {
78    const ch = text[i]!
79    if (ch === "'") {
80      const end = text.indexOf("'", i + 1)
81      const stop = end === -1 ? text.length : end
82      word = (word ?? '') + text.slice(i + 1, stop)
83      i = stop
84    } else if (ch === '"') {
85      let j = i + 1
86      let s = ''
87      while (j < text.length && text[j] !== '"') {
88        if (text[j] === '\\' && j + 1 < text.length && '"\\$`'.includes(text[j + 1]!)) j++
89        s += text[j]
90        j++
91      }
92      word = (word ?? '') + s
93      i = j
94    } else if (ch === '$' && text[i + 1] === '(') {
95      let depth = 0
96      let j = i + 1
97      for (; j < text.length; j++) {
98        if (text[j] === '(') depth++
99        else if (text[j] === ')' && --depth === 0) break
100      }
101      word = (word ?? '') + text.slice(i, j + 1)
102      i = j
103    } else if (ch === '\\' && i + 1 < text.length) {
104      word = (word ?? '') + text[++i]
105    } else if (';&|()\n'.includes(ch)) {
106      endSeg()
107    } else if (/\s/.test(ch)) {
108      endWord()
109    } else {
110      word = (word ?? '') + ch
111    }
112  }
113  endSeg()
114  return segs
115}
116
117// rm -rf only counts when some target lies outside a temp location. Temp locations:
118// - a path segment named tmp / temp / scratchpad with something below it (the folder itself still counts)
119// - anything under node_modules / bin / obj / build / .superpowers (including the folder itself), unless it sits
120//   under a system folder such as /usr or C:/Program Files
121// Paths are resolved with VAR=value / export / cd from earlier in the same command; $TEMP / $TMP / $TMPDIR and
122// $(mktemp ...) count as temp. Anything we can't resolve (unknown variables, ~, $(...) other than mktemp) counts.
123
124const TEMP_VARS: Record<string, string> = { TEMP: '/tmp', TMP: '/tmp', TMPDIR: '/tmp', LOCALAPPDATA: '/AppData/Local' }
125
126type Env = Map<string, string | null>
127
128function expand(word: string, env: Env): string | null {
129  if (/^\$\(\s*mktemp\b[^)]*\)$/.test(word)) return '/tmp/mktemp'
130  if (word.includes('$(') || word.includes('`') || word.startsWith('~')) return null
131  let unresolved = false
132  const out = word.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}|\$([A-Za-z_][A-Za-z0-9_]*)/g, (_, a: string | undefined, b: string | undefined) => {
133    const name = (a ?? b)!
134    const value = env.has(name) ? env.get(name)! : TEMP_VARS[name] ?? null
135    if (value === null) unresolved = true
136    return value ?? ''
137  })
138  return unresolved ? null : out
139}
140
141const isAbsolute = (p: string) => /^(?:\/|[A-Za-z]:)/.test(p)
142
143function resolvePath(word: string, env: Env, cwd: string | null): string | null {
144  const p = expand(word, env)
145  if (p === null) return null
146  const path = p.replace(/\\/g, '/')
147  if (isAbsolute(path)) return path
148  return cwd === null ? path : `${cwd}/${path}`
149}
150
151const OUTPUT_DIRS = new Set(['node_modules', 'bin', 'obj', 'build', '.superpowers'])
152const SYSTEM_ROOT = /^(?:usr|bin|sbin|etc|opt|lib|lib64|var|boot|system|library|windows|program files|program files \(x86\)|programdata)$/i
153
154// /usr/bin, C:/Program Files/App/bin and the like are system folders, not build output
155function underSystemRoot(path: string, parts: string[]): boolean {
156  if (!isAbsolute(path)) return false
157  const drive = /^[A-Za-z]:$/.test(parts[0]!) || (path.startsWith('/') && /^[A-Za-z]$/.test(parts[0]!))
158  const first = drive ? parts[1] : parts[0]
159  return first !== undefined && SYSTEM_ROOT.test(first)
160}
161
162function isTempPath(path: string): boolean {
163  const parts = path.split('/').filter(part => part !== '' && part !== '.')
164  if (parts.includes('..')) return false
165  if (parts.some(part => OUTPUT_DIRS.has(part)) && !underSystemRoot(path, parts)) return true
166  const i = parts.findIndex(part => /^(?:tmp|temp|scratchpad)$/i.test(part))
167  return i !== -1 && i < parts.length - 1
168}
169
170const isRedirect = (w: string) => /^\d*[<>]/.test(w)
171
172function unsafeRm(cmd: string): boolean {
173  const env: Env = new Map()
174  let cwd: string | null = null
175  for (const segment of quotedSegments(cmd)) {
176    let words = segment
177    if (words[0] === 'export') words = words.slice(1)
178    let i = 0
179    while (i < words.length && (words[i] === 'sudo' || /^[A-Za-z_][A-Za-z0-9_]*=/.test(words[i]!))) {
180      const m = /^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/s.exec(words[i]!)
181      if (m) env.set(m[1]!, expand(m[2]!, env))
182      i++
183    }
184    words = words.slice(i).filter(w => !isRedirect(w))
185    const [head, ...args] = words
186    if (head === 'cd') {
187      const dest = args[0]
188      cwd = dest === undefined ? null : resolvePath(dest, env, cwd)
189      continue
190    }
191    if (head !== 'rm') continue
192    const flags = shortFlags(words)
193    const recursive = /[rR]/.test(flags) || words.includes('--recursive')
194    const force = flags.includes('f') || words.includes('--force')
195    if (!recursive || !force) continue
196    const targets = args.filter(w => !w.startsWith('-'))
197    if (targets.length === 0) continue
198    for (const t of targets) {
199      const path = resolvePath(t, env, cwd)
200      if (path === null || !isTempPath(path)) return true
201    }
202  }
203  return false
204}
205
206// Dangerous commands we watch for:
207// - rm -rf (recursive + forced delete), unless every target is in a temp location (see unsafeRm)
208// - git push --force / -f / --force-with-lease (force push)
209// - git reset --hard
210// - git clean -fd (not with -n / --dry-run)
211// - chmod -R 777
212// - SQL DROP TABLE / DROP DATABASE / TRUNCATE: only when the command word of some segment is an SQL client
213//   (psql, mysql, mariadb, sqlite3, sqlcmd, duckdb, sqlplus, clickhouse-client, Invoke-Sqlcmd)
214
215const SQL_CLIENTS = new Set([
216  'psql', 'mysql', 'mariadb', 'sqlite3', 'sqlcmd', 'duckdb', 'sqlplus', 'clickhouse-client', 'invoke-sqlcmd',
217])
218
219const SQL: readonly [RegExp, string][] = [
220  [/\bDROP\s+TABLE\b/i, 'DROP TABLE'],
221  [/\bDROP\s+DATABASE\b/i, 'DROP DATABASE'],
222  [/\bTRUNCATE\s+TABLE\s+[A-Za-z_]/i, 'TRUNCATE'],
223  [/\bTRUNCATE\s+[A-Za-z_][A-Za-z0-9_]*\b/, 'TRUNCATE'],
224]
225
226const isSqlClient = (word: string) => SQL_CLIENTS.has(word.toLowerCase().replace(/\.exe$/, ''))
227
228export function dangerKeyword(cmd: string): string | null {
229  const segs = segments(cmd)
230  for (const words of segs) {
231    const [head, sub] = words
232    const flags = shortFlags(words)
233    if (head === 'rm') {
234      const recursive = /[rR]/.test(flags) || words.includes('--recursive')
235      const force = flags.includes('f') || words.includes('--force')
236      if (recursive && force && unsafeRm(cmd)) return 'rm -rf'
237    }
238    if (head === 'git' && sub === 'push') {
239      if (words.some(w => w === '--force' || w === '--force-with-lease' || w.startsWith('--force-with-lease=')) || flags.includes('f')) {
240        return 'git push --force'
241      }
242    }
243    if (head === 'git' && sub === 'reset' && words.includes('--hard')) return 'git reset --hard'
244    if (head === 'git' && sub === 'clean' && flags.includes('f') && flags.includes('d') && !flags.includes('n') && !words.includes('--dry-run')) return 'git clean -fd'
245    if (head === 'chmod' && (flags.includes('R') || words.includes('--recursive')) && words.some(w => w === '777' || w === '0777')) {
246      return 'chmod -R 777'
247    }
248  }
249  // SQL usually sits inside quotes or a heredoc, so when an SQL client is present we match against the raw text
250  if (segs.some(words => isSqlClient(words[0]!))) {
251    for (const [re, keyword] of SQL) if (re.test(cmd)) return keyword
252  }
253  return null
254}
255
256export type Observation = { failed: boolean; test: 'pass' | 'fail' | null; danger: string | null }
257
258export function observe(tool: string, command: string, ran: { deny?: string; isError?: boolean }): Observation | null {
259  if (ran.deny !== undefined) return null
260  const failed = ran.isError === true
261  const isShell = (OBSERVED_TOOLS as readonly string[]).includes(tool)
262  const cmd = typeof command === 'string' ? command : ''
263  const test = isShell && isTestCommand(cmd) ? (failed ? 'fail' : 'pass') : null
264  // Dangerous commands only count when they actually ran successfully (denied or failed calls don't)
265  const danger = isShell && !failed ? dangerKeyword(cmd) : null
266  if (!failed && test === null && danger === null) return null
267  return { failed, test, danger }
268}
269
hooks/flow.ts 88 lines
1import type { Save } from '../types'
2import type { LocalTime } from './clock'
3import { isSpecialDay, specialEvent, specialMakeup, specialSeen, specialTurn } from './datemode'
4import type { Observation } from './detect'
5import { addActiveDay, flip, pauseClocks, refill, testObserved, tick, toolFailed, turnDone, type Step } from './engine'
6import { crack, dexText, settle } from './rules'
7import { decodeSpoilers } from './spoilers'
8import { T, fill } from './text'
9
10const NAME_MAX = 12
11
12// Run the second step on the first step's result: keep the second step's save and accumulate the effects
13function then(first: Step, second: (s: Save) => Step): Step {
14  const next = second(first.save)
15  return { save: next.save, effects: [...first.effects, ...next.effects], reply: next.reply ?? first.reply }
16}
17
18export function dexTitle(t: LocalTime): string {
19  return isSpecialDay(t) ? decodeSpoilers().dateMode.dexTitle : T().dexTitle
20}
21
22export function onSessionOpen(prev: Save, now: number, t: LocalTime, isNewSession: boolean): Step {
23  const save = structuredClone(prev)
24  const step: Step = { save, effects: [] }
25  if (!save.welcomed) {
26    save.welcomed = true
27    step.effects.push({ kind: 'toast', text: T().welcome })
28  }
29  save.clocks.lastTickAt = now // no catching up on time while closed
30  save.clocks.bucketStart = now
31  save.clocks.bucketActive = false
32  const made = then(step, s => specialMakeup(s, t))
33  if (isSpecialDay(t)) return then(made, s => specialSeen(s, t))
34  if (isNewSession) {
35    made.save.egg.record.sessionCount += 1
36    addActiveDay(made.save, t)
37  }
38  return made
39}
40
41export function onTick(prev: Save, now: number, t: LocalTime, rng: () => number): Step {
42  if (isSpecialDay(t)) return then(pauseClocks(prev, now), s => specialSeen(s, t))
43  return settle(tick(prev, now, t), now, rng)
44}
45
46export function onTurn(prev: Save, now: number, t: LocalTime, rng: () => number): Step {
47  if (isSpecialDay(t)) return then(pauseClocks(prev, now), s => specialTurn(s, now, t, rng))
48  const made = specialMakeup(prev, t)
49  return settle(then(made, s => turnDone(s, now, t, rng)), now, rng)
50}
51
52export function onObserved(prev: Save, now: number, t: LocalTime, obs: Observation, rng: () => number): Step {
53  if (isSpecialDay(t)) {
54    const kind = obs.danger !== null ? 'danger' : obs.test === 'fail' ? 'testFail' : obs.test === 'pass' ? 'testPass' : null
55    return kind === null ? { save: prev, effects: [] } : specialEvent(prev, now, t, kind, rng)
56  }
57  if (obs.danger !== null) return crack(prev, obs.danger, now, rng)
58  let step: Step = { save: prev, effects: [] }
59  if (obs.test !== null) step = then(step, s => testObserved(s, obs.test === 'pass'))
60  if (obs.failed) step = then(step, s => toolFailed(s))
61  return step
62}
63
64export function onCommand(prev: Save, now: number, t: LocalTime, args: string, rng: () => number): Step {
65  const [sub = '', ...rest] = args.split(/\s+/)
66  const special = isSpecialDay(t)
67  const replies = decodeSpoilers().dateMode.replies
68  switch (sub) {
69    case 'refill':
70      return special ? { save: prev, effects: [], reply: replies.refill } : refill(prev)
71    case 'flip':
72      return special ? { save: prev, effects: [], reply: replies.flip } : settle(flip(prev, now, t), now, rng)
73    case 'dex':
74      return { save: prev, effects: [], reply: dexText(prev, dexTitle(t)) }
75    case 'help':
76      return { save: prev, effects: [], reply: T().help }
77    case 'name': {
78      const name = rest.join(' ').trim()
79      if (name === '' || [...name].length > NAME_MAX) return { save: prev, effects: [], reply: T().nameUsage }
80      const save = structuredClone(prev)
81      save.egg.name = name
82      return { save, effects: [], reply: fill(T().nameReply, { name }) }
83    }
84    default:
85      return { save: prev, effects: [], reply: T().unknown }
86  }
87}
88
hooks/model.ts 82 lines
1import type { Egg, EggRecord, Save } from '../types'
2import { T } from './text'
3
4export const STORE_KEY = 'tea-egg/v1'
5// Used instead while TEA_EGG_FAKE_DATE is in effect, so fake test dates never touch the real egg
6export const FAKE_STORE_KEY = 'tea-egg/v1-fake'
7// Whether the band above the prompt is hidden; kept apart from the save so it survives fake dates and egg resets
8export const BAND_STORE_KEY = 'tea-egg/band-hidden'
9
10export function newRecord(now: number): EggRecord {
11  return {
12    startedAt: now,
13    activeDays: [],
14    maxGapDays: 0,
15    sessionCount: 0,
16    sessionMinutes: 0,
17    testRuns: 0,
18    testFails: 0,
19    cracked: null,
20  }
21}
22
23export function newEgg(no: number, now: number): Egg {
24  return {
25    no,
26    name: T().defaultName, // picked in the current language; existing saves keep their name
27    progress: 0,
28    broth: 100,
29    mood: 70,
30    flipWantedAt: null,
31    activeMinutes: 0,
32    record: newRecord(now),
33  }
34}
35
36export function newSave(now: number): Save {
37  return {
38    version: 1,
39    egg: newEgg(1, now),
40    dex: {},
41    daily: { date: '', gained: 0 },
42    clocks: { lastTickAt: now, brothMs: 0, moodMs: 0, bucketStart: now, bucketActive: false },
43    nightToastFor: null,
44    harvestedAt: null,
45    dateMode: {},
46    welcomed: false,
47  }
48}
49
50const isObj = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v)
51const isNum = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v)
52
53function isSave(v: unknown): v is Save {
54  if (!isObj(v) || v.version !== 1) return false
55  const { egg, dex, daily, clocks, dateMode } = v
56  if (!isObj(egg) || !isObj(egg.record) || !isObj(dex) || !isObj(daily) || !isObj(clocks) || !isObj(dateMode)) return false
57  const r = egg.record
58  return (
59    isNum(egg.no) && typeof egg.name === 'string' && isNum(egg.progress) && isNum(egg.broth) && isNum(egg.mood) &&
60    isNum(egg.activeMinutes) && (egg.flipWantedAt === null || isNum(egg.flipWantedAt)) &&
61    isNum(r.startedAt) && Array.isArray(r.activeDays) && isNum(r.maxGapDays) && isNum(r.sessionCount) &&
62    isNum(r.sessionMinutes) && isNum(r.testRuns) && isNum(r.testFails) &&
63    (r.cracked === null || typeof r.cracked === 'string') &&
64    typeof daily.date === 'string' && isNum(daily.gained) &&
65    isNum(clocks.lastTickAt) && isNum(clocks.brothMs) && isNum(clocks.moodMs) && isNum(clocks.bucketStart) &&
66    typeof clocks.bucketActive === 'boolean' && typeof v.welcomed === 'boolean'
67  )
68}
69
70function salvageDex(raw: unknown): Record<string, number> {
71  if (!isObj(raw) || !isObj(raw.dex)) return {}
72  const dex: Record<string, number> = {}
73  for (const [id, n] of Object.entries(raw.dex)) if (isNum(n) && n > 0) dex[id] = Math.floor(n)
74  return dex
75}
76
77export function parseSave(raw: unknown, now: number): Save {
78  if (isSave(raw)) return raw
79  const dex = salvageDex(raw)
80  return { ...newSave(now), dex, welcomed: Object.keys(dex).length > 0 }
81}
82
hooks/panel.ts 143 lines
1import type { Save } from '../types'
2import type { LocalTime } from './clock'
3import { compose, rasterCells, svgSource, SIZE, type Layer } from './pixels'
4import { decodeSpoilers } from './spoilers'
5import { FACE_BOX, ICON_PALETTE, PALETTE, SPRITES } from './sprites'
6import { SPRITES_HD } from './sprites-hd'
7import { T } from './text'
8import { FACE_TEXT, bar, faceOf, hintOf, stageOf, strWidth } from './view'
9
10// The bigger the pixel art, the coarser it looks; 3x (144px) looks the most refined
11const SVG_SCALE = 3
12export const SVG_PX = SIZE * SVG_SCALE
13// Dark brown backing card: without it the white steam is invisible on light themes
14const SVG_BACKGROUND = '#3b2f2a'
15
16export const ASCII_EGG: readonly string[][] = [
17  ['  .-""-.  ', ' /      \\ ', '|  FACE  |', ' \\      / ', "  '-..-'  "],
18  ['  .-""-.  ', ' / ╱    \\ ', '|  FACE  |', ' \\    ╲ / ', "  '-..-'  "],
19  ['  .-""-.  ', ' /▓╱▓▓▓▓\\ ', '|▓ FACE ▓|', ' \\▓▓▓╲▓▓/ ', "  '-..-'  "],
20  ['  .-""-.  ', ' /█╱████\\ ', '|█ FACE █|', ' \\███╲██/ ', "  '-..-'  "],
21]
22
23export type Art = { kind: 'raster'; cells: string } | { kind: 'svg'; source: string } | { kind: 'ascii'; lines: string[] }
24
25// The stage sprites already have a smiling face: happy/normal use the stage sprite, other faces use the full face_<face> sprite.
26// No face overlay (FACE_BOX is null); still returns a layer array so growth-hint layers can be appended later
27function eggSpriteKey(s: Save, t: LocalTime, now: number): string {
28  const face = faceOf(s, t, now)
29  return face === 'happy' || face === 'normal' ? `stage${stageOf(s.egg.progress)}` : `face_${face}`
30}
31
32export function eggLayers(s: Save, t: LocalTime, now: number): Layer[] {
33  const key = eggSpriteKey(s, t, now)
34  const base = SPRITES[key]
35  const layers: Layer[] = []
36  // The FACE_BOX branch is unused for now; kept for future overlay layers
37  if (base) layers.push(FACE_BOX && key.startsWith('face_') ? { pixels: base, box: FACE_BOX } : { pixels: base })
38  return layers
39}
40
41function artOf(pixels: string, surface: string, palette: readonly number[] = PALETTE): Art {
42  return surface === 'terminal'
43    ? { kind: 'raster', cells: rasterCells(pixels, palette) }
44    : { kind: 'svg', source: svgSource(pixels, palette, SVG_SCALE, SVG_BACKGROUND) }
45}
46
47// Desktop: embed the original high-res PNG in an SVG when available (dark brown card + <image>), else fall back to the pixel SVG
48function hdArt(b64: string | undefined): Art | null {
49  if (!b64) return null
50  const href = `data:image/png;base64,${b64}`
51  const px = SVG_PX
52  return {
53    kind: 'svg',
54    source:
55      `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${px} ${px}" width="${px}" height="${px}">` +
56      `<rect width="${px}" height="${px}" rx="9" fill="${SVG_BACKGROUND}"/>` +
57      `<image width="${px}" height="${px}" href="${href}" xlink:href="${href}"/></svg>`,
58  }
59}
60
61const FACE_COLS = 4
62
63// Truncate by display width, then pad with spaces (full-width chars take 2 columns, combining marks 0)
64function fitWidth(text: string, cols: number): string {
65  let out = ''
66  for (const ch of text) {
67    if (strWidth(out + ch) > cols) break
68    out += ch
69  }
70  return out + ' '.repeat(cols - strWidth(out))
71}
72
73export function eggArt(s: Save, t: LocalTime, now: number, surface: string, columns: number): Art {
74  const layers = eggLayers(s, t, now)
75  const tooNarrow = surface === 'terminal' && columns < SIZE
76  if (layers.length === 0 || tooNarrow) {
77    const stage = stageOf(s.egg.progress)
78    // Only a 4-column face goes inside the frame (parentheses removed) to keep alignment
79    const face = fitWidth(FACE_TEXT[faceOf(s, t, now)].replace(/[()]/g, ''), FACE_COLS)
80    return { kind: 'ascii', lines: [...ASCII_EGG[stage]!.map(l => l.replace('FACE', face)), `   ${T().stageNames[stage]}`] }
81  }
82  if (surface !== 'terminal') {
83    const hd = hdArt(SPRITES_HD[eggSpriteKey(s, t, now)])
84    if (hd) return hd
85  }
86  return artOf(compose(layers), surface)
87}
88
89// Dev preview: step through each public sprite without reading or changing the save
90export const PREVIEW_KEYS = [
91  'stage0', 'stage1', 'stage2', 'stage3',
92  'face_happy', 'face_normal', 'face_bored', 'face_dry', 'face_sleep', 'face_flip', 'face_done',
93] as const
94
95// Each label is read in the current language when accessed
96export const PREVIEW_LABELS: Readonly<Record<string, string>> = Object.defineProperties(
97  {},
98  Object.fromEntries(PREVIEW_KEYS.map(key => [key, { enumerable: true, get: () => T().previewLabels[key] }])),
99)
100
101// Pick the preview from the command argument: empty = next, number = nth (1-based), or a sprite name; off = stop
102export function nextPreview(current: string | null, arg: string): string | null | undefined {
103  const a = arg.trim()
104  if (a === 'off') return null
105  if (a === '') {
106    const i = current === null ? -1 : PREVIEW_KEYS.indexOf(current as (typeof PREVIEW_KEYS)[number])
107    return PREVIEW_KEYS[(i + 1) % PREVIEW_KEYS.length]
108  }
109  const n = Number(a)
110  if (Number.isInteger(n) && n >= 1 && n <= PREVIEW_KEYS.length) return PREVIEW_KEYS[n - 1]
111  return (PREVIEW_KEYS as readonly string[]).includes(a) ? a : undefined
112}
113
114export function previewArt(key: string, surface: string, columns: number): Art | null {
115  if (surface !== 'terminal') {
116    const hd = hdArt(SPRITES_HD[key])
117    if (hd) return hd
118  } else if (columns < SIZE) {
119    return null
120  }
121  const pixels = SPRITES[key]
122  return pixels ? artOf(pixels, surface) : null
123}
124
125// Dex sprites (art sets C/D/E) use their own ICON_PALETTE; return null when one is missing and the dex shows text only.
126// Always the pixel SVG on desktop: 9 HD icons made the pane too big and desktop drew nothing at all
127export function dexArt(id: string, owned: boolean, surface: string): Art | null {
128  const pixels = owned ? decodeSpoilers().sprites[id] : SPRITES.locked
129  if (!pixels) return null
130  return artOf(pixels, surface, ICON_PALETTE)
131}
132
133export function panelLines(s: Save, t: LocalTime, now: number): string[] {
134  const hint = hintOf(s, now)
135  return [
136    `${s.egg.name} #${s.egg.no}  ${FACE_TEXT[faceOf(s, t, now)]}`,
137    `${T().flavor} ${bar(s.egg.progress, 10)} ${Math.floor(s.egg.progress)}%`,
138    `${T().broth} ${bar(s.egg.broth, 10)} ${Math.round(s.egg.broth)}`,
139    `${T().mood} ${bar(s.egg.mood, 10)} ${Math.round(s.egg.mood)}`,
140    ...(hint ? [hint] : []),
141  ]
142}
143
hooks/rules.ts 124 lines
1import type { Egg, Save } from '../types'
2import { newEgg } from './model'
3import type { Effect, Step } from './engine'
4import { decodeSpoilers } from './spoilers'
5import type { Rule, Spoilers } from './spoiler-types'
6import { T, fill } from './text'
7
8const DAY = 86_400_000
9const HINT_FROM = 50
10
11export type Stats = {
12  cracked: boolean
13  maxGapDays: number
14  testRuns: number
15  failRate: number
16  ageDays: number
17  sessionCount: number
18  avgSessionMinutes: number
19}
20
21export function statsOf(egg: Egg, now: number): Stats {
22  const r = egg.record
23  return {
24    cracked: r.cracked !== null,
25    maxGapDays: r.maxGapDays,
26    testRuns: r.testRuns,
27    failRate: r.testRuns > 0 ? r.testFails / r.testRuns : 0,
28    ageDays: (now - r.startedAt) / DAY,
29    sessionCount: r.sessionCount,
30    avgSessionMinutes: r.sessionCount > 0 ? r.sessionMinutes / r.sessionCount : 0,
31  }
32}
33
34// Rule kinds and how they're evaluated are public; thresholds and which egg each yields are in SPOILERS
35export function matches(rule: Rule, st: Stats, roll: number): boolean {
36  switch (rule.when) {
37    case 'cracked': return st.cracked
38    case 'chance': return roll < rule.p
39    case 'gapAtLeast': return st.maxGapDays >= rule.days
40    case 'failRateAbove': return st.testRuns >= rule.minRuns && st.failRate > rule.rate
41    case 'ageAtLeast': return st.ageDays >= rule.days
42    case 'avgSessionAbove': return st.sessionCount > 0 && st.avgSessionMinutes > rule.minutes
43    case 'avgSessionBelow': return st.sessionCount > 0 && st.avgSessionMinutes < rule.minutes
44    case 'always': return true
45  }
46}
47
48export function outcome(egg: Egg, now: number, rng: () => number): string {
49  const st = statsOf(egg, now)
50  const roll = rng()
51  const rules = decodeSpoilers().rules
52  return (rules.find(rule => matches(rule, st, roll)) ?? rules[rules.length - 1]!).egg
53}
54
55export function predictHint(egg: Egg, now: number): string | null {
56  if (egg.progress < HINT_FROM) return null
57  const st = statsOf(egg, now)
58  const { rules, hints } = decodeSpoilers()
59  const guess = rules.find(rule => rule.when !== 'cracked' && rule.when !== 'chance' && matches(rule, st, 1))
60  return guess ? hints[guess.egg] ?? null : null
61}
62
63function harvest(s: Save, now: number, rng: () => number): Effect {
64  const { eggs, crackToast } = decodeSpoilers()
65  const id = outcome(s.egg, now, rng)
66  const info = eggs[id] ?? { name: id, icon: '🥚' }
67  const isNew = (s.dex[id] ?? 0) === 0
68  s.dex[id] = (s.dex[id] ?? 0) + 1
69  const keyword = s.egg.record.cracked
70  const text = keyword !== null
71    ? fill(crackToast, { kw: keyword, name: info.name, icon: info.icon })
72    : fill(T().harvest, { name: info.name })
73  const next = newEgg(s.egg.no + 1, now)
74  next.record.sessionCount = 1 // the current session counts toward the new egg too
75  s.egg = next
76  s.daily.gained = 0 // the daily cap is per egg: a new egg gets a fresh cap even if the last one used today's up
77  s.harvestedAt = now
78  return { kind: 'toast', text: isNew ? text + T().newDex : text }
79}
80
81export function settle(step: Step, now: number, rng: () => number): Step {
82  const s = step.save
83  if (s.egg.record.cracked === null && s.egg.progress < 100) return step
84  const save = structuredClone(s)
85  const effect = harvest(save, now, rng)
86  return { ...step, save, effects: [...step.effects, effect] }
87}
88
89export function crack(prev: Save, keyword: string, now: number, rng: () => number): Step {
90  const save = structuredClone(prev)
91  save.egg.record.cracked = keyword
92  return settle({ save, effects: [] }, now, rng)
93}
94
95// The special-date-mode prize egg hides even its icon until collected. Decided by "is it the prize", not by slot position,
96// so egg kinds added later (regular or special) can sit in any slot without being mistaken for it
97export function isPrizeEgg(id: string, sp: Spoilers = decodeSpoilers()): boolean {
98  return id === sp.dateMode.prize
99}
100
101// Pane header: the pictures carry the rest
102export function dexHeader(save: Save, title: string, sp: Spoilers = decodeSpoilers()): string {
103  const owned = sp.dexSlots.filter(id => (save.dex[id] ?? 0) > 0)
104  return ` ${title} ${owned.length}/${sp.dexSlots.length}`
105}
106
107// Caption under one pane cell: name and count once collected, ??? before
108export function dexCaption(save: Save, id: string, sp: Spoilers = decodeSpoilers()): { name: string; count: string } {
109  const n = save.dex[id] ?? 0
110  return n > 0 ? { name: sp.eggs[id]!.name, count: `×${n}` } : { name: '???', count: ' ' }
111}
112
113// Text-only dex (the /egg dex reply)
114export function dexText(save: Save, title: string, sp: Spoilers = decodeSpoilers()): string {
115  const { eggs, dexSlots } = sp
116  const owned = dexSlots.filter(id => (save.dex[id] ?? 0) > 0)
117  const missing = dexSlots.filter(id => (save.dex[id] ?? 0) === 0)
118  const ownedText = owned.map(id => `${eggs[id]!.icon} ${eggs[id]!.name} ×${save.dex[id]}`)
119  const missingText = missing.map(id => (isPrizeEgg(id, sp) ? '❓ ???' : `${eggs[id]!.icon} ???`))
120  return [dexHeader(save, title, sp), ` ${ownedText.join('   ')}`, ` ${missingText.join('   ')}`]
121    .filter(line => line.trim() !== '')
122    .join('\n')
123}
124
hooks/spoilers.ts 3970 lines
1// Unlock conditions and easter-egg content are base64-encoded so they don't spoil the fun of collecting.
2// This is text and numbers only: no program logic, network or file access.
3// Want to peek? Call decodeSpoilers(), or paste the string into any base64 decoder.
4// Generated by scripts/encode-spoilers.ts. Do not edit by hand.
5import { lang, overlay, type Lang } from './i18n'
6import type { Spoilers } from './spoiler-types'
7
8export const SPOILERS =
9  "eyJjcmFja1RvYXN0Ijoi8J+SpSDllarvvIHom4vooqsgYHtrd31gIOWah+egtOS6huKApuKApuiuiuaIkHtuYW1lfSB7aWNv" +
10  "bn0iLCJkYXRlTW9kZSI6eyJiYW5kIjp7ImJhciI6IuS6uumhnuWFpeWRsyIsImZhY2UiOiIowqzigL/CrCkiLCJoaW50cyI6" +
11  "WyLkvaDogZ7otbfkvobpgoTlvojnlJ/igKYiLCLkvaDnnIvotbfkvobmnInpu57pubnigKYiLCLkvaDplovlp4vmnInmu7fl" +
12  "kbPkuobigKYiLCLkvaDlv6vooqvmu7fpgI/kuobigKYiXSwiaWNvbiI6IvCfkKMiLCJ0aXRsZSI6IuWwj+mbnuato+WcqOa7" +
13  "t+S9oCJ9LCJkYXkiOjEsImRleFRpdGxlIjoi5Lq66aGe5ZyW6ZGRIiwiaHVtYW5TdGVwIjoyLCJsaW5lcyI6eyJkYW5nZXIi" +
14  "Olsi5Lq66aGe5Y+I5Zyo546p5Y2x6Zqq55qE5p2x6KW/5LqG77yM5bCP6Zue6KaB6Lef5L2g5aq96KybIl0sIm1ha2V1cCI6" +
15  "IuaYqOWkqeaYr+aEmuS6uuevgOWWlCDwn4OPIOS9oOmMr+mBjuS6huWwj+mbnu+8jOS9huaEmuS6uuibi+mChOaYr+e1puS9" +
16  "oCIsInJldmVhbCI6IvCfjokg5oSa5Lq656+A5b+r5qiC77yB5bCP6Zue5piO5aSp5pyD57iu5Zue6JuL5q686KOh44CC6YCB" +
17  "5L2g5LiA6aGG57SA5b+15ZOBIOKGkiIsInRlc3RGYWlsIjpbIuaykumXnOS/gu+8jOS6uumhnuacrOS+huWwseaYr+mAmeao" +
18  "oyIsIuWwj+mbnuW3sue2k+e/kuaFo+S6hiJdLCJ0ZXN0UGFzcyI6WyLpm6PlvpfllpTvvIzntabkvaDkuIDpoYbpo7zmlpki" +
19  "XSwidHVybiI6WyLmiJHnmoTkurrpoZ7ku4rlpKnlvojkuZbvvIzlj6rlr6vkuoYgMyDlgIsgYnVnIPCfjawiLCLkurrpoZ7l" +
20  "j4jlrozmiJDkuIDku7bkuovkuobvvIzlpb3mo5Lmo5IiLCLmu7fkuobkvaDkuIDmlbTlpKnvvIzpgoTmmK/mspLku4Dpurzl" +
21  "kbPpgZMiXX0sIm1vbnRoIjo0LCJwcml6ZSI6Ing5IiwicmVwbGllcyI6eyJmbGlwIjoi5bCP6Zue6Kmm5ZyW5oqK5L2g57+7" +
22  "6Z2i77yM5aSx5pWX5LqGIiwicmVmaWxsIjoi5bCP6Zue5bmr5L2g5YCS5LqG5LiA5p2v5rC044CC5Lq66aGe6KaB5aSa5Zad" +
23  "5rC0IPCfkqcifSwicmV2ZWFsSG91ciI6MTcsInRocm90dGxlTXMiOjYwMDAwMH0sImRleFNsb3RzIjpbImU4IiwiZTYiLCJl" +
24  "NCIsImUxIiwiZTciLCJlMyIsImU1IiwiZTIiLCJ4OSJdLCJlZ2dzIjp7ImUxIjp7Imljb24iOiLwn42zIiwibmFtZSI6IuiN" +
25  "t+WMheibiyJ9LCJlMiI6eyJpY29uIjoi4pyoIiwibmFtZSI6IumHkeibiyJ9LCJlMyI6eyJpY29uIjoi8J+WpCIsIm5hbWUi" +
26  "OiLnmq7om4sifSwiZTQiOnsiaWNvbiI6IvCfp4IiLCJuYW1lIjoi6bm56JuLIn0sImU1Ijp7Imljb24iOiLwn5SpIiwibmFt" +
27  "ZSI6IumQteibiyJ9LCJlNiI6eyJpY29uIjoi8J+NsiIsIm5hbWUiOiLmu7fom4sifSwiZTciOnsiaWNvbiI6IuKZqO+4jyIs" +
28  "Im5hbWUiOiLmuqvms4nom4sifSwiZTgiOnsiaWNvbiI6IvCfpZoiLCJuYW1lIjoi6Iy26JGJ6JuLIn0sIng5Ijp7Imljb24i" +
29  "OiLwn4OPIiwibmFtZSI6IuaEmuS6uuibiyJ9fSwiaGludHMiOnsiZTMiOiLom4vmrrzlpb3lg4/mnInpu57nmbzntqDigKYi" +
30  "LCJlNCI6Iuibi+auvOWGkuWHuuS6hum5veiKseKApiIsImU1Ijoi6YCZ6aGG6JuL6LaK5L6G6LaK56Gs5LqG4oCmIiwiZTYi" +
31  "OiLogZ7otbfkvobmnInmv4Pmv4PnmoTmu7flkbPigKYiLCJlNyI6IuaRuOi1t+S+hua6q+a6q+i7n+i7n+eahOKApiIsImU4" +
32  "Ijoi6Iy26aaZ6LaK5L6G6LaK5r+D5LqG4oCmIn0sImkxOG4iOnsiZW4iOnsiY3JhY2tUb2FzdCI6IvCfkqUgQ3JhY2shIGB7" +
33  "a3d9YCBzdGFydGxlZCB0aGUgZWdn4oCmIGl0IHR1cm5lZCBpbnRvOiB7bmFtZX0ge2ljb259IiwiZGF0ZU1vZGUiOnsiYmFu" +
34  "ZCI6eyJiYXIiOiJIdW1hbiBmbGF2b3IiLCJoaW50cyI6WyJZb3Ugc3RpbGwgc21lbGwgcmF34oCmIiwiWW91IHRhc3RlIGEg" +
35  "Yml0IHNhbHR54oCmIiwiWW91J3JlIHBpY2tpbmcgdXAgZmxhdm9y4oCmIiwiWW91J3JlIGFsbW9zdCBmdWxseSBtYXJpbmF0" +
36  "ZWTigKYiXSwidGl0bGUiOiJUaGUgY2hpY2sgaXMgbWFyaW5hdGluZyB5b3UifSwiZGV4VGl0bGUiOiJIdW1hbiBEZXgiLCJs" +
37  "aW5lcyI6eyJkYW5nZXIiOlsiVGhlIGh1bWFuIGlzIHBsYXlpbmcgd2l0aCBkYW5nZXJvdXMgc3R1ZmYgYWdhaW4uIFRoZSBj" +
38  "aGljayBpcyB0ZWxsaW5nIHlvdXIgbW9tIl0sIm1ha2V1cCI6Illlc3RlcmRheSB3YXMgQXByaWwgRm9vbHMnIERheSDwn4OP" +
39  "IFlvdSBtaXNzZWQgdGhlIGNoaWNrLCBidXQgeW91IHN0aWxsIGdldCB0aGUgRm9vbCdzIEVnZyIsInJldmVhbCI6IvCfjokg" +
40  "SGFwcHkgQXByaWwgRm9vbHMnIERheSEgVGhlIGNoaWNrIGNyYXdscyBiYWNrIGludG8gaXRzIHNoZWxsIHRvbW9ycm93LiBI" +
41  "ZXJlJ3MgYSBzb3V2ZW5pciDihpIiLCJ0ZXN0RmFpbCI6WyJJdCdzIG9rYXksIGh1bWFucyBhcmUganVzdCBsaWtlIHRoYXQi" +
42  "LCJUaGUgY2hpY2sgaXMgdXNlZCB0byBpdCBieSBub3ciXSwidGVzdFBhc3MiOlsiV293LCB0aGF0J3MgcmFyZS4gSGF2ZSBz" +
43  "b21lIGNoaWNrIGZlZWQiXSwidHVybiI6WyJNeSBodW1hbiB3YXMgZ29vZCB0b2RheSwgb25seSAzIGJ1Z3Mg8J+NrCIsIk15" +
44  "IGh1bWFuIGZpbmlzaGVkIGFub3RoZXIgdGhpbmcuIEdvb2Qgam9iISIsIk1hcmluYXRlZCB5b3UgYWxsIGRheSBhbmQgeW91" +
45  "IHN0aWxsIHRhc3RlIGxpa2Ugbm90aGluZyJdfSwicmVwbGllcyI6eyJmbGlwIjoiVGhlIGNoaWNrIHRyaWVkIHRvIGZsaXAg" +
46  "eW91IG92ZXIuIEl0IGZhaWxlZCIsInJlZmlsbCI6IlRoZSBjaGljayBwb3VyZWQgeW91IGEgZ2xhc3Mgb2Ygd2F0ZXIuIEh1" +
47  "bWFucyBuZWVkIHRvIHN0YXkgaHlkcmF0ZWQg8J+SpyJ9fSwiZWdncyI6eyJlMSI6eyJuYW1lIjoiRnJpZWQgRWdnIn0sImUy" +
48  "Ijp7Im5hbWUiOiJHb2xkZW4gRWdnIn0sImUzIjp7Im5hbWUiOiJDZW50dXJ5IEVnZyJ9LCJlNCI6eyJuYW1lIjoiU2FsdGVk" +
49  "IEVnZyJ9LCJlNSI6eyJuYW1lIjoiSXJvbiBFZ2cifSwiZTYiOnsibmFtZSI6IlNveS1CcmFpc2VkIEVnZyJ9LCJlNyI6eyJu" +
50  "YW1lIjoiT25zZW4gRWdnIn0sImU4Ijp7Im5hbWUiOiJUZWEgRWdnIn0sIng5Ijp7Im5hbWUiOiJGb29sJ3MgRWdnIn19LCJo" +
51  "aW50cyI6eyJlMyI6IlRoZSBzaGVsbCBsb29rcyBhIGxpdHRsZSBncmVlbuKApiIsImU0IjoiU2FsdCBjcnlzdGFscyBvbiB0" +
52  "aGUgc2hlbGzigKYiLCJlNSI6IlRoaXMgZWdnIGtlZXBzIGdldHRpbmcgdG91Z2hlcuKApiIsImU2IjoiU21lbGxzIHJpY2hs" +
53  "eSBvZiBzb3kgc2F1Y2XigKYiLCJlNyI6IkZlZWxzIHdhcm0gYW5kIHNvZnTigKYiLCJlOCI6IlNtZWxscyBvZiB0ZWHigKYi" +
54  "fX19LCJydWxlcyI6W3siZWdnIjoiZTEiLCJ3aGVuIjoiY3JhY2tlZCJ9LHsiZWdnIjoiZTIiLCJwIjowLjAxLCJ3aGVuIjoi" +
55  "Y2hhbmNlIn0seyJkYXlzIjozLCJlZ2ciOiJlMyIsIndoZW4iOiJnYXBBdExlYXN0In0seyJlZ2ciOiJlNCIsIm1pblJ1bnMi" +
56  "OjUsInJhdGUiOjAuNSwid2hlbiI6ImZhaWxSYXRlQWJvdmUifSx7ImRheXMiOjIxLCJlZ2ciOiJlNSIsIndoZW4iOiJhZ2VB" +
57  "dExlYXN0In0seyJlZ2ciOiJlNiIsIm1pbnV0ZXMiOjEyMCwid2hlbiI6ImF2Z1Nlc3Npb25BYm92ZSJ9LHsiZWdnIjoiZTci" +
58  "LCJtaW51dGVzIjoyMCwid2hlbiI6ImF2Z1Nlc3Npb25CZWxvdyJ9LHsiZWdnIjoiZTgiLCJ3aGVuIjoiYWx3YXlzIn1dLCJz" +
59  "cHJpdGVzIjp7ImUxIjoiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
60  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
61  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
62  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
63  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
64  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
65  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
66  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
67  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
68  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
69  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
70  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
71  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
72  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
73  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
74  "Li4uLi4uLi4uLi4wdW9taTAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMDAzb29vb21oMDAwMC4u" +
75  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGkzc2lvb29vbW9taG1vdTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
76  "Li4uLi4waW9vbW1vb29vbW9vb29vbzMwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjB1b29vb21vb29vb29vb29tb28z" +
77  "MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGlvb29vb29vb29vb29vb29vbW8zMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
78  "Li4uMG9vb21vb29vb2hoaGhob29vbW9vdTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMG1vbW9vb29oaGhoaGhoaG9vb29v" +
79  "b3UwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMHVvb29vb2hob29oaGhoaGhvb29vb29pMC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
80  "Li4wdW9vb29vaGlvb2hoaGhoaGhob29vbW9tMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5pb29vb29oaG9vaGhoaGhoaGhoaG9v" +
81  "b21oMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5tb29vb29oaW9oaGhoaGhoaGhoaG9vb28zMC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
82  "Li5vb21vb2hob2hvMGhoaGhvMGhoaGhvb29vdS4uLi4uLi4uLi4uLi4uLi4uLi4uLi5tb21vb2hoaGgwMGhoaGgwMGhoaGhv" +
83  "b29vbS4uLi4uLi4uLi4uLi4uLi4uLi4uLi51b29vb2hoaHBoaDBoaDBoaHBoaGhvb29vby4uLi4uLi4uLi4uLi4uLi4uLi4u" +
84  "Li4wbW9vb29ocHBwaGgwMGhocHBwaG1vb21vbS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZ29vb29oaGhoaGhoaGhoaGhoaG9v" +
85  "bW9vbS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wM29tb29vaGhoaGhoaGhoaGhob29vb29taC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
86  "Li4wM29tb29vb2hoaGhoaGhoaGhtb29vb29tMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uYm1vb29vb29oaGhoaGhoaG9vb29v" +
87  "b211MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGlvb29vb29vb29vb29vb29vb21vb2cwLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
88  "Li4uLjBob29vbW9vb29vb29vb29vb29tZzAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMG1tb29vb29vb29vb21vb21p" +
89  "MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwaG1tb21vb29vbWhtaTAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
90  "Li4uLi4uLi4uMDBobW9tbW0zaDAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAwMDAwMC4uLi4u" +
91  "Li4uLi4uLi4uLi4uLi4uIiwiZTIiOiIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
92  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
93  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
94  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
95  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
96  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
97  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
98  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
99  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
100  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
101  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
102  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
103  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
104  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
105  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMy4uLi4uLi4uLi4uLi4uLi4u" +
106  "Li4uLi4uLi4uLi4uLi4uLi5wLi4uMDAwMC4uLi4ubS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4zLi4uLjAwaWlo" +
107  "aDAwLi4zbW1tLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjMzMy4uMGhoaWloaGhoMC4ubS4uLi4uLi4uLi4uLi4uLi4u" +
108  "Li4uLi4uLi4uLi4uLi4zLi4waGhvb2hoaHNzczAuMy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4zLjBpaG9vb2ho" +
109  "aGhzczAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhob29vaGhoaGhoc2gwLi4uLi4uLi4uLi4uLi4uLi4u" +
110  "Li4uLi4uLi4uLi4uLi4uMGhpb29vaWloaGhoc3MwLi4uMy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ubS4waWlpb2lpaWho" +
111  "aGhoc3NzMC4zMy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4waWlpaWltaGhoaGhoaHNzMC4uMy4uLi4uLi4uLi4uLi4u" +
112  "Li4uLi4uLi4uLi4uLjBoaWlvaW1oaGloaGhoaHNzczAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBpaWlpaWloaGho" +
113  "aGhoaHNzczAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhoaWlpaWlpaGhoaGhoaGhzc3MwLi4uLi4uLi4uLi4uLi4u" +
114  "Li4uLi4uLi4uLi4uMGhoaWlpaWlpaWhoaGhoaGhzc3MwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhoaWlpbzBpaWlo" +
115  "aG8waGhzc3MwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhoaWlpMDBoaWlpaDAwaGhzc3MwLi4uLi4uLi4uLi4uLi4u" +
116  "Li4uLi4uLi4uLi4uMGhoaXBwcGhoMDAwaGh1cHBzc3MwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhzbXVwaGhoaGho" +
117  "aGh1cHBzc3MwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGhzaGloaGhpaGhoaGhoc3NzaHMwLi4uLi4uLi4uLi4uLi4u" +
118  "Li4uLi4uLi4uLi4uMGhzaGloaGhoaGhoaGhoc3NzaHMwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBoc2hoaGhoaGho" +
119  "aGhzc3NpaDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLm5ic3NoaWhoaGhoc3NzczNoNm4uLi4uLi4uLi4uLi4uLi4u" +
120  "Li4uLi4uLi4uLi4uLi4waHNzc2hoaGhzc3MzM2lzMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMy4uMGhzc3Nzc3Nz" +
121  "czMzaWgwLi4zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMzMuLjBoaHNzc3NpMzNoczAuLjMzMy4uLi4uLi4uLi4uLi4u" +
122  "Li4uLi4uLi4uLi4uMy4uLi4wMGhoaGhoaHMwMC4uLi4zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMDAw" +
123  "MDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4iLCJlMyI6Ii4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
124  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
125  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
126  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
127  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
128  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
129  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
130  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
131  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
132  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
133  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
134  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
135  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
136  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
137  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMDAwMC4uLi4uLi4uLi4uLi4u" +
138  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDY2NjY2NjAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
139  "LjA2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2bTY2NjY2NjY2NjAuLi4uLi4uLi4u" +
140  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjZvbTY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2" +
141  "Nm1tNjY2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjI3Nzc3MjI2NjY2MC4uLi4uLi4u" +
142  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uMDZtNjYyNzc3MjIyNzcyNjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2" +
143  "NjI0NzIyMjIyMjc3MjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjY2MjQ3MjIyMjIyMjI3NzI2bjYwLi4uLi4u" +
144  "Li4uLi4uLi4uLi4uLi4uLi4uLi4wNjYyNzQyMjIyMjIyMjIyNzcyNjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjYy" +
145  "NzIyMjIyMjIyMjIyMjcyNjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY3NzIyMjIyMjIyMjIyMjI3NjY2MC4uLi4u" +
146  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjI3MjIyMjIyMjIyMjIyMjI3MjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjI3" +
147  "MjIwMDIyMjIyMjAwMjI3MjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjI3MnAwMDIwMjIwMjAwcDI3MjY2MC4uLi4u" +
148  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjI3cHBwMjIyMDAyMjJwcHA3MjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjI3" +
149  "MnAyMjIyMjIyMjIycDI3MjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjYyNzIyMjIyMjIyMjIyMjcybjY2MC4uLi4u" +
150  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjYyNzIyMjIyMjIyMjIyMjcyNjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYjY2" +
151  "MjcyMjIyMjIyMjIyNzI2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYjY2Mjc3MjIyMjIyMjc3NzJuNjYwLi4uLi4u" +
152  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uMGI2NjIyMjcyMjIyMjIyMm42NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBi" +
153  "NjY2NjAyMjIybm42NmI2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDZiNjY2NjY2NjY2NjAwLi4uLi4uLi4u" +
154  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwNjY2NjY2NjYwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
155  "Li4uMDAwMDAwMDAuLi4uLi4uLi4uLi4uLi4uLi4uLiIsImU0IjoiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
156  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
157  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
158  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
159  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
160  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
161  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
162  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
163  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
164  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
165  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
166  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
167  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
168  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
169  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
170  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
171  "Li4uLi4uLi4uLi4uLi4wMDAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDBvb29vbTAwLi4u" +
172  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwb29vb29vb29sMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
173  "Li4uLi4uLi4uMG9vb29vb29vb29vbTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb29vb29vb29vb29vbTAu" +
174  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBtb29vb29vb29vb29vb20wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
175  "Li4uLi4uLjBvb29vbTg4ODhtb29vb28wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMG9vb284ODhoODg4OG9vb29t" +
176  "MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMG9vbzg4bW04ODg4ODhvb29vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
177  "Li4uLi4wb29vODhtbTg4ODg4ODg4b29vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb284ODNtODg4ODg4ODg4b29v" +
178  "bDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb284ODM4ODg4ODg4ODg4OG9vbTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
179  "Li4uLjBvb204Mzg4ODg4ODg4ODg4OG9vbTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvbzhoOG8wODg4ODhvMDg4OG9v" +
180  "bDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvbzhoODAwODg4ODgwMDg4OG9vbDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
181  "Li4uLjBvbzg4OHA4ODA4MDg4OHA4OG9vbDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvbzg4cHA4ODgwODg4cHA4dW9v" +
182  "bDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb284ODg4ODg4ODg4ODg4b29sbDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
183  "Li4uLjBvb284ODg4ODg4ODg4ODg4b29sMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb29vODg4ODg4ODg4ODhvb29s" +
184  "MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMG9vb204ODg4ODh1dW9vbW0wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
185  "Li4uLi4uMG9vb29vb29vb29vb29tbTcwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb29vb29vb29vb21tbDAu" +
186  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb29vb29vb29tbW1sMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
187  "Li4uLi4uLi4uMDBtbW1tbW1tdDAwLi4uLi4uLi4uLi4uLi4uLi4uIiwiZTUiOiIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
188  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
189  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
190  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
191  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
192  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
193  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
194  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
195  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
196  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
197  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
198  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
199  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
200  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
201  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAw" +
202  "MDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDAyMjIyMjIwMC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
203  "Li4uLi4uLi4uLi4uLi4uLi4wMjIyNDIyMjIyMDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAyNDQwNTUy" +
204  "MDAwMjIwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDI0MDQ1MjIwMDIyMjIwLi4uLi4uLi4uLi4uLi4uLi4u" +
205  "Li4uLi4uLi4uLi4uLi4wMjV0MjA0NDA1NTUwMDIwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAyMnQyMjIwMjIy" +
206  "MDAyMjIyMDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAyNDIyMjI0MDQyMjIyMDIwMjAuLi4uLi4uLi4uLi4uLi4u" +
207  "Li4uLi4uLi4uLi4uMDIwMjIydHQyMDA0MjIyMjAyMDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDUyMDJ0NTAwMjIw" +
208  "NTIyMjIwNTAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDIyNDUwMDAyMjIyMDQyMDA1MDAwLi4uLi4uLi4uLi4uLi4u" +
209  "Li4uLi4uLi4uLi4wMjIyNDAyMjIyMjIyMjA1MjUwMjAwZi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMjI0MDIyMjIyMjIy" +
210  "MjIwMjIyMjIyMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDQyMjIybDAyMjIyMjJsMDIyMDIyMC4uLi4uLi4uLi4uLi4u" +
211  "Li4uLi4uLi4uLi4wMjUwMjIyMDAyMjIyMjIwMDIyMDIwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNDAwMjJwMDAyMDIy" +
212  "MDIwMHAyMDAyMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMjAyMnBwcDIyMjAwMjIycHBwMDAwMC4uLi4uLi4uLi4uLi4u" +
213  "Li4uLi4uLi4uLi4wMDQyMjJwMjIyMjIyMjIyMnAwMDIwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMjA0MjIyMjIyMjIy" +
214  "MjIyMjIwMjAyMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMjIwNDAyMjIyMjIyMjIyMDA1MDAyMC4uLi4uLi4uLi4uLi4u" +
215  "Li4uLi4uLi4uLi4uMDIyMDUwNTIyMjIyMjAwMjUwMDAwZi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDIyMDIyMDQyMjIw" +
216  "MDI1NTAwMDIwZi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAyMDIyMjA1MjIwMjUyMDIwMjAuLi4uLi4uLi4uLi4uLi4u" +
217  "Li4uLi4uLi4uLi4uLi4wMjIwMjIwNTIwMDAwMDIyMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDAyMDAyMDIy" +
218  "MDAwMjIwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDIyMDAwMjAwMDAuLi4uLi4uLi4uLi4uLi4uLi4u" +
219  "Li4uLi4uLi4uLi4uLi4uLi4uLjAwMDAwMDAwLi4uLi4uLi4uLi4uLi4uLi4uLi4iLCJlNiI6Ii4uLi4uLi4uLi4uLi4uLi4u" +
220  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
221  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
222  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
223  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
224  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
225  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
226  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
227  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
228  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
229  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
230  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
231  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
232  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMDAwMC4uLi4uLi4uLi4uLi4u" +
233  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDY2NjY2NjAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
234  "LjA2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2bW02NjY2NjY2NjAuLi4uLi4uLi4u" +
235  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjZtbW02NjY2NjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2" +
236  "Nm1tbTY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2Nm1tNjY2NjY2NjY2NjY2MC4uLi4uLi4u" +
237  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2Nm1tNjY2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2" +
238  "NjY2NjY2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjZtbTY2NjY2NjY2NjY2NjY2NjAuLi4uLi4u" +
239  "Li4uLi4uLi4uLi4uLi4uLi4uLi4wNjZvbTY2NjY2NjY2NjY2NjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjY2" +
240  "NjY2NjY2NjY2NjY2NjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjY2NjY2NjY2NjY2NjY2NjYwLi4uLi4u" +
241  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjY2NjY2NjY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2" +
242  "NjYwMDY2NjY2NjAwNjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjYwMDY2NjY2NjAwNjY2NjYwLi4uLi4u" +
243  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2cDYwMDYwNjYwNjAwNnA2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjZw" +
244  "cHA2NjY2MDA2NjY2cHBwNjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2cDY2NjY2NjY2NjY2NnA2NjYwLi4uLi4u" +
245  "Li4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjY2NjY2NjY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2" +
246  "NjY2NjY2NjY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wNjY2NjY2NjY2NjY2NjY2NjY2NjAuLi4uLi4u" +
247  "Li4uLi4uLi4uLi4uLi4uLi4uLi4wNjY2NjY2NjY2NjY2NjY2NjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2" +
248  "NjY2NjY2NjY2NjY2NjY2MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDY2NjY2NjY2NjY2NjY2NjY2MC4uLi4uLi4u" +
249  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLjA2NjY2NjY2NjY2NjY2NjYwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4w" +
250  "MDY2NjY2NjY2NjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwNjY2NjY2NjYwMC4uLi4uLi4uLi4u" +
251  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDAwMDAwMDAuLi4uLi4uLi4uLi4uLi4uLi4uLiIsImU3IjoiLi4uLi4uLi4u" +
252  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
253  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
254  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
255  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
256  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
257  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
258  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
259  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
260  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
261  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
262  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
263  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
264  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
265  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
266  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAwMDAwMC4uLi4u" +
267  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDBvb29vb29vbzAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
268  "Li4uLi4uMDBvb29sbGxqamxsbG9vbzAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb29sbGpsbGxsbGxsbGpsbG9v" +
269  "MC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvbGpsbGxzc2JzYmJzc2xsbGptbzAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
270  "Li4uMG9sbGxsc2Jzc29vb29vc3NibGxsbG8wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb21sbHNzcWJvb29vb29vb21ic3Nt" +
271  "bGxvMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5tb2xiYnFib29vbW1tbW1vb29vYmhzc2xvbC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
272  "LjBvbWJiaGJvb21vb29tbW1tbW1vb2Jxc2JsbzAuLi4uLi4uLi4uLi4uLi4uLi4uLjBvbHM5OW9vbW9vb21tbW1tbW1tb205" +
273  "c3NsbzAuLi4uLi4uLi4uLi4uLi4uLi4uLjBvYnNzc29vbW9tbW1tbW1tbW1tbW11bXNibzAuLi4uLi4uLi4uLi4uLi4uLi4u" +
274  "LjBvYm1zbW9tb21vMG1tbW8wbW1tbW1tYnE5bzAuLi4uLi4uLi4uLi4uLi4uLi4uLjBvc2hzb29tbXAwMDBtbTAwMHBtbW1t" +
275  "czlibzAuLi4uLi4uLi4uLi4uLi4uLi4uLjBvb3MzOW9tcHBwbW0wMG1tcHBwbW1zcXNvbTAuLi4uLi4uLi4uLi4uLi4uLi4u" +
276  "Li4wb285OTlvbXBtbW1tbW1tbXBtbXNxYm9vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wa29vc2Jtb21tbW1tbW1tbW05MTli" +
277  "b29rMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGtvb3NzZ21vbW1tbW1tdXM5OWJvb2owLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
278  "Li4uMG9rb29vb29zZ2dnZ2dzYjNtb29tamwwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBtampvb29vb29vb29vb29vb2pq" +
279  "bDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBtb2xqamptbW1tbW1tbGpqamxsbDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
280  "Li4uLi4wbW9vb21qampqampqamxtbGxsMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGxvam1tb21tbW1tbWxqbGww" +
281  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBtbW1tam1qam1qbW1sbTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
282  "Li4uLi4uLi4wMHRsbGxsbGxsbHQwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjA0bW1tbW1tNzAuLi4u" +
283  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAwMDAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uIiwiZTgiOiIu" +
284  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
285  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
286  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
287  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
288  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
289  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
290  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
291  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
292  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
293  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
294  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
295  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
296  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
297  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
298  "Li4uLi4uLi4uLi4uLi4uLi4uLi4wMDAwMDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDA2Z2dn" +
299  "Z2IwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYmc2Z2dnZzZnYjAwLi4uLi4uLi4uLi4uLi4uLi4u" +
300  "Li4uLi4uLi4uLi4uLi4uMDBnZ2d1NmdnNjZiYmJiMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGdndXV1NjY2" +
301  "YmdnZ2JiMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZ2J1dXU2Z3ViNmdnZ2diYjAuLi4uLi4uLi4uLi4uLi4u" +
302  "Li4uLi4uLi4uLi4uLi4wZzZ1dTZ1Z3VnNmJnYmdiYmIwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBnZ3U2NnV1dWd1" +
303  "YjY2Z2dnYmIwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBnZ3V1NnV1dXVnYmdnNmdnYmIwLi4uLi4uLi4uLi4uLi4u" +
304  "Li4uLi4uLi4uLi4uMGdiZ2dnNmd1dWdiZ3VnZzY2YjZiMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGdnZ2I2NjY2Z2Jn" +
305  "Z2dnZ2JiNmJiMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGdnZzY2Z2d1YmdnYmdnYmdnNmJiMC4uLi4uLi4uLi4uLi4u" +
306  "Li4uLi4uLi4uLi4wZ2c2NmdnZ3VnZ2dnZ2I2Z2dnYjZiNjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYjY2Z3VnMDBnZ2dn" +
307  "Z2cwMGdnYjY2NjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYmdidWdnMDBnZ2dnZ2cwMGdnYjZiYjAuLi4uLi4uLi4uLi4u" +
308  "Li4uLi4uLi4uLi4wZ2didXV1MDBnMGdnMGcwMHJyYmJiYjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZ2dnYnBwcGdnZzAw" +
309  "Z2dncHBwYmJiYjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZ2dnNnBwZ2dnZ2dnZ2dnZ3BwYmI2NjAuLi4uLi4uLi4uLi4u" +
310  "Li4uLi4uLi4uLi4wYmdnNjZnZ2dnZ2dnZ2diNjZiYjZiYjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYmdnZzZnZ2dnZ2di" +
311  "ZzY2Z2c2NjZiYjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGdnZzY2NjZnZ2dnNjZnZ2diNmJiMC4uLi4uLi4uLi4uLi4u" +
312  "Li4uLi4uLi4uLi4uMGJiYmc2ZzY2Z2diZ2c2Z2JiNmJiMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBiZ2c2YmdnNjZn" +
313  "Z2dnNmJiNmIwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBiYmJnZ2dnZzZiZ2diYjY2YmIwLi4uLi4uLi4uLi4uLi4u" +
314  "Li4uLi4uLi4uLi4uLi4wZ2JiYmJiYmI2YmJiYmJiYjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMDBiYmJiYmJi" +
315  "NmJiYmIwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMGJiYmJiNmJiMDAuLi4uLi4uLi4uLi4uLi4uLi4i" +
316  "LCJ4MCI6Ii4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
317  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
318  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
319  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
320  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
321  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
322  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
323  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
324  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
325  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
326  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
327  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
328  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
329  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMDAwMC4uLi4uLi4uLi4uLi4u" +
330  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMG9vb29tbzAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
331  "LjBvb29vb29tb29tMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMG9vb29vb29vb29vbzAuLi4uLi4uLi4u" +
332  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wb29vb29vb29vb29vb28wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5v" +
333  "b29vb29vb29tb29vb28wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb21vb29vb29vb29vb29vMC4uLi4uLi4u" +
334  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvMG8wMG9vMDAwb29vb29vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAw" +
335  "MDAzaTAwaTNpMDBpaTBvMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMzNpM2lpM2lpaTNpaTAwMC4uLi4uLi4u" +
336  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wM2lpaWkzM2lpaWlpaWkwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5p" +
337  "MzAwMDBpaWlpMDAwMGlpLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5paTNvMDNpaWlpaW8wM2lpLi4uLi4uLi4u" +
338  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi5paXBpaTNpMDAzaWlpcHBpLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4w" +
339  "MzNpaTMzM2kzaWlpaTMwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAzaWlpaWlpaWlpMDAwMC4uLi4uLi4u" +
340  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uMGlpaTBpaWlpaWlpaWlpaWlpaTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGlp" +
341  "MGlpaWlpaWlpaWkwaWkwaTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGkwbzBpaTAwMGlpMG8wMDBvMzAuLi4uLi4u" +
342  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb28wMG9vbzAwMG9vb29vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBv" +
343  "b29vb29vb29vb29vb29vMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb29vbW9vb29vb29vb29vLi4uLi4uLi4u" +
344  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wbW9vb29vb29vb29tb28wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
345  "MG1tbW9vb29vb29vbDAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBvb2xvb29vb2xvMC4uLi4uLi4uLi4u" +
346  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMGxvb29vbzAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
347  "LjBoaDAwMDAwaGgwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAuLi4uMDAwLi4uLi4uLi4uLi4u" +
348  "Li4uLi4uLiIsIng5IjoiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
349  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
350  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
351  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
352  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
353  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
354  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
355  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
356  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
357  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
358  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
359  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
360  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
361  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAwMC4uLi4uLi4uMDAwMDAu" +
362  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMGVlZTAwMC4uLjAwYWFhYTAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
363  "Li4uLjBlZWVlZWVlMC4uLmFhYWFhYWFhMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGVlZWVlZWVlZTAuMGFhYWFhYWNh" +
364  "YTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGVkMGRlZWVlZTAwMGFhYWFjMDBjYTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
365  "Li4wMDAwLi4wZWVlMDAwMDBhYWMwLi4wMDAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBpaTAuLi4wZGUwMGlpaTAwYWMwLi4u" +
366  "MGlpMC4uLi4uLi4uLi4uLi4uLi4uLi4uLjBoaTAuLi4wMDBpaWlpaWlpMDAwLi4uMGloMC4uLi4uLi4uLi4uLi4uLi4uLi4u" +
367  "Li4wMDAuLi4waWlpMDAwMDBpaWkwLi4uLjAwMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4waDAwMGFlYTAwMGgwLi4u" +
368  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDBkYWVlZWFlMDAwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
369  "Li4uLi4uLjBhYWFhZWVlZWVhYWFhMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBhYWFtbWVlZW1tYWFhMC4u" +
370  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGVlYW1tbW1tbW1tbWFlZS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
371  "Li4uLi4uMGVlbW1tbW1tbW1tbW1lZTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGVlbW1tbW1tbW1tbW1tZTAu" +
372  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZWVtbTAwbW1tbW0wMG1tbWUwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
373  "Li4uLi4wYW9tbTAwbW0wbW0wMG1tbWEwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYWFtcHBtbTBwMG1tcHBtYWEw" +
374  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYWFtbW1tbW0wbW1tbW1hYWEwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
375  "Li4uLi4wYWFhZW9tbW1tbW1tbWVhYWEwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wYWFlZWVtbWVlZW1tZWVlYWEw" +
376  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uMGVlZWVlbWVlZWVlZWVlZTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
377  "Li4uLi4uMGFlZWVhYWVlZWFhZWVlZTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjBlZWVhYWVlZWFhZWVhMC4u" +
378  "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wZWFhYWFlYWFhYWUwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u" +
379  "Li4uLi4uLi4uMGFhYWFlYWFhYTAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4wMDAwMDAwLi4uLi4u" +
380  "Li4uLi4uLi4uLi4uLi4uIn0sInNwcml0ZXNIZCI6eyJlMSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKQUFBQUNRQ0FZ" +
381  "QUFBRG5SdUs0QUFCUHJrbEVRVlI0QWV6QmE2eTJlMklYNU92M3YrOW5yZmV3Wng5bTd6MHpIWmxwTzIySEZxYVYwTXE1VTBy" +
382  "QkF4U0lFUlNxRW1sS2lkR0FRZzFvL0tEQmhBOWdTSWhpWXBxZ0lHamlGeUxWRDJyRnFDQk1DQ1dVdEVxbHBkUFR0SjNUUHI1" +
383  "cnJlZSsveitmWjYyOTk4endaY3BtOW5Ub3ZOZmxzY2NlZSt5eHh4NTc3TEhISG52c3NjY2VlK3l4eHg1NzdMSEhIbnZzQzFk" +
384  "OEVmalhsNi85RDEvSXovNnh2Y05SVGJzRlM0YkZ0SWdwZHJ0amR6dDJVVVVzamRVUTdJbVh1di9FMzVnZi9VVWVzL29pTUhO" +
385  "ODZwUEx6enFLclR0aFNSeHdRRlRGeE5hYW1KaGxobUlwUWEydVo1a2VPMWw5RVRqMkZUZDFVa2xFalZiRWRHZTI5akJMblpR" +
386  "bHJFNkNNQ2NicHVteE82c3ZBbGQ1MlJFalVUVVNIVEV6Rkh2WmNWU3pCRXM1cUZVdHFtWEhMcTRUajkxWi9RTHpyZm5LTDMy" +
387  "UUY3NW10M25WalJmbjBWTmZQci9pUzk3eHJFTWlvNWJVdmVmZTUvTHByeUREYkczNzV2anFDMjRldldBWnd6cGlNZVhSUjR6" +
388  "akp5Vnh0bWR4SEhucW94OTYrRzBmZnVGakgzOWw3aTQ4ODlMLzZjZitxaTlDcTE5ZzdsMHUvOXFqOGZKL3duUU1jOWI3dnZh" +
389  "aDcvcDk3NWNkZzJSYTN2OGQ4aVcvbFJZYmJ2U1ZEK3ZWUnlVTDQwTEhoZjBqLzRQOXB6L2tMSFBTM1N2eitvbnYvSDAvK0Jl" +
390  "Mis1UFc5ZnpJOFZmczR5TUh3NXJoa0lQTzhlTDNIbC82Z0YvZ1ZyL1FiSy8rYk5iTnpMU0Urd3YzeDJwWWRGVGpKTkxkNm1W" +
391  "RzZZYmRubzFNeGtLS2FXdk5EaEVaQTR0MThtQ3BMVWNMYnBMRHZ1UTlWYzAwN1M3YVQvb2lzUG9GWnRZek41bEdwb3k0V09y" +
392  "ZXVySWVhSnlsVTBiVUxpMHFpSmdaa2lHaDJXVnVVcEpvU1laa1dNT2F1R2hWamRSczdZMkpMZlhGWVBVTHpMWGx5VTgyN21l" +
393  "aHRldzE1NDVKVnNuQ3JGZ2xLeWFpS29sME1qZXlHNGxzaitUNFNKWUxScHlOMWpialVSZXoxVlphd2Q3WWNPejB4U0QrQ2Zj" +
394  "cmw3ZjloWFo3NldaMDE3Mi85dXZmOHkyLzdmZDg3VmMvdkxjNlhNUmhYVHovcFYvblhlLy9KbTBrdzlsNDhBNDVQRTAzTmJH" +
395  "elhlczhFaWVSTE9iTkovVG1WUktDdVpzdi9BMC84UDBmOWVqVjNlelJmcnh5OHdOLzJkeVljem9lcDQ5dHgrT2YvM1A5cng5" +
396  "dDgrVmRYVGg0NE1LaVJxYVV4cTAyQ0dxcWlacGlFUXpEMGVYODN2bmpmOWdYbU5VL3dYN1BzNzk5L0owWC8vTHZXTWU0Mk1k" +
397  "Z1ZwNmV2dkZYdkpjTVdROHlMaTNQZjhEeTlsOU9qNGkycUhhU0JVTU4xdFhyNGlSaGZadnhZSkFobmN5ajQ4cy80YXMrOEx5" +
398  "TVZjYkNmTUVybC84N3gxMzN6YjdkK1BqVmN2alB4c2UrWXg0cWlabHJtMXJDaWlVRXhWNTJkK0pPa1NLRExzeGxjKzBQK3dL" +
399  "eitnTHd1eTUvMmE5MXNmeHpMOTI4OUZQSGVYeHBqZjNDdWg3R2Vta2tIV05VN3UzN3RvdzVIbHp0MjhzMysvSEZuMzdsNzcr" +
400  "cnVuYnVWcnVKekNFcVk2cHAyS1Niemh1eGFZbVRSRVViRWhwVTRsYUxraGFsRzNhNnFhRnhza3N4cXhaR05FeTdqTTNGWUo4" +
401  "VmxVYUNVa3dNRkNsQlF0eEpTcGlkWm9MZEY2TFZGNENmM24vc04zOXl1L29QeHRpTXdjWGdRaXh4YStMWTJ0Vk1qRFhHRXR2" +
402  "Y1hDN01ZakRFRXNaWUNWR1pSNW5YdU5GT09qU0R1cFVFMVlSNlExQm54YVJUT3pISk1MSklpR0tYdWFrd2htVzVjSC9kM1F1" +
403  "UFVHZEZURFNzSWU0RXE0aVNhS3JZeTU2WWs2WFRGNkxWRjRCSDg4cmNqcVpwSkRKSm9ndEZ5NXlrcktrbEdCUFRPTVEyMlJQ" +
404  "QllSMGMzaWFxM1hWdXRIU25JUkZERTFwVWxSYlJrb1NVVG5yVXVXTUtxaXFTRmFHNzdtVk94bUNza3VGaXZYSC9mblNMVGV4" +
405  "bEpqSVdRNHhsdUJqRFdJWmtVU2V0dlRWbmJWZXZHTTZHeGNLTVAvRGtiNzcvcHovNmx4NzVBaEtmWjcvRCs5OS9tZXUvV0Qz" +
406  "Y2pIbnh5TmcvK0pzdTMvazF2L0tKNTVocVl3d3UzMmRabm1Jd2UrUG1lUFRKRC8zUHNuRHZncGhlM2hhLzRWdS95dkhJYkVV" +
407  "OWZOZFhlOCszL0hIdHJuT25VNVpMbHZ1U29WYko0dnJxVmR2MUs5cHFTN2k4OThEaDhwNjIwbDNWQ3ovekUvYnRTR285SER4" +
408  "NDhsbGpUQmtyRGQzTjdWVTNILzE3WkdVTTZjYTg4cEh2L1dQMmVXMmFwczM2cmw5bGZmczNHT05nSEM0czY2VTg4WlVzejdo" +
409  "VGMyNTYvSVNydi9VbmRXNHlkbGtYaitiTC9zQjNmdjhQMDVzMmRqSG5ZdHY2a3gvYVgvb1dQMDlXbjJjamgzZjg5UExqWDcr" +
410  "TW80NDZodmQrMWZ2OHhsL3p0UFlSS2N1bFB2MStPVHhQRmh6TjQ0dCthbjR2bWNiZ3NDekc0ZExUejE0Nk5xVGFhWG5xUXBl" +
411  "SGRHT2QwbUNRQlF1R1poRjAzN1JWVTRMdWRJcGlkN2J2Ui90MkpMRnZ1OFBGSS9lZmVsYXlJcWlPUy9QZU8xUWxpNHhJcDJl" +
412  "ZmUyanUxTWFNeStjZld0LzFyT1JDbDFXeVdKNTZodlZadDdwcGIvUzR1SDdYSlEzaklHTjQ5ZnJDY1BPK1pld3EwdGdOVGUv" +
413  "N2ViVDZQTHZxNWxVMU9xMHRnM1VabURwV1VySnFvbmJKa0t6R2NtRlpoKzQxNTdBSHBRYWluVHJMM0hRZUNUclVrQXdNdDFL" +
414  "NmEzZXpPNjJ6b29yU3FyT2liaFZobnhNRFFWRkJaMUhHemh5cXBrMnpJRHFHclBka1hDQXlqK1JhNXN2aUFVVjM3ZEcwTXda" +
415  "V1NjZ1F1OUhxVnB1Nk50eVlqdG45ZkZwOW5pWFRFVW5NVkJJNUxKcFZFekpGc1pPSmtqQVdDZTAwRzF2SXBHTklCNU4yaUFW" +
416  "QkVYRldWSU1XdTg2anpoMlJST0prWUJBaXpwSkZNdDFLekgxSFVGVFU2eUxTSVluV1NjWFVUbHE2YVRkcHNkRk50eXZXYStr" +
417  "Z2RaWXhMTXZRT2NnaWhyWFRKb3poR3RlR2E3SHR1NTlQcTdmUTcxNitLZS9ZOTNkamNCekhzWGoxYlI5NTk0dHJ4T3F3MUJ5" +
418  "MXJCZHkvM25wVG0rTVRPNC9wOHRUNUtBWnNsM0lrKysxem10TEt4bld3Nlh4OE12TVBjekp2dW5sdThncWRoVzNTbFdVRmlX" +
419  "Vk1TUkRFakprTEdxSWtKV0VyREttRnFsdE8ycW5ZV2hveVJqRzRiNklPNVZ1bHFlK0JqZGE3RWZyRTE5aFBIaTNPMVBubE1O" +
420  "VHN0ekg0bGFJT3J6bk4ydW56cW56NlBEcVM3NytOL3lJT1k5dVptMHpqbk8zN2RkUGY5MWZmL2JiRHRmYnhUWnkvV2haSHUw" +
421  "ei84Zi90SDNmeDMwZXhGdm85eDYrK2F0K2R2dkJ2M1hJZHEvbWVsd1dYL04xdzNmOTRYZnBjY2pZSkxzSFgvZXZldmkrMzA1" +
422  "TGoyUXpEOC9KdU1CS0RzeWovZU0vb0wxUms2eWFTOWZIeWx4MGJ0ck5jdm5RdytkK01ZcHFVTkpxU0pGcVMrdFdnaUVaYm1W" +
423  "Z3lGaDg3Q2YrbnYxNHJhMDZTVHozVDczUE1sYUN1dFh1ZE5kTzVtN09vLzNxRlhVUzJqcmNmOUp5dUM5eE1pamlKQ0xxSk1G" +
424  "Q0JsbEZuTFhYamovOFg3RzlUS2RwMGRSSGYrYnYramUrOVM4WngrcHljRE1QbnBydit2Yi84ZmovL0ZtZkI2dTMwSEhPSno2" +
425  "K3ZuaDVXTFoxN0VkN29oY1BQSHdRMno2MXBiR09NSjFjYUE1dTlaS3VaRkNVclpmYXVOV0J4ZHcyN09Zc0RSM0V5WUxTU29w" +
426  "SW9pbEZpcUlFcFowazBvblNtcTA1Nnl3SmhoZ1lvaHAwdWpQY1N1bHczQkd2R2RZNXhPSk9DRVZFM1dtZEZMdVk2cVNUSHMy" +
427  "YmE2TVZyRGxLcHJIZmMxaW03cHZkeEhSUnovczhXYjJGTHVkODlsSDJzYzlhbEhBWUJFblV5U3lkMmcxRExaSkJGalZvQkJX" +
428  "eTRFQkxvclBtbk03YWttQWdpTE9FMWtrRUVWS3RrNUtJazFSTFcwUlU1MkJPVmNRYkVrS2QxS2VFWkRESm1KcUJpaUNNUVlh" +
429  "emlqdDFWZ1JCVFNucXBHcGlsKzZJamtWQ1RUVkpUTU9jc1hjeTUzMmZKNnUzMEVOOTdoSEwwWERJMERFY0p4VVp3eEM2R1dO" +
430  "MWxsUkNFMFJFRlpOdWRFZmRhaVhvUkNRaFE4WWdnL3BNb1Nxb29vaTBtb3FJMTVVZ2d6SGNxU0tLMHFMTzZqVVpGR05JSzRL" +
431  "NEV4R2ZVaEszV3VsVWRTY3FFdHBLcG5ZYTNSbXJqSlVNNlliWVd6Zmx5bkNWZWtVUFBrOVdueVAvN1BqZ3VQVDN2L1hLOFV0" +
432  "ZTdxdGVIRWNmZnZyRDMvQWJ2dllwWXh2R3VsdVcrdkwzUGlmUGY0TjF1WkFSM2FmeDhFczVQSVhoVmdZSmltS2l4dUZTVzhS" +
433  "Wko3TkhHY0VnUXcxM2ltcUxDdXFrRlhjNlF0R291aFZpVUlSbFBYaGR4YTNTRlBXR0RMY1N0OFppdmJ6dnJIVXJ5NkxxZGVt" +
434  "a2RUeGU2YjRya3BCaFBkd1RnemdKaVR6NWxTd0hjcURVZE8vK2ovbVczL3BMdmZMcWpldGpiWWZwNWIrMy9wcGYvUU5QL2Y1" +
435  "cjErU2VqL2I2K3o3Y1J4L3lGbGg5anJ6emNIandvOTIvKzhYMTVlYzdqL1lsWG5uN0MvNzRILzFuSExxemJJUTg5NDB1UHZC" +
436  "SEphdGtxS2lkN3FoMllzcmNuY1ZaR0t2MXlYZUwxMlNZZTgxWGI0d1JHc0kwNks2ZFBrT0pzNm83YVZVWWtWSm5SVWpwOU13" +
437  "NzNvMkJlRU9udHBLcU9JdVF1TlhLV04xNytEU0MwcUtxenVLazA1eWJSeTk4M0hhOFFZeGxNWmFESjU1OXdGam9KRTR1TGIv" +
438  "b244ZENWbkUyUEhYMWsvN1F2LzgwamxybXN2aVAvdVB2K2ViOVI2NitlV25OWHJ0LzNQKzQzWWU4QlZhZkk1ZTRKN2t4c1R0" +
439  "TTNyYlVhTXd1NWd5cDdOTmh2aXFKWnNXZ1hoTlJUVWhvQ1VwRU8waEV0SkZVc3JoVFd1YlVib0tLczRpcXN5Q2lxaUtKVzRr" +
440  "NEMwcWRWRXRNQlBHR0JCRzBOSlZTSkdoOFNnaXRXMmtKZGFlZDJrcWlvczRHRmdsdHhFbWNUR3kwaU5ucWppNWF4cnh3c2Ey" +
441  "ZW1Kdk9tcWExdzF0bDlUbnl0am1YUS9LazFFZ3RJOWFCYnRyb3JLUVNnbmJTRFVNTkVyZUMwaEtoUlNpQ1J1Tlc1OVI5Wi9o" +
442  "TXBlNGtVUkZWMUZsRm5CVVJkNEpxSzZyaWRWVnZTSHk2cUR0MTFrYVVSa01TNmpYUlZFeHhGa1U3UlhUdW1xQUVqY1NkT3Bs" +
443  "MHFtS2hWUU9EUk1kcW9rRksyQk52bGRYbnlKeGJ0dEYxdzFLMmNyM1h2aDh0VGthd2tJVWM2RVJSVkp4VkdoVnhrdEJCNmxh" +
444  "OXBwamF6YjdkV0paRk1oaERzcERGV1p6VldRVjFKNG9rTk9xc29zU3RpanQxSjVKUWxEcUpPNG5XYStxc1hsZnFEUWtWR2pK" +
445  "SWpTeVVtU210dVZmbnpyS1NnZEtKMHBKaTBvcVRCbEVSdGJkdVZFdHhZL2RXV2IxSnY4cVh2SGU0K3NDTmE5YzUrcHVIdi92" +
446  "MEwvdmF5L0UxOTU5eHVWUU91N2MvKzRURHU3N0J3TXhLTHF6UC9GSU1FcFJPTWJVUlRCRW5vZXBPUkVsOGhzVGxFMDhhd2hn" +
447  "eUZvZUwrMlFSUldsRXZhNCtVMUlhUmVPa3hKMGlVYVJPcWs0UzZrNkxTT0tzRFNwQktkb1NFcmZpTElpa0R2Y2ZNS0p6a29y" +
448  "aDV1b1Z5M1pERnBUVzRmS2V4RWxwU1owbFVZdGtHT0c0VDFlTnZkWHlxTHUzeXVwTm1oZjd2M3kxM1B5SnZVZDdwaGZYbC8y" +
449  "aGYvY3JQUGYyQjdLdVVzYURkN3IzZFgrVVREcklnb2lwS0lJNjZWUjFWaEdEUkZBaEtGVnBOSXpsNE9ubjMwMmRSRExJMExw" +
450  "Vm42NkNDRUZENDZ5cGxMYUNKcFNFSXFWZUUzZmlUdUpPRklrN1JZaTZWYmNhbEFpaEZ2ZWZlTnI5aDArcGlXcUhUL3pVUHpE" +
451  "bkxrSm82OWxmOUpXU0ZTSEJvbG5KRUlNTTFNMjIyN0dMbG5ycnJONmtaZTQzbDJ2dGFsZjNSNjFXc21pSFpwQjdNaTdvcGlx" +
452  "S2F1TU45V21Db21xS2dZaXExdzFTbnpMY1NqU2hJYVZ1UlZWcFNaeTFrVVFUV3VxazRpUk9LcWdJNmlTaFJaMGxLSFVXRk5F" +
453  "NGlhU1VxclNLaUtDQzBpQnFTRXFEaVpxZDVyNUpTSml0emwwekpKRXNXRmt1R0FjRXdZNVlCc3VzSUFaMmI0WFZtelJZbDB5" +
454  "SDBISi80V0lOR2RvZFU0SWNNREJOazVaVzRsYUZCRUdwazFLcUtIVVNTVlNwa3dpS0pNNHFrbXFkRkZXdml5SWlpYk40VFp6" +
455  "VVdWc0VFU2NoenFvcXp1cXNpSlBFcDZ1cXVsTkY0bFlSRkFucVZnMVNTdXdTMmttcG90cGRzaUlZWkNFTHdkeEpKS3poZm1K" +
456  "Sm5DWHhWbG05V1oxN01GSk5OZFJnbGg0Wnc5aHZ0QkZCYUFoUkxYR1NZbUFRSnhQVFdVdFFKeWwxRWkySjF3UnhsanFwK0RR" +
457  "aFJaQWdKT0pzcW1MU0V1SWtSZHdKNml3cDRrNGxvVVVScjR1VE9xazI3a1RkS1pMNERDMnAxOFdReEZsRU84V0NJYUpLTith" +
458  "MTdOZTBKQ3dSbGRaSUhWUFhGYnUzeE9wTm1wcVVEVnVHcll2dHlWOWllY2ZieVpSY1dDNmV3VlIzZ2haMVVoTEU4ZnFSN1hn" +
459  "a0VXZDErZUFKU2FpVElpcHV4VWtWRVZWeHArcFRLbzA2S3lWamlwWGU2UDZJYm5USEpNRkFuTlduSlBHR09vbXFXNjFtU0lZ" +
460  "RVdiSGdRbEpuRllLNjFkYWRVcmZhaW1Jb2FqaXJTaFkzeHhzUEx1NXJKM1BIWmp6OUFYbmJsN2tUbWRlKy9YZCt2OS8ralYr" +
461  "Q2FadFgvc3IzZnZpNzN2MVhydjdnalN1MW1OYjlzTC9uTi8ydi92WmY5NDlwOVNadHJMTzBYQzNET2c3VzkzMmI5Zm5uTFVz" +
462  "bGk0eDdtTktxYWtxclNFS0x1bjc1Qlk5ZWVZbEVFc2x3dVBmUXNnemlOWkZFNjZRcXFEcXIrblRWRWpTa1IzcUQwR3BXL2ZC" +
463  "L3prZitPN1dMSFVISWd0Q2k2aXpFU1JBRTBaYWkwOHlCc1VpR0xBZDU3cmZJbC80UnVxbEtxWkJLcVdvclFVb2p6Z2FKMmFp" +
464  "VEZpV3M2MEZiU2hKdHJVOStKYXFkcUhsODVNdmYrNFF2LzVKTFJzVG1CMy93NCt2eDhGTnJGVEY2OExiOStzTG53T3BOMmp2" +
465  "WHFZcFpSa3NuNGxiUm5VNnpSVkZCMFJhbDA1eWJ1ZC9JR0dRd0ZqWFZJczVDM0VyaVZxdk9pa2pRT2l1U0lNU2Q3blRTbzly" +
466  "WmZ0SzgrckJhTEdNU3Q0STZhWjNGU2IwaElZazJsS0JsaUxObWFBN3l4TStJYWtvUm90clNvdUtrZGFka2tFVVNHYXVSbzlt" +
467  "TnVXdFkxMEUzUkFVTGlrb0dTZ1lqTElNNFdTeGpHS1AyMWo1cjJ0VXJQaGRXYjlLU3NYak5FcFpFVWhwUnNXUEJsS0JPNGxh" +
468  "Y1JFd1ZSWlVXVXhwYVZBVkZuRlZweFowa0t0UkpVRkV5M1JuaXBEczI3Ylc0MWw1cEo0WTRhZHdwZFJKM1N0MUp0TFJPU3Fr" +
469  "NGl5aFNkR2QvbGJtSmpZU0VvbFJSWnhGMUZoRkV4T3VDS29xcGRiSWdJaVErSlRLT3hoZzZxbk9LSGROMTRpYXh0WFoxbFpl" +
470  "cGYyeXJOMmxOcjVkRXNJUmxSRXg2emI1cktobmFLWUpCbkVRRXdjUXVHZFRKSkZGQnhWbWR0VlVWOGJva0NFVUdJYzZpUFVx" +
471  "bWRqY2ZmVmhmK1g3aTVFYVY2NThXSkhXbkNDS0tJdW9rY1JiVVNTS3RzNnFnS29tRXFoYnpWYzJSRGpJd3hFRlJKRUZFaUpP" +
472  "ZzJtS3E2VmFHeE1sQUpFN3FMSUtvWU1pNHNENzVYdlA0aWprM296ZmU5YzRIdnVMTG4zUTkyZmE2TnZudzhrLy9wa2ZQT0la" +
473  "bFBPbDZQdi9ELzFmLzVvLzdSN1I2a3k3YVYwWVlhcVNFSEQrdWo2YXRONUpwV1I5d2VEc1ptbUN4MzF4NTlNb25LVzExN3Nh" +
474  "eWVQTDVkemxMSWhuR0dOcEtVQ2NsQTlVaWFBaEpTTVF3WC80aCtjaGZOTjNvdk5KV1B2SDk4c0wzbVltbWpCcGpHb09NaVNB" +
475  "b3JTS29pWkNLa3hMQlZDVVJjYWNTdDlMS3g3N0gvS3QvVFUweUtIbjQ5ZkxMLzR4MHA5UkFKTFJGYVowOStjeHpxRHVSa0t5" +
476  "cVdvU29pYlJrWU1xNFovM3FmMHU3eVR4cTZ6ZHVmOG8zL2Vybk5VUEwxWHpadi9rSC84NmZmdlRUMStZSWMzT2gvNm5kZC9s" +
477  "SHRIcVRsdVlZa1RCU1F1WVYreFY5UkhkdHhXdEtVdnQyNDlVWFB5RW9vcDU0NXAwZVBQRWtTb0s0VmJlYTBxQ0lON1IwYW9h" +
478  "Z3dhTWY1Y1BmVFkrNlQrMk9rbHBHSldSZzBESEVTV2pSb29JaVRvSzYxVGlwMUVtSU53Ukp0VVhaWCtYbVZXYTFBNVhEODh3" +
479  "ckxSVnBKQXRXMUoxSk9WemVkeGFEREhGU2hDaEszU3JTNlZaMlp4SE5RSFM1eCtGU1F0VEY5dEM5Q3g0dG0yQ0V4WXVyTjJI" +
480  "MUp1M0pRU3JZeXRxeTc2aGtZQkluUTR0TU5jMzl4dHh2SkNIQmtCSEdTcXRJS0tLVXFqZ3Bnc1JaVWxYczJPbkFJOG5SeURS" +
481  "TWxGSWhDSFVTZCtJMWRkWTZxWWlLTzNFV1oxWEVXZHhLVk4wSlNweFUwQmE3N0ZlNlB5S3JrZFViTW1pMVR1cE9KQU1oMU9z" +
482  "R3F1cFc2NnhJYUVtbk9ndFpHQWNaZ3dSRDFzWGxNbHlPU21PTW1ObTlHYXMzYVlzSCs2VFl4TVcyMjdjcjZRMGprbFdXQTFu" +
483  "b0ZOVk9jMjY2YnpxR2pFV0NMRmpJbEpZU1ZTVEVjS3RGSk1OWk8ya3cxUlJINWlmVU5jSUlSWWlUVUhXV2VrTVRkeXBCb3o1" +
484  "TnZLWTBFcXB1aGFnNEtlMFVKeWtocVl5cFRwYURCSWtrcXFwMDBva2dDT0oxYVFrVlFlTlc0aVRxcklyVXJTUmtwWXV4WEpq" +
485  "amdNZ1lWc085d1VXcWF1L3V1cnMzWS9VbWJaMzNyMVVhZXl1VGZXN01JMk9Sc1pEQk9EQnZ0SFVXWkN3eWhveEZzdERTcWFr" +
486  "b1NpTGlWdDBaVGlJWkdPVEcvQWYvaFI1ZjBsN3IzSGoxL3pYMjNWaUdDQU9scFpQWnFKTXlSbzJFSUNFVmR4SnZxRHR0U0VY" +
487  "Y3FRaWxLa1VvMHBMb0lFaUdYUDJRK2FGL2tkVGNzZSs4NXp2bHkvNFZFc21xcllnS2dxaFNvcHBTa2ppck8wRlJGVUVReHFV" +
488  "Y0hzcmhnY3dvMGlzWEY0eUw0V2JHSzNzOTR2SjNIMy85S05abGFjYkluMy8wdjB5ZnhlcE5laW9QdnZwbmVtVzJadW1jK3RH" +
489  "LzdiZy9sUFZDbGd1SGgrKzBQUHRyVlNSRHhiMG5ubmI1NEVrU3QwckdVSnZVRzlxU0NKSlEyaExhS2ZOVi91N3ZzM3p5cjlp" +
490  "MzNaeTdsbVFhaHlHRHhLMk9CK1o0MWo3ZGFpc2o1aGlJWktMRzhTZnBScHhFVUNjbFRvTEc2NUpRcW00RkpVNFN1WWhiRFlu" +
491  "bVN2Yi9qMFphV3ZzUC9VbnpSLzVieTNxUFgvbGZ5cjNuRWFsYlNWR3RXeWxOM0VwbzNRbnFySWpYcE81OXhlL2t2Yi9OcmU3" +
492  "bTlVZjlrWC9uNzd1K3VuR3pjOVBwZi91L1AvbTcvNXYvL3EvOWtpbXV0blUrNkRNL2dtLzNXYXplaE44eTN2TnZQenA4OUhj" +
493  "OXpPNG1kVDM1NERjODdZbjdOMnpWcnJxdDl2V2gwZDJ0UkVUR3dxZzN0Q2lkNmlTaEpGNFRSZFNkWXRmOWloZS9uN0tFWlZT" +
494  "VlZFYklJRzdsNlYvbjhQNC9ZWFdEUVJheVlFWElaTmI4Vzc5RmJuNVVGTlhTQmxVbkpZbXpsTGJVR3hva2JxWHVoQkRWVm9z" +
495  "U0pkV3JuelcyRjFpZllPNFlxS3FnOVlZcUlrNUNTN3d1enFLb2xvVE1vK1h3a0lzbk1RaVcxVk5QM1plbkxqU3MyWDNmOTcz" +
496  "MDFGUDJEMTRuTWhZUHAzZVlQcXZWbS9DSjVXUHZmM2paNVltOWpyZ01IL3hWNzdGbWFuZlpTU2I3dFZ1SjF6V1JlazFWdkNG" +
497  "RmlaTm8zWW82RzRtYVl0Y2VkVjVKajZpekJCa2taTkdFaGxRVFNjU0NWVFBjS1oyQ3VETkxuRFFrVXNTdGxzU3RvSEduYmlV" +
498  "b1Jid21WSjBGUlV0Q0J1M096Wlhjdk1UOWEzRVdNVFNMczZCQzNXa1JGWEZXMUZsRmxGSzdzNWhrd1NBa08zVVNZd3lydW1j" +
499  "SzV0aWtjL056c0hvVG1vdTNUOWN1eFJMV2hiRmN5SEpmeHNDUURMRmlpSWs2aTJwSWk1QUtLczdpVGhFbmNSSm43VVMxMDl5" +
500  "dVpCN3Rjd3FpRkNGWk5DdFp5TUx5dE9RK1ZyV1FRVXQydXRNYm5WTzdtM3NGQ1ExUkRTbENRaHVKazBqZENWSlZFVUZWNGlS" +
501  "YTFLMEVxYk02Szl2Uk9EN1MvV1hOa0F6eUVCVkRuWlNraUNMeGFTTE9JcXAxRWtuZG1kcEp3enpLdkZhUkJIV2N1MkpnalpQ" +
502  "NUNUOEhxOC9pWDhyN3YvckNvMjl1cHkzY3BONzMxUS8vaGZuazVsNFphK3pkUGZYOGU0MG52NXdzYW9nYUYwOUxTaWVsN2dS" +
503  "VlZBUVJOTlJKL1VOaS9zejNtRC8yWjgxNXBUM3FkbVBkWHBKUlp5MHQ0L0JRM3ZZK1hKSVZGL0xnRnpNdXhOQkdzcWdyZXFU" +
504  "WDJvMjVxMGxMNGpNRlZTY2xTcW02RlpRNGFUVUVTZFJaSlZIRVdURlFPVlQzblRFZHYrODc3VmtkZTJHOWZMZDczL2puQ0ZW" +
505  "RVFvc2dvUWdhdHhMdDFKWTRxYlpHRmhWTXV1dThvcHVNeFo1aEMxZDd2WXFKYmRiU2VlWG5ZUFZaWEYxc3YrTWo2OGYrbUc2" +
506  "T3FldTlmdi92K2FCdit1QUhyTXNpeTBIR2FyemoxeHZQL1RwM29xYllkUjYxMDFuRXJaSlVSVnNTUWNSWjFWbVZWb0tySDVV" +
507  "WC9yclJIYnZPR2lzWlNGU01zY3A3dm9NdisvZkVJS3RiUGRLaldzalVITXdmL2xPMkgvOXUyNzR6anlJdWxoc2pTQkZCUzlS" +
508  "WlN0RkVXdkVQcTdoVGQxSjNRaFJ4S3lqTEUrRnRkVGJ5WWVNcTlvOHRQTmdsVHFwSXF3a2hxTE5xaWJNaVB2RXpQK2JSeXk5" +
509  "SWhveEk0dWwzZnBuN0Q5NkdEYnNjTGwxODdlL1ZXUmRPeG9YOW1lL3h5RThxSnRhcW40UFZaM0djVnkvTVRrelRGTkdOWHI5" +
510  "aUh3ZGRhaXl4emhqZHRUc21xazVhUkZTZFZZS1dJSEZXUkp3RlZVRlZPK21Oa1VrcTZNQUlnNHhoTEl0YzNOZDMvQnJteTI1" +
511  "bElOcEl2S2JhYXdacnJxeWpqRWxMSXFrV2NTdEIzV29pTGFVK1RiMGhva2lSYXB5RWtzU3Rla01SSVpIRXNnNFhZK3F5WXNV" +
512  "bVN1Sldva1duVHltZDJtbnVOOHlORExLUTRWT2lRbVBPaFZDUkxQWTVMVUhZUTlPam40UFZaekdhSnpiVGtscUNjSGx2SlZP" +
513  "Vjd0cnBySXFpdE5xS2t6aUpGS0ZGSWs3aVRxTWxjVEpFU2FXN3Rzd3JzMU9RVVhFU3I2bGJEZU1CRHBqU3FxSzBwTmh4cERk" +
514  "MEowT0V1SlA0bEZJbitmOFpnOWVZWGZlRVBzalg3Mzgvei91dXRkYyt6V0VQSTBjNWpCZ0VnbEJHcTRFRWJDa04yc1pRc2NY" +
515  "VVU3WEdmdERFTDVwb2JHTFVOQ21sTmxFU1cwTmlRQzNZRHpZTnFUYW1wcUtTVml1bDVWQm9LUU1NaHpuQW5qMnpUdS83M1Bm" +
516  "LzUzUFlhNjA5N3lBejE2Vks2NlFxcUJjUzZxUTBDSzA0cVlwUDA2SWl6a3JWeVd4a1RpY1JEZW9vWWhBWExZcGkwcWx6MHpr" +
517  "WmRGWW1jN3VoOTFCVU1zaENCaGt5RmxkajhmS2dXTU1hdHo0SE81L0Zaanc0WkpCYXhxUngvNlg3bHV4VW5hUlRXa3dVUlFs" +
518  "VlFjVlpnN3FJNTBJRWtURmNWQlBtSnR0RDJ6YkpNTlJFeXpSMFJHWXNaWFFSZXpLMUU1Vk1GSk91ZEdVK3RNMUpZcGVOQkhG" +
519  "UkZSb3ZCRVVSUXB4RUhiV1NxS01pZFZJWFVSZlJCQldoM2xaSzUzUllZOWsyZXFzalpHQ0lSUVRWVmowVE1pU1JzWk94cURJ" +
520  "M25kTzIzdWk4bFVFNlZhVWxJWXNzaTZoOWFBbFc2Mi82SE96YzhXL2xhLzdaUTJydEkwOXo2d3UrN09vYkg3M3JOVmNqcnEr" +
521  "aUdkNzQvQyt4dlB2THpKWXNpT3p2YXpkcFVWVVJ6N1hPUXNSSlJVb1RKM0VTTFI3OUZQT0dlYVBiWS9QeGgwblZkSmhCTFZl" +
522  "dnl2MHZrU3l5M0pQeEV1TjFaNDBhWXVqdHI4bVRmNkI5U2xkemJ0eCtoRlpORTNGU3owU2ROTjRoSk5KU0dxTGlLTFFWSWRS" +
523  "RkhJVzJDRXBKS0JJVXFhQW0rL0x3bDYzLyt4OWw5NUx1N2xtV0srT0RmMHBUV2cxYUY4R1F4Tzc2dnZXd2FqZHpybXExSFc0" +
524  "Y2JoNUpIRlVQVDgwbkgyVXNqSjI1N0R4OSt0aGFXbWJycGplLzRYT3djOGRQN1gvNUwxMk5nMkYxTStKMy9lNHY5OTNmK2RY" +
525  "TUo1Wk1zVmkrK2p1TWQzOVFiQ3EwQkMybVorb2tUaExxb2s2aUxlSzVFRFVQdjhsUC9NdkcvSmgyMWJuU3plN2EwYlJ1d3pZ" +
526  "WHl5dGZaLzgxMzBPS0s3TERvTGNZa3FFWi9NWmY0eGYrVTNGanprMW5wWnNScElLcUlDZ3F4S2NMYlowa1hpaFZFU2RWRVZR" +
527  "ZE5aTDROSFdSb0JRbHBudXZjZmo0RTRkZi9NdWFSY1ppN0svNHhqK0pTWXVLSUM2aWh0ZmY4d1g2bmtrMzdVYmp6WTk4eUp1" +
528  "Ly9xYU1SVVo1OG12bWovODMyRXlUV1c5KzZNYkRTY1J5bUw0Zy8vRFAvQzAvN2JQWnVXdmMyTVptN2NGTlk5MXEyVzdVWkF3" +
529  "MTZIVFNGblZXbElxNG8xU0pvd2lLSkM2SzBxalNnODVIMXZYR3NGcFNSa2tGdTBFeVpBekdTOWd3S0EyNlloSEVSb29EcG1T" +
530  "ekc2WFZVblVTSjNFUlo2MGtubWtyTG9xZ2lJc3FJYVhxSklMU0VNL1ZNM1ZXbElneGF0blhtS1hWVEJMbXh0Z1FKMDFvVUhI" +
531  "VXFVcW5JTUlZeG02dmN6WEdJc0Z5aFVYbmxKYXlpWU9qUmpwOWF0cys3bk93YzhkcUUwZWxnNjFWVTBZWWU3R1RSckxRcWFh" +
532  "MGlvb0lpYWlUdGlqaW1TS29PbXNKT3JWVDU2MXRPK2pHR0NVbDhVeEdMQW03KytRK2JtblZsRlp0b3BoMHFodkpTcWVVaWpo" +
533  "S3hFbWRGSzJqU29LZ2lHZWFDS0lVb1lnNHFTb2l6bElYUmFnWGdub3VLREpZbHNneXRkRlNSVENjUkJBblRWQnR0UlhWVmh4" +
534  "MWlpQVlpSXdyR2Rka1ozUVRxNnZkalN2TU1zV1c5UzMxV2UzY2NUQXRobjI0Q3Z2OU1LNnVhV1hzSkRzU1p4bTBxczRTNnFq" +
535  "TzZybWdSWnpWUlZ0UlNwVVVGU1hJUUFsR0tCSVhRV2xVU1RERlNxYzA2bWg3cU50QlhNUlJVS3FJT0dvOVZ4b2k2aUtPV2kx" +
536  "Q0hOVlpRMVNLaEpZRUlhVFIxa205clM2S1JwVVFrU0NoRkRGUk1paUMwaEJGYVVXZGhiWk9hdElOQTR1TUlSbU1ZTEVQcjE3" +
537  "RkE2eGlNNlJ2L1pyUHdjNGRLN2F5dzBoYzNYdVYxeitnallSdWxkMUwya21yZFJSeDFHcUxlQ0dTYU91c0NGRjFVa1dVVGpK" +
538  "MWUwUTNGR1dRREhiM25CV05qTkpIdEpMUTZzMHY2U2YrbWxyb0RYUHkxayt5VGNSSlFyd1FSUkJ4bEZJdnRJZ2kzbFlhWjNG" +
539  "VWluaGJJbWppcE9xWm9FamRFUmMxWFJRek5WU2ZmRUplZmgybFZaRkpFU1dsM2hheW9NWlliR01nTWdaamIreGYwcVVtWXVm" +
540  "VjEyNHNlWXRSMTl1VjEzTHZ5LytZYi9yWTkvVkhQK1czc1hOWG1XRk5iR1B4dnEvOGR2bUMzMmZrMW1KVjVKV3YwSzVlaURw" +
541  "cW5iVXVJa0VSbjZhdForSWs0cWowclorUm0wL0tmcUV1eG81WHZwaXhpRkR5eXZ0bGZwS0dERlY5L1BmNHU5K3JwYTJxT0Jv" +
542  "eEJrbTA5VXhVRTFKS1Jlb3M2aVNKWjlwU0Y0MEVvWW80aWFORWk5WTdWYVVFUllSV1JlcXNKVHZNU0NOb2F2Nk4vNXpmK2U5" +
543  "SnFSaFhyekt1RUdkMWtiZ0k2cFYzLzBQT3NtRG8vQ0xyMS8xaG5SdmRwS3Z2K1B4SGZ2Q0gvb1Nvdys3R2JYL2pyM3gwZmZq" +
544  "dCtGLzhObmJ1MkdkWVVzRUluYVVURXl0ejZyelY3RVVRUWV1c0xwSklYY1JaSGJVaVR0cEtQTmNNQ1dNWmpEaEpTR2tyTmxy" +
545  "RVNVMDZNWnhseUhMTjJCdXRLcDJrTXFxb1V1b29DSW1qRUMrVUlvMFhpaERpb2tvamliUFFoRmJyYlNVa0VYSFNsbEoxMWlL" +
546  "RVlJeXdPSnNOaVl6SHVqNVNJVHZ0aXIyelJBUkJ2QkNDRUVNektMTURLOTEwMndoUFo4MFJFY21OdzdoZGJINWJPM2RjWmJq" +
547  "S1ptQ0xvOUlEODFiZG9uU2l6dUp0VlJFaGNWSUVWVXJVUlJGSm5DU082b1ZWVzNNNnFpaWR6RTFTTXNoQ0ZySkh5RUtHWkVl" +
548  "RzJGVElJTWlrVTR0U0pSRkJ2UkFuZGRHVVJsQWt6dG9LVWhxMEJBMUZIZFZKNGlndVNpS2xTdEJJcUlza0JDT0lZSVNhMm9r" +
549  "cElvcVFnUkJuYlp5bElnaXRwblRTalhuUWVVdFg2Y3AyNjRCVnRFVHRYTi9uaWQvT3poMDdEQ1RNTXVlcTYyTnhnNVVzaWlT" +
550  "SUNDMGxxWlBXMlJBVTlWemlJb2pFMFhEV1RUdHhNTlVzbzh6RzJGYVpUOGkxam11NlNFbnVxNU5nS3BLVk9URklYQXhNT3JV" +
551  "MGtTSjEwamdMV3VLWk9LbVRxSXBJUWt1S1VwUjJNdU5zUk9Jb2xJeWlUaG9pVHVva0lxck80cWlFaUtLSktDS0pXTWpBVUtX" +
552  "UmtGQW5vVVVKT2xGNksvT0piZ2ZwMUc3TUtmdklpRFpXdzRQZEs2OTQvTVJ2WitlT1RRV2QzS1oydS90Y3ZTYTVaVXdzWXJn" +
553  "SUJvbTUzVnJYRzVRaU1STDdxL3VlS1NJSUlnbWluL3dKK2VnUGFSOHpuK2lUWHpaMmpxYXFiUTdqNmo1di9ENFY4Z0I3N1Y1" +
554  "LzhjOHlxR0F6SC84YTY4R0hmbUg0cVovYkhEckVVYWNzdzFpR0wvNmk2YXUvY2hwSVhKUWtUb0o2VzUwbEtDM2lJa0ZvYVAz" +
555  "RVR5Nyt3YSt0MXBYTUdxMElyWm40MW0rTjExNFpsa3dTSjBVYzFWRXBWWUlGcFNZWjVzZC8zUHhiMzhPeU02NWZsYS80MTNu" +
556  "dEsxRVgxVHBMZkpxZ1RrcUczZnUrVHVlbUxaMWVmKzFOLyszM2ZZdXhXMlFNdVk0ZitSOS85VTkveVYvd0h4cXJOWHZidGov" +
557  "OHhmWERYK1VkZHU0NG1GbzJjY0RWSzUvSC9TK1VaWk14YWJTaEpaVTRpdHVicDU0KytvVE9xWjFTZGxkWGR1KzU3eXdSUVZ3" +
558  "VTFlTEp6L0dyMzA5V0xlbVVFU05Wck50Z1hNdTd2b094SS9mSm9rOCt6TS8rR2NZcVhjMXRkZGltRDMxbzUvdi93Z04vKzhQ" +
559  "WFB2SHJuOUNuTjFJaWt1RzFkOGQvOWgvemozK0FlbHVwVWtjVjFGRXFSZDFSaEF4akRMLzRTL0ZuZm1EdlozN2xnWnRQUG5T" +
560  "MWJmYXR4YlF1aSsycXZ2SWZqWmMvY0dXTVcxSVZVV2RCSGRYWlFFbEthV3UrOWZQNjFzK2JZekdYYTd2M2Y1dTg5Z0dLVUMr" +
561  "MHp0S1FhSWlUd2JneTN2c050Q0prR0k5K3haZCs2Vjh4bGoySkRDd2ZmdjN4N3MzWHA4M0JIbnQzRFhla1ZVRkZMR1BCVGwx" +
562  "aGp4M2lyTFFUVTAzdDFFNWFOYzFPMUVXYzFGRWRWYnZxdk5IMWtia2RaTmFpUmlKakdHTVlZM0cxaTdHRURMclEwR0JUSzNN" +
563  "eWkwaml4LzV2UHZodDMrMi8rNHQvemdlLy9tdHNrNWtZWVovcDBTZW1qM3lVN0labWtTQm9VU2RGbEphVUlJaFAweEtyLytL" +
564  "LzNuelR0LytyL3ZLUC9vamYreTIvVTVhZEpnNDR6Sm9ydDRmcXRxRzB0QWdaQ0NHb3FvczZHbVRRRXFWbGJqb1BxSVlxcWkz" +
565  "MVhGTVJoQXcxeUJDTFdNak95RTZXbDlpL3JMdjdMTmVNeFRicTZkZzhTajNxOU5CVGQrM2NFVVR0a0RDV25ZeHJ5U2FKbXJR" +
566  "b0pxMDJ1aDNNYlpVTUVrRXl5RUtMYWhGSDFWWnNkTlBlYWdtQ09FclVVWVpsSUl0bUw0cU5idlFnUFpDaW1zVllobjBPMXFl" +
567  "YmovLzZFdytmSEp5TXNtQXZHaXdsQThFVXo0UjZJZFE3QlhWUnRkbTJ1TDJaUmhoYjdYZDdlMVN0WlUyMXNjMHlWM05PRVJM" +
568  "RU94WHh0b1M0U0NXUlJEQ1VPb3FnNGlUeERoRTBCQzF4RW5VUlFXVHNqQ3dJM2VobW0vVmsxaGFLbmJocjU0NWx4SDdFZ282" +
569  "NGYvK0JaR0R6VzZxampXNTBxaGhqa1pDeGtHZ3JyWk8waWloQ0ZpT0RRY1JaSEJWUk5SdEQ2U0FIM0tMTVI3WjVNQVlKT293" +
570  "UlV0Lzd2VCtnZitvSDVPbU5mWW1xbU5oYTAxR2RKZFJKMUVYcW9pUmVDQzFhRjNWWVkyN3gvZi9WOS92di85d1BtSStldU5w" +
571  "V0t5WW1ObVJ4VVF6aW5lTFRKQVJ4VVRLY1JVaGNSQjBGZFZSSnRNNnFpSk9vcWlDaWNWUTZtUWUyaDVMUVNRNjJydFl5c0lS" +
572  "N1dYRHdUanQzWElucjFKTGFScG1mMHR1UDJYb3dIVkRqNm5VU3o3UmhEQW5pcUNxMHpDbUt1b2lnSXRsSkZwMVBqYkdncXRw" +
573  "S0hKVkpSUThQOVVQZlIyNXA2TUc4ZWFJdGt6R0tqY1JocS8zTndUSTNuVk5Sc2FtdHJHVmQyV1psVkwwUUoxVW5rU0FSRjdQ" +
574  "VjZibVdiWElvNjVPbkhqMTlZcGxFRlV0Q1lsbTR1aDZNbll5REpKU3FPQWtpb1NqaXFGVkhqZG5JcUtvNDZrUVJGSEhTSXM3" +
575  "aXBGcVVoRHFwb09Ja3UvdTg5NTlnVHAzVEhNTjY5Vkh4YzVZUis3S3p1R3ZuanBGWTFJSlordlNUOHVTak9JaFZrYXRYMVY1" +
576  "RVUweTcvVDFqMlVtR0lralFqWVNFVWhmSmtFUXRyRS9Wb0ZQVVNWMjB4S2FISi96Ni82Um82VVJaUW9MR1NkWFRWbFZiSjBr" +
577  "SXMwemNUbTdYbU90bTJWT2hxTGVGVkVLOFVCZEp0YlRNeVp4c2s4NmFxU0tPeWxBN01aYTYyZzlacmlXT3ByTlpEUW10bzRo" +
578  "b3F1b2lPb09naUJmcWhib29kVlluZFpab0lvMW5rbENNYTE3L0JuT3UybW16MC8zL1lSZjJZU2VXK0F3N2Q5UlIyTVRhMnRa" +
579  "YjNaNlNqVlF0NmlTSVpKRXdsaWxabkxWT3F0NHBvdXFpV2tlVGJpNnFxcTEzU2dneVNsQWF6R0hPd1NRcHJXNXNHMXVkRFNl" +
580  "VnhoS0dPalE2bWEweG95NkNJSEVVSnhXcGkxVFVXVkJTNG0wbHFrSVFsSlFka2pEMmpGVkVaMUZNYldrUkZTY0pyZWZxcURS" +
581  "VkZVV2RwTlJKM0JWUkx6UW9TUkJDRXRPQ3FSaUpmZGlIZlp4VjNiVnp4MVNIMHRiVDFucTQwZDZLa29VNEdpUk9LcEpJRmtt" +
582  "MDlVd01Na2ljVkFoeDFHSktvcWFXS0Nxb2swZ3F3aGdxWW1nV25mZmw1bHJXVXBSTXVteHNiMW83dFN4bGlKRmFTaEpiV05B" +
583  "eVY2Ukd5Q0JPUW9LS0VwUzAybWdYU2hySmRKWE45YWk5a3pnclZSRU4yNHo1OUpvbjc5YmRqWXhWYkhSajNxb2JIYmVTWURn" +
584  "TEVTMk5vNkorSzNXVUNDcmltV3E5TGFJVVFZc0sydWtzaTVHRnNYTzk3RjBOQm9xcXUzYnVtSzIxck9LbWJOdFVrU0NETVRS" +
585  "RERCU1RZcTdtdGpvcnhuQVJ4RWxDQlVXZHROVldsRlpDWFNRVlJ3bENGclhUdzVkYWYrWGZOQjZYMjhkc1UrWlFpOTU3NHQ3" +
586  "aHo5cVdqNXRacmJPQ2ZXSWY5b205NmVWckJ0WkRWTzEyakRGSUNGSmFjenBMMkxhZGVhanYvWjdwOFVOMkMvLzhIK0Jydjda" +
587  "ZTJzZHVHUnEwaUsxc09HUVlqWnRmL2hadXZ4VjczVlhIcXN0ajFwV3JYNURQLzBFZFV4SnB0VVJFUlVsSUVCZHhFbEdsMUVr" +
588  "VkVSY2hwYzZxRkMyS3FkM0VrTEZnR0dPeExEczdjYkloUHRQT0hRZXNqYTExVUk4KzlwTzgrY0MyWExGY0ljWkxYOGoraWha" +
589  "VE8yVk0xL2RmY3BaZ0dNdmVXY21nSldpSjRZWFlKa3ZRS2lJU1J5RkJhWjNkdkdRNXZLNjlJWHNaWVF3c2RuUDRwcTkvdndm" +
590  "di9vZzVhaDAxVzd0d2J4ZjdaY2h5NVJ1K3FxNnVwai81cC9tSnYxTlg2by8rMjhNSC82bTltTktET1dsUlJwaHowYm41cFYr" +
591  "b1I3OVJVUi83NXVpeStJUGZOZnd6SDJFT1ptdTJEdHMwSjRjdDFsRnZQSGlmOFhqUGJtRWJqQ3ZKTmJPc1U3b2pCMm5NZFRL" +
592  "cms2cXVrUkRFVVlLb09JbW8wSkxTYU9xaTFGRzFRZWxFVWUzVWJuYlhEOGlDbll3dzltYXJZcGFvdTNidWVMUXhRc28yNmxP" +
593  "LytuZjR5Qk5kZG1ZV21aWDNmYVBzWDBWUjFCZzc5MTU1M1VVd0pFRlJiVnhFRWtSY3RNekpHQ0dSa0JEUnVPaE9iOThRbXg3" +
594  "MkhHNG9zdWh3TkdTRTFBZSs4SXQ4eFFjK29wNmExMjlaZHdkanhINGZ5VTdHM3RZZHV4dXpCN2RQcG0zV05qY3o5MlNMSlFk" +
595  "bWJXc29WVlVSRWxzMkVqTnh1dzVmL3p0aWpFRUdLVjExVG4zeXdMYnVuZXgvTmJ3NXlkQ1VHVUtSc1pPYjk4czhzRHcyYmo2" +
596  "bDI5VFNZcEk0aXVjNkVTZDFVbEpuOGYraktFb3FwY2pZMmQxL0YxbXdRelU3aDdLSjJkcDF1bXZuanBhRVhWZ0dWMWM3V1VJ" +
597  "cVZqcDEzdEpWVEJjaEVTZEJQTmRxMEdLUUlpS2tPa3RDU0JpaENZbWlkUlJ1M3V2MmwvKzQ5TmJpaWF3N3JNeUlPSnVWNEsx" +
598  "dmxVLzhrNndINC9QK3ZMN3JwN0VZcldTVDBsWlNYL0xGaTQ5L3JIWlgwLy81TitMdi9meU5kcHF6MWprVUl4WFJ1V3Jqclll" +
599  "OCt0NzRzaStQei91aTBBT05kSWhCbzQ2Nmw5LzhROGJqTDljZWVQd3l5K0pzRm5VUm5lKzFmZmpmMWVWMTQ3VWY1Zm9IYVhX" +
600  "V29rZ0VRVkNMb1lncVFxbDZweVNDS2tXSzBxcWpCSXV6eGxscTYzUmJEdWhFNjY2ZE94TDIySWNHbVU3YUExMTFXM1Y3TFBN" +
601  "V0lRTkJFQldKaXlKRW5hVXFGS20yaElSbElVSVd3MFZEU292RFpybDliQnlHOUFHWmlEb0pRb3ZKZGtYM3NvYjVtbVdFRUVj" +
602  "dE5vdU5HNzdydS9qTzc1d09hLzBIL3o0LzlyOU5pMDFhYXpsZ1lqYXFEQmIxYmQ4ZTMvM2R3MWcyYlp5MEU1VXNobUZteC9a" +
603  "K1dUOWZ0NVdzdWt4bmNkR0lpT2o2c3N5RnAxZTJQV2EwdENodEpZeEVIR1ZEMVZGTG5DVkJmTG82UzEyRXVraFFGTlZ1ZExO" +
604  "dW0xVk54Rzl0NTQ1OUZ0ZXBYWWQxaGl6TU1wL1NsWFdWdVdMRFFpTlp5RkNrbFRxckt1SW9rVkoxVVZSTE1pU0xqSjA0U3Br" +
605  "YnJaUFI2Tnl6clRvamRiU1FTSWFURkMzS1FzZmdhckRmV1JKUzZxZzZwNHVLR3VIbUVCLy9KSWQxczQ3YUlkaGhLMmxOYksx" +
606  "YjNML0hHSnVCeHR1Q29DNUNwODZOcnBwSm9pVXFvbkUweUtCbFBiQWR6SFZqaTNoYkNlSWtoa1VFb1k1Q2tTZ2lUb0txSWs2" +
607  "Q3FwQzRxSlJtb21LYWM1cmJSaGtoSWZFWmR1N29ldjgvZWFuckRWa3lkdmQvOWljZS9odS8rUnMvODhiYVRlZTBuOU1mK1B5" +
608  "ZmRyWGRaOXhqdVpaeFpYZjl3TzdxQVRaYVRXbkZSVnRFbkpST1ZORDdYMmE4NTNjeEZycWFOdy9sRTM5ZE1sWFVvbmxGeG4z" +
609  "SlNzT2NKQ1JPcXFLa2hPeUdqSVZ4WDVhRmJEcEwwYXBJeUJpV3dmMzc5ZW9EUHI0czJIU3lROFNDRVc1SGJPcGJ2cm0rN3V1" +
610  "WUxXS01PRXNJU2sxNllIM0k0NDF4SUNHRDBJUUVRVlNabTZ5TGJrOXRXMWxqRjZJeVlyN25neXpVdGMyMTdGNmxjWllpVGlJ" +
611  "dXF1THhKOSswM2o1VkZUR1c0YVZYMzJ0WmRxcE8yb1BESjM3Sm5DdmR6TVNZTjNZSnFXQmt1R3ZuanY5M2ZmT1BlMmJELzNy" +
612  "MWo3eTVmL2lkeVNhREI0Ti83bC83cU56N3FJNlhHRmVNaFZmZXNMdDZXUjJsdE1UYkluVVI2cWdSUmVWOXY1LzMvd3Rrd2VT" +
613  "dG56VC9yOTlqakVrcVkyUGNNNVpyMmFLNVpWNkpqUTRFSlNSRDlvLzArbFBxSmNrZ1FUMFh6eVhVY0wyUDMvOTdwNS84dTlN" +
614  "TUl5eUQzYWdSMHRqVXVJNS82UTlORCs2aEljNlNxTkJTUjFNN2RmbXdNZC9QOGxUbWUxajJqSVZRa1lTRVZsb21kVEJ2SzFz" +
615  "WlJkaGZ1LzNhNzVHcm1Db1o4c3I3N0RzMW9WUUZWU2RSSjdlUFArWDI2V05DREdOWlBIanREY21DdWpoWUgzN003RUY3d0RE" +
616  "NjFBaExuQTF4MTg1bnNYWjFNa294Um1TMzErekljTlpKRDlxVlRqV2ROWWlFeEZsYkx3d0pOYlUzZEtBNmI4MzFZSTVhbGsx" +
617  "Rjd2MmNmUEYvcE10Qm43eWZYL3hqTXRGTkhZVWtaT0cxdnlyditUR1VjYXR6a3FnNkNlSW9VWEdTOEh1K1krZDNmMGZWeEhU" +
618  "U1JzWVFpNHFSYVJSektwS29veUswam9yU0d1Ly9TL3JHLzZ3VytkVi9SUjU5Rlpra0VpUmthbTU1OEVQcXFkNzdGYnNETWdV" +
619  "and6UmszSnE1b3RQc05PZEJiVFFhUjlGNnJvcHBkdE81TVNLREdpcnFJb21LcVNoS2FuYWFHRmdhbzNIWHptZXg2ekF3eW15" +
620  "bE1XelkxTVRLckc1UDZTMGxDZUlzanFLdHM1QTZDa0lqY1ZSMUVqSm96VmtqSmFXM1hQMG1KWGtWMTFKc1UxSU54bEJYT2pZ" +
621  "Wmo4aXFLcVZPU21nUlJ4RjFVV09wRWFMYW1LMjJZcE5zWkRpSjZES2tGVVUwYUFWdFVSTDJtKzZxWGJoNkpBOTNNdU5zUWFK" +
622  "anluakNxMy9ibGtlQzNJWldHM09RdWRGSXFZR0treUkwRWhyVVdZSVNKNlhWa3E2WXBCU3RLaVlxVG1yZE5sdHJhUlNMdUd2" +
623  "bnMxaVdhNGZjdURMdFV5T09ZcmZFUkR2TmVkQzVNbGZOa0E0U0JDSGVJY1JSQkJWYWhBUmxIbEF0czZRVm0yUWlYSDJNei9z" +
624  "ZnlPb3NCOW51c2QzVE1YanRiekp1VlNsMWtUZ0tRYUtPNnFpZUs0MmpHdkhwV2lkMWtRUlJKM1hTdW1oUXdyQ3B5Y3MvSzRl" +
625  "Rk1WRWRtM1l2bmJiZHdlaHFOMXlNbUZ0TmROYlNBM05UT3hMSkloa3FKSWdhNGlqMVhDSmpNTkNhYzFVeDU4RXloNU9pODhC" +
626  "Y1pTQ0xKQkpuMDBWOXBwM1A0bDE1N1lkZjMzYWZmTlEzLzhWRG5yeGtuZjdMUC9Ibi9aRS8vUGU5OU5vRHN6VlYzdjFGN3Iv" +
627  "K1J6QkpVRkVucmVmaUpJcDZXNExTcWFidVhqWG5mWE45YWl6UlFaYktycXF5L3hSdi9GVUUwYUJFeFVsSkJYVVVGdzJKazZx" +
628  "VWVsdENTWXFRYUN2eFhGdlBKVm92TktpcU9JcWpPSXV6dlB6WDljSC9JNE9xcXUzaE1EKzFVVHlkTW1pY2pjRlc1bVMzMjN2" +
629  "cC9WL0ZlS3BDUTNaaVlKQmdlUHJvTFU4ZXZpV28wTHIzNERVdnYrc051cWxKYXhsRE95VXVPdG1la2oySnBwWlJTMklyVzJ0" +
630  "bnVtdm5zL2pocHovM3cvL08rT1lmK2Z1N0gvOWdwbi9NckwvNVl6L3ZELzdUVDl4LzR6Nm1tSXpmUVliWXRDVkZQUk54VWtS" +
631  "RjFFbFJXa3lkbTdyU2JjKzhNZUlzalFncGdtcUlvMFRVUlYwRUpVV2NORUZGbkFXTnFMYVNxSWlna2pncDBraXEzdGJTT0Vt" +
632  "b2l5Uk9vczZLRWtkTHNXbERLNWt5SzYyelNZdFUwSkJHRXJKblhNbENHbTJkTkk0cVJUYmI0Y2JoNW9tSUpDU1cvWDFYMXkr" +
633  "cGpXNm9HaTRxVG9vcEpuWkdodDJ5TThJc3M2enFycDNQd1MzZGFtcDBNRnUzYTIzckxVdU1aVEdXYTdLbkZiUWxrdzRTVldl" +
634  "bFF1cUZvclFvR1VhR01VZ1dVa3gxRXZVNWlLUFNDT3FvaUtQU29CSkhFUlFSYlNYT1doZWg0aVN0Q25FVVJWUkY0cUx1S0Fs" +
635  "MU5GVnB0V2hJdFJGMVZpSWlJb3lGTVRCSU1GRngxSkpKYTg2RHVSMk1MRHFHWWFBa05CaWtJcDVwSjFibWdSbVdZRWhpY1JU" +
636  "bXdQUVpkajRIaHphSDJiUzBkVmg1Y3BqbVBCZ0pJMlJJRmpXYzFWRVE2aWdFY1ZUcUluVlJRcktUY1dVczF6SjJra2tQQk1H" +
637  "c3hGRTBkZGJTRWlRdWlraWlLdDRwQktVdUVsS2FpbmNJU3AxVVNoRkhDYTNQRkNkVlFSSlZXaGQxMHRMV1NWSEVVU01xWVN5" +
638  "aGl5eDdzbUNnSkZMcXBMUW9yWXZTcVdnMzdVUUpLVFZkRkJQRkxTVmxKTElNSXdRVmk4VmRPNStETis5LzhoWGI3dFdubU9Y" +
639  "ZTh2KzFCMit4dXVhSGZaQ2YzLzk5djdYMllZNjJFenRKbmNST0NxUXRQVjNRUmxVVVVxWHRSUUdKUTBVbGxGNlMzRUFSaHdv" +
640  "dUl5UXFsUXU0UUtCR0tPU0NsaWdGSVlXUWk0U2lKaW1FRUFJbFRVTktvMGJZdFkwOTl0aWVQYlAzV3V2NzN2K1A3N0Qzek5n" +
641  "cGVHTHNIQ3cvejJCZGRWMWxGOFppbEhaUGtVaENxOTFJbkpWa2tLQ2tsS280R1pKaHJBLzRtdThVbjlWdXpEdjJ2eVRiSzFw" +
642  "SEZTVFZGRkVYVVJjaHRFUUlWVUU5RlVkRm5EVGVWRVRFVWFoU0JLV0lFcFRHMnhRVlI2RXRJVE1jUWgyVnhrbFRKeTF0ekxJ" +
643  "YXhzdS9oOTFEbHAza0lUWVY4VlFpaXFpTHNheVdkVWRDSW9hTWxZVEdTVlA3MnlkMFF6RE4yemYwczc5cWppSExUcGRoM0x4" +
644  "cXhFVnJpTSszZWdjKyt1U1h2OWQxdi9HUVlkajhJOS82Ym4vd3UvNjQ5ZnFCakZXejh1THZsb1FNc29qWXRvUFB2dkl4czV1" +
645  "cWtYancvTXZ1UGZlaUtrVkk0eVFaQ05jdnlCLzd5Mks0aU1QUGZaOTg2SzlvcDZTRTVhWEJVcTJMT2lxSk9DcEJIYlVrNmlL" +
646  "cW5vbzNCVVZRSjVXU1VMUXVRaHR4RkdkcHZTbWhqa3FjemR1WW42NmtUbG95cTYwMldxYXEyTC84Uit6K3FmK2E5WUVSb2py" +
647  "M1doU0preUtJUmRYREY5N2w0UXN2azBnR0ZySlFSOE5KRzdlUFBxdnpvSjMwWUR6NXFPMVhmOVMyckZpTU1jMVhYcldWS3VY" +
648  "S3I3ZDZCNjV5c0xlcWFsM2tDanUxaUVGV0dZdDJvb3E1SFJ6dW5xQ2FhbUk3M0dsTG5SVnhsSGdtUGRDRElrb0dqZEdJSUlx" +
649  "MnhFVXJnb2lvRWtlaGRWRkpxS09JbzNpcWlCWnhsdEM2S0JKcEZSRW5WUnBTYjVkUUo2RjExa3FMRWtab3drQ1pqWmJyc2Nr" +
650  "LytzZTFCOWxlSjBNZDFWSFVTVnhFbFJCVXFLTm9IUldiQ0FraUdZd2RKWmswTEt1dU96RzBtemxyUDdtYkpYR1MxT2RidlFO" +
651  "RHJHR0dwTHBOeHFwWnlhSmp5TGpXN09nZUc5M003YzVoZnlzamtpZ09oenM2QlEwUmhGS1JPS3EyMHFrcEZneUtValRZeWhw" +
652  "blFZaVRTaEJ2YWduYU9va1FGRUdKcW5qVExFR29TSkU0cTdPZ0trVlFSOVg2UE5WRzZ5d05RU3N1UnBCZ0dMZWYwbTVhUjhV" +
653  "Z2prb2pxS0FFTFNwb1FoMlZUQnJORU1UUXVBaHR5Q0pvQmkwMjdUUmJzd1J0MUsrM2VnZVdMSllSSXpVd1dwWXJIU3Nqa2to" +
654  "SUo2b21wbmFxU21OMm9zeU5UczJndzBrU3o5UlJTMHRjdE5McHNNWFdJWFcyekNtemtraElYY1JUY1JFVWNaSjRxb2dXaVND" +
655  "b2kzcXFKSFZTb2RXV1JFbzhWVWQxVnJST1doZVRXWUlpclRaT2traGl5U0p6MFMwcVVpUW9qYk5VaTNoVEhDVmF0S29pdE1U" +
656  "UnBOR1VXWjE3blJ1SnBLcVNrRW9ycVhYRU1vSm9ZblQ0Zkt0M29OYUhjVERDRU91eXM5eC9tZXhRVE1aT3U4ZWtqcUlabEtZ" +
657  "VW9YT3p2N3N4TXNod3NxeFhNaFluVVhVU3hGbUdMZy9Nd3pBN3BhWGs5UnAzanNwQUVMS2p3MFV4eUlxUzBEcXFDSUxTYXVM" +
658  "dEVsb1hwU0hxcEVMcklteEJhWnkwWlI5dHRTRTRVRSsxWm1tZExhbGxERjc4WnYyMmYwUGU5WS9KY3FWT0ttZ2NoVllSUmFS" +
659  "VmNUSzNnN2tkeE1sVUxMc3JJd3VkdE9aMjBEYytpaWxqa1ZINzIwZCsvaGRlYzdVcjNjeXI2ZTYxNjAvYzJ6LzRYMnA3dkU4" +
660  "T2VuMlAxNzNkNmgyWUdROG1aaGxoeXlBUEpBdWh5bmlBU1VNR2lXVWx5eUtLU1p6Tnc5NFVTWnhrTE1ZWUx1b3RnemlLNVEv" +
661  "OUJldnYvMWZvbmM1YmZmUVI4OGYvQmJvUnBHYXFJektxb29waHZNQjRvVTVTQktWQktrN2lwTjRTUjZHT1NsUmRKQzZLcmZx" +
662  "RW9FaXF0OHhITVV0UkpKWFVXV2p4NE91czMvcG5KU1hYOHVMNzVadi9qTE5PRkZVbnBaNHFkVlFWaWFQWTluY08renRwMVRT" +
663  "VzFicTdkaGJhcXMxNDhtdXFra1hFN2V1UC9IdC8rYU4yWlp2YzRvMjdGLzdWNzl6OXNiLzJoRzdyMmhmSHlFOSs1c2U4M2Vv" +
664  "ZGlER0NpVzF5dXovWURuZVdaZFdFUkVVc1pKQWhpV1NLbzFDUlJEUElvRlVWSjVPV29DNFNSUngxeXJoSFZ1MEJCNjQrVFVL" +
665  "Q3FvdVVOdW9rS0VWZERJSUtTcEU0S1lJNkNxMnpPQW9hVWNSRlBaTTZpem9KRW9LMklpSUlxYWd4d25QZllQa0RmNEVVSVFO" +
666  "VFN6elZrQ0txZ2pncGdpSWs2aWhSak9YSzlmMEhNZ1lpamhJakEwWFZwcTF0dTdXL3EvMklyY3pXdG5YNWovWS9NYjJsUHMv" +
667  "cUhSaFo3aWNrdFdIT3FYUHFtR1FoSVN2WmlaUGhvdHBOT2tXY2RhTEVVWjIxcUpQRVVSUnhWTnFKU0ZZTUxPUWVGa3lKczJK" +
668  "T1docmlvcUlxb1NXQ3VvaG40aUpCcWFNaXBGU2R4RkY5anJiVXhTaUNTaGlpYUNzSkpZTUYyN3BUUkdscFVVUWRoWVRXVWNV" +
669  "emRWRW43VVJSMUxxN3NydStMMk80cUNZSVdRaHhGR3FLVFZ2YlpHdk1WaTA3WDhEcUhVakgvVkhXR1RPeG0yRSswWG1mYm5U" +
670  "WURtOFluWmlLbHJuZDRZQWdJblNLcWtoQ280S0JxcU9TVVBXV2FpTVdNblRjazF5YnJhb29SYWRwVW9RRWU5d01CaHAxRW8y" +
671  "M3hGRm9QZE1pcUtObzY2U09Xc1RaeEo3T2FwR2hHKzAwd2doRkV5ZER4S0tHSmMrclZYclFsQVoxa2pocjBXbzM2cWdrcUl6" +
672  "Rk0ybU5aWkd4Mk8ydVpTeVNZYzZEZHBNNG16TXliN1czSkFiVzljWnVpVEVaT0NDMmd5OWc5UTdNWEwxL3pyaHVqSVhEelJ0" +
673  "ZStka2ZOSlpydS9HRTdXQjcrTTFlL2xOZnI5dWVUbXl5UHZDK2IvbzJVUkxFNFhDdzdmZVNPRXRRRjNHU0lLR2xKZWh3RVVT" +
674  "ZSs0RDg2UitWL1dlWmUxcVpCMzM5by96Y3YyTm1iNm1qcVk5aWV4UjExQ0xhS3VLb3FMTVdkVlp2VTUrampvcVFPS282YWpS" +
675  "bHNLeVJRUTBTUHZBOTFxLzlmVmpWcXJtU0Z6OGdRWWVva3lxcWp1cXM2dTdtaVpONEpxNGVQSlFNRjdXN3VvY2dKR1R4NURN" +
676  "ZnNYL3lhVlZhWTk3dzBaK1YzRXJJR1BMa2lWbldXY3VJeFhESTRkWVhzSG9IMXZHMS85cnRuYmx0dDdmMzh1Q0Y1ei85M0hm" +
677  "LzUzLzFZOTkvZGUreGQ3MHd2ZnpDOUh1K2ZmV3VETzFHRDVpWWtrR2lRb1lNTWpZblJaQUVsU0p4MHFLTzRrMEo0bUxoWGI5" +
678  "WHUwbW5vQml2ZjBSelJRNlNHbzVTSnlsRlcwSWNGWEhSb001QzZpaUtoQ0l1Z2pvS1VTM0RVYXB4RkVGbmJhSVpydDc3UitW" +
679  "Yi9sa0VRMEpNT3RWUm5TVW9iUkVuU1JCVVhTU09nbmhUU0tuU3FnMmJwSjVKbUk2MlNXcHVCL013YlZzdEdFWFpXWGErZ05V" +
680  "NzhCTzN2L2p6bnVtbi9ibFh2L0cxWC91RncvY2YxanNqdFlUdmZmL2ltK2FrR3kwaGFJWmtJQWdaaUpPb1o1STRDeTFhRVNk" +
681  "dEVXOHBwcFlJR1NqS2VtMWt0VmsxbXdwRmFSMUZIYldJb3EyVTFsRUlTZ1dsVVFTTm96cExLRk5wVEtRa1dGeUVkcUZoaVpy" +
682  "U3lLaVdPaW9KcmFOcVBSVkpuTFFvRW1kQmhtUWdxTE5XV3ljMXBaTzUxN2tuTVJCVE1waVRPV25OSndmN2pkMVlMQm1DYSt2" +
683  "T0Y3RDZJcnc2bjdpWlV5ZGoxTDcxNUc0diswL0puR3FSaFRFcTR4cFRVQ1JEeGtCcEZCRnZLaEZDVlJCUnoxUmJWRHdURWtI" +
684  "VyszcjFQc05yakttS0NOSXlVZEtxazFMYU9LdWpPSW1MRnFVdUVvd0lncFlpZFZSeE5NaTZzQXpKS29kcExNOUpYYlRPaWtU" +
685  "cjg0VEV4WkRRVmh3bHRLaUtvQ3BLNjZMaUpPYmhWdTllbHhFU3lkN05iZDNlaEMxWXZmYjR0bzh0SDcreW0xZGQ3TlhyM1Y3" +
686  "MUJheStDSS9WSVdWV3NVLzg2SC83aS83a1AvbVhXS3BqeUhKdGVmNWI3UDdRWDZLYm10TEtXSTNyNTBoUk9yV082cVNDU2tK" +
687  "cElraWR0U1cwU0p5a0VTRXhydDlqK1ROLzNjNUdKeXFoamxwQkRlYWRLblVVRjBWSkVCZHhWbWRKaUtPUTBLaUppS0lvU2xi" +
688  "R1FnY0oyYW1JYW4yZU9rdFE2cWs0YWFmUHZ2b0pDVUljZFhyMzExOVoxaXNKaWhCVndWQ3I3Y00vWnZ2WVQycktZRGo0VDM3" +
689  "Z0kzN21GeDVKNlRiY0hhNXUvdUREUC9tQkgzN3R4Mi84QnF5K0NBYzFzV0diN0FlZmZsSnpQakhHSmwyWmRFNnlvTkpxNnF6" +
690  "ZUpoTGFrdENTVUpKb3ZhbnFySldFSXBIRU0xR1dlM1NxaXFwbm9rNnE0MXBVRzFRUlIwV2MxVE1SUjZHZUNTM3hWTlJSSEpW" +
691  "T0VqSVFpYU9JazZDcTRxZ2tqa0tScU5JU1orM21zTDgxRWlkSlVVeE1Hc1JKa1F3Vk1jd2V6SGt3dTVlNWtXbC9WMDllTzBq" +
692  "S1hHM3owQi9lLy9pTjM2RFZGK0dlWVk5WnB1b2trNHdwb1VGSU4xUk5VanFsemxxZksyZ1JXazJsQTZYUkVDZFZ4RkdpaVRZ" +
693  "b0xZcGlvdXFva1RpcWs5Wlo2Nm1JSW9RaVNGdzBncnBvU1pEUWt0Q1NJTTZ5T0VtUklxZzJ4RmtFUldrUTRxak9nazVVNThG" +
694  "MnVOTkV4akRHa0F5eWtnVjFWbTlUU2RXbXlpemRkTkt5dFJhTXhsWGppN0g2SWx6bm5uM2VNRTNUVTRQZGZXYXZHVVNrQjFy" +
695  "cHhKMmFLaGlJaWhpb3M4UlpIUlYxRnVLcEVGRVJRMFJWUzV3VVJadzBKTFF1RWdsdEZIR1VPR3ZVVXlrTlFhSklhQjBWY1pZ" +
696  "NGk0dlNSSXFFME5hYlVtZHgwVGhwZ2lLSWhLcUxPdW5jek1TSW95RVpNcTdJRGh2ZFVERXBzaUFrRENJeUI5dDBlNmduZGxa" +
697  "eDMyTEo4TVZZZlJFKzYrSC9kZFY3My91Z2g5Mzl1YzNSN3QvN2VQbDlQL3pYUHZYbmwyV1ZUbVk4LytJVGYvcmRmd1VIVzZl" +
698  "SzVmN1hXZC8xK3hFeU1GanZ5ZGdodEJyaXFDWE81bmJ3NkRPdk9Fc2t3N3JlOCtDRmQ2T1NhaXNoZFZZUmJ4T1VJZ2FwdHRS" +
699  "UnZGMUZFZ1IxMG5wVFcwazgwMGFDRUNIT1dtUklxMHFMT0Vsb0hJWEdXWXA0VTRJWVkzamhhOTVIcDRpTVJiSzRlZlJKeVND" +
700  "MEczZHZPSHprYjVnZGpGV3k4MnUvOEwvN083LzBNUktIeVkyRE56NCtmdjY1dy9xM1YzSHR2aXU3T3g3NWpWcDlFWDU2L3Nv" +
701  "amQzN0EyM3ozS3krKzlLRWZuSDkrcm5mR25QYkw4UDV2L0tRLzhlMy9xYzQ3MDlURThyN3ZOSjc3b0JFcWlqSGVyV1BuSkU2" +
702  "cTZxS1l0c09kMTE3NUdLbGtrTGkrLzRMN3o3OUVTNmFnU3VKTkRVR0lFRWRWSjVHZ0xoSVhwUzdpb3M2UytJZEpITld2RjJj" +
703  "aEhZUTZxVHFKczlSRkJIVVNKelVJTDcvbnZTaHh0R0R4Nm9mK2pqa25xdDBzanovaTliL3g3enRNTWc1MjYrYVgvb2NiUC9o" +
704  "amU4UnMzWXpGemUzVnYvbkw4L0ZQTzN2REYydjFKWExidmRGcHp0SnBtOVBkWWJYZjdnd0hIWU5sTmRZcldWWnQ2VVF4eFZH" +
705  "cktxVm9LblZVTlUyYjFGa3kxT1ppVW9TSU5Pb3RjUkoxVkVkQlNSRVVvWjZLczlSWjQ2S3FDT3JYaTR0cUhZVlVVQ1JJbktU" +
706  "T3F0NVNKMFZFRTFTY0xGcEhSZW1tdlRPM1c1MVQwVzVHTngyMU5kcmhzTldUYmVoK00xSkxocDA0dEw0VVZsOGlld2RSc3pF" +
707  "blU5M05tcTBJSWxtTXNXSVZCeGViZEtPYmszakxFT0pzWkJnWnFJeEk0aTFCS1JKTkZSRnBQQk0wTG9vaUx1S2lDSXFHVkJJ" +
708  "bnJhUDQvNVJRRWsrVklsR2tGU0ZScFk3cXJFUkoxRkZkSktna2xMYW90SFJpTTBSVENjMDBMYllaOHhBMys3Z3BxMWpLRUl2" +
709  "NlVsaDlpZHgxR1hjTzJwMG1wbm84QndZbHFTWFRtRGRxWUlpTnVkZnVjYURGUU1nZ3djRENRcFpWVkJJeUpJdGtjZEpPYjRr" +
710  "VWNWWkhKU0dvZXJ1NHFHY3FpYk02cWdwQ2k0aWp4RVdwcy9wY3lkQ1dWdUlvemxwUldsVW5TUkFTRVZVbnJhTktxNmFxT0Jw" +
711  "WGtzVkpFZ05kcjR3bDdBOTBNT051Ymg1YjNGc1dTMk9PMWNId3BiRDZFdm0vM1QxNnVGLyt4WmQ2Y0xDWE1iMzR4bnUvNnov" +
712  "OHp6N3hmYnNNOTY3MnJwYnB3VXMvNDdsdjNGdEdmUDFMOGNHditZd1hmdmNmZHZYU3QyRFRnUXdaTzhrVldSRE40cVgzZkwx" +
713  "MjBqb1o2NDRNVkJUVnVnaEJRMVJSYnducXFjU2I0aWphSWlRdTZpU09TbjJlb0hHU0JGRjFFaFMzajk5dzg4Wm5KSTZDdXZm" +
714  "Y2k2N3VQVVRVU2NSUjY2S2lPdmR1WDMrRlRrSVNHcnRYZnRKMGg0Vk1yM3pzRTM3Z3YzamtqWnU2MjhlKzhkcmovTlJ1cnYv" +
715  "eHczMDg5RUN5czNYM2YveHRyL24vYS9VbDhsSGJYcmNmOGN6a0QzL3lBK08vK1ltZis3NFJydWVkTWJpM2ZzckQ5WCt6anZp" +
716  "dVA3QjQ2WThPOTErK3NsNC94Q1FUd3pRa0MyT0l3ZkxBOVh1K21aWk9iV1dzMmlrdGlSWXByWk1hZ25xYkl0UkpuTlRucW9x" +
717  "VFVrY2hhRkJuUVlzUVIvRk1FMmVOczZCMTJEOXg4K2hWR1VQR1FGemRmNDRzbEtTS2xyVEUwVVF4N1c5ZUY1VVVVK2VkZnVa" +
718  "dlNUYkdncmo5eEN0Ky9oZnYzTTA2ekxxemVHUGJmdmJYOUVmVTBSUHFTMmIxWmRUWmVUMmkyWnhNTlV0UnRkdE5XUmZqNm9H" +
719  "TVJRMU1KM0V5bVpNTTZaM092VTZrZE5KS0R5NGlDVVdpNnBtZ2pvcWd6b0o2cW5VUkNlS3NTTkdnbXZnY1FlTXNSS2lqT0tt" +
720  "VFltTERwSFNXRE8xRUVVVHFxS1NpcXFKa01CWlV1ekVQT3ZmYUcra1VLMWJENGxxTjFvWmRhKzBvbXkrSDFaZlJYZnZHZFpi" +
721  "WnpHRkVnN0NoNVE0MysrbzJ0UnRqd2VJdEZaUHVkV0krMFRra2NWWkhFM0V4U0ZBRXBZNUNpR29KR3Vxb2lLT2dwTlJSRWZG" +
722  "VUhFVlFKeUhFU2RWUmFTcUNJdUlrWkJoamxURlFVdTJtYzY5emowVU1FbStwdEloa3dZS0pUVlZubVFkc2lvUTVOd21MV05R" +
723  "dXJGbXcrWEpZZlJrOUh1Tm1uOUcxdzdDZ1J0SHFWbHVITjU1TWg4TkI1a0VTeGlBTENTMDI1blRXS2FhV0lJcTZXTWhBVUhF" +
724  "eVhVeGFkWlJxblVWSTFGSFFVa2QxbGlLMDBtZ2NSVkJGVUJKYWxEb3FjUlN5a0NGWmpmVytaVm0xVTd1aHROakV4SXFWck5p" +
725  "Y0pFV3dXRVlraXptTGxXVmFCbnFnRzNidWV1ZG1zaUNOdXpIc2ZmbkVsOUUvays5WW4xOFAvOXgrdS90VXpjTXVZNzBuenor" +
726  "ZjhlRDU1UG9qTDMzNDM3MTk2ZFZ2ZVBjSFArajVsOTVsSGF4cjdNWmlHVEZFUzd1NVd1TjcvdXkzR3N2VWhNRnkvWkxyYi9x" +
727  "bjFXQ3NaR0FRdENpZHh1NDU2L08vaTI1T2l0YysrVEczcjcrbUxwTGh4ZmU4ejlYOTUxQkNHdlZVSWdtbFNPcVoxbEdwbzZJ" +
728  "Nk40OCs5VkVNR1R2R01COS8zT0h2LzVkYU91OTB1M0g5cnZkNzhFM2Z6ZGhKZG93cnlaWERSLzQ3OC9henVOVWV6RVA5d0Ev" +
729  "OVBUcHQ4MkMyRGpOdVB2YTNkRTZ6M0dWNmZPT3pILzhmMS84Z2ZmSm8xd2ZrZ2NYRC8vbUgrNHQvMDVmQjZzdm9SL3N6QjNz" +
730  "LzR2L0ZkMy9tZC8zcm4zNTkrNGI5aDM2Rk9xcFZYSVUxckM0NjR1V1hGdC96SFI4eTErakFHUEx3dmZxMTM2Nm9xSXM0cVdk" +
731  "eTd6MDgvNDB5MERqWlAzbmk5bzNYU0VRWU1iZXZFU2ZSMGhEeHB0WkpIRFZPbWlJSTZxSzBiaDY5S21PUlpaWEU4dmpEMW8v" +
732  "OWRUVk1tM2F2OHdQbWUvK0lDaG1NUmNhVi9ZZC95cng1bGV4MTNqbnNiL3pFRC85ZFRTVUVLWTl2Mk0rNEUvc090NWwvLysv" +
733  "TncvYzcreXoxWmJYNkxYU1ZzYnMyTGEyMjZxUm1PWWlxSktnNWh3NHlWbGtYeGlMakhtUEhkcWMyYlFWVkowa2tDeUpaWEVR" +
734  "U1dWWVppNXFxdENpaWNaSFFPcW1pSXVxb0phRWhhRWdranFLZEtQT2duUnJHNFZibnJXYkhHREt1Wk54anVTZEtwM1pqM3Fs" +
735  "YnlWNU5WWWNPYzZ1WlNsalVDSm14ZEZvTkUwdnJOOVBxdDlBcWp4K014WDdHUVIwbUc3WXdzYlVxT21OL2lOR2hEUjBZMm9s" +
736  "aWsyNTBTcWxLSWxuSXdoaGtvWk00S29taWRWUXh0UnVaWWlBdW9wMmtZbXFkeFZHakdXSVFSM0V4eUdvTU92ZE1SMVBuSGZP" +
737  "T0RFVEdLbGtaTzVsN1dreGEwOEdZQjhrd1drc1BiQ0V4QjhKQUJzdkVkTFNZbzlqOFpsbjlGbm95eC8rYXcvMG5kdzR2N051" +
738  "cnFWZERkcWtSV1laY2JSbjNta1FzZTFtN1I2WWhlcnQzdTcvVnd3M2RVRXVpYWdsNkpZN21IU2JkNktZaE9aZ21DZUl0SmQ2" +
739  "bTJHUk9WVXhVRVVNTXRSTkhXVWd3Sk1QbzN0eHUxTVRHdkxHL3d6S3RZOU94Y2ZmWWZydVR1ZWs4MEpxR3cvNU90czFJNlhR" +
740  "WU56b2ZQcmxLN3c3cG9YcWIyamJaRDdiRWtDdzZQc21kM3l6eDI4QS92M3puZzlIdTBxNXJzcVpOR0d1eTJ5M0w3anJKellO" +
741  "LzhMNVBQUHpRVDlld0c5TUltOFgrNm5udFZFY2ptdUZmK2hQMy9LbnZlTTdNUW9iZEMrLzM4UGYrT2JZN1RKMGJEejhvOTk2" +
742  "RGtFR0dtNC8vWGR2K0NSbVNZTHArL24zRzdqNktZanBwNnl5WW03NzJLNlJPSXVaV2IvenlEOW4yajNVNzZOeTdlWFR3Yi8z" +
743  "Rlh6TzJXaEt6SE1haTkxOUd6TllzaDdMZWZjWU9LN1lSaityd2RmL2dILysyNTNwMTJKWmwyN1Bmc2QyMjIySE9iVXZHeVM3" +
744  "SkQ5Mzk5NS8wbTJUMTI4Qi90ZjNVWTgvVVc0cnA3Sjg0dlBqazlvM05ibXl1dTFkeFVKdkhKS0pHU0dLKzlvS3hPWnR6NC9h" +
745  "KzNuNUt1bWtHczRhRHNleklJbGxKNmRUREV5ZE50ZFh0RFJaa0lKSm9IWldXdVRGdjlPNHpwR3FJb01iMk90c1RjNVo1TUxy" +
746  "NTlLYzIrMjJLYXFtajNBaGFKR2FySlpoaXkzRFkrTW50Zi9wVko5TS8zT1kzM2VwM2lQc2VYamMzVmh0bFMwMUVqZGJBV3Bh" +
747  "d3FLUTZwODZEemx2dEFhV0RzWkNGY1VVR2dwSkJRcWQybzFONzBHNFNaRkZoUkZvMUVWcnRnVGtKRlhIVUEycGtzT3hrV1Z3" +
748  "TjlvYzYxRnRhaXhncXJXQmlLM3V4MWRIMDI5SHFkNGlidnZiNm1sVlNNOE1CR3daR1dEQXdNTGRTYWpNN3pXM1BuS1NNa0oy" +
749  "TWE4bVZxcXFvcVdRUWRLS29kS05CU0RESUVFTU5zcXJRU1RkTVFudUhqUkVhUWhNMVZFMVVEQVNyR0NHT1dqTzBNWVg2Yldu" +
750  "MU8wVmYyaDdzNTRkM0RqYWJ2ZW1ncWhiY0MydGl5VFFPMSsrNTIrYjliYy9oc09uVndlTzVHcWJSSWFuc3k1TURQZWc4a0xx" +
751  "N3ZaVnRJMFBub056dDQ2Q1NUUVlaZzRGUzBRN21sWGFZamM3cW5KcTRmWHpRYnNZSUdXNzMxZjNEajl3LzNNM1oxVjVNTEZh" +
752  "cllZZEZUTk0wSGRTdUhNSmR4NEZYL1hZVFg0SCs1YS8vNEYvODlOVkgvKzF0bS9ZYjJ6S001MTZ5am1FM0ZtdHFHOWNPV2Mx" +
753  "T1c0dFlEamQycVpGb2EydDF2ZFpFZ3JDTUdJbUJsTTZKeVBhNmJzeldmcXU5MkI1OWh0YlZFc3NZc24vZTFldGYrL3hmZmUy" +
754  "WFh2Y1ZZdlVWNkpPZlhGNTc1YnIwWU02YVlYejZFNWF3WXFDSmZlTlFpbUJWYTBpY0ZSdnFvZ2lDRVpZeVFoRFZjc0MrSEVw" +
755  "YlJjckljTDNkZU83dWRWOUpWbCtCbnZUR2Z0YmFXRm9yMGhvcVFweU4xcXFLZ1pGUUZ5RllFU2RWdEJSQjBjUkpsVERLaWxG" +
756  "bWE1WXB0TnFOM1BoS3N2b0s5RGlQM0ltbE1iQWtGZ3duVVd5QzBraUlDQVlTcElpQk9JbFo1cWhaV3VxWlNHS29KU3dvcHRn" +
757  "d2xRNUpkR0R6RldQMUZlalYyZi96YXYvYzM5U3AyVzY2emNkSmxoQ3lNSzRqOTRmc2h1d3dvbmRKdWlBMGtjaElISFd2Mldr" +
758  "emtyVmwwOFBXM2sxR2FkSkRIQ1ZaSERXZG5ZZlI3ckVNNjRPTTYrY1BsczFYZmRWWGZkVlhmZFZYZmRWWC9ZNzIvd0JqcXc1" +
759  "aTU2bXMrZ0FBQUFCSlJVNUVya0pnZ2c9PSIsImUyIjoiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpBQUFBQ1FDQVlBQUFE" +
760  "blJ1SzRBQUJHQ0VsRVFWUjRBZXpCQzdDdGFVSVc1dWY5L3JYMjN1ZWM3dW1aNlJtWVlVQkdGQXdScHl5UkVCRU5zU3BlU2cz" +
761  "ZW95WUtxVEpHeTBpTWlaWlIwYWdWUmNwTGlMR2lHRk5hOFJvVGk2UWthZ3Fyb3FJbVVaem9pS0NEQWhsbW9HZW03K2V5OTE3" +
762  "ci85NnN0ZmM1M1UwelNNdnB5MURwNS9HbU43M3BUVzk2MDV2ZTlQOUQ4YVlmVW5aLzQzLzRKWG5QL2t2Rzd0WXF3Ym5keFVl" +
763  "Zit1Qi84ODdmKzNsZis4dWY5enJiZU5NUEtYbjBtUzhhajl6N2xlWlRPb3BMODdrN1QvTE9QNGJudmM0MjN2UkRTanFZRnpw" +
764  "REYrbVpMdXZ0Sis3Y3VlY05zUEdtSDFxeVUrZWFJUmJ0SWlmM25udnk3dDA3M2dERG0zNW9tU3VUVEhReWQ3YW41N2VmUFQr" +
765  "LzR3Mnc4YVlmV2s1V3h0WjBVRkxtZWhHWGx3UFQ2MnpqazlqZFAvVm5mOUx1ZG43VzZmT2YvaDNQUGZmY00wODgrYkZ2L2R3" +
766  "Zi91Ny9aL01iZm1vOWhGLy9xZi8ycDM5czk5enozL1hVMzdvVE5NR1ExcHJhZHpXeHFyUGxVOFoyM016NSt0RnBubmVUWVNO" +
767  "MHFMbzB2ZXN0N3p2WjVXVDlYNTc5MnhkZVkzbkhlM2pMdVRFbnhiclIzZmIweHZaeWl3dXZzNDFQWXVlMzd2Mkl4eDQvK1kz" +
768  "T24vQjRkeDYvM0hqKzI1Nyt0L0FOSHNJSG5uci8zejBmSDMvWGRoc2pWVVNsakRBNlRMVTI5dm00UGNiQ1pva0ZHd2VkWmxn" +
769  "TUg3NzNEejFkdndlLzJXdHRubUNIZ1lyRjNKK2Uzam9iSjdqd090djRKUGFXUng5N0pzOWZjakhVQ2J0cHY5LzlCSHlEaDNE" +
770  "RDJGK0lhWnBLQ0pZUUxHR1VnYUlJUmlxWWFGaHhtVVZiWngwYnI0YzEydEE0cXEwNlhUWW5HZDRBRzUvRTh2UTZ1OXlUeXhP" +
771  "Wk1lL3EvcndmOTVCT1p6ZWJaVFZIcmFhR2lCVnBCUWxGVWRmV3NEb29LL2Jxc3RGVWMzS1RDNis5TURHRElkMFkyKzNGM1l2" +
772  "bkw3MEJOajZaZmZqczd6ei83SE4vNFpIVDNTK2M5MGFmZVdyM2dZOCtlK2N2ZTBpbmFvaUppVGFDcUFVRGNSQlg2bHBSckdH" +
773  "VzJVRklXREpYcjRQc056b0hkVEFRWTJ6M0hXUDFCb2pYMk5OZitVZCs5dmVjUGYvODZXZGRmdGZGUi9adlhlOXVuLzY4ci96" +
774  "Ti84d3I5UGQveVg5OTl0YTMzUGpNdHovNnlPMm5uajYvL1lHUGZPUzVMLzNMdjZVK2dWODRQdjhuN0x0L3k5b09iTlp3ci9Q" +
775  "T0NUa3pOc3N5RnFPN2YrWEhmT2RmdUhmajNtT1grNTE5YTRvZzJLak5ZRUZTUkRGTEordks1V1MvWndxSlpXRmMzdm9yVDN6" +
776  "emU3N3lobkhyWEhjMU5pTmpPM1hkbS91MW5adGwrOGl6cTIvOG0vN0JYZjhDOHdOZi96UGNlUG9MTWliamtweVJSZmVQV00v" +
777  "dS90emw1dTdIdGdPUmJ1d3Y5MC8xSSsvKzJ1Mk5pM3RNTmhkc3k5T1AwWlhkcGU3dWV2Njc4bWZmK290L3dRZTlpalplWTQv" +
778  "KzRnLzlxVWZmdXI0bEtjc3pyT3NmOXBYK0k2L1FqL3V6WDNHT2YrSVZlR0o4K3gvY0xMc3YzTHUwTSszUXlSWW5pWWJ6d1gv" +
779  "eEZjUG5mTmFaMmNWKzdzMFNNWlpZQnNzbXBMUUlwYTNPbW52Tzc5WHUzcFRFWnVIa3RQNjNyNy85MDcvbW4zNzdUei9OTkZH" +
780  "c21HWEZwY1hPNmkzZS9lVldmOUsvUUpkdit4a2V1ZjFyTzdaa3NreEN4MlBHZUV6WGdTQ1lOcWQ5ZXovelE3OXA5bHpyWUM4" +
781  "dE56NUdWMHg2ai8zTjkrT0RYa1VicjdHc0cvWWhaWDJjcmRmTVNYYTZySVpWT2kwT3duQVFOamdiek1zVDY4V1FaV1Bqb0hW" +
782  "bEhjeGhya0VkZGJyU2x0YWNaVi9wYW9RbGpEbloxNUpMNjZpS2lSVnJheFU3QTFQbWMzNGd5VnNkdGNGa1h6SWtZWU1TY1NV" +
783  "ckxSTnpJeTBXV2lheDBkTGxwcmU4OXgzUGVKVnR2TmFXcWFhNFpKTGRpZGRLV2xSYWk0cG9LcGpGWUcxWXA5ZzdTZ1lKUWxF" +
784  "SGRSVFIxbEdLa2pMQ0VpSmE5dnU0ZXhHWG5kcWlpQWNHdHBsU05pNzlRTEtOamcwdGl0SmlGWk1NTXJVb1VyV0txa3BSMTBv" +
785  "c0NLZnhhdHQ0cmUwdlhabVRWaTlYcjVXUnFhbUVsSDFybG1KTnJZbjlXdXU2YWkrbEd3d1NST05haWFxaVdvSTZDcTA2YU8x" +
786  "M3pOVDVKZnRRQklzYUdFalpMcFVPWjEzOFFHcW9oVTVNVFlpRFNTZXBLd2xDZzJvR002cW9veGpTUmUydDY4WHdLdHQ0amZV" +
787  "Q2pYVG9yTFc3eFVQNkZlTW5iMmJ5cVJmdHZNWHBKdGs4dTF6MnUyOTkwNjNOZHRpSVRXS0xXZGJKRkIyeHJHV3pWVVMwY1Mw" +
788  "b2RhV3V0V2pWUVN0STZiNklscGtnVG01VU1NSW1MR0hCZ25Wd1diYmpMWi82Nis2Kzc3UDNTZTVLOTNTTzhkeWYydjhmSDNW" +
789  "ZmM1R3V6OGw2aG9vTnlpdzNWemJCd0pBTU9zenpzNVg5a3QyQ1BaMXF3YUpkeklzTFQvN0RpeCtCdis1VnRQRWFTOTZDZXdq" +
790  "cTdoUGpKM2hJMzVObmZ1WXovZEFmMjQ5T3pjME9aM2ZudlB6ZHZ6cTNQdWR6ejV4c0x5MWpKYUhEWEd1ZEUxTVM3M3c3U3pa" +
791  "cWNhWFV0YUJJZzlKSTNSY1p0VjVPZHo2Mmw4UVUrL0pUdmpDKytQT0hwcGF3R1JWMFJhTnFQVm45d1QvNjdPLysrOS84TGYv" +
792  "bFBsM1daazdXM1Z5L0hqL1BmWDNpOUEvTnVmMkx1WE9EL1ZaMk40eXhaWGZDRjk3K2lqNTY4WE1vclN0NzMzem42ejd0VjIx" +
793  "dnpPMjRXSmhUU2pPa05jKzVYRzk3eE9uN3ZjbzJYaVVYWC8xWFBqdi8rai8rOTVmdFkvdnN0K3pQR0Z1OTlZRlRvWW5neHFP" +
794  "bm56ZS83cy84enI3OU9UWWJXVGZtOHN6NlhYLzUzZi85ZTMvWHYvTWhyMENzTjVzNzc1VHBNblU1NkdyNzFyT3Q5engyb2N1" +
795  "MExKVXNaRWhSVjVJd05tUzRrbWdkbEhwQmxZWlNFU1dSd1pMYWhxWXlpN2p4U0p6Y2lEYXFCcnBuM1JlMTcxUng2ZDd5N0xo" +
796  "bk9zcVNMc3UwditrbE5sLzA3LzFUL0ZPZndIejJ6L3c4d3B5TzZ1RHM0dG0zL3RwLzR4dTlBVFplSmVQbWs1K3p2T2ZKLzl4" +
797  "NFVzZWVNYkVnMUxWUjI4ZWZYL3I0My8vS2prdkpVSVB0Yzk3MWY3NzNXL0hudlFKTDNlaVlZa3FtZ1NZc3E1SFZtbzBhRWxl" +
798  "YWlBV0x4a0ZJSkY0aXFLTWc0cWlwT2dvSmlXWklvcXBJR1F0akUzT0dsckkzN1Z1enpCa0dheWRsU2NXd0pGYlRLM2E1Y0xJ" +
799  "aksxYldRZTk2bzJ5OFN2TDBUZDNkWUh0YnJOcUpTUmFDaEV4dHRTdVR0dExvK2pZdUh2TktiVE51UmlWc0VsUUcyKzNLaURF" +
800  "R0l5b2lpTWFWdUpZV1E3MVVIQ1ZvU1VqRVFSMlUwckpPaWs0YTZrVk50RlNzRGFVbGFodE93d2hETFNJMnVQUkt0SmQwcjky" +
801  "TGd3N2M4VWJaZUpWMFJrWVpRNWNRRkMwWmlDdEJnbERtck83dWNmR3NWNm9IYXlwMVVFdGlDYWZiSWN0V3htREV0UnJxcUdX" +
802  "MmxDQ3Rob2hyY2FVMGtUb29nanBxcTZhOU9HcW9XR2ZzMTJpRDBtcFJWNVpSMjIzZDJnNDNzTFRVUVJHdldQZDBsVTZFbHRZ" +
803  "YlplTlY4dDBmZmZhSmQ4Lzl2WFRjY0xseE5OWXpQYjFnSXFGYnhwNjdKM3F4Nkk3dW1kYjlrOC9jZnRJbjhMTzg5NWZ5OFVm" +
804  "T3hWM1RoZFY4ejNmK2pGLzZKVU95WWNSMk05M1lESi8yR1l1eDNTSW9tWExyUjR0TFFqT2t0Sk5PNlRUc3RlWE90NnRGUkVP" +
805  "S3VKSlMxOW82dXpWc2Y5aXB0aUptNnQ3dDFkUGZzeEpHU0tqU1dwWllCbE44MGZ2NHJFK3BsTFNTdlh2M3puN2N6Yi85Mkg5" +
806  "eWUzZHg1OUp3bnJqYnMyYy8zZWYrejkvZ0cvZGVhbjlCOXVwYTlrTno2WTJ5OFNyNTF1OSs4dS85M1Y5ejUwZjlwTjl3NHlO" +
807  "dis1UnR2K0ZyYjI5KzJwZDkrbjdkM1gxNmZPWXpiMGxERjg5OThCMGZ1VFgybnpIdkxPWjU5SHk2dkxIMy91OThZdm9FNXVi" +
808  "aXEzZW5mYytZTzJlWkZuWHI1czZ2K3ZKVGF5T21aSWdOTm1TaFZRZlpXajducStUczdacUZCSlB1cEhzVkd1dTlENXQvOXhl" +
809  "UmFseExxUHNxRGtxTHNHd0hpb3FRWVhlNUdvTU9FdGRDbEJsenJTLys4YlJVVkxYMW5SKzU5ODYvK3ZjdS84QmNhQ0p6ZUd4" +
810  "dW5uNkg3Vit4ODZ5WG10R3VqaUswOU13YlplTlY4bFAvNHE5MzhDRi96UU9YL2dpN2IvcGRraTJOOW9UUi9jbVgvTWJwRmJy" +
811  "SWhWMVhtKzUwVG1QRXlZakYwRVJSZFJSVFcybk5GbVY5aXJsaG5HTGpTaWQxc0dmdXBlYzZxNE1SMzFlckhxaHJWVWRWb1RI" +
812  "RUdEVkNRcFV5SjFVU0ZTM0ZMSE55OTd6T2Q5TlVLMllYUzd0czFNdGx1eERhVlJ1eEp6dHZsSTNYV0c1U0d3bXltTnZlOFMv" +
813  "aHZIdVg2cVFFTFpaYU05V0M0ZHJRT2lqcUtBNFNRaHlVSmxqSXdKQ1FjVWJpNVZwWG1sQ0NPaW9oOVlLS280UU1CeFVVMDBG" +
814  "cGFVdXBLTmFWM2F5MVZCR2JUcHU2TzBlbWw4dWVHVkZLWFpJNzNpZ2JyN0Z1ZzRpSmFVeVArWmZRc0U4a1ZCUTdzWnNzcVl4" +
815  "QkZneFJWY3JTaWlrNUlSdEVWVG8wb2NSZ0RGMXV5TmhJcHFnS3JhQ0lLS29vUVVNY0xBYVdwYktKc1ZSU0ZYUFdMRzIwRHFx" +
816  "TkpCS0NMTFZaT0VuTklnU0QvWnJVeTEzdWpLVWF6RkxhMVJ0bDQ3VjJkOGhwSlN2elV2YWJNOStQTDF1KzhOMXJmTkZjMS8z" +
817  "Q3ljZEduNzU4OUZ2T2Z0Um4xN3djMXBiVVo3NW4wUTRHRlJGakxQTDRUMkVzbWxNU1VVNGV3eWtpQ1lhakppTGFNbTdJNWtS" +
818  "Nm9ST3RLa0tpclNLTzRrcUlveUllZVpTYm4zVkNITlJzUGZmMDlNekhkaklJa2tnWUlha3hTSGpzVnAxdVlyOWpvcGp0Nlp4" +
819  "emVKbWU3eTU2NXJsbWliR09MbmNyejE1NGcyeTh4bkp5UTNKT1YwenQ3cmJ2eCt5SGYvNFR5MU4vS0ttTDFQbXM5MzNHenUv" +
820  "L3FrY3M2elFXaklySXJ0cEJ5NWpTWWJ6bjEzSGpoekVHaXNtOG9Ec3ZsYTZhcUVpR2pGUEpvQTVLUzl4WEduR1FFQytvaWxD" +
821  "eXhESkNxOHFNaWprWllZeElHS2tvSWFta3hzSUl5c1FsbG5qTDBuWHhNbi82My8ydTMrTGs1Q3MzTjI2Y25XMjNaNWZONWFl" +
822  "Y2Z0Wk5iNUNOMTlxNlNBZGRLRGJyTTc0Zk4zcnVSaS9zVW9KUit6WEdKVXNXdzZLektLWTByc3hxcDg1emNVRVhWV20xeElL" +
823  "cVZSU1RPZ2hDOTJUMWdyZ1MxY2FWT0tpSWhEcElhRVcwRHVwSzZhd2lpUkZHS3FuRVFiVE1TUnVYbCt3bkszYXRjNHV0L2Vs" +
824  "bG40K1grZVgvOXgrNGNPMmVGejNwRGJMeG1sdXhwWU5jMnV4NnkvZmp0bk9Yb2tYWWhKdWIyQzRSR3pKSWFSMVZ4VUZEQmtJ" +
825  "bmhxQU5pWFpnSW5SaWlyMmlTaS9vbmlCQnBGUmRDZkZBRVZHdGF5R080bHFNRWNzeUxVdHNSbzBnMGRCSlcrdU1kUzNpNXR2" +
826  "WXIzR3pkVlBkVzUvM0hVLzlzOS8vNDhlTkM5MUlUdHp0M2p2R2ovbXRmMzM5eG8vN0pMSHhHa3RQL3J5dU4ySnJuanlYOVc1" +
827  "M0RuN0YrTW52dnQwK2Z0SHVIMHNlRDJlWGIvbm05NTJjM3JWTVRoYU1ldHZqaStWazBUMVZDUWE2c0s2MGlEUmlqeFVEa1Rp" +
828  "SUp1S2dEaGE5OHkzc1BxYnpnbDdxWEUxN0VVa280aURpRTZ2N2lyaVNVQ0hEU04wNDQvSkdMQ01lMkYyeVc2ZVdUanJqN1kv" +
829  "V1YvMjZFZ2FpN3Q2SlgvMVY5Nzdjbm5abnphcHFNZjRyZk53bmlZM1gyUEo1ditaWHV1K3JQdjgvOXQ1SEhoa08vcEh2L0pw" +
830  "bmxvOS9hYnJ2YnN4bHp1U25mK0U2L3NoL3R0RzVaVmxrWWJFeFp5UkV5U0szM20xODNwOVg1MWl3RjROeFF4czZTUkNFUnJP" +
831  "UW9UblQ3L3h6OHRUL2JuWm5LaUlKSStvZ29VaTFRVDJRaEpMR1VkVURkUkFIQTlQMmxGdVBoaEhFMFh4Mk9yK0QwS0tNd2Rs" +
832  "WkpEVVNtOFFtZGJhcHVhOFo5bU52YVZ5czR6bWZSRFplUjcvcG03N0d3WFJ3Mm5seE90YVR6bFZOZStHY3NZOHhwbVJna1Zi" +
833  "WHFZNGlpYXhsdVNIT3lLU1RGaEZIVlFkRjNCZXlTTGE2TExvc1ROSlZXNFRwV2lZWmtxQ1VDa3FMRU9xZ0tJSjZRUkl5ZEt5" +
834  "UzZHU1cvV1Mza3BCVXhBakxZSXdZWVJteExEVUdWY3FLdlNuWkxqNkpiTHhCenBKNW1wcXFyYU50RUpKQmdxclNra2lyZFZB" +
835  "MXhhS05HS1RNdWhJSFJjVkI0a3FyRGpJSkVtMFVxWU1TV3BMU3VCSzBFalRxcUs0a2pvSW10Sks2RWlJb2lUbVpaWjJNRVVN" +
836  "bEJDTWtqQkVKVmFOY2lsWHR5cTVUdXhzK2lXeThRVTdsZElRbHBMVVpuQ3lNTVhRTUdsY2FSeWxURFFjZEZJbWdkUzNCRk1T" +
837  "MXFwaXVKTmhqa3NrZ1FrdURla0dSYWtsSVhLa0hna3BvYVpFNmFsMXJ6Qkl4aXpnb2lnaVNTaHlFMXB5c3JYdVh0WnZzTWN2" +
838  "YW1HVmtkK0loZk5QUCtYM3ZmV0svZjNhLzJmUnRwNmVQdk92c0xKLzlKLytERC9sQjJuaURSUGNEQXd1MjZwSFRZWXl0bVFY" +
839  "VlZodzBwc3FJYTJlWWRIcFJ4TkdRVkJ0TVdsVlJGSmYwWEZNVlJxU0QwbEpGS0sxcmRSQlNnbGJpSU9xK3VCYTBqakxZbmk0" +
840  "U3FtWmpkMXJMV0kxUkl6VVN4SDRYUk12bHZ1NmNNNmNyU1d5d1RTeXp3dy9TdC82eVAvcjU3LzJOMy8yWDNuYzZMcnZVbk9l" +
841  "bjQ5bW40ay82VkQ5SUcyK1F5dUlnS2hpSnR6MDJNQkRVdFRJaWhoSEdXOThubi91MWlIYVBRWUs0RnEwcnpaQk9GTlh1dFhz" +
842  "OS94Nm1GeVVvSmVKS0NDcGFCM1VVVkxRa3hBTlJkUzIweHVER0k0dkVRYzJ5bnRkbUlZUFVsYll1ejVtWWs4czlGNWV4U1ZV" +
843  "dGpjMm9ZZkZZdS9oQk9yOTM3MlE1M2IxOVdYTFNzUnFieFR4ZFBJeU5OMGl4aG1BNHFyVlQ0NkN1Rklsa2tFRVdHYmNrWjlw" +
844  "TEJCTkRTaE5FQkhYVURMSFMwb2tWMCt4RUVKUWlEcUlsRGxKYUVRMktrRGdJb1MwcUNOcUlxb000cUFjU01naUNpcU5PcWxw" +
845  "bUkxaXdKSll4YkZxWDJCdHVqZVdHMVEvT1pyTm1HU3dybVdTU3JZZXg4UWE1MUhIWm1oZ2gySy9CcEVOVmdvUkVNb3l4bFhG" +
846  "R0JsM0VkSzJLbERxSUt4RlV2VVNuT1d1dVpGUlMxeUlvRXBUV1FRZ1JRdXUrT29xRFJGdEhSVldFRVBlRmlKSHBxS1dUNmFD" +
847  "ME5CRnNGbTV0NHllK3IxeE9MYnVzTHBiVmg3LzFuL3krbjNidnJmOThOVzZzdHJkMlhXN2QyZmQzdk45My8wMC9nTE9iTjA5" +
848  "c2hVaFdEY2J3TURaZUIxLysxcDhWOUU4ODg1YzhjRnR2UGJ2VzJjUVlVczczaTZvRUdZNlNpSkFRWklPUXFDR3FLb3BJcUtP" +
849  "SU9FcUhLMWxkQ1ExeFVQZFY2NkFhSWlJZXFKY0lXbWxJVkQwUVJUUVY4YjBraXYyS1FVcEZTMEpVRWttZDNJZ3YvM21SZ1RD" +
850  "eFBhMy85S3VmL3BMem5TOVp3ODdXM0ErUE9QMFQrSnQrQUNlbnAxdTJhWGRrcFVVOWpJMkg4TnpYL1UvdlB0dDE1b0o1RWYv" +
851  "azd6ejU5UHYrdS8vdzBzdDh6M01mL0c4L09yN241MzdCY3N1YTFmbU16L3ZDSjk3Mk83NTA0WEtyMjczTmxuZS9jeEZsUkJ5" +
852  "RW9DcW1kcTkyWWhVSFJZSzZrcW1kbU9Kb21MZS9XZGNMU2RST2UwcDN4aGkwaXFockljUjljVkFhV2xjU1Iwa1FsTklTUnlG" +
853  "RnFKZXAyVm9iYVVVa2pIaEJVZ216dFZ2REdtdlpUelk3Vm5XeFRoTzd4bHBXcTFmaXpOektHcGxZU1hIcVlXdzhoTE5Qdi9l" +
854  "UnNWN0lpb3Q0MS85NzQvZmdOM3VaZE4xdWN2a3BheS90MUpwNC9QR3RuL2hqSTJMbWhLVmlrRGhLb3VwS3FuTWxxODVMdFlx" +
855  "UWphTUUyZWpUZjVXTEQ2bTlvcDMyMy9IblpIY1hRMU0xamV3a0N5YXRCNm9pMUpYV2l4SkI2MG9kRlVVa29hNjBpQmZGbGJh" +
856  "b0Y0U0VKTFFpS0lLYWRXV1dPV3UzcjJWYis5WVVLMVkxVFM5MzhjZi82by9kL0pnUC90YXNqNldsNjdEZW5aK1J6WDZ4N2lV" +
857  "b3k4MjdIc2JHUTFnMnEyd3VhU1NMTzgvYy9UYWZRSGxrS2tFWXJaTU55MmFSYk1UUVRFY0pMWjJUMEtCRktlbU9Wa01jWkNI" +
858  "Qmxuc2Y1UGIvSlhiYUhYUEtlb2Z1RVVjakU1UFdVVWEwS0VsY3F4WWhqVG9JOVgyMXhFRzhJSWtXQ2VxQmhDVEdJSU9va1Vp" +
859  "cUR1cGFxV3N0U2pCd3NtR0wxYlVocHVIN09Qdm9wL20wai94OCtSaURnVEdqYTBuVlJCZ2V5c2JEbUdXc3pKcm4wOVBuejMy" +
860  "TFQyQk5icDJuRmt4MVpVeE5aVGlJSkZxMG9wcVNPRXBvWGVuY2lUcXFLWWtLSmxZeFVRL0UxTzRSVVZRUlJWUmRTV2hkU1FS" +
861  "Vkx5amlCVW04VkJwTkVWRVMzMWVNd2JJd2hpdFJHaFZWYlJ5MWNhVWxMSU9URFRjV3pyQlBiUVpkRjNXQ2M5L0xPUzRIeTZX" +
862  "TTBJVWlHQVBWVmd3UFkrTmgzRDNSeHk0WWU1YWR6WTExNXhOb20xbWlxQ3VqTWtMaXFBbnFxT0tCcENveUlwMzBFcEZjcWlB" +
863  "SXR1b1NlOWRDSzJPU1NlcEs2dHBBdmFpSUs2MmpvSTRpY2FXcWRWQUVFVlJkSzBGUjkxV1JJRU1NeWVwYVhHbTF0TlJCSGNU" +
864  "UndESnFHU1ExTUVKVHpiRFkrRDRlSytONXhpa0RXZGx2UlZVZEpSR0xoN0h4RUo3NnV1MFhuei85NkErL2QzSHY4cEZiaisv" +
865  "LytYZDkyL3Q5QWlQWkxZT2xETXl3V1RBR0RTcEs0a29KR29TRUNCWmRML1QyUDlEY29VeEhVOWVodC8rNTVlSkpOUkRtNU5I" +
866  "UGxubEI5eHBrNGZsdlorNFJHaStxYTFVUkJ5RXRvcTRsRHVKYVNRUVZSMjFWeFVFY1JGcEhZK0gwWm1RTTZzcWNuTityb21q" +
867  "cktFZ2MxQ3hyMlRWbWFtSnRURFY4QXQvNjJEL2ViZC94RmR1TFIyV3pjTHExdTNmeCtadC83U05mcGtpd01HOTRHQnNQNFoy" +
868  "Lzd4ZjlMZnd0UDRDRmV5ZFlYSnVEelFpTktxSjFVQzhLaW9nZ0pITHYyL1VmZlRsV0xTMnpSU3hqNkhMSzJKQkZ4ZklqZjRX" +
869  "Y1BJS3BKdVBNNVFkK3A1eC8zSldnMVpER1VSMFU4UklWVVEvVXRXaDlMeTFKU0YxcFhLdnRsc2ZlSHNtQ0N2WjdMdTlOTTNX" +
870  "VVJGdHhyV0xPc3VkOHp3WFdzc00wc2ZkeXA3LzFTNzhEZjhoTFBQdTd2dmFYUFBMNSt5K3piQkVkQ3hlTGg3SHhPbGlrSTdH" +
871  "MGdoa3lxNTJVQ25FUVZCTEtjTkJTaERpb2cwVU5WVkpEQlRWMHJvS01NTFlrNUFhbWRFZnJXaEJLSGJSYTEwSkNrVklIZFZB" +
872  "SkxZcEVVcTM3aWtqaXFDSU9nam9Jb3FXbFlnU3RwQmJNME5aSVhDbXpOU2NyTGxkV3JGakxhc1dsVjJJN3RoaWlxblRxR2c5" +
873  "ajQzV3c2WHgwblVTa05jdCtIMllsMUZFY3BRN3FTdDFYNnI1UWhDUmFKTFRTa2lrejJFdUNhb2NJaWtnV0RGU1JJbEZGcUlO" +
874  "S1FrcTlvSFV0Y1Myb2EzSFUxbEVTTDRocm9TS0lVbG9IVVJVa2NhVlVCUWxHTEtrbE1Wb0plOE13dkJMajlsdkpDV09QWXRX" +
875  "NWVoZ2JyNE43T1IvMzFOYlFKY3hLRnd4RVJOMlhvS3EwcUNSa29jT1ZJQTRpb2ExcnBaTlU1NVJSc2NNZXdTUkZpV3QxRUZT" +
876  "RVJGV0xWaExVOTFYaUlGNVVkUzF4WDcwb2p1S0JxSnBsVHFvaTRscmp5bkF3eU1MYmJzWDV6VnJRVG5jdFRzZGpQL0lYWFh6" +
877  "T0YreWJrOHAyV1RZM1A3TGUreHQvdXgrNDdTWE9MOTNlYnBlSkVhdk9vWFB2WVd5OHluNW1mdlFYcjduM2I5NmR1K2R1NU9U" +
878  "VFdONys2THVlK0ZlLzRCM1RFbXhZRm43a1owV1dyUWl0YTNVVUZaT1RSemw1RjRhTVUzRkc5bHcrSWJ1UEtkcUtLVm4xN04y" +
879  "eTJXQVJRNWF0ZWZrMCszdXVwR3FqclN0RmcycGRLK0lncUxZZVNLSXQ5WUtxbDRxUXVsWkoxRkZwcVplb2xsbG12YUJGaUJl" +
880  "TllOWlgvTUloclFnbW8vN0EvL2p4My83K2YvemtiOTlQTG16dHVqTzcvZG40UzE1aU9XbXlsR3hVMVdRNTl6QTJYbVg3N0gv" +
881  "MWg3ZFAvTkxSMVpOanRTdS83S2RNdi9ZWGhJV3h4TmdzbG1VajJiZzJhU1dvZzRqdzFpOHlmdmh2WTFSeVNyYW1SVC84cCtW" +
882  "RFgwTWM3TlhSTUQ3amx4bTNQb1dlTXJhTXhlNmJmNmZlL200MXRTSERhRFVPNG9Fa0ZFR2o3Z3ZxU2x0WDRrcEVXMEpRVkVW" +
883  "cENIVmZ2U0JoT21oVVpaQkVHM1V0cUFvYTRtZ1lvelRhV2h2N2ZiRWFrMkFrVHF4cTlYSlBYdWF2UGYyL2Z1WlgyRjdlcy9a" +
884  "czdNZW5iamE1NHlGc3ZNcHVpTE94dDUycmRsb1RqMjZHazgxaXpWQUhSV21uQkNHaVNOQ29SWVJSU2NqRVR1elZwWGFxWUVn" +
885  "aWhveUZiaEE2NlhRMEVwMURWZWZVa0ZJazFFdEZVaThWQjRtMnJqUmVFTnBxNHlpcDc2VWxEb3BJcUlvUUJ4RVZKZFVpUVVW" +
886  "UWNSU3p0Qkcwc1phNXNpU2l0aWtwOFFtOTkvZi8zRHY0dzE1Rkc2KzZtWWhnS2N2Z1pCTTJXME14SGJYRjFNWlJQUkF5VU1i" +
887  "QVFsenJIcVVYMnAxbVE0WllFSEpLdGpUYUtYUFZ1YWRGcUlQU3FxQXFyc1I5ZGFVSTZpQ09FbHIzVlIzVVFTUlVGWEVRdENy" +
888  "aUtJN3FLSzVWQkNHa0pQRnlSVnNQdEE0aUdHRUpKM0ZsR2FTTEpIVDFXdHQ0bGEwdVRWUlZ0YXl6cXBxSW9YRVFzNVVVMFpL" +
889  "NGI1QWhqVGpCaXBJcFhabDNzRU5jaTFyb3BCdXNZc1VPT3pVeE5BNUNxWXFYS0JGRlZWTVJWK0pLRzFSOWIzRlVpWVBRYXVz" +
890  "b1hxWmVwa1lxb2ZXOUJCVVB0TFIxRkNTTVFUb3RKWU9FR0ZodzRiVzI4U3FicG9sOUkxZ251N1ZZeFlaRUVrbGNhVlJKQ0lx" +
891  "ZzZBNERwZE5SUzd2WHJuVFNrS0Zxbmo5dGpDR3BXdFdpYzBpaVN0MVhRUkV2cW5vZ0RRbXFkVkJFUzRLNlVqU2t0RVFkQlUw" +
892  "Y0ZXbEpFQzlvUEpCR1JaV1NoSVJXUzB1UmhGU3dPRWd0SWFpcVNtdWFYZzhicjdKMDhjREV4QlFNeVNBSUdVTXlITVZScVd0" +
893  "ZDFkVHpqNWdmKzNyR0hxdnV6M1YvUjUvN0Zrcm5sRVM3WWxxLzQ0K2JRYXBveVg2bmdpSWVxS002U3FLdEs2VXBDYTE0SUk2" +
894  "UytNUWk2b0U2YUIxRkZLa3JMVUVSOTRVZ29nNUs2d1Z4VkVra3JrUUZJd1JyMlJWZHphNWVEeHV2c3BNc05tRVRsR1d3R1dS" +
895  "c0pBUFZsQloxcmRvS3FoU0plZnRiZVA2M0tkSmlPa3ByMmlEYVlxV1JyT3BnRmhIVWk1SWlLcUtJbzZvWEJIVlFHdGVLcUVv" +
896  "aXFCZWxEcXF1eFVHSVVBY1ZEMVFjeGJWU2hIaFJWWXM2Q0lxZ3JwV2dNWkRVeEdWaldsMW1VcSs1alZkWkUwbU4xR2dWbTRV" +
897  "aDZxalN1dEk2cWxLcUpDaDFKWWlEQkF1dEtrR1JDb29LRGVKSzZ5aW9vSXFFaWl1dGxpaENTYjFFMVZFOTBGTDNCVVVpamtw" +
898  "UnBBaUNPbXFwdUZLS3FxQXFJbUdLbzFrSHBZZ3JkYTNGckxXc29XS1dpZFhyWStOVmRpZm5Ma3JLRWliV1dYUGRhWVlFZ3lU" +
899  "YWVsRmRhU1hVQTBQcm9PSW9tanBLaXFnUzE0TCtmN3pCVGFodWU0SWY1T2YzWDJ2dmMrNVgzYTdxc3F0U05wMlF4STRKMk1h" +
900  "b2tWWmJJbWpIUkxFTmFNVDRNWEtpQTFId2F5QU9GSUlvWWh3NEVoMW9VQUtpQ0VvUUlSTXpTSWhnU0l6OUdhcGpkOGUyNjFi" +
901  "VnJicjNuSHYyZWQvMS83blcrKzd6Y2J2aWFPK3E1MEdwa0dvckRwSFlSV3BYRlJUeFNoT0h0Q1FPUWUzcUl0NFNGS2swR2xL" +
902  "cXFFT0tFUEc5NGlKUnU1SUVOVUpWSGVMUXVwaWxHK2ZKdVRWRkJxUHh4QS9HNnBGOXQ1OTZOcXRsQ1MybmpjNnpaTkV4bUNF" +
903  "bEpTU2hDQkdIb0VVcWNSWFVMdUlRV3NScnM5NFd1OFNoZHJXcnEwcENxWW80QkcwVmNWVlhSZXdTcjdTVmxFYnRXb0pHVk8z" +
904  "aUlpSHhsaEJtS28yV09GVHNZaGRKYUJVSkprRVRVUU1KS3liV0J2WDl0bnFBUDVyZis4WGJmUGFsZCtmN3psNTZZZkd6K2Zy" +
905  "N0w5V0taUjFtWSt0cW5qYzFaSlNRTlc1dUJxcDJDWXFTT0l4UVYwSHRRbXBYclYwRURZclVLMEZLSGVJUUpkSFdvWFpCYVN1" +
906  "SlF4SnR0VVVJVVExRjNDdEJoUkNIT0NRdVVxL05XVUdDMExLcy9QQ1BEQnFIbGs0Ky9zYkVGTFIxQ0RwcFVSTFcyK0hERDZy" +
907  "bEhkTjV4TzNwdzUvNC9kOTkrZk0zdWJtWnhoakxoKy85djl1bmYvbVgrdEZ6anlnZTRLZlhILzlQUHNrMy90VjM1aENidS9C" +
908  "My85UnpQLzMzYnNhOGNmdUU5Y253MWEvd2xTK1ZzWkFReGpyY1BGbFZDVUZWV2hVSkNWVVhkVldxSWw2cHE3WWlya3J0NG0x" +
909  "dEpiUXVXaGRSclYwa2ZwT3FRMUJCQlJXMENQSC9yNjNnOUx6dW5tMmtDS1hxRUxSMjFSbmYrTlVOVTlGNnJhMEtwYTI3dTJG" +
910  "dTFib1k2L1RmL3VuaC8vakxnOVJtY2VmR3MxUC9nWi9ycy8vTkkxbzl3RTNIaytmamhUazJJOU01L09odm1YN3lKK0o4M2pR" +
911  "eGxycTVHWktGREs4a0NFRWQ2dERFVmFuWHF0UkZSUDBtSmVJUWgyaXFyVU1jNHFKZUN4bzBFaGRWUkZ3VlFlMUs0eXFoZFln" +
912  "M3FnNXhpRU9DdW9vM2dxTFJVa1cwekhxdFNxTjJwUTVWM054T2FSMUdXQWJ2akdsdG5jSTB6RzdXZW5TckI1amQ2UFN5bTVx" +
913  "bVNKZ1pMRU15R05FTUVZcDRJM2FoZFloZFVMc1F0QTVwVkIzcTgySVhiN1FhbEFqcXRhQVJSVFJGRVVtMEZTRzBkUlYxRmJz" +
914  "aTFVYnQ0aW91SWc2dFhSMVNWM0ZSdTFaRVF0VXJiVkF0VFVXMG9WUUpTb1FRSlpFd1JvMHdVeTliSi9IU3RPR2tIdHZxQVNx" +
915  "YUtEWnM1VlJtUTRhTVNJSm9peUlPbldnZGtuaXRsY1JWRVpUWVJZcTRLa1ZkeFZVVDZpS0pRKzFhVjFXN2xMb0tWVzhMaWlq" +
916  "aTBCQ2hGZFdRQkhVVlVvcFdVTFIxcUYxUUZ3MUJRaEhVSVdwWHBncVN1QXFEMUVXRnVKaDJyUzJ4aGExc29yV0x4N1o2Z01X" +
917  "d0ppUlNocnBaWWhuVUxpRnMyelNXU0VOSTdPb2lka1ZRRXZXMnVrakVMbmFoaU0rcHVtZ2RFcnU2S0lMYTFVWHRJb25VUmVP" +
918  "TlJPcGVFWWVxb0s2S0pDNktSbHVIMXVkMFRra2xvWWlyMmtWTFVFUVZjUzhNTkdpSlhTVGVtTEcxWGs1T1pXS0Voa1U4dHRV" +
919  "RDFCUU1GU1Z4dTlSWVlzNTRiVVJDaXlLbDhYbVZvRlc3dWdvUlJXSVhWMlc2Q2xxSGhxUmVhUWlDMWxWQ3ZWRWtLUFU1VlVL" +
920  "RTFtc2hka0hxdGJpSXF1bWlwRWlNMUNFcGNTL3FVSEVJY1JGdnBBaXhTN1FFOVViRG5MR3BxWWloMmtVOXZ0VURiRGF2RENT" +
921  "TUVRd1hRV0tJS09vUUpDNkN4a1ZiYjB1b2tJaEs0cXJhT3FTbFZFbEVhVVZwSENxVTFpN0VSUVIxYUN2eG0xUVNhbGNYTFVK" +
922  "OFRvSloxS0VxRHFXbGxVWm50U1MwUmJ3UjRpSWhRV21SZUZ2c0VtMGRXcnRxYWFxaGpjUlZmRitzSG1BemJXcUlLVkptN1NM" +
923  "aXFvcUV1SW9nRWxjdGdxQ3VpcEI0cllpTFo4L3EwMDhYN1dRVUpWUFVZYlpxOFRkOWtaR0tTR25zSW9xcXE4UkZRbXRYQkhX" +
924  "b0lwTFFha2xjbGEzVHIzOFQzU1NSVEZFcHV0ZzZETVA3NDJUYnFoMGtJdG9pcUtzUUY0MTdKYUZVRVZVRVJhbUwyTld1SW1w" +
925  "WDN4ZXJCMmluaVlrNHhHeTFVeHVLUkVhb1hRaDFxQ0lPSVdpOUVnTkZ2VkZ6TWdmLzNaOCsreS8vNjJkdXdqSlpaZzFWblBF" +
926  "Q04xL2d2L2xQbi9yeWh3c3BpYmhLZ2xJYTFFVnJWMFJRaDNxdFZVUUlWU2EvK0t2VFAvdXZ2UEFlbHJCZ3djQjBka3JjTGZV" +
927  "bi8vamlnM2VIQlFseENDcEJFYnRLVUlTVzJnV051cXBxN2VLcWdtQ0lZUHIrV1QxQUVrcFRoMkxiVU5wNHJjVndpSkFpcUxy" +
928  "WHVFaWtDQktVdXFpSm1wUG5kN1dkNG9QM24xcTI0ZTdqVDV3eFcyZk1oTnZLbk9yV1NBa1ZWTDJsTG1xWFVoTGF1a2lvcTNo" +
929  "TEJMUHg4bHpuWjNVZTFGVVJOTFV0d3h4MFRuUEdDRVpJS1VGZERZZUlxS3VFMXVlMFZYRVJ1MG9SZ3JpS3E0akh0bnFBUlNR" +
930  "dXFsb1VwWFV2UnVPTnFoQlhSVkFYVWNSRlN4RGFTbDBGaWQvMWUzNlhmKysvK00rOStPUVQvOElmK0VQbVdJenp5V3dkM2ds" +
931  "akRCazNaSkpOU292NG5DS3Qyb1cyWGl0eFZVUVFoNHFLODBTanN6cllFck4yTlVSbWpOUVlMQ01rRWlLazNsWVZJUVFWaXRC" +
932  "U0JCVnRFVlRpSWhnSVpxdHhFWTl2OVFBdHFWMFFoeFlsb3E3cUtxNmlORjZyWFFrdFVVMklxOW9GMWNaSTNTeVRURC84NFR1" +
933  "K2ZYN2grYXdPYmxHSE9MVmF1NUJJb2twUnFpS0NxaWF1NmhCVVNDa1M2bDZwWFVRcFN4aG8yZFFocFVqSWlOdUZteVdNS3VK" +
934  "ZUVWZWw2bEJYdFd1OTByb0lpdGpWNXhSSkJIV294N1o2Z0drcWlqaEVTMFc5SlNTdWd0alZJYUt1MG1xaUNDS0tLa0h0aGhI" +
935  "R2N2Skx2L0RYL0l2LzJEL2x2TlhTNnVtc2lKZzRUODduNmp4TDdPb2lkblZWRjQya0tsTHFLcTZhRUNLMHRBaGhHYkdFRlFN" +
936  "VExSSlZyWXVHWllsbEtZT2lSUkhTcURxMDdzVkZhZU9xMUVWRGtOaUZUbEZFVkV0RDFlYnhyUjVncG9vcXhYQlZ0Q1FvUmVL" +
937  "VjJDVUlTa0pkQkhXSXR1b1FRVEt3U3FybDlOblpYLzI1cjl2bU5Cd3FDQnJtWkp1bFoyWjBVTHZVS3kxUkY3VXJRVUxkaTZn" +
938  "NlZFdVUyZzFKSk1OSUREWFJVQ1drVEdTNkdBc0pVN1JoVnUyS1JsVWJiU2hGWGRXdUlVUWsxYUpJU1J3U0pLcGE5K3F4clI1" +
939  "Z29rRVJacXNOUWVPVnhFVmlGK0sxQ2kwSm9uVlJkUkdFS2dtRzJteWRPamUyelZBU3lnZ0xCaFpCNmFZTkU3R3JaQ0F1Nmly" +
940  "RUlZSW1xS2hENXFSRmFkU3VSYlEwYUZ5MGhOaUZJblloaVlTMERrMG9GVk8xMGNrMmkzcWw0cERZUlVMcktyNUhIU0toOVgy" +
941  "eGVvQnBJZzV0TmRHNFNsM1VXMEpjSktFaFJhUXVFcnRTdTlDcWU0a29rMkxhaFlnZ3FZRWhnbld3ck1oQXhXWnVmUHZUSVdN" +
942  "YVkzRzdEdTg4MlNRSVFWMmxkcFZPejE3VU5pY3psaEZQMTdOYUpERWI1OGsybVVvaWlTRHVoYVNDYmdodHpMcHF0Q2pGYkxW" +
943  "VnhDSGliYVVJc1F0UlN0VVVWMVZYRVk5dDlRQ3prOVpGQ0ZyYVNxTnhVYnRRVjNFdnBORjRveTVhbW9yU0VNeEpxNjJlSWhn" +
944  "WVJZZ1lhdGkxbmd4dWJnYmpCbE5icDlQMEwvMXJMeno3dE5ZUmY5ZnZXLzA3LythcUZra2NJdXBlMmJiTmYvQWZuZnhmdnpC" +
945  "MWlUL3c5eTMrNVgrZUJJTTVPVTlPV0JFMXloSVh3NkdLbHZOV2JSUkY3RklwUlRBU0tRMFY4YllpaENUYVVwcElVSUsybXJp" +
946  "Szc0ZlZRNlFTWWxkcWwwcVlMUTBoN3NWVlhCVkZFYnU0S0psRG4vOE80M1FqTmpXa01XZk45WVdldjI3MUhUZUpvZXFxaWFC" +
947  "aUdUWEdZTnhpWTFiejB1bXpldjY4YmtlZFhrenRodWdjaERvRVpkWjVxKzkrdHo3NlptZzkvK1JzZGpGR2pFVERTQnkyeEFn" +
948  "RHdZb2xCSE53Mnk5Nyt2ekg1THpTYUlwTkRKYVQ1MDkvbHFVbWtocG9YY1ZWSWtpaXJhdElxd2lxYWhmVXJ1cnhyUjZnclZr" +
949  "RzRsN3RTcU9wQ0VIaWtNU2hkbzBxaVVORjVpSXozTDJudi9iSDlMTjMxQ2JLVnVuazZaMTErNitzVDcvcnR0SEpGSWVxWUk1" +
950  "WWJvTlZPbEZhTFNaREJVbFZkQnNXR3lHcWdrSEpMRnVzbmFnaGdqUTBSdUtEMjhXVHA5VU9NMVJsc0laYnRheXgzYksrL1B2" +
951  "ZHZ2ekRscnVUZHFwaWtxSHJ0OHo4c3F4M01oa3pab29pRktrMGhMWXVTa0s5c1lqWUZYRlI5ZGhXRHhEZmF4WkJrQkJ2SklT" +
952  "cUdDVFV2WWpJOWtTMlJWNTh5VHFmc21DaXpGRTIxcGMzL3VoUC9sWi84UGZmU2FaNSs1RzVQTk81aWdWeFdGWStlQTg5TVRk" +
953  "NlJpemhGa3ZSNlRTNWV4RzJhcXV0ZGxpVUxlYU1HL1ZVSmZIKzdiQXNxMW93RkwvamEvR24vc1M3N3U3T1pGckh0QzRzNjdD" +
954  "NGxYbkx6ZlJENzMxWGZtTnpNZEZnSUl4Yk9kM3FkalpQSnpYRkllb3FhSW0zUlZ1dmhSZm5vSklLaW5wOHF3ZElrR2pSYUJC" +
955  "WElYYWxpTHFLaUNTSXhMM0k2Y3Ztci83Yjh2S0plQ1pkc0JITTBpR3BUTDc0NGcvNjhQWWZSYzBuZjliOHluK3ZpRW9HaHF0" +
956  "cXB5aGx0WGp2ZytIdXM1cXRQLy9uK1psLy9NNnBkKzRtRzFvU2JoTTNZZ2sza3dXM2EzM3BoNTZ3M0RDanJjT1MrTEd2TGRw" +
957  "cWFhTVpoc1hOaTk4cXozKzNqaWZ5bmQ4bXZkRk1HYVVoVlJIditYRDd0L1IwNTdSOTVLUHpmMlpiWDBwSXFuVVJoMmhMYUNz" +
958  "cWlTcU5ZTVF1QnFaRFBMYlZnd3h0SFlvcGtvcEtxRGRhRXZmcWpVaG93L21wOFhMSTloTFJPU2xtSEZLVWh2U0pzYTNTWWJ6" +
959  "NGlsT2ljM0ZvS3paSmlJdUtaTGk1bWY3alAzN3JWLzdhblgvL1A1dysrM1NhSXVVbUxFcUlHSzBSbHNrUVgvZ2gvdlYvWS9V" +
960  "N2YzeWxRV205RnBLVlJscXpNVHNzMy9udHhzZi9vSzYzT202ODBnNkVrbFRVT0gyZzUvZGtQcEVaVXl4S1NlemkwTmFocnVx" +
961  "TnRwUVVjUkV4MUdOYlBVZ0lyVjBSc1V1b2UwVlFMVkZGT3lXVFJCdUVEWGViT2t2S0hMU1V1b3A3amM3cVVsMXZEVGNNdE9x" +
962  "cWNaRkdnakVjdnZ4bDNuMlBkOTYvODUxUHBxYUNHelRNVWlWTXNjWEYzLzUzREwvMzcxeHRNM1RTcWwzcllvU1NERnFqekJt" +
963  "MnA1eWpZMFBVUUJDSEJJM09NcWZPVGQxcE5sb0ppWXVpYUgyUHRpN0tDRUdMdUloNGJNTkR0T0lxWWlCMkxZcHFLNGhpcW9t" +
964  "SmFkbzBVMU5NMllhY3lIbXliZEtKRW9JSVF0RXBKcG1NVFVkSUhLSU83YVRWRkVGVVZMejd6dUlmK3FsaEcwRWNwampQT0Rk" +
965  "T004NHpUbzA3a2FmeHgvNlpHejBQbVpOT1dtbTlMWWtrWkRBaUl5eEl4TVk4czIzTUtiTzBPcXNsS3Fta3NreVdXQWJpb3E3" +
966  "aUxmVkd2QmE3SUM2Q1JUeTIxVU9WWUtESVpHNDFXMVRMM1duNmJOWkVHOG4wem8vOG1DLzh6cC9CSm4xS052TVhOOWtXTW1r" +
967  "WmxVR0ZSRlZLV21iWlRuUmxtMnFxU05CNHBYRVJyMVNMeGovNVR6ejErMzdpcFcxdXp1YzZUODR6S3BZd1V1c1NON2VzNitL" +
968  "clB4THRJS1dJcTNxdGRpRUpRaUs1bGZsVVRpZHRkR3dFcVFnSlFjSllHTVB3eEZnV0hTZWpUTFIxRllKU0JJbXJ1QmhCRVJK" +
969  "YTR2R3RIaWdJa2tyWU5yYU4yWW80bk82bWx5OXFialZMNWpUZWYxZWUvcmcwdUdGVTMvOUYrZkJYNVBhWHpidXZjZmNWbWFz" +
970  "a1dqTG90RnQ0LzYrWVgvZ3JhckU5L1ppSkZDR2hsYmhvbzBycjBNYmh2ZmZqYi91SnA2U296bWxyS1NrWmtRU1ZSTVFVcVRk" +
971  "aVYwcGlWMWNWRkgzNmYrc0hmOUY4K2h2eTNiK1Z1Ni9Jc3FuUUljSllXT0o1Zjg2TCtSRVdJNXVtV3RRdWxDcmlxb2dpZHEw" +
972  "bzR0RFdqSXVwSHR2cVFlSXdFQlNkZEZiRklTcGlKRElpSm9rc1QyU3N6S0tLdlBNUnYrMS8wZHR2OEszZkk3LzJSOGpHaUtD" +
973  "aTZCem1GMzVSdi9UbnRIWkRKaDJ1V3VLaWlGMUNxM1ZSSkhieFNqSXNRZTFDaUt1ZzNoTFVWWHlQdElxbzh3LzlSZk1MZjRu" +
974  "bDVDWXMzL2lhWmtQSlJxUEZYSHg3Kzk5OTUvVG5aQ3ZMeVp3b3JiZEVsQkFoTG9LaWFLaERmRCt0SG1BeERNUWJpWXNnY2Ev" +
975  "VVJZU0VzV0RCSkVNUzFpbFB2MHVmeUhyR1pLNk1NeUtpMmN3MTVwUG5Sb2FncFNvTnFvZzR4QzUybFF4U0YzVnZlaTBSdE1S" +
976  "VlVOU3VGVkdsN2tVYUZFVUVEVnF4UzR5Rm1Sdldza1JDVllvZ1U0cXRrck9PYXFsbzdTcWlxYVJHNHFycXFxVjJaWHFsZ3Fr" +
977  "MmoyLzFBSXRoaE5pVllLaTJxcUxFTHFRMDJ1b3NDVVVXTENnNWE1OUp3ODFmNTR0L2dkeVpOOS9DZ3MzTXArYUl2dnZMYXBD" +
978  "U0lsckVXNEs2aWdhbHRhc0lSZXlpU0Z3VWFkVWhxQ1pTSXVvdGNkRVNWYnRTQkIwVkZaeWYvcDlPWC9pTzVxVjBpSmVlZmNy" +
979  "TGw0UDVydWY1cTJxcUtLSWFGR0dFTVVncW9tV1dpYW9XWmRaRkVrRkUxR05iUGNDYVdNU3dDek5VekdsWE01SEIzUjNQUHlt" +
980  "dHJiU01qMy9OeS8vbmY1THhoS3hrc1AyNjlTdC9DM25DV1BueGI5bWUvNHJ6TjM2ZWVVTWpkVEVVOVVyaUt1NlZ4Q0dvcTly" +
981  "RkxnNTFMOFFoRXFvcUtPcVFVa1dJWGIyU0l0WGFoVlJhU1NoVjFJdmw2ejRkWDljNWRiS2RwdWZuMmpyRnJnaFNSTlVRVW1Q" +
982  "aFI3NDZUS0hSMHNrM1B6cWJwK25RMGpKTEVHL0U0ckd0SG1BUnd5NjBNY3Q1NDN3ZXBNWWdaVHZYNldXMXRGU2NQLzUxTDMv" +
983  "aGY3WXNRd2JuYzYwZmZ1am14LzRlblpPU09XU3VNdTJLU2xBYTkrb2lvV2dKUldZMXJ1SWlRcWhka2RCU0JFV0tpQ3JpcW5Z" +
984  "SlJSR0NscnBLN0VvUldoY3R3c3NYMHlmZk9xdGRvMFZyRkNuaUlrZ05jUmhockx6MzRUREZuREUzVE9ZM1l0WXVxaUtDSUJn" +
985  "SllqRTh0dFVETENXWVlndm5janB6UHBjUkMwYVlremxKU0dKZ0NGMXRHNk9WSUFzZGRLRjFNZDJySkZxa2lEZmlJblp4VlJJ" +
986  "SkxVcnM0aUtsQ0pwSXEwSmNSTDFTUVNVb1lsY1hqU2lxNHFKRnFWMFJFYldicE5YWTFXc2hxSktJU2lJaHlDQUxzMnd6NW1T" +
987  "V2xJazZWRUpTUzRiRm9UWUU4ZmhXRDVCVVZNb0lRNlRWUmtvYlFsVENDRWt0STI2V3lGaTAwNXdsa1FSRFloY1hRU0toTFNH" +
988  "bHFpVnhMNmhYSWdRbDNsS3ZKYlFWdTBSYzFiMFFVYVhVTHFRdUtpaXAyTFV1Z2tZenBYRlZGNlVsUVlvUXROUXVsSVk0bEZB" +
989  "RWJiUmVTMnBKelZRU1VTT013UWd6TVNkVlZZOXQ5UURKbExDVXBTenFTVmlXS3VKUVk3Q01TaGlKWmRSSVJSUVZPbldlZFg0" +
990  "bVhSQnRtV2ZpYytvcXNRdEI2eXFvaS9vYmEwa29FYTlVQlVFZEtpSU8wWkJXVlJKQkhZSUthbGRYalNLcTZsRDNna2JpWHN4" +
991  "U1Z4RkZrVlpFUzB2dHdnaUxXQVp6Mk5XaHBaTlp0bFpSVE5Oald6M0EyaGhsUlJvenZIZGI3NjY4bkFSTDJNTHRRSkJLUWtz" +
992  "M09zMVowN1NlbnB2Zi9ubFhVK2MwVDUrSjBJcG82eUp4VWJTU0lPcGVFZFJWWEpVR3JkZGlGd2t0NmlLeHE0aW1sTHBxNjVD" +
993  "RVZtc1hXaGNoUXV1Vmx0bVlJcTNZaGJacUY3dFF1NGhLaUJBU3UwcUltT293a0xKTjVzYTI4ZWxMUGd0cE5NRXcxR05iUGNE" +
994  "SDRhVjRzaTFrU09QMjVteDVzbmo2Y2xIVEdQWFNwSlhReG5uVzZWenpQTTNXYk1qZ1hMYm5EcDJoVStZMEcxUzhwUWdKRFZw" +
995  "L1EvRkc3U3FpcVFpcUNEb1J4RlVSMm1yc0txWHVCUzExcjRTVW91cWkxVW5WczA4MkUwRkVTaEpVN1lxUWhXV05NVWhjWkky" +
996  "T01LTm9ZNXErK1IwKy9UVG1Gbk55YW4zOC9OYlMxWXFiUHJHTnhRdkZaeDVUUE1BLzk2Vi8rTjNOOWtPLzhlMi84Tkc2dkpP" +
997  "Qkw3eHorNmUrOC9RM2Z1WjJicVM2REgva3Arc1AvMVFZY2RqS3MyZng2Y2RUVTJQRVdPS0xYMTE4NWJlL1k3WmlWNVNxdEln" +
998  "cTRxSWtkbEd2MUZVa0tMVXJUVjAwS0NVcDRxTGVVbStyUThVYnJZdTRhdXNRRkcwcExYT2I1cXhmLy9wMDkyd3lTQ29pSVVw" +
999  "cEVaNjh1L2pSMy8yZUdGclV4Yk9QUDZXaGJHcVkvdDAvVVQvN2wwcDUyZUd6MW1mYnpULzl0WDdwZjdndFQ3M3JuT0Y1dC9P" +
1000  "ZjhVdjFpRllQOENlLzliOCt4M09IOHljT2YraXpyejcvNnpPZVRoWTFUUjkveHN0SlJCSlZiYzJ0eHFpb01XSjBNTS9TT0RR" +
1001  "VlErd1NoNVM2RjdzUVVsZDFGVnJVYXhGdmE5QzRpSXZhdFJJWFJSQlZVUldIU09yUWtsWmMxUzRWMUs3RmRJaVNDZ1l5aUYw" +
1002  "SVVnekdTbEZUWWhjbUxUcTFROHQ1c20xMTZxU2N4akFtYTAvUC8weC83ZVNWK3I1WVBiSnQzc21Hc3FYT1pVNjJPWXd3N0VK" +
1003  "RUduR29PV3M3VGR0cDBoQ0NacE14SEdwWHV5S0VLblZWdTZCZWl6ZUtFRlFvUXBIV1JldlFJc1NoaE5pVk9wUldIRUpvNDZv" +
1004  "R1hueFc1eGRUN1Vwbm1Jd1JTUVZSQ1dPZ1pLa2sxblhJOGxSYml0UXMyMVlSTGJPWVZYVnFSUkEzQmdiT3Z0OVdqK3pHY0p0" +
1005  "WVMrdGlYVmdXc2tRU3dUSnFESVRhbGVmUDZ0dS9lcWNpUXVMMm5lR0RMMGZ0aXNRaG9mVkdrRkFFSmZGYTdWSWFWZXBlYUZX" +
1006  "cHp5dTFDMm04a3JvWGxCWVJwZEhROHQxdmJUNzlhUE5hcXhoQlVGcVN5SWdSUm1vTW5yejcxTTBYdnNyY2RGYTZtYlA2alcr" +
1007  "cXhRaExHSGpucHRZaUxwSVk0Z2RoOWNpRzFUcFlTc282NHAyVnA3ZHNTcEVhQzh0U1VyVUxVV2tjNGxCbXRkVVdFYnRFNjQy" +
1008  "UVJ0VlZISXFnZFZHSE9pUW9Xb2VVT2dSMWFFbEtRMXkwUGlldTJoSzdVcG9LMHBxdW9rYWlTcGtPMFViTFJCSlZFbGNSaDlD" +
1009  "Sk9pU00xTTJvTmR6aXJFNXFNMjNxQjJIMXlFNWlVMnRZN01LNnNJNHFabDJrSklpcmhOTHBvcUdObHJRVVFlc2lrZGhGVzBJ" +
1010  "YWpWMFJsTVlyY1loWEVyUXVFdXBlVUlsZFVDMUNIT29xbEtoRFp4MGFValJtYVJFa0RuWFZSakZWWnlRVVF5aEp5R0RRUmd6" +
1011  "TEVrd3hTR21NVUV4eGFweTdtWjErRUZhUGJNTXNyVGZxb21YV1JWR1ZFRFV4RzIyMEljd3lHMElTRW9lSWhpSjJvWFVSZGFo" +
1012  "RDFGV1VVTHZhRlhGUnU2Q3U2aUtrMUs3dVZlSXQwZEpablhFb1ptTE9xVXBDRWVvUUU4VldkTHE1SldPUUlTTm1ndzBMR1Jp" +
1013  "U3MyVmRzSm5idE0zcVZuY2JMekhMREhXb0g0VFZJN3ZKalJHR3FHanJmT2J1SENjVUl6V1dZWXd3U2trNXY2eHZmMnQ2cFdK" +
1014  "OFV1ZlRabGtpUVdMY3hBYy9mRXRjUk5TaDJwQktxQ3FDMmpVT3RXc2NZaGVLQ0syS1Yrb3RyZUxUajg4KysvaE1RcG5sNVlz" +
1015  "NnY2eVdscnBLaUVvaXFXV05NV0tXV2JZWjcvMld2OW1QL3VRL0ltUFJMR0tZcCs5NDl2UC9vMlV3RGNtVW5xekxkRHJYZVhJ" +
1016  "K1YrN3E1U25PQ0JZRThZT3hlbVJMYnNnVHpjbFp6TW1MYlRxZEZoczZNR2hMQ1dic2l1alcvNjg5ZUl2Vk5UL29Bdno4L3Uv" +
1017  "N3JiWG5VRXFQVUdxaEF0SkFKU0VJbmdLYUlCcGlqSmdZbFVoaVBDUktpQkVURXk5TUx6Qnk0K0ZHTGdnaEdJd1NpVVFOSGhJ" +
1018  "SnAzQlF1T0JNUVdvaHRCUmFlcGhPTzN0bTc3M1crdDczLy9OYmE4OU1wNHBPWlcvYXBKbm5JVUVKNXJSZE1oTmpJSXg5R0tK" +
1019  "QjYzbEJpM2hPZkVSYno0c1hpTFN1TlFpSzFvM1d0YmFpOWlQYkZUcmRWOWxqcUdLdms0cElHRWdxWVlTUmVFNEhpeUU1Rnlz" +
1020  "R3ByUzZIVm1jTEdUU2pkU2NkTWVPeE5XSWJSbldSc2FCYm96QlBQcmR0bnJJenVZcnZ2Mk5GK2UvY05pUHJ2S012WnVmL0pt" +
1021  "N2YvVi8vTmIySm5ObnhLMlZMLzNzK1AxdnJEaEpYQ3Zpdm1USVlCbU1FU01rYnFRbGRTT2hkUzFDU3VzNVFldEduQVIxWDUx" +
1022  "VUZIRXRya1hWUjZ1WVd2Ykp0aE9NSU5SOXdRaXowUVlsQkNPTU1BWnBETFZtT0J4V3hya21CSjNtUE5xM1RlY2kyU1dUd1Qv" +
1023  "ODV2cXREMDdIalgwblkvSEVleC83N2srL2ZPeG5GNHNsQjFkak4vcm8yMzdPTC92ZHRuckkvdjM4NlI4eS9aQnJkZU1QdnZO" +
1024  "VlgvN1V1Kys4YWVtdVl4cU5SOVRudllFeEdRbWpFcEpRcEZJa2hwSzQxcnJSVkJKYURYSFNvbHJQcTVQRXRhRHFSdDBYbExa" +
1025  "dUpOS0treEdkUmRTMW9PS2tKYlJPWXBZNTQ5cWN0V09XSVlReHlHQXNqQVd0aEdWd2RqaXczQkxGVG5jeGFXMUhraHBqazJW" +
1026  "NjJ6dnFuZStQc2RmZVZURzM3VCsvdmUvNVR0ZUs2ZU5tOVhGd3kzQ0IwY3FjTk01WERvZmhXZ1pqUklzU0owWFEydmNZcllv" +
1027  "NjJka3VLa3RvM1dna2RhMTFVdGVDcW9TSzMwNWJyV2RWUkVKQzkyclJxbWdqYzByaVdvdlN5V3dwczh3eXpzK2MzMXFzNjJK" +
1028  "ZFY4c3lyR3NrMVU0alE3b2FoMGZZbjFiRTFGNmErNVdyeTZHTnVMYklXWm1jYlZPeE8ybWRkL2hFV1gwY1BPS1dlNTZSUkVY" +
1029  "RDQ0L0hwMzM2WW9xR0VTN3YxVE5QN1JLU1NPaXNPMC9YdGFoclV6ejF4RDNYNG1TUUpUN2xVMk9zb1NVa2NTMG80bHJWU2FP" +
1030  "dCs2SjFYMG1RQ3A3NllIV3IxbzBxSXFvSWlqbXBhMUhCOUdsZjlJZTkrdlBlTEdNaFoyUWxBOEVVMTRaZVBhbFAvUVN0V1Nm" +
1031  "VDhmWWRIM3ozcFdLZlRMV2VzY3c2WU1mQWpzWGlFMlgxY1JBaDFWSk1vVFFJSXpGR2pZVmxCQ1dWMEtBazFUcUpxTG9XUllS" +
1032  "R1Mrc2sxSTB4M0VpTElMUzA0cVFoYnJSdWRDSVVjOGFjRlNjaFNOeUlhM1Z0akNqYWlraWpjNWZwSkNTazJGRk1OYVU3ODJt" +
1033  "ZEZ5SVlJdFlsemxmMlRzdEFPRHR3UGpnUFYyTERqdHA5b3F3K0RqWkhjOUt5WTIvTkdjVVl0WVNNYVIwc1MxVlZ0RTVDcW9L" +
1034  "S2EzR3Ryb1dTb21nUjRrWkxYSXZuUkFpS1VCK3RubFU2YVNsU2pMaFI0aVFSUlFWRk1WSmpJQU5CVVlwTVd1ejB5THhrdjFR" +
1035  "cldjd01Vc3VvVVNhcXpzSXFEaVd0akJxR00vR0pzdm80dUdkejJZTlI5ckdicy9aV1pxMkRaYWxrMmhKQlJVdUZXZGNTSjFI" +
1036  "WEtvT0l0aVNxaXJvdmRhUCtUNG1QcVB1Q1VpY3BSZDFvM1docTFJMm9JdldzcUJBa2xrN3JldENjU1laa0lHU3FTS3AxTXVs" +
1037  "R2Q0clVNT3h6MmljdGM2OXRraTN1N2tNeXJLbmtZR1J4c1BoRVdUMkE0Ny80bnJQeEJiLytlOGIrS25Ld1AvSkVmK1hmdlA0" +
1038  "OW4vL1AvdHlsRjdoZDc5M205bXVIMU5KaDdUajd3TDNqNjMvMU4yZk9NaXhyTFNQT1Y5YUYyV2lqY1dQT0NvYWdoQ0FxdzQy" +
1039  "Sy9SaHo5MUV5aUdlRklENWEwYUswVHVKR3FVbXFKWTBxNGxxVjBySTgvaWtPdHg1bERHZmpZSXhoZmV3MU1oN0Zya2d3ait4" +
1040  "M3RjVnV6Z3U5dW5LODJLUlhLaUl1TDY3OHozZkVjYS90R0pkYnpMTjYvNTN6RDd4c0hwNWVMVGc0WnBEbEdmMlFGM3JiMy94" +
1041  "WFo1L3p0NTcrak9Yc01OdzZ1dnZoRDZ4M1A3RGRlZTJmL3FaM2U0aFdEK0kxdi9FbXIzelhMM1RjSlVQTzNqM2Y4Qmx2K1BQ" +
1042  "NEhpL3cxbjdnYjlnOTd5K09QL2JHSC9uUm4vdnBILytKZTY4OG4xTVMrK0JQL2ZINjIzOWxPQjVYYlZ6YjkzcnZlNjZNZ1ZR" +
1043  "U2NWOURRb0p5OTVtcGpiYnVLMFZJRWVLMzE5SjZWbHhMS0JJU3o0cVdvbzE5eHV6MCtpLzZDcS82Zlg5RXhzSTRrREF2WmIv" +
1044  "U0hqRlY5T0x0K3VSYjZTRG9kTHg3MS90LzdiZHMrN1R2cFR6MVJIempkMHhqaTZ1OW5yRjYydTd6K3lWZi8vMzdqLzQ3TCtK" +
1045  "MW4zWHZ5L0w0TzcvUCtyTEZ1bm4wMDI5NzVPWDN2Z3QvMlVPMGVnQmp2V1RzbkQwdFkrSFdIR2N2N3lOZXhQa1lmVmxHdDBT" +
1046  "VU9ZM0dZMmNNTEllYURhcXVoVllSOXpXa2JsUXBpWk5LbkZSTFVDZHhvLzd2RXVKYTNVaEZVQVRWTWh2WFd1WkVpVXV4VTh3" +
1047  "UTBqSWljNkRhcWZ0UnQ3dVNBMk9JR0tQTzFpa3RNL1paVzJ1WlpFNERJeHl3ekZrZmcxdXZ2cnFWUXhmTFhZVDVLSWFIYmZV" +
1048  "Z0RrZVd5WHFQckl5RnN3c3Zaa25XTTFsYlp0bGFzeHdiSFl6VXlFUmxEc3NnU0VLb2t5Sm9FZkVSU1JEVXRhQ2xUdXA1cmVj" +
1049  "bGpCU1JsTmFObEpMVXJKTklhRkVTZ3BHVnJCS3F0Tm9pSkRUdW16cVB4TW5BZ21rSldkREp6ajZaSldVazFzUmExeTU4RE1a" +
1050  "cmhoeFdiQWc5NkJJUDIrb0JaQ3c0VUdyUVJmYkZpem0wa3RnN2JJMWpZeS8zcmpqdVpLMWxWRlNXR0FPTjV5UnV0RTdpUnVK" +
1051  "YU1sMkxTS2lQYUttUHFQdmlJNUlhUWFMdUsyYnBwS2lTR2lQYWlNVllEbVRGRkZUSVFLUlU2VVozdWlQU2haVHNwREttZGJB" +
1052  "bjFJMlJXSENlMk1Vakl4ZW1GelhPVnNZNTAwbEptS3VIYmZVQTdqeTVmT3BqbjRzZzFjYkZjVjI4aUMzSm5DUHJQR2paeDI2" +
1053  "YjAvdWVubjdqdlRVRzY0RjFyV1diMWxGWm5FUlM0bVJvVVNlUmdiMElvcTMvWFVKTDYwWlFsVVJDRWdrSlVzRllWN3ZZZDVT" +
1054  "Uld0Y3pZMWt3TkVQTGNuNkxYcEdxYThOKzlZeHVSeHgxUCtxOGNyeDk0ZUxKVFVZdFl6T1c2ZmFURjM3elY1M0V0bkY1eFh0" +
1055  "dnMzVjRwTEZrY1ppTFlWakdlTkxIWUx0M09kYVNFVlM3MlM2MnMrLzRxbS9LWC92ZXQ5UkRFZy9nNmgzLytEZVh4OTczZWxz" +
1056  "UU1zeW5YLzNPY1RZK1lLbnMwV2QyZnZITmYzZjVtai96NDU3MVZiNXN2ZVZEYno0M3pxNWNPT1lwVC9UaWk1ODV1L090dDFh" +
1057  "U1dzTmh4TmtaMy95VzRYV3ZYWFVnRTFHMG9iUW9UejB4SFk4N0RhcE9pb1pRZEZZUmNhT1ZzS3d4QmhsRVNXVGhkVzkrbmVX" +
1058  "d0lHUmdHSy84UXJuMUdpemkybFJFeUlMSU9QT2hYL3hoRisvK1pjbTB6OW8yam5zZDkwbVJXc2IwWDM2dy91Ti9qVEdZalV0" +
1059  "eEZGZFh0Nzc5YzNyNHRvUEh4Sm03dVBMNFQvMkFuNjhYZU45M2ZjdWZmZlVmdVAyV0hBKzZWTVkweCtVcjgvalRuNU5aaXNs" +
1060  "K01aOFpkMTcrTm5PdmNlQnd6M3p5c2UzdzVmL2dqL29kV2oyQTVlekRyM2NjWkVyUUdvODkrY1l1ZWFPRVJtOWR5cHZlOGFs" +
1061  "ZTRIdjl0dzAvN3pubFQzakZvK213YmJXMTl0Uk1qVWFXNmJCT00xRk1CQzB0YVdnRnJSdHQzR2pkYUNWa3VCRkZ0RTRpb3hw" +
1062  "YUo5R1MxQmd4bGtGV3NtQVl5NWtzdDJqVnBLUTdTa3RLZDNPN1p4NHZHVkVFeXlDWXJXM1d2bk94YzNldlF5dGl6MklQUnhm" +
1063  "di9FK2Uva21lOVA5eTluVCtaRDdsaVMrMVI1VFdNSFV2S1VKaW5DK1BPM3ZtUzlqVllFelpod2V4ZWhDemtxR0Rxcmd2TTZU" +
1064  "TWlDSHJIUy9tUEdlbXhkRm1oSW1nWlpiYXRZdW1HdEtnRWdRTlFha2luaGZQU3lxdUJYV3RpcUFrV21ZWnBhM254TE02S1Zw" +
1065  "YWxBWkY2Y1MwYlVkWFd5MUxqUkVqYm95bDloa1QyODR1ZHFWRVRUVkY3RDRXY3gwWGNvdnUyS1M3MmxHTmswRkpxNTFraXBN" +
1066  "NXRJc0hzWG9BR1F0Mk9pVlVtTGNrMVV3NmRUN0Z2WmQ3TVlmZWNwRzd4dURRM2FabXVkcmllRkc5Mm0xaUR1cWtSWXdSSTFO" +
1067  "RWdwRFNWZ1doRldTUWtCQ2xUTFJSejJvUlNjVkozRWlMaWRLcHM5anBSSDIwYUd1MnRyMklvWklhb1ExcW0yU1BmWStyVHVl" +
1068  "RysxWUpRekc5bUt0MWY0S0ZMSVIyWnlJN0hXNGtoQXduaTNib3ZLZVhIc2pxQWR6OXBkZCs2eU5mOEw2dlM2b05pYnR2ZmNW" +
1069  "MzM3bHorNWR5bUZ0ZXZqMlY5NzNxaTdmOWtWL3hJcDZVRDgxNTYrMDZ0cHFiOXBEazhXMTJ2dStEVjUrMW5NVWNUb3FxU091" +
1070  "d2NEaHdXQmI3UGkxTGFjelNZdENHa01HeXhqSUkybXBqMzhsQ0V4RlJNaXdMU3VkRTFVbHgrU1Jkc1NHU21KTTVuVVNkbFBl" +
1071  "Lzk4cUgzaHZMeXRsU2g1VU1xdVllbDl0d25QSE0zV1U3OUh5TGVXZm90aGpibWZXeHk4eEwvWkFYYy92RHZuZi80ZlBYamtm" +
1072  "dnZlZVJWKzFQYm5mT3p4Kzc5ZGlYblgvMjdhK2xXTWpxNm9temQrM3o3QzNQZkhCNzVieGNIcGwzeG1zZnUzejUwUU5ZUFlC" +
1073  "SFAvV1JiNkZmeDBLSExwY2V2ZjI2NzNuWjEzekRkL24vTlBLR1gvamM1ZXdQWFJ5UGMyT3VMQzlmbHJNdVBmeVRiLytaNzcv" +
1074  "Yml5OW9KNTFtaTBnNGpMbzE0dEd6NmV2L0FtLzZ2WFRVYkV5ODh0TVdiVndiQzh0Z2pCQW5vZFhTVWlkaEpKSkJhbnY2Z3pa" +
1075  "eGJaWjlSdC8vQVhNeVRjbzY2dkp1M1Azd1pxVG16dHpxMjc0cmZ1RnQ3SjBXckdHSkc3TjFKUzRiaC8yMS8rRUxmZWJmdjFm" +
1076  "SE10ZWFqNC8xc0diZS9qay80c1c4NmU5OC9jL2o3M21CdnYwZnZhczUrMW9tRnUyWjlWWEgvMzdyczc3cFgzdUlWZy9pUUEy" +
1077  "cGsyRG9pTitKSCttUCtaRkxIL1pDazcrZXJ6aHNkN1lQN2l1ZDFkWmVwb3Jhd3BiYXIrSjRGVW1Nd1RLcTRmd1FtNWhGbUtK" +
1078  "MUkwRWlZUVNwT0ltVEV2ZGxhcVBGTENVWUtxbWhsazdMM0FoUkk3RnZjYlZOZTJzcEU0djdKamJUaHNPZTI5L1pIL3QxTDNU" +
1079  "MFFMcWVxeFZYRWllTGVQaFdEMklPcVpNaEdkckZiRHhNVi92dWtESDNSc3VjREZROVo4UEZ4cjJMT3U0Y0ZwWkJCdXM2dFdI" +
1080  "R0xGV0VJaEVsQ0VrbEpFNnE3cHVxYUJFbm9aVldUQ05GVGRWeTNPakd4YkhtckFVckZnUVYxOW9ZWW9uTlE3ZWlFcXEwT2k0" +
1081  "OGJLc0gwTG1KaVhPZGcrWENkUFF3WFRBdnpUdVhPVU1rVTFLTCszWnhGUzczZXVvNEhiZHBIQmdoSXd6TWlwM1NSbE1EUVJJ" +
1082  "SkVnM2llWFZTRWplV1VYTm5sdFpKSlZOU0kzRnR6am9lWXg3cmJvZUxjWEJMSkVScFBHZDIwWkRwMGtNM0daaVJEcDJEY2ZT" +
1083  "d3JSNUFIM3ZGVTduMW0vL1dlRlM2bVQ2OGpFY2VmWmVINkVQTzVnZDNQL3hJKzdRWlM4OHNoa01XbzJ3NXFpdjdqUGY4eHRs" +
1084  "WC9vU3JWOTA2cTdPek9xejErTXQzZTJOTzlrNHRMVklEWTBRU0kyUlF0SjVYMTBxRGF1bWtrMkNrUm1xL3FtZHVjN0hGbmF2" +
1085  "WUZpNmV5YzllYlhtN0JxdHpFV3lwYVRPN09RN3VkdjhwRDFtZGtlZzhwOUZ1ZWxrUDIrb0JyRi93bDk2RnIvR3NmLzZWMzVo" +
1086  "ditJR3Zyb2ZvQi9mdkwvNnBqOEduL1Bobi9kY254bnUvNnN6dUxEVmNteHBhenl0YXBxS2UxN2dSTjFycUpFUUZ3Y0JTa2hn" +
1087  "WWd0aGJGK1ZPVnZkTWJ6aCs3ci84bGI3dG05MjQ5TnZhbmZ5R2grMzJPMTcyN3NPOTQxdHpQQ3h0bHk2M0gxM21LNTcwa01V" +
1088  "bmthOVlQdk43UHJTKzc2dEhOMGtOMXlwSWlDSnVsSWtXUWF2aW81UzZMKzRiWVdDSXFJU2daUXRiNDE0WFYrcU54OC8raHUv" +
1089  "ejltLzJTV3oxU1dScDc5NEtXbnVybmxNcGNhM2l2cUJGS2FxdTFVazlMNjdGdGRSOXFSdXRpWXBnYWQzQ0lzN0h6dlJKYmZW" +
1090  "SjVKamx0dVhjR0xHYnR0SVNMR0hCNGlRRXdVUkxNVXRMNDdkVmpESkNuUVNsbUJoWWNPYk1na2U2TUgxU1czMFN1ZDMrOEhy" +
1091  "c2JHTVhXM2ViNmRxU0dHS0laQml1UmRWZXFxN04xclhHUjRuN2dvR2lxaTJwaUZYY01xeW1QZXVxNTIvMWtwZTg1Q1V2ZWNs" +
1092  "TFh2S1NUenIvQzdYZm42dnRIRGRSQUFBQUFFbEZUa1N1UW1DQyIsImUzIjoiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpB" +
1093  "QUFBQ1FDQVlBQUFEblJ1SzRBQUJIUmtsRVFWUjRBZXpCUzZ5MjYyRWU1T3QrM3ZkYi8yRnZaMjhma2pnMlVaeWtKR25Ua0Nx" +
1094  "TlNxTXFyVGlvclFwcVFXb2tScFFTUU9xQWd6cERRbUxXQVFNUXpPZ1lNYWhFQkVoUVZMVkFWUW1VVEhDVHFEbTB0RTZheFBF" +
1095  "cDlqNysvMXJmK3p3MzM3ZVcvMjBpcHR2N2dIMWR2dTNidnUzYnZ1M2J2dTNidmdYRnQ0aC83ZkcvZkhycjdsZC92bDFQVnZv" +
1096  "eUhoOTFPdXZkMHJyWVpHd3lUc2tZM0tXbXFJdkZXR3lyZGVncW94VGR4TWF4UzRhTTU4bnJmMi85MWcvN0ZyRDdGckcxcjM1" +
1097  "MSs4b1BuZEtYekRzekhEaXdYSlNrTnB6RWppQXVRc1ZzVFJ4bG9oNE1iT1dFTVhhSHNWbStKZXkrVmJRZmY5YTVUYkdqU3Rs" +
1098  "U1F6UkVYYTF3bFBpNmhkUUxXd2dXV2hJV3prVnJtYjVWRE44aUhzMzU4ZHZhem1XMnREYTFZMitkV2pzMnREWFZvYVphcWFY" +
1099  "YWlyb0tSbXRUVzlsVTFWMTUwL0tuYi83RitCYXcreGJ4ZU15UDM2N3VhVzFxWUF2RFJkeExPSERHcklzSW9vWklxcTdxYWdz" +
1100  "RG0wbzVoME1kc1hXY251QnQvejhYSDNML3FoLy9zVGZ6bTMvanlFcnh5T2JHRUJ5dDU2WTNjK2VsdlIvNTZlKzkvZFJZTWNa" +
1101  "eU03aloyRUpMeXpZNGwvUGl2S2lMVWlTazdpVXh3aGFHQ3BZNEZyZU51NjcxdjMzdXlUL1JIcnZOeVkwYm00Rmx1YlhjSm1Z" +
1102  "Zi9kTC8xYy8vakEreDNZZmMxM3p0eWR0NSswZm1LT3BXblRCRXkxbmRoU2ZiOHQyUEdHb005cTMyTUJMS0trdE1yRktzUmN0" +
1103  "Q1hSUmhKSUtSR2dpcUpzNnJucDh6cHJzZlhJbHpEcmR1YmRnd3NCSnJlK1R4M0Y1MytGRGJmY2pkZXR0aFNxZmhvcXl3eE1K" +
1104  "WkZhTnNHSU1NRjdHd1ZqMElhbUNFaWc1V2F6WmFtaUtpUmx6VVVnK2lKZGhTSjlOMEZmZGFDM1UxakI0MkgzNjdEN25EbTFh" +
1105  "V0hidllVM0cxUkR5b1J5TnVOcHBvS0daZFJFcFNFVWxGck5aVk1OUktFVlRFVlVKRjZ4MmJPb1VuaVhOcmxvVmlCYTFWWnRr" +
1106  "Y1B1eDJIeUwvM2l2L1N0Qy8vdHIvNUMva3AwM3l1ZnpDYVhVWkkvYlVDZkdncXVJR1R6Y2U3WEZnbHBaVkYzV3ZKTVJGaVlz" +
1107  "d01NSVNMYXN1NnFxTjFhb2lsSUY5eEdramk2a09jUzZyVmN6VW5TVU9IM2J4SWZMSHhuZit0ZGZIMno5NjlHak5NWnZ0ZXg1" +
1108  "dm4vNHpuN3o5OFgzRXpXQWZsWkM0RnpUc2cxZHVPQnF6ZFY3Y3pZaXJtbzB2UFhPdlNBa1M5OXE2bXFXbG1FTHFveWR1QmxM" +
1109  "QkVLczFRbkdVNTVObk0yWlpvbVA0NmwyLzluOStQbjlYcW9aMGM3djYxbWUybi83Wi8vMzQyODk5Q093K1JKN2EvL2g1OHkr" +
1110  "Y1Z4MWxzenl5Zk9KeDdJTjlzSTlJYXJnSTRoM0xSUWhHb28ybEtzNkxOOC91amJnWE5ZU2c3aFV0RmFzbHpKMVZOQklTWHJs" +
1111  "aEh4UUxkeXR1SjB0VXhhUjU5YVdSdnhCeHRZbTdqTmR1TWgvanVRK0IzWWZJM3VXbTB6QnRYYzZwTFpFUlVpdHhxQ0dXQnkz" +
1112  "QlFKVVFvUzdxWHF1Tmhhald2YUtwbEFoS1VCZVZ4TlZJaVl1S2lKcWlMZUlxaVczVXJvTFJlcXlldEZvWFljWE1Oa2I3QkYv" +
1113  "ekliRDdFRGx5YStCVXR0WUlqMGJ0dzBWVVRiRktNQkJrRUJWVUxURkNFTld3cDNZaDd0VkY0NnF1S2k3S0NDMHJGVVM5c0JD" +
1114  "eFdrdGNCYlZFRExWaEJDVmxxYU1zMDNQZFRzbkxQaVIySHlLM3BwbGxVM3NJVHVGbVk2b2xWbWtqb1kwOXRZVmRVYXN4c1pS" +
1115  "U1ZYRzFoYW9pb3FHdGU2bXJKRFNTMmxCTVJBUXRxM1UwV3ZkR0dJblJVaG9tM2pwNGExRWNPTlJiV2M1dGZFakVCOWhQNWZ2" +
1116  "LzZ0RzMvcE9SYXM5ZWVmeldSMzc2azNQZnd6YVdoSDNuNDArWmpRT3o4ZlRqbi9KOVAvRkg3ZHV3M2V3a2Z1dVhmOTF2L05J" +
1117  "dm11VllOY3RSWnBtTjRtaFYxVlcwMUVYY0M0SWdIc1R2dDhSU1Z5M0NDRTgyUHYyMFd0cVk2cTBqWHI5bFlibUs4OURQL3NZ" +
1118  "blhudTJaZy8xM1BpbnYrTExQKzREYXZjQk5wMi81ODN4NVk4eU1IMTg1N3R1S2lNeXlHQ0U4NG9nWWVBNy9wbnY4OGYvblor" +
1119  "VmRjaTJzOStZZitOLzhBOCsrMHNhMnBxdFZWWlpaWldpaVNwS0lxNkN1dGRLSWtFUmdpSnFLR0twZURBU3dRaXJNYkhLVGZq" +
1120  "WUl4U3BMWVQ4NHZpOVY3ZlN4RzY4YnZuQTJuMkE3VG9URjFYTThCd2JCa1pEVVVacTdMRVBUbHNOMU5DMTVQemNjWDd1V0t5" +
1121  "d3ltb29WVXRWQ09vaWtxaTZTbERpSWk3cXFvaW9CNnNSak5Ud29FaXJqYlZpb2toaUd6RmFhWTJ3cFlvOXl6NnFZeE9MNVFO" +
1122  "cjl3SDJTTEloSXJnSjI2Q1laYUtOaG9pQm14R3gwV2dyUGJTSDI5dm5iaWMyVWlvU2xDaXFkUkdKaTRxTFJOUzlFQkVQRWxv" +
1123  "WEpVZzhDSzBYbGpqS3ViUlJWNlVWakRBUXJMREN4QmxueXdmWjdnUGszODFQZi9kSVBoSWV2WTNQNTNPZmVoUjJTOVNUOE9U" +
1124  "RWJNM0dzVmgyKytPWDFVVXdXSGxrblc5WloweFZ6NTRkWmhsMUwrb3FIalJFM0F0YXhJT2dIa1JkMVFzVkxVRVJiQ0ZZV0dX" +
1125  "V1p4T3BZR0NFclNWQnJYSTBibE5ubkZ1M2RmUG44eWMrODVGc2F5YmRUNmY1M3p6LzI3L2pBeUkrSUg1bS9NblRsL3BQZnY3" +
1126  "STZ6K014MmQ4OTB2UDhrYy9jV1FMWTlUTnppY2UxMXFjYlk0T1AvUm4vM1YvN04vK3Q4UloxeFQwOXBuVFBCTXlXRjMrK2wv" +
1127  "OWE3N3d1WC9Nb0sycnVHZzFzVXBiTFlKUW9mR2doTGdLcXFLdEYrS3FSdUlUVDJPNHFsV2V6L2pLMjlVd3NJVlhiL2pZbzFx" +
1128  "Tm9tV0sxKzdxT0dvMS91NFhoN2ZPVDc2NjBXbXNtZkhyUC9MMHAvN0V6NzN4TjMwUTdENGdIcTIxUHh0M2YrQ3IyKzNUc2U1" +
1129  "VWZmZkd4MjdZTnJhTmhITmpoSkhZREovOGcvK3NKeC83aEsxMzByT3VzK09ONVhqdHVZeE5EVEtjTEk5SHpYQzRhTlZGM0F2" +
1130  "cUloNDBFcXFrQ0tJcUtGcGE0aUxFVlFTanRRWGhGSlJUYU9wcXc1WVlhRmhsdVdoOTVFVDN5T0pKbG1kNTY2TkxkSDlrbitO" +
1131  "M2ZZRHNQaUIyaEJ1dHFLcUtGZmRXU1d1SUxXUWppUTR5YnJTb2k3S2RaR3p1RlltcnRLNGlLcTdhS29xNGlxc2lDTm9neERl" +
1132  "VXFLS0lpMFJhd1VBd01NSWU5ckJRRjBWWmpZVzZDTUdHRWJiQmsvQlVUUnhLaDU5NzQyLzZvTmg5UU95SlBlbWpqZjFnNG1i" +
1133  "VUNLdXNGY1JJYklaMEY3dVJqUkhwUms4a3N0L0oyRmhublllMTZtNHR0NDJxVllSaW9TVkI0b1dncFNxaUlTaWlKTm9TNzJq" +
1134  "ci8yMGdJVWhZV0dXaDRxNTFOQmFLcW9GZ3d4WkdTQkVPckhISDlJR3hlNS84NVZmKzFKUFAzLzJPTHovNzdXT3BMNDR2bkI1" +
1135  "dmsxSDdSdkhLSHFlOTdsYXNSUmNmKy80ZjhSMGYvYmlYUHZFcXJhZXZmRndzUmJKSm9vdmp2UFNZdXM3T2N6bldjbGVHcUl2" +
1136  "U0lpRlVFZkYxZFM4dVFsUTlLT0lpcE83VlJWM1Vhcng5c0EvMlJSS3pQTms0eENvTHR6UGVPQ01rSVR3WkJGVUwyOGErMGJC" +
1137  "bFdWdWYvdW44eEVkLzYrNnpiMDQzeG5pYTVjbjh0ZlhiMC9zZzNpYy9PbDcrRHg1dDY3OU1xMTN1Rm4veE0yZWZmcmx5WW9R" +
1138  "TnR3Zm54ZTJLdTNQOWxmLytiM25wb3krTHhUWklhTWhRUS9iNEgvK3ovOExmLzduL3p1MmFqdGFjbFdQS3FDVGFhajFJVUhF" +
1139  "UkY5VkdYZFNEVUhHVmtKSVFWYlFVcVh2QkNNRUl4VWg4NmluSHFsbFcrZDFuOGZhNUVoSnV0dmplbHhpcWFwVWxKczZOcTk4" +
1140  "NzR1Lzg0OTF3T0xJN25IUTkvcTkrelpmL1ErK0QzZnVrenMreWJjekROTTNCM2Fwak1TWkNjVzRzMWNFTTVodHlJRmdiWXlP" +
1141  "Ylp0ZVFEdnM2M0J4M3F0TGFYR3p1RlEwTnJZc2FJUjYwVVN4VkZDbHhFVklpUmt1SXIwdFFMOVJGT0JReFVFUU10WTE2dERF" +
1142  "WFVRbVBCemVEbHRtNEtvS2JWTENkNjVGcFdQWk01N0ZMRi9XKzJMMWYyamxhUzdYVmNwVFo2S0p4NzdiUk1rdEZCazFrUk5C" +
1143  "TzdTS1ZMTzFHYTNXUjJrUlNWMDIwTlYwMEVyUUc0a0dEVnNvcVJlT2kxRVZFRFErcTRxTFVSZHhyYTVXS2xuMjRxR0FQMitC" +
1144  "eE9LTUlOdXhoWWlsaUlHRmdDNmRSZTZhMGFqbXBHTjR2dS9kSkdrVmJkUkZHa0txb0tsWkRHZGdUMlord1BkRWVha29uTFpt" +
1145  "YUljZHVIbmNtMmhMaUtxcUtOTDUwZXV3cnA1ZHNyYUdFa1JySUtxMTJLWnE0V29qWVZnMDBNZkRwMnplY0xBdEZYU1JhTktp" +
1146  "MmxxRHVKU0owRVJleGlrUlVNTHhRUVZ3c2xnZUhPTlR1OEg3WnZVOHljak5iVjBPZHdzMkltNDJtcmxxaWtvcm94blJ5ZE5l" +
1147  "NVdHZGYrZTNmOHB1LytnK05FZHMybkY1NjJaZSs5RVczcll6UTB1RnU3S3FxTXZueWVPcTNUeThKbXNHSTdvTVJxWXRLaTVK" +
1148  "YWRXK3Rza29yWWl1dkhNOThaSjVOTkdHeGR4bG9xK3F1OGFXM2F3OWpjSDdPODZObVlpR2xpOCsvVlZjVkkzekhUUkhGTEc4" +
1149  "dm5yZUNjN2xyYlc2OVgzYnZrMlo3ZVRwczJKSEU0NjFPSXhhS2haYlZ1bXI1ci8veXY2bmI3aWp6bUo2OStaYm5iN3lwYWkz" +
1150  "RXZXQXJNYngrdXZGckgva3VSRnRtZk1kM1BmRURyenlTTVdSRVJtUWJxb0lrRXVLcTZxSzByRmx6VlplTDVWZis3MXVPV21N" +
1151  "ekU2YzEvZGpYdnVEUnJOYTloZGZQUmJ3UUYyV0ZZT0cxTXducTN0T2RFWXJWbUt1T3NLRlk2djIwZTkrTWs0dUJEY0dXMk5C" +
1152  "RVd5M0hZcTJvV3FwZitWMnp6TWF4bUdYYmFCbkRSYzJTb2tocHZiMmZOTkdFOHNyTGp6MSsrVWJEU0JEMW9DVWhJWW00Q09w" +
1153  "ZVY4MVp4NnpPNWJWeFkyNjFaUWh1eC9DN055OTdkQ3dMemZMU1BMdzg3MVFSU2wzRXZkWTc2cUx1TFpHUzFCNXV3aVBFZ3dQ" +
1154  "RCsyZjNmbW1HTUVMS2FxM0dYTXpRTXN1Y2RiUm1ZNVdtcmxaTFNTSytJUzJpaWFvaUpRMkprY2hnMjRiOU5MUzA5VUpiVnkw" +
1155  "dFNTV2tRVWtJQnFQTUZSVlZTNDB5RGYvb3BZOVNLb1o2OVhqdWo3ejJSZFJWVTB2VWd3UkJTWXVvU0N0aHcxQ25jSU9VTWVp" +
1156  "STA5cW85OFh1ZlJKdWg1aXRpVE9lbDdzMXpDQ3hNTmR5bEZWV1VJSzRDR2tGYldpMUhGaUp1c2h3TmxoVkpERkdqQkVTOGFB" +
1157  "dEpRaUt4TDBncWJwYUtvYklGdFMyRFMxS1ZWQVhJNUlnRHJHNUNtcGloR0xWZzdwWDhZNVNIQ1U0bHlXU3FycEtoL2ZMN2oz" +
1158  "d3ovdk05NXd5LzVmUjJWUHk5Tlo2L2VYSGIzM3FZMDhPUitPMmNWdTIwMGxlZnNtanhEYm9xdGVldlc1WkdrWjhYUVV0TThO" +
1159  "enU3WW10c1hyTjd1M2IwN09HWnFoaGpFWWd6RnFHOVUxZGRIV1d0WFdXbXdqeG1DTWVCQVBTbXV0b1VVckk4YUl4NDkzNS9P" +
1160  "aHM5YWsyQkpqREJMcDBzUmI0MlJ2VWNmZ1ppMVZMOVEzdEZUZGxaUXBWc3ZnZTE0bWlXRG04SHZQOHJNL2RmdXhuOW14c25t" +
1161  "ZS9mbXIvWU4vL3UvMGYvMWwzMlM3OThCdHZ2Ym92SjMvdWQzWlhROHJmTjhyL0tudkhwNkhXOUh5NlovNFEvN01mL3lmeWpo" +
1162  "WmVjU2Evdk4vNHkvcDY3OW5XNGVWYWlNaUtvblAzenoxSzArKzA5RTZ5anpxQjM3d1ZSLy8rQk1kdzFXNmZHY2lEWW14Y1h0" +
1163  "M3VEdFBWMjExOGVVdnZXV00yUFlZSStKQlcydlZhcDMyWWQ4M0VnbGpESi81L285S29xMnV1aHBqU05Eb1dwN2RIdjZQdTJH" +
1164  "TUlhSHFCOS84cWsvZHZ1MkZscVZTSkZiNW5iY29qbFZUdkhyRFQzeUNoS1IyeTJlLyt2eWxmM2krZStrSUhadXovZTNUY1Y3" +
1165  "ZUE3djNRRTIxSENxdDJicHR2TkdseU9BMHVObUcwNU5YR0p2WnNPNmN4VkUyRnlVcWlOaXdzamx2bTlYcVdycFY5ckFOWXd0" +
1166  "aVpFaXJMa29iYTdKbVhWVzFkVDZXTVdJMmtoaXVxcTIxYXBVSVdaSklvbDNXbXJZdFJzTG1YbExLYWgxek9jNTF1eGdoWVln" +
1167  "anNaV0ZlaUZXWE5SVlFyQVBocnJaNHJSN1I5V2hqaXhGREdGTjdyd0hkdStCSVVhaVpha2xXaGEyd1Q2NEdkeHNtMlRUTlZt" +
1168  "SHpzTjVUcmNyVGlXSnBJYTRLbFppSks2eWJjYUkwMm0zN1lORWtCQ2hySmJsSFMxRmk4UlZpOVpFUXVzZFJVUkU2cUlVUmJ5" +
1169  "anJhNVlxK3FpSkNIdUZjdEZhVml0SmE2S2lJUWdPQVhoOGFoSEk0clZxa2lpYUZHYTFZUERlMkQzSHBnbWxtQ2c0V2J3YUt2" +
1170  "VHhqNWlEN3RZamM2YWEzR2NyVFdkUzhvSUdoSFVqdG5TR2lNU0pQYWI0WFRhRkMxUldsZkRzRklhYTVhUWtMQ051RmVxbE9X" +
1171  "aTFkWlZWNjNXUUVaa1JFYU1FUkVKTGF0VmxiQnR3N2JYdmcrMldLMjFsbU14RnpNdTRxcEJmVjBsRERGU0kzRXp1QmsxeFVJ" +
1172  "WFc5bVIxbXFkMDB4Mjc0SGRlK0M1czBlTms5ckNwaDZIcHh0aml6RVllT08xTi8yanovNTlxNGU1emxicjduelFwUzdLekhB" +
1173  "M2hsbXlPRGZHbUxaOUdOdXdPbGlWaEZZU3lsb1JRYlhNeWQxZFVSbHNJNGhndGVhc3JtcExFWkpZaTNWVVI3UUlpZzVDaXpJ" +
1174  "U1RRbGpETnRwT1QwYUd0YXNvL1gydHZueWRtT2tvazVkSHErcDR2K2ppSXNJVXZkYVdyUldtRGkzbzA0MzNnTzc5OEJNcmFB" +
1175  "UkJGdElpSXRWeFcvKzhxLzUrWC8vUDNJN09kZTliU3czV3lRSXYvNlJUL2ppemN1c1piWSsrZW52OENmLzBLZU1NV3hiQkcr" +
1176  "ODhjeXo1NGUycU9mUGw5LzZyZGVNRVZkcjFadHYzcm03UGF5MUNHUEVHRU5DVjgxWmE1WFd2U0F4RWdsakRFa0lZOVFRRWkx" +
1177  "ajFCLzRvWSs3bHhqcTZaT1RIL3ZEbjdaYWN5NXpUbC80d3BzKyt6dHZHQ01TWGo1dS9malh2bVNFSUlJcWxvdldlY1VxVlVw" +
1178  "TFd4TUxaOXhWMkhmdmdkMTdZTyt3SWFrdVpqaHcxMGdaSXVyY1N1clJIcWRVU2tPRG9HUnNiRU5EMTVJUlhjdXlYRVdjejlQ" +
1179  "ZGVWcXJsTnZidzkzZFlkdUdzVVVTVkFZamNSVjAxV285cU1SRlNDVnhOWWFMcUVWcDZZbzFYRlFYU1IxekdZbUVxWklhaVpa" +
1180  "YXRKUUdDVUkyV3lJcUhqUzByTEp3VnhZaXR0UVluRVpzYXBVbWlqYnhIdGk5QjA0MmUwcW5JMHljY2JzaUdJcDR0cmhiakZF" +
1181  "REl6UklCU09jTW94dFdJZ2dsckpZaStCOExNZDVhbDNFbk11YVM4UlZCbTNGUlVKcGkycFJGeEVYZzRnWFdoZWxGQWxGajZw" +
1182  "YWl4SG1VZGt3c0VoaXBSU0xCQWtKaVJoRzJOVHZVMVpaWXVGb0xHeHFoS2liY0JQM1ptdU1TRzZydnVsMjc0Rzl3OWFGV0tp" +
1183  "cnFDSldCcTFaRHV3WVNoZ2hpWUdCZ1NFeWhyWXlQQ2dOWGRWV1cwbFVhYWwzdE83VkMzWFZCaVVlaEhpaGloUnhyNlVONmw1" +
1184  "cHE0bTRHSkVSU1ZFUkN4bEU3RnZzMjJhTUNQWlZlMW1xYU9LRllwVlZWa3ZjUzlqQ3lZTWpiQmlkM2d1N2I0Sy9rcC82MGJO" +
1185  "OVd6MXZQTS81NmJNLy9JWDhCcGExbU9IeGliRjUwTG9hSTBZcVFXTGdMaHNKeGNManpaTW5tNnFXUjQ5UEVvb1dRU3R4VWVw" +
1186  "ZU1seXQ1V0pacTFxMEhrUkN4YjBTdEVVOXFGVWlpQmVDdWdnUlk4VGQzYlNYYllzaE11cDBpaUNKakhqcHBSdXZmdlF3Uk5S" +
1187  "KzhQb2JqM1ZOV2xGUDFxRXBJbWpydk55clNEandlT09ST3FWR2pDZno3a2YvWXYvSUhydDZmTHlkZk9WLzd0LzdiZSt5ZUpm" +
1188  "OXVVZi8wa2UrZHZ6aVB4anh5ZmJZWmxhKzgvSFpuL3ZNY3dzZGxVRVNTdEd5OE5YblBEK1hNTUlhOFFzdmY5cXpjWEswenJO" +
1189  "KzRpYy81ZFZYbjlyMzJMYTRQZGZienc1ekxtMWQvZFBmK0pwbno4NmFhcGxIM1Q0N3RCUnR6YmtreEVWY1JCS0pleTFWODVq" +
1190  "YUN0cGFxL2JUSmhtdWdpVEVnN28zTnJZeGpFVHg2Tkh3cVUrL29wYU15SWpUSHRzVzZ0NmJiNTk5N2xlL2FzM0ZtbUw1OGRl" +
1191  "LzZNbWNLcWdLclphRmlrL2VMQzl0Y1VvSnp4dC82emMvMHRzS1ErM0hXKzEvKzh2ekszL0p1MnozTGd0NUkyOW1TL2M2TzRj" +
1192  "bnJVT053V2xqaEtvcHRLNEdraGdqaWhYbWlyZHk0MWxpWVpwV3FWcU5MT1pjenNmU3hWcDFkUnpMK1ZpU3FGcXpXdHBxYTZu" +
1193  "ejNWblZ2dS8yZlRNU0dkNlJzQlpyRmRYR25GTXlhRndsSG9TTVVCSVB5bHdjWGRySzRKZ2xCRmtWRjNWUkxldmdNTmlpZzZ6" +
1194  "aFh1SXFMc29TVlcxVmpCSDd4bW5FbGpxcGpEY3pKN1BFdnFlNThVMndlNWNkN1RpNjRtS3RaWVhaV3VKcWxxQm9xeTVTRVFQ" +
1195  "QktxdXNWbGNSRkdXNFY3VktTeGVLeHVveVo4MVpTUW1yVmZXT3NycEV6T093ajhocGt4RXZSS3hPVk10YTAzRk0reW51aGFx" +
1196  "MWx0TzJpNHU0Q0tYS3F0VnFXWXVXSkY0b1Z0RllPRllkWGVJcVlsbWxSYWh2Q0ViaWFnUmhJUzRTV21scEhKYm5YYjRaZHUr" +
1197  "eXNkWVlSbUtKcTBvWVFkeHJLRnIzZ3FHMnhHcE5NUmNtMXRRUkkyR0xtNXZOdmtjU1NXeGJiSU9pSVl1cU5aZU1TRmlydXFx" +
1198  "dEJ4V1JrSERNUTdiWXRsMWN0SzZDaU5YcE9BN0Z5RkFFYlkweEVGZDEwYnBxNjRXcWhERVlXNHdSd3JiRkNHdVJWc1JheTcw" +
1199  "dTZiUm1IWXVPR21GVEd4SVM5MDZEaE5sYVFwbG9YZFRDV1gwejdONWxTV3lORFpzYTVRWTNHOHRGYUZubGJybTNKWFljaHRm" +
1200  "RzdsaWNSMjNsOUNqY1JNWnd0WitHTWVKcWhPT1kzbmpyVmpLczFqeVdPZXM0bGd3UzFtSzFnbnBoSVZyV1lzMWxQL202RUpK" +
hooks/store.ts 32 lines
1import type { Save } from '../types'
2import type { Step } from './engine'
3import { parseSave } from './model'
4
5
6// The plugin loader doesn't follow $ across imports, so every $.xxx call stays in register.tsx; this file only gets the wrapped StoreIo
7export type StoreIo = {
8  now: () => Promise<number>
9  read: () => Promise<unknown>
10  write: (save: Save) => Promise<void>
11  toast: (text: string) => void
12}
13
14let queue: Promise<unknown> = Promise.resolve()
15
16export async function loadSave(io: StoreIo): Promise<Save> {
17  return parseSave(await io.read(), await io.now())
18}
19
20// Read → compute → write, one at a time, so events within a session never overwrite each other
21export function mutate(io: StoreIo, fn: (s: Save, now: number) => Step): Promise<Step> {
22  const run = queue.then(async () => {
23    const now = await io.now()
24    const step = fn(parseSave(await io.read(), now), now)
25    await io.write(step.save)
26    for (const effect of step.effects) io.toast(effect.text)
27    return step
28  })
29  queue = run.catch(() => undefined)
30  return run
31}
32
hooks/i18n.ts 41 lines
1// UI language. Chosen once per session from TEA_EGG_LANG, else from the system locale.
2export type Lang = 'zh-TW' | 'en'
3
4function systemLocale(): string {
5  try {
6    return Intl.DateTimeFormat().resolvedOptions().locale
7  } catch {
8    return ''
9  }
10}
11
12// TEA_EGG_LANG ('en' or 'zh-TW') wins; otherwise a locale starting with "zh" means zh-TW and anything else means en
13export function detectLang(envValue?: string, locale: string = systemLocale()): Lang {
14  const forced = (envValue ?? '').trim().toLowerCase()
15  if (forced.startsWith('zh')) return 'zh-TW'
16  if (forced.startsWith('en')) return 'en'
17  return locale.toLowerCase().startsWith('zh') ? 'zh-TW' : 'en'
18}
19
20// zh-TW until register.tsx decides at session start, so the original Chinese tests run unchanged
21let current: Lang = 'zh-TW'
22
23export function setLang(next: Lang): void {
24  current = next
25}
26
27export function lang(): Lang {
28  return current
29}
30
31type Patch = { [key: string]: unknown }
32const isPlain = (v: unknown): v is Patch => typeof v === 'object' && v !== null && !Array.isArray(v)
33
34// Deep-merge a translation over the base: objects merge key by key, arrays and strings replace whole
35export function overlay<T>(base: T, patch: unknown): T {
36  if (!isPlain(base) || !isPlain(patch)) return (patch === undefined ? base : patch) as T
37  const out: Patch = { ...base }
38  for (const [key, value] of Object.entries(patch)) out[key] = overlay(out[key], value)
39  return out as T
40}
41
hooks/text.ts 193 lines
1// Non-spoiler UI text in every language. Spoiler text lives in spoilers.ts.
2import { lang } from './i18n'
3
4export type Text = {
5  welcome: string
6  brothLow: string
7  brothEmpty: string
8  brothEmptyHint: string
9  flipWanted: string
10  flipHint: string
11  night: readonly string[]
12  harvest: string // {name}
13  newDex: string
14  refillReply: string
15  flipReply: string
16  flipNoGain: string
17  flipNotNeeded: string
18  nameReply: string // {name}
19  nameUsage: string
20  paneOpened: string
21  paneClosed: string
22  bandHidden: string
23  bandShown: string
24  unknown: string
25  error: string
26  help: string
27  // Name shown on the pane and in the /egg command description
28  title: string
29  commandDescription: string
30  defaultName: string
31  dexTitle: string
32  // Stat labels on the band and the pane
33  flavor: string
34  broth: string
35  mood: string
36  // Band separator: full-width bar for CJK, a narrow one for English
37  separator: string
38  stageNames: readonly [string, string, string, string]
39  buttons: { refill: string; flip: string; dex: string; panel: string; hideBand: string; showBand: string }
40  waiting: string
41  eggAlt: string
42  previewLabels: Readonly<Record<string, string>>
43  previewBanner: string // {n} {total} {label}
44  previewReply: string // {n} {total} {label}
45  previewUsage: string // {total}
46  previewOff: string
47}
48
49const ZH: Text = {
50  welcome: '🥚 你領到了第一顆蛋!把它滷成茶葉蛋吧。輸入 /egg 查看',
51  brothLow: '滷汁快乾了',
52  brothEmpty: '滷汁乾了,蛋停止入味 🥲 輸入 /egg refill',
53  brothEmptyHint: '滷汁乾了,蛋停止入味',
54  flipWanted: '蛋想翻個身 🔄 輸入 /egg flip',
55  flipHint: '蛋想翻個身 🔄',
56  night: ['主人,滷汁都要睡了 😴', '這麼晚還在寫,蛋都替你累', '深夜寫的 code,明天的你會看懂嗎?'],
57  harvest: '🎉 出鍋了!你得到了:{name}',
58  newDex: '(新圖鑑!)',
59  refillReply: '滷汁加滿了!蛋看起來很開心 (•ᴗ•)',
60  flipReply: '翻好了!入味 +2 (•̀ᴗ•́)↻',
61  flipNoGain: '翻好了!(•̀ᴗ•́)↻',
62  flipNotNeeded: '蛋現在躺得很舒服,還不用翻',
63  nameReply: '好的,這顆蛋現在叫「{name}」',
64  nameUsage: '用法:/egg name <名字>(最多 12 個字)',
65  paneOpened: '已開啟茶葉蛋面板',
66  paneClosed: '已關閉茶葉蛋面板',
67  bandHidden: '已隱藏橫條,輸入 /egg band 可再顯示',
68  bandShown: '已顯示橫條',
69  unknown: '不認得這個指令,輸入 /egg help 看看',
70  error: '蛋暫時聯絡不上,稍後再試 🥚',
71  help: [
72    '茶葉蛋養成計畫',
73    '/egg            開啟/關閉面板',
74    '/egg refill     加滷汁',
75    '/egg flip       翻面',
76    '/egg dex        顯示圖鑑',
77    '/egg band       隱藏/顯示輸入框上方的橫條',
78    '/egg name 名字  幫目前的蛋取名',
79    '/egg help       說明',
80  ].join('\n'),
81  title: '茶葉蛋養成計畫',
82  commandDescription: '茶葉蛋養成計畫:/egg [refill|flip|dex|band|name 名字|help]',
83  defaultName: '小蛋',
84  dexTitle: '蛋圖鑑',
85  flavor: '入味',
86  broth: '滷汁',
87  mood: '心情',
88  separator: ' | ',
89  stageNames: ['生蛋', '裂紋', '入味', '滷透'],
90  buttons: { refill: '加滷汁', flip: '翻面', dex: '圖鑑', panel: '面板', hideBand: '隱藏橫條', showBand: '顯示橫條' },
91  waiting: '蛋還在路上…',
92  eggAlt: '茶葉蛋',
93  previewLabels: {
94    stage0: '入味 0–19%(生蛋)',
95    stage1: '入味 20–39%(裂紋)',
96    stage2: '入味 40–69%(淺杏)',
97    stage3: '入味 70% 以上(淺褐)',
98    face_happy: '表情:開心',
99    face_normal: '表情:普通',
100    face_bored: '表情:無聊',
101    face_dry: '表情:滷汁乾了',
102    face_sleep: '表情:睡覺',
103    face_flip: '表情:想翻身',
104    face_done: '表情:剛出鍋',
105  },
106  previewBanner: '預覽 {n}/{total}:{label}(不影響存檔)',
107  previewReply: '預覽 {n}/{total}:{label}(/egg preview 下一張、/egg preview off 結束)',
108  previewUsage: '用法:/egg preview [1-{total}|off]',
109  previewOff: '已結束預覽',
110}
111
112const EN: Text = {
113  welcome: '🥚 You got your first egg! Marinate it into a tea egg. Type /egg to take a look',
114  brothLow: 'Broth is low',
115  brothEmpty: 'The broth dried up, so the egg stopped soaking 🥲 Type /egg refill',
116  brothEmptyHint: 'Broth dried up',
117  flipWanted: 'The egg wants to roll over 🔄 Type /egg flip',
118  flipHint: 'Wants a flip 🔄',
119  night: [
120    'Boss, even the broth is sleepy 😴',
121    'Still coding this late? The egg is tired for you',
122    'Will tomorrow-you understand code written at midnight?',
123  ],
124  harvest: '🎉 Done marinating! You got: {name}',
125  newDex: ' (New in the Eggdex!)',
126  refillReply: 'Broth topped up! The egg looks happy (•ᴗ•)',
127  flipReply: 'Flipped! Flavor +2 (•̀ᴗ•́)↻',
128  flipNoGain: 'Flipped! (•̀ᴗ•́)↻',
129  flipNotNeeded: "The egg is comfy right now. No need to flip it yet",
130  nameReply: 'OK, this egg is now called "{name}"',
131  nameUsage: 'Usage: /egg name <name> (up to 12 characters)',
132  paneOpened: 'Tea egg panel opened',
133  paneClosed: 'Tea egg panel closed',
134  bandHidden: 'Band hidden. Type /egg band to bring it back',
135  bandShown: 'Band shown',
136  unknown: 'Unknown command. Try /egg help',
137  error: "Can't reach the egg right now. Try again later 🥚",
138  help: [
139    'Tea Egg',
140    '/egg            Open/close the panel',
141    '/egg refill     Top up the broth',
142    '/egg flip       Flip the egg',
143    '/egg dex        Show the Eggdex',
144    '/egg band       Hide/show the band above the prompt',
145    '/egg name NAME  Name the current egg',
146    '/egg help       Show this help',
147  ].join('\n'),
148  title: 'Tea Egg',
149  commandDescription: 'Tea Egg, a pet egg that marinates while you code: /egg [refill|flip|dex|band|name NAME|help]',
150  defaultName: 'Eggy',
151  dexTitle: 'Eggdex',
152  flavor: 'Flavor',
153  broth: 'Broth',
154  mood: 'Mood',
155  separator: ' | ',
156  stageNames: ['Raw', 'Cracked', 'Soaking', 'Steeped'],
157  buttons: { refill: 'Refill', flip: 'Flip', dex: 'Dex', panel: 'Panel', hideBand: 'Hide band', showBand: 'Show band' },
158  waiting: 'Your egg is on its way…',
159  eggAlt: 'Tea egg',
160  previewLabels: {
161    stage0: 'Flavor 0–19% (raw)',
162    stage1: 'Flavor 20–39% (cracked)',
163    stage2: 'Flavor 40–69% (light amber)',
164    stage3: 'Flavor 70%+ (light brown)',
165    face_happy: 'Face: happy',
166    face_normal: 'Face: normal',
167    face_bored: 'Face: bored',
168    face_dry: 'Face: broth dried up',
169    face_sleep: 'Face: sleeping',
170    face_flip: 'Face: wants a flip',
171    face_done: 'Face: just done',
172  },
173  previewBanner: 'Preview {n}/{total}: {label} (save not affected)',
174  previewReply: 'Preview {n}/{total}: {label} (/egg preview for the next one, /egg preview off to stop)',
175  previewUsage: 'Usage: /egg preview [1-{total}|off]',
176  previewOff: 'Preview ended',
177}
178
179const TABLES = { 'zh-TW': ZH, en: EN } as const
180
181// The text table for the current language; call it at use time, never cache the result
182export function T(): Text {
183  return TABLES[lang()]
184}
185
186export function fill(template: string, values: Record<string, string>): string {
187  return template.replace(/\{(\w+)\}/g, (_, k: string) => values[k] ?? '')
188}
189
190export function pick<T>(list: readonly T[], rng: () => number): T {
191  return list[Math.min(list.length - 1, Math.floor(rng() * list.length))]!
192}
193
hooks/pixels.ts 81 lines
1export const SIZE = 48
2export const RASTER_ROWS = SIZE / 2
3
4const UPPER = 0x2580
5const LOWER = 0x2584
6const SPACE = 0x20
7const DEFAULT = 0x01000000
8
9export type Layer = { pixels: string; box?: readonly [number, number, number, number] }
10
11// Stack layers in order: later layers overwrite opaque pixels inside their box (growth-hint overlays use this too)
12export function compose(layers: readonly Layer[]): string {
13  const out = (layers[0]?.pixels ?? '.'.repeat(SIZE * SIZE)).split('')
14  for (const layer of layers.slice(1)) {
15    const [x0, y0, x1, y1] = layer.box ?? [0, 0, SIZE, SIZE]
16    for (let y = y0; y < y1; y++) {
17      for (let x = x0; x < x1; x++) {
18        const c = layer.pixels[y * SIZE + x]
19        if (c !== undefined && c !== '.') out[y * SIZE + x] = c
20      }
21    }
22  }
23  return out.join('')
24}
25
26// Pixel chars: '.' is transparent; 0–9 and a–v are palette indices (base-32)
27function color(c: string | undefined, palette: readonly number[]): number | null {
28  if (c === undefined || c === '.') return null
29  return palette[parseInt(c, 32)] ?? null
30}
31
32function toBase64(bytes: Uint8Array): string {
33  let bin = ''
34  for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000))
35  return btoa(bin)
36}
37
38// One cell = two stacked pixels. Top colored: ▀ (fg = top, bg = bottom); only bottom colored: ▄; both transparent: space
39export function rasterCells(pixels: string, palette: readonly number[]): string {
40  const view = new DataView(new ArrayBuffer(SIZE * RASTER_ROWS * 12))
41  let o = 0
42  const put = (n: number) => { view.setUint32(o, n, true); o += 4 }
43  for (let row = 0; row < RASTER_ROWS; row++) {
44    for (let x = 0; x < SIZE; x++) {
45      const top = color(pixels[row * 2 * SIZE + x], palette)
46      const bottom = color(pixels[(row * 2 + 1) * SIZE + x], palette)
47      if (top !== null) { put(UPPER); put(top); put(bottom ?? DEFAULT) }
48      else if (bottom !== null) { put(LOWER); put(bottom); put(DEFAULT) }
49      else { put(SPACE); put(DEFAULT); put(DEFAULT) }
50    }
51  }
52  return toBase64(new Uint8Array(view.buffer))
53}
54
55const hex = (n: number) => '#' + n.toString(16).padStart(6, '0')
56
57// background: put a rounded backing card under the pixels (so the white steam shows up on light themes)
58export function svgSource(pixels: string, palette: readonly number[], scale: number, background?: string): string {
59  // One <path> per color, each horizontal run a subpath: about a quarter the size of one <rect> per run
60  const runs = new Map<string, string[]>()
61  for (let y = 0; y < SIZE; y++) {
62    let x = 0
63    while (x < SIZE) {
64      const c = pixels[y * SIZE + x]
65      const fill = color(c, palette)
66      let run = 1
67      while (x + run < SIZE && pixels[y * SIZE + x + run] === c) run++
68      if (fill !== null) {
69        const key = hex(fill)
70        if (!runs.has(key)) runs.set(key, [])
71        runs.get(key)!.push(`M${x} ${y}h${run}v1h-${run}z`)
72      }
73      x += run
74    }
75  }
76  const back = background ? `<rect width="${SIZE}" height="${SIZE}" rx="3" fill="${background}"/>` : ''
77  const paths = [...runs].map(([fill, d]) => `<path fill="${fill}" d="${d.join('')}"/>`).join('')
78  const px = SIZE * scale
79  return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${SIZE} ${SIZE}" width="${px}" height="${px}" shape-rendering="crispEdges">${back}${paths}</svg>`
80}
81