code-playpad 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -13
- package/dist/THIRD-PARTY-NOTICES.txt +50 -0
- package/dist/config-DZqcFPEP.js +5 -0
- package/dist/dist-BKRQwpg6.js +6 -0
- package/dist/{element-VP5lhHx6.js → element-BYcX5Z6z.js} +11 -11
- package/dist/element.d.ts +3 -0
- package/dist/element.js +1 -1
- package/dist/hints-v5iHTd1l.js +6 -0
- package/dist/index.js +1 -1
- package/dist/java-1ISFU8hm.js +1 -0
- package/dist/java-DSEX5tzl.js +6 -0
- package/dist/javascript-BhISU47e.js +14 -0
- package/dist/javascript-hfFD1Fg2.js +9 -0
- package/dist/{pyodide-5ByQYqgo.js → pyodide-BTGQ_X_F.js} +8 -8
- package/dist/{pyodide-yv6x2HCQ.js → pyodide-j1wg1W9_.js} +8 -8
- package/dist/react.js +1 -1
- package/dist/runtime/hints.d.ts +11 -0
- package/dist/runtime/java-worker.generated.d.ts +8 -0
- package/dist/runtime/java.d.ts +3 -0
- package/dist/runtime/worker-runtime.d.ts +14 -4
- package/dist/standalone.js +11 -11
- package/dist/types.d.ts +6 -2
- package/dist/worker-runtime-CmbgEzLA.js +9 -0
- package/dist/worker-runtime-mfgjcG5l.js +4 -0
- package/package.json +11 -3
- package/dist/config-B2qK2rdk.js +0 -6
- package/dist/javascript-DGFKR69i.js +0 -323
- package/dist/javascript-RVtPk08Z.js +0 -318
- package/dist/worker-runtime-8Mnw4vAD.js +0 -9
- package/dist/worker-runtime-CJ3Zww5E.js +0 -4
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/code-playpad) [](./LICENSE)
|
|
4
4
|
|
|
5
5
|
Runnable code in any web page. A CodeMirror editor that **executes what it
|
|
6
|
-
shows** — Python, JavaScript and
|
|
7
|
-
No backend, no iframe, no sign-up.
|
|
6
|
+
shows** — Python, JavaScript, TypeScript and a documented subset of Java —
|
|
7
|
+
entirely in the reader's browser. No backend, no iframe, no sign-up.
|
|
8
8
|
|
|
9
9
|
**[Live demo →](https://code-playpad.swengr.com)**
|
|
10
10
|
|
|
11
11
|
```html
|
|
12
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.
|
|
12
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.3.0"></script>
|
|
13
13
|
|
|
14
14
|
<code-playpad height="auto">
|
|
15
15
|
print("hello from a static page")
|
|
@@ -27,9 +27,10 @@ No backend, no iframe, no sign-up.
|
|
|
27
27
|
|
|
28
28
|
| `language` | Runtime | Downloaded at runtime |
|
|
29
29
|
| --- | --- | --- |
|
|
30
|
-
| `python` (default) | Python 3.14 via Pyodide — full standard library, `input()`, real tracebacks, `numpy` on demand | ~
|
|
30
|
+
| `python` (default) | Python 3.14 via Pyodide — full standard library, `input()`, real tracebacks, `numpy` on demand | ~6 MB (13.5 MB unpacked), once, cached |
|
|
31
31
|
| `javascript` | The browser's own engine, in a Worker | nothing |
|
|
32
|
-
| `typescript` | Same engine, types stripped before running | ~
|
|
32
|
+
| `typescript` | Same engine, types stripped before running | ~70 KB, once, cached |
|
|
33
|
+
| `java` | A documented subset of Java 25, compiled and interpreted in a Worker by an engine built for this package — see [Java](#java) | nothing: the engine is a ~27 KB (gzipped) chunk of this package, loaded with the first Java widget |
|
|
33
34
|
|
|
34
35
|
```html
|
|
35
36
|
<code-playpad height="auto">print("python is the default")</code-playpad>
|
|
@@ -49,17 +50,80 @@ No backend, no iframe, no sign-up.
|
|
|
49
50
|
|
|
50
51
|
A trailing expression prints its value, like a REPL. Each language loads **only
|
|
51
52
|
on pages that use it**: a Python-only page never downloads a byte of the
|
|
52
|
-
JavaScript runtime, and a JavaScript-only page never touches Pyodide's
|
|
53
|
+
JavaScript runtime, and a JavaScript-only page never touches Pyodide's ~6 MB.
|
|
53
54
|
|
|
54
55
|
TypeScript here erases types, it does not check them — a type error will not
|
|
55
56
|
stop your code running. This is a playground, not `tsc`.
|
|
56
57
|
|
|
58
|
+
### Java
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<code-playpad language="java" height="auto">
|
|
62
|
+
int visits = 0;
|
|
63
|
+
|
|
64
|
+
void main() {
|
|
65
|
+
greet("Ada");
|
|
66
|
+
IO.println("greeted " + visits + " people");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void greet(String name) {
|
|
70
|
+
visits++;
|
|
71
|
+
IO.println("Hello, " + name + "!");
|
|
72
|
+
}
|
|
73
|
+
</code-playpad>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Java runs on an engine written for code-playpad, not on a JVM. It covers a
|
|
77
|
+
documented subset of Java 25 and checks its behaviour against a real JDK 25:
|
|
78
|
+
|
|
79
|
+
- Java 25 **compact source files** and instance `main`, or a classic
|
|
80
|
+
`public class Main` with `public static void main(String[] args)`
|
|
81
|
+
- `int`, `char`, `boolean`, `String`; one-dimensional arrays; static and
|
|
82
|
+
instance methods with overloading and recursion; fields; `if`/`while`/`for`,
|
|
83
|
+
`break`/`continue`/`return`; `String.length()`/`charAt()`/`equals()`;
|
|
84
|
+
`System.out`/`System.err` and `IO.print`/`IO.println`
|
|
85
|
+
- **Errors read like the JDK's**: compile errors in javac's format, exceptions
|
|
86
|
+
with Java stack traces and the JDK's NullPointerException messages
|
|
87
|
+
|
|
88
|
+
Anything outside the subset — `long`/`double`, `?:`, `switch`, objects and
|
|
89
|
+
constructors, collections, `Scanner`, imports — is reported as *not supported in
|
|
90
|
+
this version* rather than run with a different meaning. The file is `Main.java`
|
|
91
|
+
unless `entry` says otherwise. The engine stops runaway programs after 200
|
|
92
|
+
million steps and explains why.
|
|
93
|
+
|
|
94
|
+
## Download size
|
|
95
|
+
|
|
96
|
+
What a page downloads once a reader presses Run, with the CDN build. Measured by
|
|
97
|
+
loading one-widget pages in a browser and gzipping each file the page fetched;
|
|
98
|
+
CDN downloads are what the CDN actually sent.
|
|
99
|
+
|
|
100
|
+
| Page uses | code-playpad (gzip) | Also fetched from a CDN at run time | 0.2.1 (gzip) |
|
|
101
|
+
| --- | --- | --- | --- |
|
|
102
|
+
| Python | **165.8 KB** | Pyodide, about **6.0 MB** (a 3.3 MB wasm file and a 2.4 MB standard library) | 165.2 KB |
|
|
103
|
+
| JavaScript | **179.9 KB** | nothing | 180.5 KB |
|
|
104
|
+
| TypeScript | **179.9 KB** | Sucrase, 72 KB (≈ 252 KB in total) | ≈ 252.6 KB |
|
|
105
|
+
| Java | **189.7 KB** | nothing | n/a |
|
|
106
|
+
| All four | 247.2 KB | Pyodide and Sucrase | n/a |
|
|
107
|
+
|
|
108
|
+
- **A shared base of 144 KB is in every row:** the editor (CodeMirror) and the
|
|
109
|
+
widget, the same as 0.2.1 within 0.6 KB.
|
|
110
|
+
- **Each language adds:** Python 21.7 KB; JavaScript/TypeScript 35.8 KB; Java
|
|
111
|
+
45.6 KB, which is the 26.5 KB engine plus 19 KB of Java syntax highlighting.
|
|
112
|
+
- **Languages load lazily.** A Java page never fetches the Python or JavaScript
|
|
113
|
+
runtimes, and Python and JavaScript pages never fetch Java, so adding Java left
|
|
114
|
+
Python-only and JavaScript-only pages the same size as in 0.2.1.
|
|
115
|
+
- **Java is the lightest to run:** it is self-contained, while Python's first run
|
|
116
|
+
is dominated by the roughly 6 MB Pyodide download (cached after that).
|
|
117
|
+
- **With npm and a bundler** you already ship CodeMirror yourself. code-playpad's
|
|
118
|
+
own code then costs about 9 KB, plus the runtime chunk for each language used;
|
|
119
|
+
Java's is 27 KB, plus `@codemirror/lang-java` if you install it.
|
|
120
|
+
|
|
57
121
|
## Install
|
|
58
122
|
|
|
59
123
|
### From a CDN — nothing to install
|
|
60
124
|
|
|
61
125
|
```html
|
|
62
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.
|
|
126
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/code-playpad@0.3.0"></script>
|
|
63
127
|
```
|
|
64
128
|
|
|
65
129
|
This is the `standalone` build: CodeMirror is bundled in, so a static blog post
|
|
@@ -76,8 +140,8 @@ npm install code-playpad @codemirror/state @codemirror/view @codemirror/commands
|
|
|
76
140
|
CodeMirror is a peer dependency so you never end up with two copies of
|
|
77
141
|
`@codemirror/state`. Language grammars are **optional** — install only what you
|
|
78
142
|
use (`@codemirror/lang-python`, `@codemirror/lang-javascript`,
|
|
79
|
-
`@codemirror/lang-json`); a missing one degrades to
|
|
80
|
-
throwing.
|
|
143
|
+
`@codemirror/lang-json`, `@codemirror/lang-java`); a missing one degrades to
|
|
144
|
+
plain text rather than throwing.
|
|
81
145
|
|
|
82
146
|
```js
|
|
83
147
|
import 'code-playpad/element'; // registers <code-playpad>
|
|
@@ -107,7 +171,7 @@ Next.js, Astro and SvelteKit need no dynamic import or `client:only` guard.
|
|
|
107
171
|
|
|
108
172
|
| | |
|
|
109
173
|
| --- | --- |
|
|
110
|
-
| `language` | `python` (default), `javascript`, `typescript` |
|
|
174
|
+
| `language` | `python` (default), `javascript`, `typescript`, `java` |
|
|
111
175
|
| `height` | number (px), any CSS length, or `auto` |
|
|
112
176
|
| `min-height` / `max-height` | bounds for `auto` |
|
|
113
177
|
| `theme` | `light`, `dark`, or `auto` (default — follows the OS) |
|
|
@@ -266,6 +330,8 @@ document.querySelector('code-playpad').stdin = 'Ada\n36';
|
|
|
266
330
|
Echoed input is display-only: `stdout` stays exactly what the program printed,
|
|
267
331
|
so graders are unaffected.
|
|
268
332
|
|
|
333
|
+
Java does not read input yet; `Scanner` over the input box is planned.
|
|
334
|
+
|
|
269
335
|
## Controlling it from JavaScript
|
|
270
336
|
|
|
271
337
|
```js
|
|
@@ -275,7 +341,7 @@ pad.code = 'print("set from outside")'; // replace the visible file
|
|
|
275
341
|
const source = pad.getCode(); // read it back
|
|
276
342
|
const result = await pad.run(); // { stdout, stderr?, value?, durationMs }
|
|
277
343
|
pad.reset(); // back to the snippet the page shipped
|
|
278
|
-
pad.stop(); //
|
|
344
|
+
pad.stop(); // stop this widget's run, queued or running
|
|
279
345
|
await pad.prewarm(); // boot the runtime before the reader runs anything
|
|
280
346
|
```
|
|
281
347
|
|
|
@@ -292,7 +358,7 @@ const everything = pad.getFiles(); // { name: contents }
|
|
|
292
358
|
```
|
|
293
359
|
|
|
294
360
|
`prewarm()` is worth calling when you know the reader is about to run something
|
|
295
|
-
— on a lesson page, for instance — so the ~
|
|
361
|
+
— on a lesson page, for instance — so the ~6 MB Python download starts before
|
|
296
362
|
they press Run rather than after.
|
|
297
363
|
|
|
298
364
|
## Events and grading
|
|
@@ -535,6 +601,8 @@ warms every other page on the site.
|
|
|
535
601
|
single-threaded, so a second widget waits for the first.
|
|
536
602
|
- **Runaway code cannot freeze the page.** Code runs in a Worker; **Stop**
|
|
537
603
|
terminates and reboots it. Runs queued behind the stopped one survive.
|
|
604
|
+
Stopping a widget that is still `Queued…` just takes it out of the queue —
|
|
605
|
+
whatever is running keeps running.
|
|
538
606
|
- **A program waiting on `input()` holds the shared runtime.** Other widgets
|
|
539
607
|
show `Queued…` until it finishes or is stopped.
|
|
540
608
|
- **Nothing boots on page load.** An IntersectionObserver starts a runtime as a
|
|
@@ -549,7 +617,40 @@ warms every other page on the site.
|
|
|
549
617
|
## Version history
|
|
550
618
|
|
|
551
619
|
No breaking changes so far: markup and API written against 0.1.3 still work on
|
|
552
|
-
0.
|
|
620
|
+
0.3.0.
|
|
621
|
+
|
|
622
|
+
### 0.3.0
|
|
623
|
+
|
|
624
|
+
- **`language="java"`**: a documented subset of Java 25 — see [Java](#java).
|
|
625
|
+
The engine is a ~27 KB (gzipped) chunk loaded only by pages with a Java
|
|
626
|
+
widget; Python and JavaScript pages download the same as in 0.2.1 (see
|
|
627
|
+
[Download size](#download-size)). `@codemirror/lang-java` is a new optional
|
|
628
|
+
peer dependency for its highlighting.
|
|
629
|
+
- **Fixed:** in JavaScript, a top-level `await` inside an expression
|
|
630
|
+
(`Number(await input())`) failed with `SyntaxError: missing ) after argument
|
|
631
|
+
list`; it only worked when the first `await` started a statement.
|
|
632
|
+
- A hint about something other than input (a runaway loop, say) no longer opens
|
|
633
|
+
the standard-input box; only "input() asked for a line…" does.
|
|
634
|
+
|
|
635
|
+
0.2.2 was never published; its fixes ship in 0.3.0:
|
|
636
|
+
|
|
637
|
+
- **Fixed:** pressing **Stop** on a widget still showing `Queued…` stopped a
|
|
638
|
+
*different* widget — whichever one was running — and the queued run then
|
|
639
|
+
went ahead anyway. Stop now cancels only the widget's own run: a queued run is
|
|
640
|
+
dropped without touching the worker, and only a run that is actually
|
|
641
|
+
executing kills and reboots it. `pad.stop()` on an idle widget no longer
|
|
642
|
+
affects anyone else.
|
|
643
|
+
- **Fixed:** stopping a run while the runtime was rebooting from an earlier
|
|
644
|
+
Stop could wedge the queue — every later run sat at `Queued…` forever.
|
|
645
|
+
- `Runtime.stop()` takes an optional argument: the promise `run()` returned,
|
|
646
|
+
to stop just that run. With no argument it behaves as before.
|
|
647
|
+
- **Fixed:** a line printed just before an infinite loop (`print("started")`
|
|
648
|
+
then `while True: pass`) never appeared — output batching held it back, and
|
|
649
|
+
the loop never let the worker send it. The first lines of any burst are now
|
|
650
|
+
sent immediately, in Python and JavaScript; large outputs are still batched.
|
|
651
|
+
- The JavaScript/TypeScript worker is now minified in `dist/` like the Python
|
|
652
|
+
one; it previously shipped as readable source, comments included. The
|
|
653
|
+
`javascript` chunk drops from about 12KB to about 7KB.
|
|
553
654
|
|
|
554
655
|
### 0.2.1
|
|
555
656
|
|
|
@@ -597,3 +698,8 @@ it, modify it. Bundled third-party components (CodeMirror 6, Lezer) remain under
|
|
|
597
698
|
their own MIT licences, reproduced in full in `dist/THIRD-PARTY-NOTICES.txt`.
|
|
598
699
|
Pyodide (MPL-2.0) is fetched from a CDN at runtime and is not redistributed by
|
|
599
700
|
this package.
|
|
701
|
+
|
|
702
|
+
The Java engine is original code under the same MIT licence. Java is a trademark
|
|
703
|
+
of Oracle and/or its affiliates; code-playpad is not affiliated with, endorsed
|
|
704
|
+
by, or certified by Oracle, and its Java support is a documented subset, not a
|
|
705
|
+
Java implementation.
|
|
@@ -53,6 +53,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
53
53
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
54
54
|
THE SOFTWARE.
|
|
55
55
|
|
|
56
|
+
==============================================================================
|
|
57
|
+
@codemirror/lang-java 6.0.2 — MIT
|
|
58
|
+
|
|
59
|
+
MIT License
|
|
60
|
+
|
|
61
|
+
Copyright (C) 2018-2021 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
|
|
62
|
+
|
|
63
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
64
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
65
|
+
in the Software without restriction, including without limitation the rights
|
|
66
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
67
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
68
|
+
furnished to do so, subject to the following conditions:
|
|
69
|
+
|
|
70
|
+
The above copyright notice and this permission notice shall be included in
|
|
71
|
+
all copies or substantial portions of the Software.
|
|
72
|
+
|
|
73
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
74
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
75
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
76
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
77
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
78
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
79
|
+
THE SOFTWARE.
|
|
80
|
+
|
|
56
81
|
==============================================================================
|
|
57
82
|
@codemirror/lang-javascript 6.2.5 — MIT
|
|
58
83
|
|
|
@@ -278,6 +303,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
278
303
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
279
304
|
THE SOFTWARE.
|
|
280
305
|
|
|
306
|
+
==============================================================================
|
|
307
|
+
@lezer/java 1.1.5 — MIT
|
|
308
|
+
|
|
309
|
+
MIT License
|
|
310
|
+
|
|
311
|
+
Copyright (C) 2020 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
|
|
312
|
+
|
|
313
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
314
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
315
|
+
in the Software without restriction, including without limitation the rights
|
|
316
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
317
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
318
|
+
furnished to do so, subject to the following conditions:
|
|
319
|
+
|
|
320
|
+
The above copyright notice and this permission notice shall be included in
|
|
321
|
+
all copies or substantial portions of the Software.
|
|
322
|
+
|
|
323
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
324
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
325
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
326
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
327
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
328
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
329
|
+
THE SOFTWARE.
|
|
330
|
+
|
|
281
331
|
==============================================================================
|
|
282
332
|
@lezer/javascript 1.5.4 — MIT
|
|
283
333
|
|
package/dist/config-DZqcFPEP.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* code-playpad — MIT © 2026 Seung Hun Lee
|
|
3
|
+
* Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
|
|
4
|
+
* Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
|
|
5
|
+
*/
|
|
1
6
|
var e=`314.0.5`,t=`https://cdn.jsdelivr.net/pyodide/v${e}/full/`,n=`https://esm.sh/sucrase@3.35.1?bundle`;function r(e){t=e.indexURL.endsWith(`/`)?e.indexURL:e.indexURL+`/`}function i(e){n=e.sucraseURL}function a(){return t}function o(){return n}function s(){return[{url:t+`pyodide.js`,as:`script`},{url:t+`pyodide.asm.wasm`,as:`fetch`},{url:t+`python_stdlib.zip`,as:`fetch`}]}export{o as a,a as i,r as n,s as o,i as r,e as t};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* code-playpad — MIT © 2026 Seung Hun Lee
|
|
3
|
+
* Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
|
|
4
|
+
* Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
|
|
5
|
+
*/
|
|
6
|
+
import{LRLanguage as e,LanguageSupport as t,continuedIndent as n,delimitedIndent as r,flatIndent as i,foldInside as a,foldNodeProp as o,indentNodeProp as s,n as c,t as l}from"./dist-D0FPZcUi.js";import{r as u}from"./dist-B5vq9x6M.js";var d=l({null:c.null,instanceof:c.operatorKeyword,this:c.self,"new super assert open to with void":c.keyword,"class interface extends implements enum var":c.definitionKeyword,"module package import":c.moduleKeyword,"switch while for if else case default do break continue return try catch finally throw":c.controlKeyword,"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws":c.modifier,IntegerLiteral:c.integer,FloatingPointLiteral:c.float,"StringLiteral TextBlock":c.string,CharacterLiteral:c.character,LineComment:c.lineComment,BlockComment:c.blockComment,BooleanLiteral:c.bool,PrimitiveType:c.standard(c.typeName),TypeName:c.typeName,Identifier:c.variableName,"MethodName/Identifier":c.function(c.variableName),Definition:c.definition(c.variableName),ArithOp:c.arithmeticOperator,LogicOp:c.logicOperator,BitOp:c.bitwiseOperator,CompareOp:c.compareOperator,AssignOp:c.definitionOperator,UpdateOp:c.updateOperator,Asterisk:c.punctuation,Label:c.labelName,"( )":c.paren,"[ ]":c.squareBracket,"{ }":c.brace,".":c.derefOperator,", ;":c.separator}),f={__proto__:null,void:34,byte:36,short:36,int:36,long:36,char:36,float:36,double:36,boolean:36,extends:50,super:52,this:64,public:70,protected:72,private:74,abstract:76,static:78,final:80,strictfp:82,default:84,synchronized:86,native:88,transient:90,volatile:92,sealed:95,non:97,instanceof:140,true:158,false:158,null:166,class:170,new:176,throws:196,implements:204,permits:211,record:215,interface:226,enum:236,open:289,module:291,requires:296,transitive:298,exports:300,to:302,opens:304,uses:306,provides:308,with:310,package:314,import:318,if:330,else:332,while:336,for:340,var:347,assert:354,switch:358,case:366,throw:370,do:374,break:378,continue:382,return:386,try:392,catch:396,finally:404},p=u.deserialize({version:14,states:"#5QQ]QPOOQ%QQPOOO(wQQO'#HlO+OQQO'#CbOOQO'#Cb'#CbO+VQPO'#CaOOQO'#Co'#CoO,{QPO'#DOO-iQQO'#HvOOQO'#Hv'#HvO0^QQO'#HqO0eQQO'#HqOOQO'#Hq'#HqOOQO'#Hp'#HpOOQO'#Hz'#HzO0lQPO'#GwO2`QPO'#DOO2gQPO'#CkO4vQPO'#DfO4}QPO'#CiO6ZQQO'#FsO6bQPO'#DyO7rOSO'#EQOOQO'#IW'#IWO+VQPO'#EzO8iQPO'#EzOOQO'#EV'#EVO:QQQO'#ITO<OQQO'#FUO<iQPO'#FTO<nQPO'#FVOOQO'#IV'#IVO6bQPO'#FYOOQO'#IT'#ITOOQO'#Ho'#HoOOQO'#Hh'#HhOOQO'#Gt'#GtOOQO'#Hg'#HgO<sQPO'#FtOOQO'#Hf'#HfOOQO'#Gs'#GsQ]QPOOO<xQWO'#H{O>nQPO'#HzO>uQPO'#EcO>uQPO'#EjO>uQPO'#EuO>uQPO'#EpO>}QPO'#I[O?cQQO'#FRO+VQPO'#C`O?kQPO'#C`O+VQPO'#FnO?pQPO'#FpO@OQPO'#FvO@OQPO'#FyO>uQPO'#GOO@TQPO'#F{O6bQPO'#GSO6bQPO'#G[O@OQPO'#GUO]QPO'#G^O@YQPO'#G`O@eQPO'#GbO@pQPO'#GdO@wQPO'#GgOAeQQO'#CjOBTQQO'#CjOB_QPO'#I`OCzQPO'#DOODbQPO'#E]OBbQPO'#E^OESQPO'#I`OEeQPO'#E]OEmQPO'#IhOErQPO'#FOOOQO'#I^'#I^OOQO'#G}'#G}Q%QQPOOOGhQPO'#HzOOQO'#Hl'#HlOHZQQO,58{OOQO'#Hj'#HjOOQO'#Hr'#HrOJtQPO,59_OLSQPO,59jOOQO-E:r-E:rO+VQPO,58zOLyQPO,58zO+VQPO,5<YOOQO'#Cj'#CjOMOQPO'#CzOMTQPO'#CzOOQO'#Gv'#GvONTQQO,59dO! xQPO'#H}O!!SQPO'#D`O!!bQPO'#I_O!!jQPO,5<jO!!oQPO,5:nO!#YQPO'#CrOOQO,59],59]O!#aQPO,59[O!#lQPO,5=cOOQO-E:u-E:uO!%`QQO'#HlO!'bQQO'#CbO!)dQPO'#DOO!*YQQO'#HvO!*jQPO'#C}O!*xQPO'#HyO!+QQPO,59VO!+VQPO,59VO!+mQPO'#IRO!+xQPO,5:PO!+}QQO,5:pO!,UQPO,5;wOOQO,5:Q,5:QO!,aQPO,5:QO!,hQPO,59TOOQO'#Dj'#DjOOQO'#Dm'#DmO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:RO6bQPO,5:bOOQO,5:e,5:eOOQO,5<_,5<_O!,oQPO,5:_O6bQPO,5;xO!-SQPO'#CsO!-eQQO'#HvOOOO'#G{'#G{O!-sOSO,5:lOOQO,5:l,5:lO!-{QPO,5;fOB_QPO,5<jO+VQPO,5;fO>uQPO,5:}O>uQPO,5;UO>uQPO,5;aO>uQPO,5;[O>uQPO,5<jO!.cQPO,5:qO6bQPO,5;nO!.jQPO,5;qO!.xQPO'#EXOOQO,5;o,5;oO!/PQQO,5;tO]QPO,5<`OOQO-E:q-E:qO!0mQPO,5>gO6bQPO'#EUO@zQPO,5=QO!0rQPO,5:}O!1TQPO,5;UO!1]QPO,5;aO!1eQPO,5;[O!-SQPO,5>vO!1sQPO,5>vO!-SQPO,5>vO!2OQPO,5;mO!2aQQO,58zO!2iQQO,5<YO!2qQQO,5<[O+VQPO,5<[O+VQPO,5<[O]QPO,5<bO]QPO,5<eO!2yQPO'#F}O]QPO,5<gO]QPO,5<lO!4PQQO,5<nO!4ZQQO,5<vO!4bQPO,5<pO!4gQPO,5<xOOQO'#Fu'#FuOOQO,5<z,5<zO!4lQPO,5<zOOQO,5<|,5<|O!4qQPO,5<|O!4vQQO,5=OOOQO,5=O,5=OO!4}QPO'#GpO!6TQPO,5=RO@zQPO,5=ZO!:_QPO,59dO!:oQPO'#H}O!:vQPO,5:vO!:{QPO,5>zOB_QPO,5:vO!;WQPO,5:wOErQPO,5;jO!;`QPO'#E_OBbQPO'#E_O!;kQPO'#IaO!;sQPO,5:xOB_QPO,5>zO!-SQPO,5>zOEmQPO,5?SOOQO,5:w,5:wO!+VQPO'#CkOOQO,5?S,5?SO!?pQPO'#FPOOQO,5;j,5;jO!?wQPO,5;jO!-SQPO'#EaOOQO-E:{-E:{OOQO,5;i,5;iO+VQPO,58}O!?|QPO'#ChOOQO1G.k1G.kO!2aQQO1G.fO+VQPO1G.fO!@WQQO1G1tOOQO,59f,59fO!@`QPO,59fOOQO-E:t-E:tO!@eQPO,5>iO!@|QPO,59zO>uQPO'#HOO!ATQPO,5>yOOQO1G2U1G2UOOQO1G0Y1G0YO!AnQPO'#CsO!B^QPO'#HvO!BkQPO'#CtO!ByQPO'#HuO!CRQPO,59^OOQO1G.v1G.vO!#aQPO1G.vO!CiQPO,59_O!CvQQO'#HlO!DXQQO'#CbO!DjQPO,59yOOQO,59i,59iO>uQPO,59yOOQO,59W,59WO!DuQQO,59WO!DzQPO,59iO!,oQPO'#GyO!E]QPO,5>eOOQO1G.q1G.qO!EeQPO'#C}O!EvQPO1G.qO>uQPO'#GzO!E{QPO,5>mOOQO1G/k1G/kOOQO1G0[1G0[O!-SQPO'#HPO!FTQPO1G1cO6bQPO1G1cOOQO1G/l1G/lO!F]QQO1G.oOOQO1G.o1G.oO!HZQQO1G/mO!IxQQO1G/mO!KgQQO1G/mO!KnQQO1G/mO!KuQQO1G/mO!MdQQO1G/mO!MkQQO1G/mO# YQQO1G/mO# aQQO1G/mO# kQQO1G/mO# rQQO1G/|O!)dQPO'#DOO# yQQO'#HvO!*jQPO'#DuOOQO1G/y1G/yO##`QQO1G1dOOOO-E:y-E:yOOQO1G0W1G0WO##vQPO'#E{OOQO1G1Q1G1QO#$jQPO1G2UO!-{QPO1G1QO!0rQPO1G0iO!1TQPO1G0pO!1]QPO1G0{O!1eQPO1G0vOOQO1G0]1G0]O#$oQQO1G1XO<iQPO1G1ZO+VQPO1G1ZO>}QPO'#I[OOQO1G1X1G1XO#&iQQO1G1XO#&qQQO1G1YOOQO1G1]1G1]O#&xQPO1G1]O#'TQQO'#I]O#'bQPO,5:sOOQO1G1z1G1zOOQO1G4R1G4ROOQO1G2l1G2lO#'gQPO'#EYO!-SQPO'#EdO!-SQPO'#EeO!-SQPO'#EhOOQO1G0i1G0iO#'nQPO1G0iO#'sQPO1G0iO#'{QPO1G0iO#(WQPO1G0iO#(fQPO'#ElO#(|QPO1G0pO#)UQPO1G0pO#)ZQPO'#EwOOQO1G0{1G0{O#)nQPO1G0{O#)sQPO'#EsO!-SQPO'#ErOOQO1G0v1G0vO#*pQPO1G0vO#*uQPO1G0vO#*}QPO1G0vO!1sQPO1G4bO#+YQPO'#FXO#+aQPO'#FXOOQO'#HX'#HXO#+iQQO1G1^O#-fQQO1G4bO!-SQPO1G4bO<iQPO1G4bO#/`QQO1G1XO#/vQPO'#FdOOQO1G.f1G.fOOQO1G1t1G1tO#/}QPO1G1vOOQO1G1v1G1vO#0YQQO1G1vO#0bQQO1G1vO#0jQPO1G1|OOQO1G2P1G2PO-iQQO,5<mO#4nQPO,5<mO#5PQPO,5<iO#5WQPO,5<iOOQO1G2R1G2ROOQO1G2W1G2WOOQO1G2Y1G2YO6bQPO1G2YOOQO1G2b1G2bO#9TQPO'#GWOOQO1G2[1G2[O@OQPO1G2dOOQO1G2f1G2fOOQO1G2h1G2hOOQO1G2j1G2jO#9[QQO'#HlO#9uQQO'#CbO-iQQO'#HvO#:`QQOOO#:|QQO'#FUO#:kQQO'#IVO!*jQPO'#GqO#;TQPO,5=[OOQO'#H`'#H`O#;]QPO1G2mO#?gQPO'#GiO@zQPO'#GmOOQO1G2m1G2mO#?lQPO1G2uO#CvQPO,5>|OOQO1G0b1G0bOOQO1G4f1G4fO#DXQPO1G0bOOQO1G0c1G0cOOQO1G1U1G1UO!?wQPO1G1UOOQO,5:y,5:yO!-SQPO'#E`O#D^QPO,5:yOBbQPO'#HQO#DiQPO,5>{OOQO1G0d1G0dOEmQPO'#IbO#DqQPO1G4fOB_QPO1G4fOOQO1G4n1G4nO!)tQPO'#C}O!)dQPO'#DOOOQO,5;k,5;kO#D|QPO,5;kO#ETQPO,5;kO#E[QQO'#ITO#EcQQO'#IVO#EjQQO'#FQO#EuQPO'#FQO#E}QPO'#IcOOQO,5:{,5:{OOQO1G.i1G.iO#F]QQO'#HnO#FmQQO'#FUO#HTQPO'#F`OOQO'#Hn'#HnO#H_QPO'#HnO#H|QPO'#IkO#IUQPO,59SOOQO7+$Q7+$QO!2aQQO7+$QOOQO7+'`7+'`OOQO1G/Q1G/QO#IZQPO'#DdO#IeQQO'#IPOOQO'#IP'#IPOOQO1G/f1G/fOOQO,5=j,5=jOOQO-E:|-E:|O#IuQWO,58{O#I|QPO,59`OOQO,59`,59`O!-SQPO'#HxO!!tQPO'#GuO#J[QPO,5>aOOQO1G.x1G.xOOQO7+$b7+$bOOQO1G.r1G.rO#JdQQO1G.rO>uQPO1G/eOOQO1G/e1G/eO#JiQPO1G.rO#JnQPO1G/eOOQO1G/T1G/TOOQO,5=e,5=eOOQO-E:w-E:wOOQO7+$]7+$]OOQO,5=f,5=fOOQO-E:x-E:xOOQO,5=k,5=kOOQO-E:}-E:}O6bQPO7+&}O#JyQQO7+&}O6bQPO7+%hO#LgQQO,59_OOQO,5:a,5:aOB_QPO,5:aO#MvQPO'#EtO#NUQPO'#EtOOQO'#HW'#HWO#NpQPO,5;gOOQO,5;g,5;gOOQO7+'p7+'pOOQO7+&l7+&lOOQO7+&T7+&TO#'nQPO7+&TO#'sQPO7+&TO#'{QPO7+&TO#(WQPO7+&TO#(|QPO7+&[O#)UQPO7+&[OOQO7+&g7+&gO#)nQPO7+&gOOQO7+&b7+&bO#*pQPO7+&bO#*uQPO7+&bO#*}QPO7+&bOOQO7+&u7+&uOOQO'#FU'#FUO<iQPO7+&uO!-SQPO,5>vO<iQPO,5>vO$ dQPO7+&sO$ rQPO7+&wOOQO7+&t7+&tOOQO7+&w7+&wO6bQPO'#G|O$!QQPO,5>wOOQO1G0_1G0_O$!]QPO,5:tOOQO,5:t,5:tOOQO,5;O,5;OOOQO'#Eg'#EgOOQO,5;P,5;POOQO,5;S,5;SO$!dQPO'#EmO!*jQPO'#EmO$!uQPO'#IdO$!}QPO,5;WO$#SQPO'#EnOOQO7+&[7+&[O$#ZQPO7+&[O$#`QPO'#ExO>uQPO'#ExO$#qQPO'#IfO$#|QPO,5;cOB_QPO'#I`O!-SQPO'#I`O$$UQPO'#E]OOQO'#HU'#HUO$$]QPO,5;_OOQO,5;_,5;_OOQO,5;^,5;^O$%YQQO7+&xO$'VQQO7+)|O$)PQQO,5;sOOQO,5;s,5;sO$)WQPO,5;sOOQO-E;V-E;VOOQO7+&x7+&xOOQO7+)|7+)|O<iQPO7+)|OOQO'#H['#H[O$)_QPO,5<OOOQO,5<O,5<OO$)fQPO'#FeO+VQPO'#FeO+VQPO'#FeO+VQPO'#FeO$)tQPO7+'bOOQO7+'b7+'bO$)yQPO7+'bO]QPO7+'hO$*UQPO1G2XOB_QPO1G2XO$*dQQO1G2TO!.xQPO1G2TO$*kQPO1G2TO$*rQQO7+'tO$*yQPO'#H_OOQO'#H_'#H_O$+RQPO,5<rOOQO,5<r,5<rO$+YQPO'#HzO$+dQPO'#GYO$,tQPO7+(OO$,yQPO,5=]OB_QPO,5=]O$-OQPO1G2vO$.XQPO1G2vOOQO1G2v1G2vOOQO-E;^-E;^OOQO7+(X7+(XO!,oQPO'#GkO@zQPO,5=TOOQO,5=X,5=XO$.aQPO7+(aOOQO7+(a7+(aO$2kQPO1G4hOOQO7+%|7+%|OOQO7+&p7+&pO$2|QPO,5:zOOQO1G0e1G0eOOQO,5=l,5=lOOQO-E;O-E;OOOQO7+*Q7+*QO$3XQPO7+*QO!CWQPO,59WOOQO1G1V1G1VO$3dQPO1G1VO$3dQPO1G1VO$3kQPO,5:qO$3rQPO,5;lO<iQPO,5;lO!-SQPO'#HRO$3wQPO,5>}O$4VQPO,5;{O$4^QPO'#IjO$4fQPO,5;zO+VQPO'#HZO$4kQPO,5?VOOQO1G.n1G.nOOQO<<Gl<<GlO$4sQPO'#IQO$4{QPO,5:OOOQO1G.z1G.zOOQO,5>d,5>dOOQO,5=a,5=aOOQO-E:s-E:sO$5QQPO7+$^OOQO7+%P7+%POOQO7+$^7+$^O>uQPO7+%PO$5VQQO<<JiO$7tQQO<<ISOOQO1G/{1G/{O$8sQPO'#HlO$8zQPO'#CbO$9RQPO,5;`O$9WQPO,5;hO#MvQPO,5;`OOQO-E;U-E;UOOQO1G1R1G1ROOQO<<Io<<IoO#'nQPO<<IoO#'sQPO<<IoO#'{QPO<<IoOOQO<<Iv<<IvO$#ZQPO<<IvO#(|QPO<<IvOOQO<<JR<<JROOQO<<I|<<I|O#*pQPO<<I|O#*uQPO<<I|OOQO<<Ja<<JaO$9]QQO<<J_OOQO<<J_<<J_O<iQPO<<JaO+VQPO<<JaOOQO<<Jc<<JcO$;VQPO<<JcO$;bQQO,5=hOOQO-E:z-E:zOOQO1G0`1G0`O$;oQPO,5;XO>uQPO,5;XOOQO,5;X,5;XO$;zQPO,5;XO!,oQPO'#HSO$<]QPO,5?OOOQO1G0r1G0rODbQPO'#E]O$<eQPO'#EoOOQO'#Ie'#IeOOQO'#HT'#HTO$<mQPO,5;YOOQO,5;Y,5;YOOQO,5;d,5;dO$<tQPO,5;dO$=SQPO,5;dO$=eQPO'#HVO$={QPO,5?QO$>WQPO'#EyOOQO1G0}1G0}O$>_QPO1G0}OB_QPO,5;`OOQO-E;S-E;SOOQO1G0y1G0yOOQO<<Jd<<JdOOQO<<Mh<<MhOOQO1G1_1G1_O$>dQQO1G1_O$>kQQO<<MhOOQO-E;Y-E;YOOQO1G1j1G1jO$@eQQO,5<POOQO'#H]'#H]O$)fQPO,5<POOQO'#Il'#IlO$@mQQO,5<PO$AOQQO,5<POOQO<<J|<<J|O$AWQPO<<J|OOQO<<KS<<KSO6bQPO7+'sO$A]QPO7+'sO!.xQPO7+'oO$AkQPO7+'oO$ApQQO7+'oOOQO<<K`<<K`O$AwQPO,5<sOOQO,5=y,5=yOOQO-E;]-E;]OOQO1G2^1G2^O$CYQQO'#IoOOQO,5<t,5<tOOQO<<Kj<<KjO6bQPO1G2wO$CgQPO1G2wOOQO,5=|,5=|OOQO7+(b7+(bO$ClQPO7+(bOOQO-E;`-E;`O$EZQWO'#HqO$DuQWO'#HqO$EbQPO'#GlO>uQPO,5=VO!*jQPO,5=VOOQO1G2o1G2oOOQO<<K{<<K{O$EsQPO1G0fOOQO<<Ml<<MlOOQO7+&q7+&qO$FOQPO7+&qO$FVQPO1G1ZO$FbQQO1G1WOOQO1G1W1G1WO$FmQPO1G1WOOQO,5=m,5=mOOQO-E;P-E;POOQO1G1g1G1gO$FrQPO'#HYO$GPQPO,5?UOOQO1G1f1G1fO$GXQPO'#FaOOQO,5=u,5=uOOQO-E;X-E;XO$G^QPO'#GxO$GkQPO,5>lOOQO1G/j1G/jOOQO<<Gx<<GxOOQO<<Hk<<HkOOQO1G0z1G0zO$GsQPO1G1SO$GxQPO1G0zO$G}QPO1G1SOOQOAN?ZAN?ZO#'nQPOAN?ZO#'sQPOAN?ZOOQOAN?bAN?bO$#ZQPOAN?bOOQOAN?hAN?hO#*pQPOAN?hOOQOAN?{AN?{O<iQPOAN?{OOQOAN?}AN?}O>uQPO1G0sOOQO1G0s1G0sO$HSQPO1G0sOOQO,5=n,5=nOOQO-E;Q-E;QO$<eQPO,5;ZOOQO,5;Z,5;ZOOQO-E;R-E;ROOQO1G0t1G0tOOQO1G1O1G1OO$H_QPO1G1OOOQO,5=q,5=qOOQO-E;T-E;TO$HmQPO,5;eOOQO7+&i7+&iOOQO7+&y7+&yOOQOANCSANCSOOQO1G1k1G1kO$HtQQO1G1kOOQO-E;Z-E;ZO$H|QQO'#ImO$HwQPO1G1kO$@sQPO1G1kO+VQPO1G1kOOQOAN@hAN@hO$IXQQO<<K_O6bQPO<<K_O$I`QPO<<KZOOQO<<KZ<<KZO!.xQPO<<KZOOQO1G2_1G2_O$IeQPO,5?ZO$IpQQO7+(cO6bQPO7+(cOOQO<<K|<<K|P!4}QPO'#HbO!-SQPO'#HaO$IzQPO,5=WO$JVQPO1G2qO>uQPO1G2qOOQO<<J]<<J]O<iQPO7+&rO$J[QPO7+&rOOQO7+&r7+&rOOQO,5=t,5=tOOQO-E;W-E;WOOQO,5=d,5=dOOQO-E:v-E:vO$JaQPO7+&nOOQO7+&f7+&fO$JoQPO7+&nOOQOG24uG24uO#'nQPOG24uOOQOG24|G24|OOQOG25SG25SOOQOG25gG25gOOQO7+&_7+&_O>uQPO7+&_OOQO1G0u1G0uOOQO7+&j7+&jOOQO7+'V7+'VO+VQPO'#H^O$JtQPO,5?XO$J|QPO7+'VO$KRQQO'#InOOQOAN@yAN@yO$K^QQOAN@yOOQOAN@uAN@uO$KeQPOAN@uO$KjQQO<<K}O$KtQPO,5={O!-SQPO,5={OOQO-E;_-E;_OOQO7+(]7+(]O$LVQPO7+(]O$L[QPO<<J^OOQO<<J^<<J^O$LaQPO<<JYOOQO<<JY<<JYO$4VQPO<<JYO$LaQPO<<JYOOQOLD*aLD*aOOQO<<Iy<<IyO$LoQQO,5=xOOQO-E;[-E;[OOQO<<Jq<<JqO$LzQPO,5?YOOQOG26eG26eOOQOG26aG26aO$MSQPO1G3gOOQO<<Kw<<KwOOQOAN?xAN?xOOQOAN?tAN?tO$4VQPOAN?tO$MeQPOAN?tO$MjQPOAN?tO$MxQPOG25`OOQOG25`G25`O$4VQPOG25`OOQOLD*zLD*zO$M}QPOLD*zOOQO!$'Nf!$'NfO+VQPO'#CaO$NSQQO'#HlO$NgQQO'#HlO%!gQQO'#CbO%!zQQO'#CbO%$zQPO,59TO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5:RO$+dQPO,5;xO$+dQPO1G1cO%%RQQO1G.oO%&mQQO1G/mO%(RQQO1G/mO%)gQQO1G/mO%)nQQO1G/mO%)uQQO1G/mO%+ZQQO1G/mO%+bQQO1G/mO%,vQQO1G/mO%,}QQO1G/mO%-UQPO'#DOO%-iQQO1G1dO$+dQPO7+&}O$+dQPO7+%hO$+dQPO'#G|O%.wQQO<<ISO%/[QQO,5=hO%/iQPO'#CiO$+dQPO'#DyO$+dQPO'#FYO%/nQPO,5;wO%/yQPO1G1cO%0RQQO1G/|O2gQPO'#CkO6bQPO,5:b",stateData:"%0d~OPOSQOS&XOS~OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&|fO'ZhO~Oa[Ob[Os^Ot^Ou^Ov^Ow!qOx^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO!VbO!w|O!}!nO#_}O#e!PO#j!OO&]TO&_!dO&a!eO&h!iO'ZhO~OWcXW&`XZ&`XocXo&`X!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!n&`X!}&`X$R&`X&]cX&_cX&acX&g&`X&hcX&h&`X&v^X&x&`X']cX']&`X~O!l$iX~P&wOWUXW&fXZUXoUXo&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!nUX!}UX$RUX&]&fX&_&fX&a&fX&gUX&hUX&h&fX&v^X&xUX']UX']&fX~O!l$iX~P)OO&_SO&a!rO~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzOarXbrX!wrX#_rX#erX#jrX$srX&_rX&arX'ZrX~Oa[Ob[O$U!zO$V!yO$c!{O&]TO&_!uO&aUO~P+_OW#VOo!}O&]TO&_!|O&a!|O']&jX~OW#YOo&eX&]&eX&_&eX&a&eX']&eXY&eXp&eX&r&eX&x&eXZ&eXk&eX&g&eX!T&eX![&eX!]&eX!_&eX!`&eX!b&eX!c&eX!d&eX!e&eX!f&eX!h&eX!k&eX!n&eX!}&eX$R&eX!V&eX#Y&eX#]&eX!l&eXm&eX!U&eX&v&eX~O&h#WO~P-}O&h&eX~P-}O&]TOa%kXb%kXs%kXt%kXu%kXv%kXw%kXx%kXy%kXz%kX{%kX|%kX}%kX!O%kX!P%kX!Q%kX!w%kX#_%kX#e%kX#j%kX$s%kX&_%kX&a%kX'Z%kX&h%kX~O&hrX~P+_OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}pO$OpO&]TO&_#^O&a#]O&|fOY&mP~O!U#iO~P]O&v#kO~O!T#|O![#nO!]#oO!_#pO!`#qO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!k#xO!n#yO$R#|O&g#lO&h#lO&x#mO~O!}#zO~P5SOZaOa[Ob[Oj!ROpoO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}pO$OpO&]TO&_2uO&a2sO&|fO~O&{$RO&}$PO~Oa[Ob[O!w$VO#_$WO#e$YO#j$XO&_!uO&aUO'Z$UO~O$s$ZO~P7zOo$]O']$^O!T&wX![&wX!]&wX!_&wX!`&wX!b&wX!c&wX!d&wX!e&wX!f&wX!h&wX!k&wX!n&wX!}&wX$R&wX&g&wX&h&wX&x&wX~OW$[OY&wX!l&wXm&wXk&wX!U&wX&v&wX~P8pOW&yXo&yX!T&yX![&yX!]&yX!_&yX!`&yX!b&yX!c&yX!d&yX!e&yX!f&yX!h&yX!k&yX!n&yX!}&yX$R&yX&g&yX&h&yX&x&yX']&yX~OZ#xXY&yX!l&yXm&yXk&yX!U&yX&v&yX~P:kOZ$_O~O']$^O~O!l$bO~O&p$dO~Oa&nXb&nXs&nXt&nXu&nXv&nXw&nXx&nXy&nXz&nX{&nX|&nX}&nX!O&nX!P&nX!Q&nX!w&nX#_&nX#e&nX#j&nX$s&nX&]&nX&_&nX&a&nX'Z&nX~OZ$eO~P<}O&_!|O&a!|O~Oa[Ob[O&]TO&_!uO&aUO&h#WO~OW$nO']$^O~O$V!yO~Ow$sO$V$rO&_SO&a!rO~OZ$eO~OZ$vO~O!}%OO&_$}O&a$}O~O!}%QO&_$}O&a$}O~O!}%TO~P6bOZ%UO!VbO~OW&fXo&fX&]&fX&_&fX&a&fX&h&fX~OZ^X!V^X~PAPOWcXocX&]cX&_cX&acX&hcX~OZ^X!V^X~PAoOo!}O&]TO&_!|O&a!|O~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO&]TOarXbrX&_rX&arX~O!wrX#_rX#erX#jrX&hrX'ZrX~PBmOa[Ob[O!w$VO#_$WO#e$YO#j$XO&_!dO&a!eO&h!iO'Z$UO~Oa[Ob[O&]TO&_!dO&a!eO~O!VbO!}%gO~OZ%hO~O!V%jO#U%mO~Oa&nXb&nXs&nXt&nXu&nXv&nXw&nXx&nXy&nXz&nX{&nX|&nX}&nX!O&nX!P&nX!Q&nX!w&nX#_&nX#e&nX#j&nX&]&nX&_&nX&a&nX'Z&nX~O!VbO&h&nX~PEzOW%pOZ%qOaTabTa&]Ta&_Ta&aTa~OsTatTauTavTawTaxTayTazTa{Ta|Ta}Ta!OTa!PTa!QTa!wTa#_Ta#eTa#jTa$UTa$VTa$cTa$sTa'ZTa&hTaoTa&rTaYTakTa!UTa!}Ta~PGrOo!}O&]TOkga&ggaYga&xga!}ga~O']ga!Vga#Yga#]ga~PJ]Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO~Oarabra!wra#_ra#era#jra$sra&_ra&ara'Zra&hra~PKUO$V%tO~Om%vO~Oo%wO&]TO~Oo!}O&]la&_la&ala']laYlapla&rla&xla!}la&glakla~OWla!Tla![la!]la!_la!`la!bla!cla!dla!ela!fla!hla!kla!nla$Rla&hla!llamla!Ula&vla~PM]Oo!}O&]TOk&qX!T&qX!}&qX~OY&qX!l&qX~P! gO!T%zOk!SX!}!SXY!SX~Ok%{O!}'RX~O!}%}O~O!w&OO~Oa[Ob[O&]2rO&_!uO&aUO&k&RO~O&g&iP~P!!tO&]TO&_!uO&aUO~O&]TOa%kab%kas%kat%kau%kav%kaw%kax%kay%kaz%ka{%ka|%ka}%ka!O%ka!P%ka!Q%ka!w%ka#_%ka#e%ka#j%ka$s%ka&_%ka&a%ka'Z%ka&h%ka~OW&`XY^XYcXY&`XZ&`Xk^Xo&`XpcX!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!n&`X$R&`X&g&`X&h&`X&rcX&v^X&xcX&x&`X']cX']&`X~PAoOWUXYUXY^XY&fXZUXk^XoUXp&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!nUX$RUX&gUX&hUX&r&fX&v^X&xUX&x&fX']UX']&fX~PAPOa[Ob[O&_!uO&aUO~PBmOo!}Op&^O&]TO&_&YO&a&XO&r&]O~OW#VOY&jX&x&jX']&jX~P!)tOa[Ob[O&_!uO&aUO~Ok&aOY&mX~OY&cO~Oa[Ob[O&]TO&_!uO&aUOY&mP~PKUOk&fO&v#kOY&uX~OY&hO~OY&iO~P5SOY&lO&x&jO']$^O~O!U&mO~P]O!VbO~P6bOa[Ob[O&]TO&_!uO&aUO~PKUOa[Ob[O&]TO&_!uO&aUO~OW#VOo!}O&]TO']&jX~O&{'RO&}$PO~O!V'SO~Op'aO!z'`O&_SO&a!rO&h#WO~Oj'bO~P!.QO!z'dO&_SO&a!rO&h#WO~OY'PP~P6bO!n#yO!T#|a![#|a!]#|a!_#|a!`#|a!b#|a!c#|a!d#|a!e#|a!f#|a!h#|a!k#|a!}#|a$R#|a&g#|a&h#|a&x#|aY#|a!l#|am#|ak#|a!U#|a&v#|a~O!P'iO~Oi'lO!V'kO#Y'mO#]'nO&h!iO~OZ'tO&h!iO~O!V'wO#Y'mO~Oi'{O!V'zO#]'nO&h!iO~OZ$_Oo(RO&]TO~Oj(YOp'aO&_SO&a!rO&h#WO~OW%pO!V(ZO~OW%pO!}(]O~OW(^O!}(_O~Os^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{^O|^O}^O!O^O!P^O!QzO$s!YO!}'PP~P6bO!l(kO!}(jO~P5SO!}(lO~P5SO!V(mO~O$n(oO~O!}(pO~O!}(qO~O!}(rO~P5SOZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUO%^(}O%b)OOZ%Zaa%Zab%Zaj%Zap%Zas%Zat%Zau%Zav%Zaw%Zax%Zay%Zaz%Za{%Za|%Za}%Za!O%Za!P%Za!Q%Za!V%Za!d%Za!n%Za!o%Za!p%Za!q%Za!r%Za!s%Za!u%Za!w%Za!z%Za!}%Za#_%Za#e%Za#j%Za#}%Za$O%Za$U%Za$V%Za$c%Za$e%Za$k%Za$n%Za$p%Za$s%Za$w%Za$y%Za%P%Za%R%Za%T%Za%V%Za%X%Za%[%Za&V%Za&]%Za&_%Za&a%Za&|%Za'Z%Za!U%Za$l%Za&h%Za$}%Za~O!Vla#Yla#]la'dla~PM]OZ%hO~P! gO!})SO~O#U%mO!V'Sa!}'Sa~O!VbO!})VO~Oi)ZOk#RX&g#RX~Ok)]O&g'TX~O&g)_O~OZaOa[Ob[Oj)kOp)jOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz^O{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&h#WO&|fO'ZhO~O!U)fO~P!;xO!V%jO~O!V)rOY'_P~P6bOW%pO!})yO~Om)zO~Oo!}O&]TOk&qa!T&qa!}&qaY&qa!l&qa~O!V){O~P6bOk%{O!}'Ra~Oa[Ob[O&]2rO&_!uO&aUO~O&k*SO~P!A]Oo!}O&]TOk&jX&g&jXY&jX&x&jX!}&jX~O!V&jX#Y&jX#]&jX~P!AuOi*UOj*UOkhX&ghX~Ok*VO&g&iX~O&g*XO~Oo!}Op*ZO&]TO&_SO&a!rO~OYga&xga']ga~P!CWOW&`XY^Xk^Xo^X&]^X~OWUXY^Xk^Xo^X&]^X~Oo%wO&]TO&r*]O~OW*_O~Oo!}O&]TO&_!|O&a!|O&r*]O~Ok&aOY&ma~Oo!}O&]TO&_!|O&a!|O&r&]O~OY*dO~Ok&fOY&ua~OY*iO&x&jO~O!}]iY]i!l]im]ik]i!U]i~P5SO!]#oO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO!T!Zi!_!Zi!`!Zi!b!Zi!c!Zi!k!Zi!}!Zi$R!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O![!Zi~P!FsO!d#uO!e#vO!n#yO!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!h!Zi!k!Zi!}!Zi$R!Zi&g!Zi&h!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!f#wO~P!HbO![#nO!]#oO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO&x#mO!T!Zi!`!Zi!k!Zi!}!Zi$R!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!_!Zi~P!JPO!_#pO~P!JPO![#nO~P!FsO![#nO!]#oO!d#uO!e#vO!f#wO!h#{O!n#yO&g#lO&h#lO&x#mO!T!Zi!_!Zi!`!Zi!b!Zi!k!Zi!}!Zi$R!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!c#tO~P!K|O!c!Zi~P!K|O!n#yO!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!d!Zi!f!Zi!h!Zi!k!Zi!}!Zi$R!Zi&g!Zi&h!Zi&x!ZiY!Zi!l!Zim!Zik!Zi!U!Zi~O!e#vO~P!MrO!e!Zi&v!Zi~P!MrO!f!Zi~P!HbO!l*kO~P5SO&_!|O&a!|O!T&jX![&jX!]&jX!_&jX!`&jX!b&jX!c&jX!d&jX!e&jX!f&jX!h&jX!k&jX!n&jX$R&jX&h&jX!l&jXm&jX!U&jX&v&jX~P!AuO!}$QiY$Qi!l$Qim$Qik$Qi!U$Qi~P5SOa[Ob[O!U*sO!w|O#_}O#e!PO&]TO&_!uO&aUO'ZhO~PKUO!}*tO~OW#uiZ#xXo#ui!T#ui![#ui!]#ui!_#ui!`#ui!b#ui!c#ui!d#ui!e#ui!f#ui!h#ui!k#ui!n#ui!}#ui$R#ui&g#ui&h#ui&x#ui']#uiY#ui!l#uim#uik#ui!U#ui&v#ui~OW+YO']+ZO~Om+[O~P5SO!z+]O&_SO&a!rO~Ok+^OY'PX!}'PX~P5SOY+`O~O!U+bO~P%QO!V'kO~O!V'kO#]'nO~O!V'kO#Y'mO#]'nO~Oi'lO!V'kO#Y'mO#]'nO~Oa[Ob[O&]TO&_!uO&aUOY'WP~PKUO!V+kO#Y'mO~OZ'tO~O&]TO&_!|O&a!|O!U'YP!}'YP~PKUO!V'wO~Oa[Ob[O!U+wO!w|O!}+uO#_}O#e!PO#j!OO&]TO&_!uO&aUO&h!iO'ZhO~PKUO!V'zO~O!V'zO#]'nO~Oi'{O!V'zO#]'nO~Om+|O~P6bOo+}O&]TO~Oo(RO!V){O&]TOW#zi!T#zi![#zi!]#zi!_#zi!`#zi!b#zi!c#zi!d#zi!e#zi!f#zi!h#zi!k#zi!n#zi!}#zi$R#zi&g#zi&h#zi&x#zi']#ziY#zi!l#zim#zik#zi!U#zi&v#zi~O!V'kOW'Oio'Oi!T'Oi!['Oi!]'Oi!_'Oi!`'Oi!b'Oi!c'Oi!d'Oi!e'Oi!f'Oi!h'Oi!k'Oi!n'Oi!}'Oi$R'Oi&g'Oi&h'Oi&x'Oi']'OiY'Oi!l'Oim'Oik'Oi!U'Oi&v'Oi~OW+YO~O$Y,VO$[,WO$^,WO$_,XO$`,YO~O!U,UO~P#/eO$f,ZO&_SO&a!rO~OW%pO!},[O~OW,]O!},[O~O$l,^OZ$jia$jib$jij$jip$jis$jit$jiu$jiv$jiw$jix$jiy$jiz$ji{$ji|$ji}$ji!O$ji!P$ji!Q$ji!V$ji!d$ji!n$ji!o$ji!p$ji!q$ji!r$ji!s$ji!u$ji!w$ji!z$ji!}$ji#_$ji#e$ji#j$ji#}$ji$O$ji$U$ji$V$ji$c$ji$e$ji$k$ji$n$ji$p$ji$s$ji$w$ji$y$ji%P$ji%R$ji%T$ji%V$ji%X$ji%[$ji&V$ji&]$ji&_$ji&a$ji&|$ji'Z$ji!U$ji&h$ji$}$ji~Oa[Ob[O$s$ZO&_!uO&aUO~O!},bO~P6bO!},cO~OZaOa[Ob[Oj!ROpoOs^Ot^Ou^Ov^Ow^Ox^Oy^Oz,iO{{O|^O}^O!O^O!P^O!QzO!VbO!dpO!neO!ogO!pgO!qgO!rgO!sgO!ugO!w|O!z!QO!}wO#_}O#e!PO#j!OO#}pO$OpO$U!TO$V!SO$c!UO$e!VO$k!WO$n!XO$p!ZO$s!YO$w![O$y!^O$},jO%P!]O%R!_O%T!`O%V!aO%X!bO%[!cO&]TO&_RO&aQO&|fO'ZhO~O!U,hO~P#5]OW&`XY&`XZ&`Xo&`X!}&`X']cX']&`X~PAoOWUXYUXZUXoUX!}UX']UX']&fX~PAPOW$[Oo$]O']$^O~OW&yXY%eXo&yX!}%eX']&yX~OZ#xX~P#:kOY,pO!},nO~O%^(}O%b)OOZ%Zia%Zib%Zij%Zip%Zis%Zit%Ziu%Ziv%Ziw%Zix%Ziy%Ziz%Zi{%Zi|%Zi}%Zi!O%Zi!P%Zi!Q%Zi!V%Zi!d%Zi!n%Zi!o%Zi!p%Zi!q%Zi!r%Zi!s%Zi!u%Zi!w%Zi!z%Zi!}%Zi#_%Zi#e%Zi#j%Zi#}%Zi$O%Zi$U%Zi$V%Zi$c%Zi$e%Zi$k%Zi$n%Zi$p%Zi$s%Zi$w%Zi$y%Zi%P%Zi%R%Zi%T%Zi%V%Zi%X%Zi%[%Zi&V%Zi&]%Zi&_%Zi&a%Zi&|%Zi'Z%Zi!U%Zi$l%Zi&h%Zi$}%Zi~OZ,sO~O%^(}O%b)OOZ%cia%cib%cij%cip%cis%cit%ciu%civ%ciw%cix%ciy%ciz%ci{%ci|%ci}%ci!O%ci!P%ci!Q%ci!V%ci!d%ci!n%ci!o%ci!p%ci!q%ci!r%ci!s%ci!u%ci!w%ci!z%ci!}%ci#_%ci#e%ci#j%ci#}%ci$O%ci$U%ci$V%ci$c%ci$e%ci$k%ci$n%ci$p%ci$s%ci$w%ci$y%ci%P%ci%R%ci%T%ci%V%ci%X%ci%[%ci&V%ci&]%ci&_%ci&a%ci&|%ci'Z%ci!U%ci$l%ci&h%ci$}%ci~Oo!}O&]TO!V'Ua!}'Ua#U'Ua~O!},yO~Oi)ZOk#Ra&g#Ra~Ok)]O&g'Ta~O#U%mO!V'Si!}'Si~O!U-SO~P]O!U-SO~P!;xOW-VO~P8pOZ$_O~P:kOW$nOZ$_O']$^O~Oj-XOp-XO~Ok-YO!V'VX#]'VX!}'VX~OY&bXk&bX!U&bX!}&bX~P5SO!T-[OW&yXY&yXZ#xXo&yX![&yX!]&yX!_&yX!`&yX!b&yX!c&yX!d&yX!e&yX!f&yX!h&yX!k&yX!n&yX$R&yX&g&yX&h&yX&x&yX']&yX~O!V)rO!U'^P~P6bOY&bXa%hXb%hX&]%hX&_%hX&a%hXk&bX!U&bX!}&bX~Ok-_OY'_X~OY-aO~O!V){O!U&tP~P6bOk&sX!}&sX!U&sXY&sX~P5SO&kTa~PGrOi*UOj*UOkha&gha~Ok*VO&g&ia~OW-iO~Op-kO~Oo%wO&]TO&r-lO~O!n#yO!T$Pq![$Pq!]$Pq!_$Pq!`$Pq!b$Pq!c$Pq!d$Pq!e$Pq!f$Pq!h$Pq!k$Pq!}$Pq$R$Pq&g$Pq&h$Pq&x$PqY$Pq!l$Pqm$Pqk$Pq!U$Pq&v$Pq~O!Tga![ga!]ga!_ga!`ga!bga!cga!dga!ega!fga!hga!kga!nga$Rga&hga!lgamga!Uga&vga~PJ]Oo!}O&]TO&_-qO&a-pO~Oa[Ob[O!w$VO#_$WO#e$YO&_!uO&aUO'Z$UO~Oa[Ob[O!U-vO!w|O#_}O#e!PO&]TO&_!uO&aUO'ZhO~PKUOp.UO&_SO&a!rO&h#WO~O!z.XO&_SO&a!rO&h#WO~Ok+^OY'Pa!}'Pa~O!U.]O~P%QOo!}O&]TO&_!|O&a!|O&r._O~Ok.bOY'WX~OY.dO~O!U.jO~P%QO!V+kO~OZ$_O!V'kOk#lX!U#lX!}#lX~Ok.nO!U'YX!}'YX~O!U.qO!}.pO~O&h!iO~P7zOa[Ob[O!U.uO!w|O!}+uO#_}O#e!PO#j!OO&]TO&_!uO&aUO&h!iO'ZhO~PKUOo(RO!V){O&]TOW#zq!T#zq![#zq!]#zq!_#zq!`#zq!b#zq!c#zq!d#zq!e#zq!f#zq!h#zq!k#zq!n#zq!}#zq$R#zq&g#zq&h#zq&x#zq']#zqY#zq!l#zqm#zqk#zq!U#zq&v#zq~O!V'kOW'Oqo'Oq!T'Oq!['Oq!]'Oq!_'Oq!`'Oq!b'Oq!c'Oq!d'Oq!e'Oq!f'Oq!h'Oq!k'Oq!n'Oq!}'Oq$R'Oq&g'Oq&h'Oq&x'Oq']'OqY'Oq!l'Oqm'Oqk'Oq!U'Oq&v'Oq~Om.xO~P5SOm.xO~P6bO!U.|O~P#/eOw/QO$Z/QO&_SO&a!rO~O!}/TO~O$f/UO&_SO&a!rO~O!T%zO!l/WOk!SX!}!SX~O!}/YO~P5SO!}/YO~P6bO!}/]O~P5SO!l/_O&v/^O~O!U/aO~P#5]O!l$|X&v$|X~P<}OZ3mOa[Ob[Oj!ROpoO!d3iO!n3hO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO#}3iO$O3iO&]TO&_2vO&a2tO&|fO~O!}/dO~O!T/eO~OY/hOZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUOY/hO!}/iO~O%^(}O%b)OOZ%cqa%cqb%cqj%cqp%cqs%cqt%cqu%cqv%cqw%cqx%cqy%cqz%cq{%cq|%cq}%cq!O%cq!P%cq!Q%cq!V%cq!d%cq!n%cq!o%cq!p%cq!q%cq!r%cq!s%cq!u%cq!w%cq!z%cq!}%cq#_%cq#e%cq#j%cq#}%cq$O%cq$U%cq$V%cq$c%cq$e%cq$k%cq$n%cq$p%cq$s%cq$w%cq$y%cq%P%cq%R%cq%T%cq%V%cq%X%cq%[%cq&V%cq&]%cq&_%cq&a%cq&|%cq'Z%cq!U%cq$l%cq&h%cq$}%cq~Oo!}O&]TO!V'Ui!}'Ui#U'Ui~O&x&jOk#Sa&g#Sa~O#U%mO!V'Sq!}'Sq~O!U/tO~P]Oj/wO~P!.QO!}/xO~Ok-YO!V'Va#]'Va!}'Va~O!V)rO~P6bOk/}O!U'^X~O!U0PO~Ok-_OY'_a~Ok0TO!U&tX~O!U0VO~Op0WO~O!n#yO!T$Py![$Py!]$Py!_$Py!`$Py!b$Py!c$Py!d$Py!e$Py!f$Py!h$Py!k$Py!}$Py$R$Py&g$Py&h$Py&x$PyY$Py!l$Pym$Pyk$Py!U$Py&v$Py~O![#nO!]#oO!_#pO!`#qO!b#sO!c#tO!d#uO!e#vO!f#wO!h#{O!k#xO!n#yO&g#lO&h#lO&x#mO~O!T!jy!}!jy$R!jyY!jy!l!jym!jyk!jy!U!jy~P$6sOk^Xo^X!T^X!}^X&]^X~OZ&`X~P$8bOZUX~P$8bO!}0YO~OZ0ZO~OW#uyZ#xXo#uy!T#uy![#uy!]#uy!_#uy!`#uy!b#uy!c#uy!d#uy!e#uy!f#uy!h#uy!k#uy!n#uy!}#uy$R#uy&g#uy&h#uy&x#uy']#uyY#uy!l#uym#uyk#uy!U#uy&v#uy~O!z0gO&_SO&a!rO~OY%pak%pa!}%pa~P5SOo%wO&]TO&r0hO~Oo!}O&]TO&_!|O&a!|O&r0hO~Ok.bOY'Wa~OZ%hO!VbO~O!U0pO~P%QO!V'kOk#la!U#la!}#la~OZ$_O!V'kOk#la!U#la!}#la~O&]TO&_!|O&a!|Ok%yX!U%yX!}%yX~PKUOk.nO!U'Ya!}'Ya~O!U#mX~P%QO!U0vO~Om0wO~P5SO!V'kOW'Oyo'Oy!T'Oy!['Oy!]'Oy!_'Oy!`'Oy!b'Oy!c'Oy!d'Oy!e'Oy!f'Oy!h'Oy!k'Oy!n'Oy!}'Oy$R'Oy&g'Oy&h'Oy&x'Oy']'OyY'Oy!l'Oym'Oyk'Oy!U'Oy&v'Oy~OW%pO!}0yO~OW%pO$]1OO&_SO&a!rO!}'aP~OW%pO$a1PO~O!}1QO~O!T%zO!l1SOk!SX!}!SX~OY1UO~O!}1VO~P5SO!VbO%P!]O~P6bO!T3SO![2xO!]2yO!_2zO!`2{O!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!k3nO!n#yO$R3SO&g#lO&h#lO&x#mO~Ok3dO!l'cX&v'cX~P$BRO!T1ZO~OY1[OZ$eOa[Ob[Oj!ROpoO!ogO!pgO!qgO!rgO!sgO!ugO!z!QO&]TO&_(tO&a(sO&|fO~PKUOW#YOo&eX&]&eX&_&eX&a&eX'd&eX~O&h#WO~P$DuOo!}O&]TO'd1^O&_%`X&a%`X~O&x&jOk#Si&g#Si~O!U1bO~P]Oj1cO&_SO&a!rO~OW+YOZ$_O']+ZO~O!}1eO~O!V)rOk%|X!U%|X~P6bOk/}O!U'^a~O!T-[O~O!V){Ok%lX!U%lX~P6bOk0TO!U&ta~OY1jO~O!}1kO~OZ1lO~Oo%wO&]TO&r1sO~O!V'kOk#li!U#li!}#li~O!U#ma~P%QOW%pO!}1vO~OW%pOk1wO!}'aX~OY1{O~P5SOY1}O~Ok3dO!l'ca&v'ca~OY%eq!}%eq~P5SO'd1^O&_%`a&a%`a~OY2TO~O!}2WO~Oo!}Oz2ZO!}2YO&]TO~OY2[O~Ok1wO!}'aa~O!}2aO~OW%pOk1wO!}'bX~OY2cO~P5SOY2dO~OY%ey!}%ey~P5SOo!}O&]TO&_&Ta&a&Ta'd&Ta~OY2fO~O!}2gO~Oo!}Oz2iO!}2hO&]TO~OW%pOk&Qa!}&Qa~Ok1wO!}'ba~Oo!}O&]TO&_&Ti&a&Ti'd&Ti~O!}2mO~Oo!}Oz2nO!}2mO&]TO~O!}2oO~O!}2qO~O!l&`XY&`Xm&`Xk&`X!U&`X~P&wOWcXW&`XZ&`Xk&`XocXo&`X!T&`X![&`X!]&`X!_&`X!`&`X!b&`X!c&`X!d&`X!e&`X!f&`X!h&`X!k&`X!l&`X!n&`X$R&`X&]cX&g&`X&hcX&h&`X&v^X&v&`X&x&`X']cX']&`X~O!lUXYUXmUXkUX!UUX~P)OOWUXW&fXZUXkUXoUXo&fX!TUX![UX!]UX!_UX!`UX!bUX!cUX!dUX!eUX!fUX!hUX!kUX!lUX!nUX$RUX&]&fX&gUX&hUX&h&fX&vUX&v^X&xUX']UX']&fX~O!VbO~P$+dOk]i!l]i&v]i~P$BRO!]2yO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lOk!Zi!T!Zi!_!Zi!`!Zi!b!Zi!c!Zi!k!Zi!l!Zi$R!Zi&v!Zi&x!Zi~O![!Zi~P%%`O!d3PO!e3QO!n#yOk!Zi!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!h!Zi!k!Zi!l!Zi$R!Zi&g!Zi&h!Zi&v!Zi&x!Zi~O!f3RO~P%&tO![2xO!]2yO!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lO&x#mOk!Zi!T!Zi!`!Zi!k!Zi!l!Zi$R!Zi&v!Zi~O!_!Zi~P%(YO!_2zO~P%(YO![2xO~P%%`O![2xO!]2yO!d3PO!e3QO!f3RO!h#{O!n#yO&g#lO&h#lO&x#mOk!Zi!T!Zi!_!Zi!`!Zi!b!Zi!k!Zi!l!Zi$R!Zi&v!Zi~O!c3OO~P%)|O!c!Zi~P%)|O!e3QO!n#yOk!Zi!T!Zi![!Zi!]!Zi!_!Zi!`!Zi!b!Zi!c!Zi!f!Zi!h!Zi!k!Zi!l!Zi$R!Zi&g!Zi&h!Zi&v!Zi&x!Zi~O!d!Zi~P%+iO!f!Zi~P%&tOa[Ob[O&_!uO&aUO$srX~PBmOk$Qi!l$Qi&v$Qi~P$BRO![2xO!]2yO!_2zO!`2{O!b2}O!c3OO!d3PO!e3QO!f3RO!h#{O!k3nO!n#yO&g#lO&h#lO&x#mO~Ok!jy!T!jy!l!jy$R!jy&v!jy~P%-vOk%pa!l%pa&v%pa~P$BRO&v2wO~OY3TO&x&jO']$^O~OY3bO&x&jO~O!l3cO~P5SO!pQ!oP!e&X&_&|!s~",goto:"#Fl'dPPPP'e'z,`0UP'zPP0k0o2o7U9dPP9i=S@gCzDhFxPPPGOPJZPPKXKbPPPPPPPPPPPPPPKXL{PPPMgMr! t!#[PP!%[PP!&ZPPPPP!#[P!'U!#[PP!#[PPPPPP!'XP!)]P!+a!)]P!-t!.sP!/t!0O!0^!1R!1X!1_P!1n!2g!2qP!3a!3jP!1nP!4`!4j!4p!5O!1nP!5S!5^!2_!5sP!6h!6r!6x!1n!6{!7R!/t!/t!7V!7a!7g!)]!)]!9m!)]!)]!<Q!#[PP!#[0oP!<W!<aPP!<g!<pPPPPPPPP'eP'ePP!<t!=^!=s!=^PP!=^P!=^P!>`!>cP!=^!>{!=^P!=^P!?O!?R!?VP!<tP!=^P!=^P!=^P!=^P!=^!=^P!?ZP!?a!?d!?jP!=^!?v!?yP!@R!@i!E{!FR!G]!Hl!Hr!Hx!IO!IU!I`!In!It!JS!JY!J`!Jf!Jl!Jr!Jx!KO!KY!K`!Kf!Kl!Kr!K|!LS!L^!LdPPP!Lj!=^!MaP##wP#%OP#(O#(e#,o#1Y#4uPP#8Y#8]P#;T#;Z#;c#<nP#=yP#>{#?U#?XP0oP#?]!)]PPP#Ae#Cm#C|#DY#Dr#ET#EW#Ed#El#Eo#EsP#EvP#FU#FX#F[#F`#Ff#FiwuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u)usOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%q%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h)r){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-[-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u/}0T0j0u1S1V1Z1]1^1j2Q2R2X2Z2[2e2i2k2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n$xlOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nv!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rQ$ShS&_#`)dQ'V$UU']$[$n-VQ'd$^W(w%U,n/i1]U)o%p(^,]Q)q%qS*[&W-RU+U'_.W/vQ+]'eQ-s*oQ.T+YQ.X+ZQ0Q-_Q0]-tR0g.Yw!tT!S!U!V!y!{$r$s%t,V,W,X,Y/P/R1O1P1w2rT%r!s*R${rOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n$OcObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3n^!lP!h!p'k+a.p0u|#RW!Y#`$T$Z%{&]&`&d(d(u)d*]*o+g,`,m-l-t.a/n1aS#ea3mQ$g|Q$h}Q$i!OQ$j!PW%Y!f%]+r.sS%`!i)]Q%f!jQ'W$VQ'X$WQ'Y$XQ'Z$YQ)[%aS)`%d)bQ*e&fQ*m&|S+n'w.nQ-o*nS.f+k.iQ.m+oQ0i._Q0m.eQ1r0hQ2^1sw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nU%i!l.f0mS)R%Y)`Q)c%fw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3iV#da%h3m'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ&U#YQ*Y&VX/k,s/o1^2R'fYOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/k,s/o1^2R'fZOPVabeipy!Q![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n-T-U-Y-[.b.e.i.p/W/Y/^/e/i/u/}0T0u1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nX/l,s/o1^2RS#XY/kS$m!Q'`S'_$[$nQ'e$^S)l%j)hQ.W+YQ.Y+ZR/v-V%mXOabepy![!]!_!b#W#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|$]$_$b$e$t$u$v$w$x%U%j%m%q%z&j&l'l'm'n'{(R(f(k(m)Z)g)h)r){*U*V*i*k+^+},^,b,c,g,j,n-T-U-Y-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ&S#WR-g*V'c]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n!w#PW!f!v#Q#R#`$O$T%X%Y%]%d%y&Q&W&`&d&|(d(u)R)b)d*l*n*o+g+r,`,m,x-R-t.a.s/m1j2Q2X2[2e2kW#ba#d%h3mR*b&aviOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u[!hP!p'k+a.p0uY#aa#d%h&a3mQ&}#{Q(e$vW(y%U,n/i1]S*p'S*rS+h't.bS+o'w.nS+t'z+vS.e+k.iR/o,sh#TW!Y!f$T$Z%](d*o+r,`-t.sQ*P%{Q*^&]Q-j*]R0X-lU)}%z){0TQ,P(UR.v+y$ScOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n3m3nw3g,j2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3ivwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uQ%V!cQ%g!kQ%o!qS&o#k2wQ'j$fQ)Q%WQ)V%^Q,u)OQ/p,tQ0n.fQ1W/^R1t0m${qOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n!^#od#g$y$z%S&n&p&r&s&t&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lg2y/b3U3V3X3Y3Z3[3]3a3e3f!Y#rd#g$y$z%S&n&r&s&u&v&z'P'c'f)p)|+{,a,d-n.Z.y/[1R1Y1|2P3lc2|/b3U3X3Y3[3]3a3e3fR'O#{%TgOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%ToOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3n%SoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ$f{Q$t!WQ$u!XQ${!^R,k(oQ$`mS(V$l+XQ+T'^S+z(Q(XS-W)j)kQ.S+VQ.l+nQ.z,RQ/y-XQ0e.VQ0r.mQ1d/wQ1q0fR2V1cQ'o$gY*v'W'p'q'r'sQ,Q(VW-w*w*x*y*zQ.k+nQ.w+zU0^-x-y-zS0q.l.mQ0x.zS1m0_0`Q1u0rR2]1na!nP!p'k+a+k.i.p0u`!nP!p'k+a+k.i.p0uT+u'z+vd!jP!h!p'k+a+k.e.i.p0uQ's$gQ'v$hQ(P$jQ*z'WQ*|'XQ+S'ZV+s'z+t+vQ%b!iR,})]Q)Y%`R,|)[Q%l!mQ)T%[Q)X%_Q-P)aR/s-QvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uS*q'S*rT+u'z+vQ'r$gS*y'W'sR-z*zQ'q$gQ'y$iU*x'W'r'sQ+O'YQ+m'uS-y*y*zQ-|*{Q0`-zR0b-}Q+e'mQ+f'nR+x'{Q'p$gQ'}$jW*w'W'q'r'sU+Q'Z(O(PU-x*x*y*zS.Q+R+SS0_-y-zQ0d.RR1n0`Q'u$hS*{'X'vR-}*|Q+i'tR0k.bQ+l'uS-{*{+mS0a-|-}R1o0bT.g+k.iQ(O$jS+R'Z(PR.R+SQ'|$jW+P'Z'}(O(PU.P+Q+R+SS0c.Q.RR1p0dvuOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!nP!p'k+a+k.i.p0uT+u'z+vQ'x$iS*}'Y'yR.O+OQ+p'wR0s.nR.r+qQ'T$SR*u'VT*q'S*rQ%k!mS)W%_%lR,z)XQ)g%jR-U)h$zoOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nX(x%U,n/i1]%SmOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nU'^$[$n-VS+V'_/vQ.V+YR0f.WX(T$l(Q(U+y_)s%q)r-[/}2Z2i2nQ)u%qR0R-_Q([$oQ)w%sR-b)xT,S(Z,TvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR1W/^wwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uvvOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uQ%P!`R%R!aR$w!ZvwOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uR(f$vR$x!ZR(n${T,f(m,gT,e(m,gX({%V(|)Q,vR,t(}Q/n,sR1a/oQ)P%VQ,r(|Q,w)QR/q,vR%W!cQ(z%UV/g,n/i1]QyOQ#jbY$cy#j)h-T/uQ)h%jQ-T)gR/u-UvVOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/uv!gP!p#d&a'S'k't'w'z*r+a+k+v,s.b.i.n.p0u|!xV!g#O#Z#_#}$k%a%e&P&V&Z&{(S(W)e*`+W.^0j2R3`!f#OW!f!v#R$O$T%Y%]%d%y&Q&W&|(d(u)R)b*l*n*o+r,`,m,x-R-t.s/m1j2Q2X2[2e2kQ#Z_S#_a3m$`#}ep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%m%q%z&j&l'l'm'n'{(R(f(k)Z)r){*U*i*k+^+},b,c,j-Y-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$k!QS%a!i)]S%e!j+sS&P#W*VQ&V#YU&Z#`&d)dQ&{#{W(S$l(Q(U+yQ(W$mQ)e%hQ*`&`Q+W'`Q.^+gQ0j.aQ2R1^Z3`$v%U,n/i1]Q*W&SR-h*W^#QW#`$O&|(d(u*l!Q%X!f!v$T%]%d&Q&W&`&d)b)d*n*o+g+r,`,m-R-t.a.s/m2Q2e[%x#Q%X%y,x2X2kS%y#R%YQ,x)RQ2X1jR2k2[#Q`OPaby!_!p#d#j#{$b$t$u$v$w$x%U%h%j&a'S'k't'w'z(m)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3m[!wV!g#_&{)e3`T#[`!wQ0U-cR1i0UQ&b#bR*c&bQ&g#eR*f&gQ$QfR'Q$QQ+_'fS.[+_1XR1X/bQ!pPU%n!p+a0uQ+a'kR0u.pQ%|#TR*Q%|Q&k#hU*h&k/r3kQ/r,{R3k3jQ)^%bR-O)^Q-Z)mR/{-ZQ.c+iR0l.cQ.i+kR0o.iQ+v'zR.t+vQ.o+pR0t.oQ*r'SR-u*rQ(U$lQ+y(QT,O(U+yQ0O-]R1g0OQ-`)uR0S-`Q,T(ZR.{,TQ/P,VR0{/PQ1x0|S2`1x2bR2b1zQ,g(mR/`,gQ(|%VS,q(|,vR,v)QQ1_/mR2S1_Q,o(zR/j,odxOby#j%j)g)h-T-U/uQ$|!_Q'h$bQ(b$tQ(c$uQ(h$wQ(i$xS,f(m,gR/V,^)ftOPVW_abepy!Q![!]!_!b!f!g!i!j!p!v#O#R#W#Y#Z#_#`#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$O$T$]$_$b$e$k$l$m$t$u$v$w$x%U%Y%]%a%d%e%h%j%m%y%z&P&Q&V&W&Z&`&a&d&j&l&{&|'S'`'k'l'm'n't'w'z'{(Q(R(S(U(W(d(f(k(m(u)R)Z)])b)d)e)g)h){*U*V*`*i*k*l*n*o*r+W+^+a+g+k+r+s+v+y+},^,`,b,c,g,j,m,n,s,x-R-T-U-Y-t.^.a.b.i.n.p.s/W/Y/^/e/i/m/u0T0j0u1S1V1Z1]1^1j2Q2R2X2[2e2k2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3n_)t%q)r-[/}2Z2i2nQ!sTQ$o!SQ$p!UQ$q!VQ%s!yQ%u!{Q(`$rQ(a$sQ)x%tQ*R2rS.},V,XQ/R,WQ/S,YQ0z/PS0|/R1OQ1z1PR2_1w&{SOTabehpy!S!U!V![!]!_!b!y!{#`#j#k#n#o#p#q#r#s#t#u#v#w#x#|$U$[$]$^$_$b$e$n$r$s$t$u$v$w$x%U%j%p%q%t%z&W&l'_'e(R(^(f(k(m)d)g)h)r){*i*k*o+Y+Z+^+},V,W,X,Y,],^,b,c,g,j,n-R-T-U-V-[-_-t.W.Y/P/R/W/Y/^/e/i/u/v/}0T1O1P1S1V1Z1]1w2Z2i2n2r2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nQ)v%qQ-])rQ/|-[Q1f/}Q2j2ZQ2l2iR2p2nxdOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/^/uU#ga$e3mS#ye3hS$ap3iQ$y![Q$z!]Q%S!bQ&n#kQ&p#nQ&q#oQ&r#pQ&s#qQ&t#rQ&u#sQ&v#tQ&w#uS&x#v3QQ&y#wQ&z#xQ'P#|Q'c$]Y'f$_$v,b/Y1V^)p%q)r-[/}2Z2i2nU)|%z){0TS*j&l3TQ+{(RQ,a(fQ,d(kS-m*i3bQ-n*kQ.Z+^Q.y+}Q/[,cQ/b,jQ1R/WQ1Y/eQ1|1SQ2P1ZQ3U2wQ3V2xQ3W2yQ3X2zQ3Y2{Q3Z2|Q3[2}Q3]3OQ3^3PQ3_3RQ3a3SQ3e3cQ3f3dR3l3nvWOby!_#j$b$t$u$w$x%j(m)g)h,^,g-T-U/u`!fP!p'k+a+k.i.p0uW!vV#}&P3`S#`a3m#|$Oep![!]!b#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$e%q%z&l(R(f(k)r){*i*k+^+},b,c,j-[/W/Y/^/e/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ$TiS%]!h.eS%d!j+sf&Q#W%m&j'l'm'n'{)Z*U*V-YQ&W#_Q&`#aS&d#d&aQ&|#{Q(d$vW(u%U,n/i1]Q)b%eQ)d%hQ*l&{Q*n&}S*o'S*rS+g't.bS+r'z+vQ,`(eQ,m(yQ-R)eQ-t*pQ.a+hQ.s+tS/m,s/oQ2Q1^R2e2R'b]OPVabeipy![!]!_!b!h!j!p#W#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$t$u$v$w$x%U%e%h%j%m%q%z&P&a&j&l&{&}'S'k'l'm'n't'z'{(R(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nQ$l!QQ(Q$kS(X$m+WQ+X'`R,R(W'sUOPVabeipy!Q![!]!_!b!h!j!p#W#Y#_#a#d#j#k#n#o#p#q#r#s#t#u#v#w#x#{#|#}$]$_$b$e$k$m$t$u$v$w$x%U%e%h%j%m%q%z&P&V&a&j&l&{&}'S'`'k'l'm'n't'z'{(R(W(e(f(k(m(y)Z)e)g)h)r){*U*V*i*k*p*r+W+^+a+h+k+s+t+v+},^,b,c,g,j,n,s-T-U-Y-[.b.e.i.p/W/Y/^/e/i/o/u/}0T0u1S1V1Z1]1^2R2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3`3b3c3d3h3i3m3nR&T#W%OnObepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3nQ#haQ&S#WQ'O#{W)m%m'm'n'{Q*g&jQ+c'lQ,{)ZQ-f*UQ-g*VQ/z-YR3j3mQ*T&RR-e*SU#ca%h3mR&e#d#c_OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3m#c^OPV`aby!_!g!p!w#_#d#j#{$b$t$u$v$w$x%U%h%j&a&{'S'k't'w'z(m)e)g)h*r+a+k+v,^,g,n,s-T-U.b.i.n.p/i/u0u1]3`3ml#SW!Y!f$T$Z%]%{&]*]*o+r-l-t.sU&[#`&d)dQ*a&`Q,_(dQ,l(uQ.`+gQ/X,`Q/f,mQ0i.aQ1`/nR2U1aQ*O%zQ-c){R1h0TR-d){T#fa3m$vkOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%q%z&l(R(f(k(m)g)r){*i*k+^+},^,b,c,g,j-T-U-[/W/Y/^/e/u/}0T1S1V1Z2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nW(v%U,n/i1]T)i%j)h%SjOabepy![!]!_!b#j#k#n#o#p#q#r#s#t#u#v#w#x#|$]$_$b$e$t$u$v$w$x%U%j%q%z&l(R(f(k(m)g)h)r){*i*k+^+},^,b,c,g,j,n-T-U-[/W/Y/^/e/i/u/}0T1S1V1Z1]2Z2i2n2w2x2y2z2{2|2}3O3P3Q3R3S3T3b3c3d3h3i3m3nT'[$[-VQ'g$_Q(g$vQ/Z,bQ1T/YR2O1V[!oP!p'k+a.p0uT.g+k.iU#UW!Y(dQ%Z!fU'U$T$Z,`Q)U%]S-r*o+rT0[-t.sd!kP!p'k'z+a+k+v.i.p0uV%^!h+t.eR%c!iW%[!f%]+r.sQ)a%dR-Q)bQ)n%mV+d'm'n'{R+j'tT.h+k.iR+q'w`!mP!p'k+a+k.i.p0uT%_!h.eR-^)rR)v%qT/O,V/PQ0}/RR1y1OR1y1PR/c,j",nodeNames:`⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList LambdaExpression Definition FormalParameters ReceiverParameter void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ this FormalParameter Modifiers public protected private abstract static final strictfp default synchronized native transient volatile sealed non SpreadParameter VariableDeclarator AssignOp } { ArrayInitializer InferredParameters Block BinaryExpression CompareOp CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp BitOp InstanceofExpression instanceof TypePattern TernaryExpression LogicOp : UpdateExpression UpdateOp IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral class ParenthesizedExpression ObjectCreationExpression new ArgumentList ClassBody ; FieldDeclaration MethodDeclaration TypeParameters TypeParameter TypeBound Throws throws ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList Permits permits RecordDeclaration record RecordHeader RecordComponent RecordBody CompactConstructorDeclaration InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation FieldAccess ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension UnaryExpression LogicOp BitOp CastExpression AssignmentExpression AssignOp ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchRule SwitchLabel case ThrowStatement throw DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent`,maxTerm:296,nodeProps:[[`isolate`,-4,1,2,80,81,``],[`group`,-27,4,56,91,99,106,112,117,122,156,158,161,162,164,167,169,172,174,176,178,184,186,188,190,192,194,195,203,`Statement`,-25,6,13,32,57,69,72,75,77,78,79,80,81,82,83,84,86,87,129,130,131,133,134,136,139,140,`Expression`,-7,17,18,19,20,21,23,28,`Type`],[`openedBy`,10,`(`,52,`{`],[`closedBy`,11,`)`,53,`}`]],propSources:[d],skippedNodes:[0,1,2],repeatNodeCount:30,tokenData:"#$g_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu2zuv4avw5qwx7Xxy?pyz@^z{@z{|Ap|}CW}!OCt!O!PEa!P!QNZ!Q!R!+P!R![!.k![!]!;T!]!^!<e!^!_!=R!_!`!?Y!`!a!?|!a!b!Aj!b!c!BY!c!}!IU!}#O!Jk#O#P%Q#P#Q!KX#Q#R!Ku#R#S2z#S#T%Q#T#o2z#o#p!Li#p#q!MV#q#r!No#r#s# ]#s#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2zS%VV&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS%qO&}SS%tVOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZS&^VOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS&vP;=`<%l%QS&|UOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZS'cP;=`<%l&Z_'mk&}S&XZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qs#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%Q_)iY&}S&XZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XZ*^Y&XZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XV+TX#}P&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QU+wV![Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT,aXOY,|YZ%lZr,|rs1as#O,|#O#P0k#P;'S,|;'S;=`1Z<%lO,|T-PXOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`1T<%lO-lT-qX&}SOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`1T<%lO-lT.cV!sPOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZT.}V&}SOY-lYZ%lZr-lrs/ds;'S-l;'S;=`1T<%lO-lT/gXOY,|YZ%lZr,|rs0Ss#O,|#O#P0k#P;'S,|;'S;=`1Z<%lO,|T0XU!sPOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZT0nVOY-lYZ%lZr-lrs/ds;'S-l;'S;=`1T<%lO-lT1WP;=`<%l-lT1^P;=`<%l,|T1fV!sPOY&ZYZ%lZr&Zrs1{s;'S&Z;'S;=`'`<%lO&ZT2QS&{SXY2^YZ2m]^2rpq2^P2aSXY2^YZ2m]^2rpq2^P2rO&|PP2wP&|PYZ2m_3Rb&}S&_ZOY%QYZ%lZr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o$g%Q$g;'S2z;'S;=`4Z<%lO2z_4^P;=`<%l2zU4hX&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU5[V$RQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV5xZ&xR&}SOY%QYZ%lZr%Qrs%qsv%Qvw6kw!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU6rV!_Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT7^Z&}SOY8PYZ%lZr8Prs9_sw8Pwx%Qx#O8P#O#P:i#P;'S8P;'S;=`?j<%lO8PT8UX&}SOY%QYZ%lZr%Qrs%qsw%Qwx8qx;'S%Q;'S;=`&s<%lO%QT8xV!rP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT9bXOY&ZYZ%lZr&Zrs&ysw&Zwx9}x;'S&Z;'S;=`'`<%lO&ZT:SV!rPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT:nZ&}SOY;aYZ%lZr;ars<Xsw;awx8Px#O;a#O#P8P#P;'S;a;'S;=`=s<%lO;aT;fZ&}SOY;aYZ%lZr;ars<Xsw;awx8qx#O;a#O#P%Q#P;'S;a;'S;=`=s<%lO;aT<[ZOY<}YZ%lZr<}rs=ysw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}T=QZOY;aYZ%lZr;ars<Xsw;awx8qx#O;a#O#P%Q#P;'S;a;'S;=`=s<%lO;aT=vP;=`<%l;aT=|ZOY<}YZ%lZr<}rs>osw<}wx9}x#O<}#O#P&Z#P;'S<};'S;=`?d<%lO<}P>rVOY>oZw>owx?Xx#O>o#P;'S>o;'S;=`?^<%lO>oP?^O!rPP?aP;=`<%l>oT?gP;=`<%l<}T?mP;=`<%l8P_?wVZZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV@eVYR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVATX$fP&}S!eQOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVAwZ!dR&}SOY%QYZ%lZr%Qrs%qs{%Q{|Bj|!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QVBqV!nR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVC_VkR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_C}[&pW!dR&}SOY%QYZ%lZr%Qrs%qs}%Q}!OBj!O!_%Q!_!`5T!`!aDs!a;'S%Q;'S;=`&s<%lO%QVDzV&vR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_EhZWY&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PFZ!P!Q%Q!Q![Gi![;'S%Q;'S;=`&s<%lO%QVF`X&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!PF{!P;'S%Q;'S;=`&s<%lO%QVGSV&rR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTGpc&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#R%Q#R#SMc#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTISV&}S!pPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIn]&}SOY%QYZ%lZr%Qrs%qs{%Q{|Jg|}%Q}!OJg!O!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTJlX&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![;'S%Q;'S;=`&s<%lO%QTK`c&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![!f%Q!f!gH{!g!h%Q!h!iH{!i#R%Q#R#SLk#S#W%Q#W#XH{#X#Y%Q#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QTLpZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![KX![#R%Q#R#SLk#S;'S%Q;'S;=`&s<%lO%QTMhZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![#R%Q#R#SMc#S;'S%Q;'S;=`&s<%lO%Q_Nb]&}S!eQOY%QYZ%lZr%Qrs%qsz%Qz{! Z{!P%Q!P!Q!'|!Q!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%Q_! `X&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!!QT&}SOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!dTOz!!az{!!s{;'S!!a;'S;=`!#b<%lO!!aZ!!vVOz!!az{!!s{!P!!a!P!Q!#]!Q;'S!!a;'S;=`!#b<%lO!!aZ!#bOQZZ!#eP;=`<%l!!a_!#kXOY!$WYZ! {Zr!$Wrs!&bsz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!$ZXOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{;'S! Z;'S;=`!&[<%lO! Z_!${Z&}SOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!%uV&}SQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!&_P;=`<%l! Z_!&eXOY!$WYZ! {Zr!$Wrs!!asz!$Wz{!'Q{;'S!$W;'S;=`!'v<%lO!$W_!'TZOY! ZYZ! {Zr! Zrs!#hsz! Zz{!$v{!P! Z!P!Q!%n!Q;'S! Z;'S;=`!&[<%lO! Z_!'yP;=`<%l!$W_!(TV&}SPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!(oVPZOY!)UYZ%lZr!)Urs!)vs;'S!)U;'S;=`!*y<%lO!)U_!)ZVPZOY!'|YZ%lZr!'|rs!(js;'S!'|;'S;=`!)p<%lO!'|_!)sP;=`<%l!'|_!){VPZOY!)UYZ%lZr!)Urs!*bs;'S!)U;'S;=`!*y<%lO!)UZ!*gSPZOY!*bZ;'S!*b;'S;=`!*s<%lO!*bZ!*vP;=`<%l!*b_!*|P;=`<%l!)UT!+Wq&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!d%Q!d!e!1u!e!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o!z%Q!z!{!3s!{#R%Q#R#S!0}#S#U%Q#U#V!1u#V#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a#l%Q#l#m!3s#m;'S%Q;'S;=`&s<%lO%QT!-fa&}S!pPOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Gi![!f%Q!f!gH{!g!hIi!h!iH{!i#W%Q#W#XH{#X#YIi#Y#ZH{#Z;'S%Q;'S;=`&s<%lO%QT!.ri&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!-_!P!Q%Q!Q![!.k![!f%Q!f!gH{!g!hIi!h!iH{!i!n%Q!n!o!0a!o#R%Q#R#S!0}#S#W%Q#W#XH{#X#YIi#Y#ZH{#Z#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!0hV&}S!oPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!1SZ&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!.k![#R%Q#R#S!0}#S;'S%Q;'S;=`&s<%lO%QT!1zY&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S;'S%Q;'S;=`&s<%lO%QT!2q`&}S!oPOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!2j!R!S!2j!S!n%Q!n!o!0a!o#R%Q#R#S!1u#S#`%Q#`#a!0a#a;'S%Q;'S;=`&s<%lO%QT!3x_&}SOY%QYZ%lZr%Qrs%qs!O%Q!O!P!4w!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QT!4|]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i#T%Q#T#Z!5u#Z;'S%Q;'S;=`&s<%lO%QT!5zc&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#R%Q#R#S!4w#S#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!7^i&}S!oPOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8{!P!Q%Q!Q![!7V![!c%Q!c!i!7V!i!n%Q!n!o!0a!o!r%Q!r!sIi!s#R%Q#R#S!:V#S#T%Q#T#Z!7V#Z#`%Q#`#a!0a#a#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!9Qa&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!5u![!c%Q!c!i!5u!i!r%Q!r!sIi!s#T%Q#T#Z!5u#Z#d%Q#d#eIi#e;'S%Q;'S;=`&s<%lO%QT!:[]&}SOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!7V![!c%Q!c!i!7V!i#T%Q#T#Z!7V#Z;'S%Q;'S;=`&s<%lO%QV!;[X!lR&}SOY%QYZ%lZr%Qrs%qs![%Q![!]!;w!];'S%Q;'S;=`&s<%lO%QV!<OV']R&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!<lV!}R&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!=YY&hZ&}SOY%QYZ%lZr%Qrs%qs!^%Q!^!_!=x!_!`!>l!`;'S%Q;'S;=`&s<%lO%QU!>PX!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QU!>sV!]Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?aX!TR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!@TY&gR&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`!>l!`!a!@s!a;'S%Q;'S;=`&s<%lO%QU!@zY!fQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`!a!=x!a;'S%Q;'S;=`&s<%lO%Q_!AsV&kX!kQ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!BaX&]Z&}SOY%QYZ%lZr%Qrs%qs#]%Q#]#^!B|#^;'S%Q;'S;=`&s<%lO%QV!CRX&}SOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Cn#c;'S%Q;'S;=`&s<%lO%QV!CsX&}SOY%QYZ%lZr%Qrs%qs#h%Q#h#i!D`#i;'S%Q;'S;=`&s<%lO%QV!DeX&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!EQ#Y;'S%Q;'S;=`&s<%lO%QV!EVX&}SOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Er#g;'S%Q;'S;=`&s<%lO%QV!EwX&}SOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Fd#Z;'S%Q;'S;=`&s<%lO%QV!FiX&}SOY%QYZ%lZr%Qrs%qs#T%Q#T#U!GU#U;'S%Q;'S;=`&s<%lO%QV!GZX&}SOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Gv#W;'S%Q;'S;=`&s<%lO%QV!G{X&}SOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Hh#Y;'S%Q;'S;=`&s<%lO%QV!HoV'ZR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!I]b&aZ&}SOY%QYZ%lZr%Qrs%qst%Qtu!IUu!Q%Q!Q![!IU![!c%Q!c!}!IU!}#R%Q#R#S!IU#S#T%Q#T#o!IU#o$g%Q$g;'S!IU;'S;=`!Je<%lO!IU_!JhP;=`<%l!IU_!JrVoZ&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!K`VmR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!K|X!cQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`;'S%Q;'S;=`&s<%lO%QV!LpV!VR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!M`Z'dX!bQ&}SOY%QYZ%lZr%Qrs%qs!_%Q!_!`5T!`#p%Q#p#q!NR#q;'S%Q;'S;=`&s<%lO%QU!NYV!`Q&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!NvV!UR&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT# dV$OP&}SOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!Su&}S&XZ&_ZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu2zu!Q%Q!Q![2z![!c%Q!c!}2z!}#R%Q#R#S2z#S#T%Q#T#o2z#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY2z#BY#BZ# y#BZ$IS2z$IS$I_# y$I_$I|2z$I|$JO# y$JO$JT2z$JT$JU# y$JU$KV2z$KV$KW# y$KW&FU2z&FU&FV# y&FV;'S2z;'S;=`4Z<%lO2z",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,206]},dynamicPrecedences:{21:1,246:-1,252:-1},specialized:[{term:245,get:e=>f[e]||-1}],tokenPrec:9164}),m=e.define({name:`java`,parser:p.configure({props:[s.add({IfStatement:n({except:/^\s*({|else\b)/}),TryStatement:n({except:/^\s*({|catch|finally)\b/}),LabeledStatement:i,SwitchBlock:e=>{let t=e.textAfter,n=/^\s*\}/.test(t),r=/^\s*(case|default)\b/.test(t);return e.baseIndent+(n?0:r?1:2)*e.unit},Block:r({closing:`}`}),BlockComment:()=>null,Statement:n({except:/^{/})}),o.add({"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer":a,BlockComment(e){return{from:e.from+2,to:e.to-2}}})]}),languageData:{commentTokens:{line:`//`,block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*(?:case |default:|\{|\})$/}});function h(){return new t(m)}export{h as java};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
async function e(e){try{return await t(e)}catch(t){return console.warn(`[code-playpad] CodeMirror unavailable, using plain textarea:`,t),n(e)}}async function t(e){let[t,n,r,i,a,o]=await Promise.all([import(`@codemirror/view`),import(`@codemirror/state`),import(`@codemirror/commands`),import(`@codemirror/language`),import(`@codemirror/autocomplete`),import(`@codemirror/theme-one-dark`)]),{EditorView:s,keymap:c,lineNumbers:l,highlightActiveLine:u,highlightActiveLineGutter:d,highlightSpecialChars:f,drawSelection:p,rectangularSelection:m,crosshairCursor:h}=t,{EditorState:g,Compartment:_}=n,{defaultKeymap:v,history:y,historyKeymap:b,indentWithTab:x}=r,{syntaxHighlighting:S,defaultHighlightStyle:C,indentOnInput:w,bracketMatching:T,foldGutter:E,foldKeymap:D}=i,{autocompletion:O,closeBrackets:k,closeBracketsKeymap:A,completionKeymap:j}=a,M=new _,N=new _,P=new _,F=[s.theme({"&":{color:`#1f2328`,backgroundColor:`#ffffff`},".cm-gutters":{backgroundColor:`#f6f8fa`,color:`#8b949e`,border:`none`},".cm-activeLine":{backgroundColor:`#f6f8fa88`},".cm-activeLineGutter":{backgroundColor:`#eaeef2`},".cm-cursor":{borderLeftColor:`#1f2328`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:`#cfe3ff`}}),S(C,{fallback:!0})],I=e=>e?o.oneDark:F,L=c.of([{key:`Mod-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)},{key:`Shift-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)}]),R=e.dark,z=e.readOnly,B=e.language??[],V=t=>g.create({doc:t,extensions:[l(),d(),f(),y(),E(),p(),g.allowMultipleSelections.of(!0),w(),T(),k(),O(),m(),h(),u(),L,c.of([...A,...v,...b,...D,...j,x]),s.lineWrapping,P.of(B),M.of(I(R)),N.of(g.readOnly.of(z)),s.updateListener.of(t=>{t.docChanged&&e.onChange?.(t.state.doc.toString())})]}),H=new s({parent:e.parent,state:V(e.doc)}),U=new Map,W=e.name??``;return{fallback:!1,getCode:()=>H.state.doc.toString(),setCode(e){H.dispatch({changes:{from:0,to:H.state.doc.length,insert:e}})},openFile(e,t){if(e===W)return;U.set(W,H.state);let n=U.get(e);H.setState(n??V(t)),W=e,n&&H.dispatch({effects:[M.reconfigure(I(R)),N.reconfigure(g.readOnly.of(z)),P.reconfigure(B)]})},fileCode(e,t){if(e===W)return H.state.doc.toString();let n=U.get(e);return n?n.doc.toString():t},forgetFiles(e){for(let t of[...U.keys()])e.includes(t)||U.delete(t)},setTheme(e){R=e,H.dispatch({effects:M.reconfigure(I(R))})},setReadOnly(e){z=e,H.dispatch({effects:N.reconfigure(g.readOnly.of(z))})},setLanguage(e){B=e,H.dispatch({effects:P.reconfigure(B)})},focus:()=>H.focus(),destroy:()=>H.destroy()}}function n(e){let t=document.createElement(`textarea`);t.className=`cp-fallback-editor`,t.spellcheck=!1,t.value=e.doc,t.readOnly=e.readOnly,t.addEventListener(`input`,()=>e.onChange?.(t.value)),t.addEventListener(`keydown`,t=>{(t.metaKey||t.ctrlKey)&&t.key===`Enter`&&(t.preventDefault(),e.onRun?.())}),e.parent.appendChild(t);let n=new Map,r=e.name??``;return{fallback:!0,getCode:()=>t.value,setCode:e=>{t.value=e},openFile(e,i){e!==r&&(n.set(r,t.value),t.value=n.get(e)??i,r=e)},fileCode(e,i){return e===r?t.value:n.get(e)??i},forgetFiles(e){for(let t of[...n.keys()])e.includes(t)||n.delete(t)},setTheme:()=>{},setReadOnly:e=>{t.readOnly=e},setLanguage:()=>{},focus:()=>t.focus(),destroy:()=>t.remove()}}var r=new Map,i=new Map;function a(e,t){r.set(e,t)}function o(){return[...r.keys()]}function s(e){let t=i.get(e);if(t)return t;let n=r.get(e);if(!n)return Promise.reject(Error(`Unknown runtime "${e}". Registered: ${o().join(`, `)||`none`}`));let a=n().catch(t=>{throw i.delete(e),t});return i.set(e,a),a}a(`python`,()=>import(`./pyodide-
|
|
1
|
+
async function e(e){try{return await t(e)}catch(t){return console.warn(`[code-playpad] CodeMirror unavailable, using plain textarea:`,t),n(e)}}async function t(e){let[t,n,r,i,a,o]=await Promise.all([import(`@codemirror/view`),import(`@codemirror/state`),import(`@codemirror/commands`),import(`@codemirror/language`),import(`@codemirror/autocomplete`),import(`@codemirror/theme-one-dark`)]),{EditorView:s,keymap:c,lineNumbers:l,highlightActiveLine:u,highlightActiveLineGutter:d,highlightSpecialChars:f,drawSelection:p,rectangularSelection:m,crosshairCursor:h}=t,{EditorState:g,Compartment:_}=n,{defaultKeymap:v,history:y,historyKeymap:b,indentWithTab:x}=r,{syntaxHighlighting:S,defaultHighlightStyle:C,indentOnInput:w,bracketMatching:T,foldGutter:E,foldKeymap:D}=i,{autocompletion:O,closeBrackets:k,closeBracketsKeymap:A,completionKeymap:j}=a,M=new _,N=new _,P=new _,F=[s.theme({"&":{color:`#1f2328`,backgroundColor:`#ffffff`},".cm-gutters":{backgroundColor:`#f6f8fa`,color:`#8b949e`,border:`none`},".cm-activeLine":{backgroundColor:`#f6f8fa88`},".cm-activeLineGutter":{backgroundColor:`#eaeef2`},".cm-cursor":{borderLeftColor:`#1f2328`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:`#cfe3ff`}}),S(C,{fallback:!0})],I=e=>e?o.oneDark:F,L=c.of([{key:`Mod-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)},{key:`Shift-Enter`,preventDefault:!0,run:()=>(e.onRun?.(),!0)}]),R=e.dark,z=e.readOnly,B=e.language??[],V=t=>g.create({doc:t,extensions:[l(),d(),f(),y(),E(),p(),g.allowMultipleSelections.of(!0),w(),T(),k(),O(),m(),h(),u(),L,c.of([...A,...v,...b,...D,...j,x]),s.lineWrapping,P.of(B),M.of(I(R)),N.of(g.readOnly.of(z)),s.updateListener.of(t=>{t.docChanged&&e.onChange?.(t.state.doc.toString())})]}),H=new s({parent:e.parent,state:V(e.doc)}),U=new Map,W=e.name??``;return{fallback:!1,getCode:()=>H.state.doc.toString(),setCode(e){H.dispatch({changes:{from:0,to:H.state.doc.length,insert:e}})},openFile(e,t){if(e===W)return;U.set(W,H.state);let n=U.get(e);H.setState(n??V(t)),W=e,n&&H.dispatch({effects:[M.reconfigure(I(R)),N.reconfigure(g.readOnly.of(z)),P.reconfigure(B)]})},fileCode(e,t){if(e===W)return H.state.doc.toString();let n=U.get(e);return n?n.doc.toString():t},forgetFiles(e){for(let t of[...U.keys()])e.includes(t)||U.delete(t)},setTheme(e){R=e,H.dispatch({effects:M.reconfigure(I(R))})},setReadOnly(e){z=e,H.dispatch({effects:N.reconfigure(g.readOnly.of(z))})},setLanguage(e){B=e,H.dispatch({effects:P.reconfigure(B)})},focus:()=>H.focus(),destroy:()=>H.destroy()}}function n(e){let t=document.createElement(`textarea`);t.className=`cp-fallback-editor`,t.spellcheck=!1,t.value=e.doc,t.readOnly=e.readOnly,t.addEventListener(`input`,()=>e.onChange?.(t.value)),t.addEventListener(`keydown`,t=>{(t.metaKey||t.ctrlKey)&&t.key===`Enter`&&(t.preventDefault(),e.onRun?.())}),e.parent.appendChild(t);let n=new Map,r=e.name??``;return{fallback:!0,getCode:()=>t.value,setCode:e=>{t.value=e},openFile(e,i){e!==r&&(n.set(r,t.value),t.value=n.get(e)??i,r=e)},fileCode(e,i){return e===r?t.value:n.get(e)??i},forgetFiles(e){for(let t of[...n.keys()])e.includes(t)||n.delete(t)},setTheme:()=>{},setReadOnly:e=>{t.readOnly=e},setLanguage:()=>{},focus:()=>t.focus(),destroy:()=>t.remove()}}var r=new Map,i=new Map;function a(e,t){r.set(e,t)}function o(){return[...r.keys()]}function s(e){let t=i.get(e);if(t)return t;let n=r.get(e);if(!n)return Promise.reject(Error(`Unknown runtime "${e}". Registered: ${o().join(`, `)||`none`}`));let a=n().catch(t=>{throw i.delete(e),t});return i.set(e,a),a}a(`python`,()=>import(`./pyodide-BTGQ_X_F.js`).then(e=>e.pythonRuntime)),a(`javascript`,()=>import(`./javascript-hfFD1Fg2.js`).then(e=>e.javascriptRuntime)),a(`typescript`,()=>import(`./javascript-hfFD1Fg2.js`).then(e=>e.typescriptRuntime)),a(`java`,()=>import(`./java-1ISFU8hm.js`).then(e=>e.javaRuntime));var c=class extends Error{constructor(e=`Execution stopped`){super(e),this.name=`RunStopped`}},l=class extends Error{constructor(e=`Web Workers are unavailable in this page`){super(e),this.name=`WorkerUnavailable`}},u=new WeakSet,d=String.raw`
|
|
2
2
|
:host {
|
|
3
3
|
--cp-bg: #ffffff;
|
|
4
4
|
--cp-fg: #1f2328;
|
|
@@ -294,12 +294,12 @@ table.cp-table th { background: var(--cp-bg); }
|
|
|
294
294
|
@media (prefers-reduced-motion: reduce) {
|
|
295
295
|
.cp-progress { animation: none; background-position: 0 0; background-size: 100% 100%; opacity: 0.4; }
|
|
296
296
|
}
|
|
297
|
-
`,
|
|
297
|
+
`,f=e=>()=>import(`@codemirror/lang-javascript`).then(t=>t.javascript(e)),p={py:()=>import(`@codemirror/lang-python`).then(e=>e.python()),pyi:()=>import(`@codemirror/lang-python`).then(e=>e.python()),js:f({}),mjs:f({}),cjs:f({}),jsx:f({jsx:!0}),ts:f({typescript:!0}),mts:f({typescript:!0}),cts:f({typescript:!0}),tsx:f({typescript:!0,jsx:!0}),json:()=>import(`@codemirror/lang-json`).then(e=>e.json()),java:()=>import(`@codemirror/lang-java`).then(e=>e.java())};async function m(e){let t=p[e.includes(`.`)?e.slice(e.lastIndexOf(`.`)+1).toLowerCase():``];return t?t().catch(()=>null):null}var h=`code-playpad`,g=1,_=`snippets`,v=`progress`,y=null;function b(){return typeof indexedDB>`u`?Promise.reject(Error(`IndexedDB unavailable`)):(y||=new Promise((e,t)=>{let n=indexedDB.open(h,g);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(_)||e.createObjectStore(_),e.objectStoreNames.contains(v)||e.createObjectStore(v,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}).catch(e=>{throw y=null,e}),y)}function x(e,t,n){return b().then(r=>new Promise((i,a)=>{let o=n(r.transaction(e,t).objectStore(e));o.onsuccess=()=>i(o.result),o.onerror=()=>a(o.error)}))}function S(e,t){return x(_,`readwrite`,n=>n.put(t,e)).then(()=>void 0)}function C(e){return x(_,`readonly`,t=>t.get(e)).then(e=>e??null)}function w(e){return x(_,`readwrite`,t=>t.delete(e)).then(()=>void 0)}function T(e,t={}){let n={completed:!0,...t,id:e,updatedAt:Date.now()};return x(v,`readwrite`,e=>e.put(n)).then(()=>n)}function E(e){return x(v,`readonly`,t=>t.get(e)).then(e=>e??null)}function D(){return x(v,`readonly`,e=>e.getAll())}var O=`code-playpad`;function k(e){let t=e.replace(/\t/g,` `).split(`
|
|
298
298
|
`);for(;t.length&&t[0].trim()===``;)t.shift();for(;t.length&&t[t.length-1].trim()===``;)t.pop();let n=t.filter(e=>e.trim()!==``).reduce((e,t)=>Math.min(e,t.match(/^ */)[0].length),1/0);return(n===1/0?t:t.map(e=>e.slice(n))).join(`
|
|
299
|
-
`)}var
|
|
299
|
+
`)}var A=2e5,j=`playpad-file`,M={python:`main.py`,javascript:`main.js`,typescript:`main.ts`,java:`Main.java`};function N(e){return M[e]??`main.txt`}function P(e,t){let n={};for(let t of e.children){if(t.tagName.toLowerCase()!==j)continue;let e=t.getAttribute(`name`);e&&(n[e]=k(t.textContent??``))}if(Object.keys(n).length)return n;let r=[...e.childNodes].filter(e=>e.nodeType!==Node.ELEMENT_NODE||e.tagName.toLowerCase()!==j),i=r.some(e=>e.nodeType===Node.ELEMENT_NODE),a=k(r.filter(e=>!(i&&e.nodeType===Node.TEXT_NODE&&!(e.textContent??``).trim())).map(e=>e.textContent??``).join(``));return{[t]:a}}function F(e,t){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t;return Object.keys(e).length?e:null}}catch{}return e?{[t]:e}:null}var I=typeof HTMLElement>`u`?class{}:HTMLElement,L=class extends I{static get observedAttributes(){return[`language`,`height`,`min-height`,`max-height`,`theme`,`readonly`,`autorun`,`stdin`,`persist`,`entry`]}#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u=null;#d=null;#f=null;#p=null;#m={};#h={};#g=`main.py`;#_=null;#v;#y=!1;#b=null;#x=!1;#S=!1;#C=null;#w=null;#T=null;#E=()=>this.#K();#D=null;#O=!0;#k=[];#A=null;#j=null;#M=null;#N=0;#P=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`})}get code(){return this.#u?this.#u.getCode():this.#m[this.#g]??``}set code(e){this.#m[this.#g]=e,this.#B()}get files(){return this.#H()}set files(e){let t=Object.keys(e);if(!t.length)return;let n=Object.keys(this.#h);n.length===1&&!this.#h[n[0]]&&(this.#h={...e}),this.#m={...e},t.includes(this.#g)||(this.#g=this.#V()),this.#u?.forgetFiles([]),this.#B(),this.#U(),this.#z()}get entry(){return this.#V()}set entry(e){this.setAttribute(`entry`,e)}openFile(e){e in this.#m&&(this.#u&&(this.#m[this.#g]=this.#u.getCode(),this.#u.openFile(e,this.#m[e]??``)),this.#g=e,this.#U(),this.#z())}get stdin(){return this.#l?this.#l.value:``}set stdin(e){this.#l&&(this.#l.value=e,this.#c.hidden=!1)}get language(){return this.getAttribute(`language`)||`python`}set language(e){this.setAttribute(`language`,e)}getCode(){return this.code}getFiles(){return this.#H()}reset(){this.#m={...this.#h},this.#g=this.#V(),this.#u?.forgetFiles([]),this.#B(),this.#U(),this.#Y(),this.#s.hidden=!0,this.#J(this.#f?.ready?`${this.#f.label} ready`:``,`idle`)}async run(){if(this.#y)return;await this.#d;let e=this.#H(),t=this.#V(),n=e[t]??``;this.#y=!0,this.#x=!1,this.#n.disabled=!0,this.#r.hidden=!1,this.#Y(),this.#s.hidden=!1,this.#ne(`py-run`,{code:n,entry:t,files:e,language:this.language});try{let r=await this.#R();if(this.#x)throw new c;this.#J(`Queued…`,`busy`),this.#o.hidden=!1;let i=r.run(n,{stdin:this.#l.value,files:e,entry:t,onStart:()=>this.#J(`Running…`,`busy`),onStdout:e=>this.#X(e),onStderr:e=>this.#X(e,`cp-err`),onEcho:e=>this.#X(e,`cp-in`),onStdinRequest:()=>this.#Q()});this.#b={runtime:r,run:i};let a=await i;return a.table&&this.#te(a.table),a.value!==void 0&&this.#X(`${a.value}\n`,`cp-value`),a.hint&&this.#ee(a.hint,u.has(a)),a.stderr?(this.#J(`Error · ${a.durationMs} ms`,`error`),this.#ne(`py-error`,{message:a.stderr,hint:a.hint,language:this.language})):this.#J(`Done in ${a.durationMs} ms`,`ok`),this.#ne(`py-output`,{...a,language:this.language}),a}catch(e){if(e instanceof c)this.#X(`
|
|
300
300
|
[stopped]
|
|
301
|
-
`,`cp-err`),this.#
|
|
302
|
-
`,`cp-err`),this.#
|
|
301
|
+
`,`cp-err`),this.#J(`Stopped`,`error`);else{let t=e instanceof Error?e.message:String(e);this.#X(t+`
|
|
302
|
+
`,`cp-err`),this.#J(`Failed to start`,`error`),this.#ne(`py-error`,{message:t,language:this.language})}return}finally{this.#b=null,this.#$(null),this.#Z(),this.#y=!1,this.#n.disabled=!1,this.#r.hidden=!0,this.#o.hidden=!0}}stop(){this.#b?this.#b.runtime.stop?.(this.#b.run):this.#y&&(this.#x=!0)}prewarm(){return this.#R()}connectedCallback(){if(this.#P){this.#L();return}if(!this.textContent?.trim()&&document.readyState===`loading`){document.addEventListener(`DOMContentLoaded`,()=>this.isConnected&&this.#F(),{once:!0});return}this.#F()}disconnectedCallback(){this.#C?.disconnect(),this.#C=null,this.#w?.removeEventListener(`change`,this.#E),this.#w=null,this.#T?.disconnect(),this.#T=null,this.#D&&clearTimeout(this.#D),this.#$(null),setTimeout(()=>{this.isConnected||!this.#u||(this.#_=this.#H(),this.#u.destroy(),this.#u=null,this.#d=null,this.#P=!1)},0)}attributeChangedCallback(e,t,n){if(this.#P)switch(e){case`theme`:this.#K();break;case`height`:case`min-height`:case`max-height`:this.#q();break;case`readonly`:this.#u?.setReadOnly(n!==null);break;case`stdin`:this.#c.hidden=n===null&&!this.#l.value;break;case`entry`:this.#U();break;case`language`:this.#f=null,this.#p=null,this.#S=!1,this.#R().catch(()=>{})}}#F(){this.#P=!0,this.#h=P(this,N(this.language)),this.#m=this.#_??{...this.#h},this.#g=this.#V(),this.#I(),this.#K(),this.#q();let t=this.getAttribute(`persist`);this.#d=(async()=>{if(t&&this.#_==null){let e=await C(t).catch(()=>null),n=e==null?null:F(e,N(this.language));if(n){let e={};for(let t of Object.keys(this.#h))e[t]=n[t]??this.#h[t];this.#m=e,this.#g=this.#V()}}this.#U();let n=await s(this.language).catch(()=>null),r=n?await n.editorLanguage().catch(()=>null):null;this.#u=await e({parent:this.#t,doc:this.#m[this.#g]??``,name:this.#g,dark:this.#G(),readOnly:this.hasAttribute(`readonly`),language:r,onRun:()=>void this.run(),onChange:e=>this.#W(e)}),this.#_=null,this.#z()})(),this.#L()}#I(){let e=document.createElement(`style`);e.textContent=d;let t=document.createElement(`div`);t.className=`cp-root`,t.innerHTML=`
|
|
303
303
|
<div class="cp-toolbar">
|
|
304
304
|
<button class="cp-primary" part="run-button" data-action="run">Run</button>
|
|
305
305
|
<button class="cp-danger" part="stop-button" data-action="stop" hidden>Stop</button>
|
|
@@ -314,10 +314,10 @@ table.cp-table th { background: var(--cp-bg); }
|
|
|
314
314
|
<label>Standard input — one value per line</label>
|
|
315
315
|
<textarea rows="2" spellcheck="false"></textarea>
|
|
316
316
|
</div>
|
|
317
|
-
<pre class="cp-output" part="output" hidden></pre>`,this.#e.replaceChildren(e,t),this.#n=t.querySelector(`[data-action="run"]`),this.#r=t.querySelector(`[data-action="stop"]`),this.#i=t.querySelector(`[data-action="reset"]`),this.#a=t.querySelector(`.cp-status`),this.#o=t.querySelector(`.cp-progress`),this.#v=t.querySelector(`.cp-tabs`),this.#t=t.querySelector(`.cp-editor`),this.#c=t.querySelector(`.cp-stdin`),this.#l=t.querySelector(`.cp-stdin textarea`),this.#s=t.querySelector(`.cp-output`),this.#c.hidden=!this.hasAttribute(`stdin`),this.#l.addEventListener(`input`,()=>this.#c.classList.remove(`cp-attention`)),this.#v.addEventListener(`click`,e=>{let t=e.target.closest(`button[data-file]`);t&&this.openFile(t.getAttribute(`data-file`))}),this.#n.addEventListener(`click`,()=>void this.run()),this.#r.addEventListener(`click`,()=>this.stop()),this.#i.addEventListener(`click`,()=>this.reset());let n=()=>void this.#
|
|
318
|
-
`,`cp-err`),this.#s.hidden=!1,e}finally{this.#o.hidden=!0}return this.#
|
|
319
|
-
`),this.#
|
|
317
|
+
<pre class="cp-output" part="output" hidden></pre>`,this.#e.replaceChildren(e,t),this.#n=t.querySelector(`[data-action="run"]`),this.#r=t.querySelector(`[data-action="stop"]`),this.#i=t.querySelector(`[data-action="reset"]`),this.#a=t.querySelector(`.cp-status`),this.#o=t.querySelector(`.cp-progress`),this.#v=t.querySelector(`.cp-tabs`),this.#t=t.querySelector(`.cp-editor`),this.#c=t.querySelector(`.cp-stdin`),this.#l=t.querySelector(`.cp-stdin textarea`),this.#s=t.querySelector(`.cp-output`),this.#c.hidden=!this.hasAttribute(`stdin`),this.#l.addEventListener(`input`,()=>this.#c.classList.remove(`cp-attention`)),this.#v.addEventListener(`click`,e=>{let t=e.target.closest(`button[data-file]`);t&&this.openFile(t.getAttribute(`data-file`))}),this.#n.addEventListener(`click`,()=>void this.run()),this.#r.addEventListener(`click`,()=>this.stop()),this.#i.addEventListener(`click`,()=>this.reset());let n=()=>void this.#R().catch(()=>{});this.#t.addEventListener(`pointerdown`,n,{once:!0}),this.#t.addEventListener(`focusin`,n,{once:!0})}#L(){this.#C||typeof IntersectionObserver>`u`||(this.#C=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this.#C?.disconnect(),this.#C=null,this.#R().then(()=>{this.hasAttribute(`autorun`)&&this.run()}).catch(()=>{}))},{rootMargin:`300px`}),this.#C.observe(this))}#R(){return this.#p||=(async()=>{let e=await s(this.language);this.#f=e,e.ready||(this.#o.hidden=!1,this.#J(`Loading ${e.label}…`,`busy`));try{await e.load(e=>{this.#y||this.#J(e.message,e.phase===`ready`?`ok`:`busy`)})}catch(e){this.#p=null,this.#J(`Runtime unavailable`,`error`);let t=e instanceof Error?e.message:String(e);throw this.#X(t+`
|
|
318
|
+
`,`cp-err`),this.#s.hidden=!1,e}finally{this.#o.hidden=!0}return this.#z(),this.#S||(this.#S=!0,this.#J(`${e.label} ready`,`ok`),this.#ne(`py-ready`,{language:e.id,label:e.label})),e})(),this.#p}async#z(){if(!this.#u)return;let e=this.#g,t=await m(e);if(t){this.#g===e&&this.#u?.setLanguage(t);return}let n=e.includes(`.`)?null:await(this.#f??await s(this.language).catch(()=>null))?.editorLanguage().catch(()=>null);this.#g===e&&this.#u?.setLanguage(n??[])}#B(){if(this.#u){this.#u.setCode(this.#m[this.#g]??``);return}this.#d?.then(()=>{this.#u?.setCode(this.#m[this.#g]??``),this.#U()})}#V(){let e=Object.keys(this.#m),t=this.getAttribute(`entry`);if(t&&e.includes(t))return t;let n=N(this.language);return e.includes(n)?n:e[0]??n}#H(){let e={...this.#m};if(this.#u)for(let t of Object.keys(e))e[t]=this.#u.fileCode(t,e[t]);return e}#U(){let e=Object.keys(this.#m);if(this.#v.hidden=e.length<2,this.#v.hidden){this.#v.replaceChildren();return}let t=this.#V();this.#v.replaceChildren(...e.map(e=>{let n=document.createElement(`button`);return n.dataset.file=e,n.textContent=e,n.setAttribute(`aria-pressed`,String(e===this.#g)),e===t&&(n.classList.add(`cp-entry`),n.title=`entry point — this is the file Run executes`),n}))}#W(e){this.#m[this.#g]=e;let t=this.getAttribute(`persist`);if(!t)return;this.#D&&clearTimeout(this.#D);let n=JSON.stringify(this.#H());this.#D=setTimeout(()=>void S(t,n).catch(()=>{}),400)}#G(){let e=this.getAttribute(`theme`)??`auto`;if(e===`dark`)return!0;if(e===`light`)return!1;let t=typeof document>`u`?``:getComputedStyle(document.documentElement).colorScheme,n=t.includes(`dark`);return n===t.includes(`light`)?!!this.#w?.matches:n}#K(){!this.#w&&typeof matchMedia==`function`&&(this.#w=matchMedia(`(prefers-color-scheme: dark)`),this.#w.addEventListener(`change`,this.#E)),!this.#T&&typeof MutationObserver==`function`&&typeof document<`u`&&(this.#T=new MutationObserver(this.#E),this.#T.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`,`style`,`data-theme`,`data-color-scheme`,`color-scheme`]}));let e=this.#G();this.setAttribute(`data-resolved-theme`,e?`dark`:`light`),this.#u?.setTheme(e)}#q(){for(let[e,t]of[[`height`,`--cp-height`],[`min-height`,`--cp-min-height`],[`max-height`,`--cp-max-height`]]){let n=this.getAttribute(e);n===null||n===``?this.style.removeProperty(t):this.style.setProperty(t,/^\d+$/.test(n)?`${n}px`:n)}}#J(e,t){this.#a.textContent=e,this.#a.dataset.state=t}#Y(){this.#M&&clearTimeout(this.#M),this.#M=null,this.#k=[],this.#N=0,this.#s.replaceChildren(),this.#O=!0}#X(e,t){if(!e)return;let n=t===`cp-err`&&!this.#O?`\n${e}`:e;this.#O=n.endsWith(`
|
|
319
|
+
`),this.#k.push({text:n,className:t}),this.#M??=setTimeout(()=>this.#Z(),16)}#Z(){if(this.#M&&clearTimeout(this.#M),this.#M=null,!this.#k.length)return;let e=this.#k;this.#k=[];let t=document.createDocumentFragment(),n=``,r,i=()=>{if(!n)return;let e=document.createElement(`span`);r&&(e.className=r),e.textContent=n,t.appendChild(e),n=``};for(let t of e){if(this.#N>=A)break;let e=t.text;this.#N+e.length>A&&(e=e.slice(0,A-this.#N)+`
|
|
320
320
|
… output truncated for display — the full text is in the py-output event
|
|
321
|
-
`),this.#
|
|
322
|
-
`,`cp-in`):this.#
|
|
323
|
-
`,`cp-in`),this.#
|
|
321
|
+
`),this.#N+=t.text.length,r!==t.className&&(i(),r=t.className),n+=e}i(),this.#s.hidden=!1;let a=this.#s.querySelector(`.cp-prompt`);a?this.#s.insertBefore(t,a):this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight}#Q(){return this.#Z(),this.#$(null),new Promise(e=>{let t=document.createElement(`form`);t.className=`cp-prompt`;let n=document.createElement(`input`);n.type=`text`,n.setAttribute(`aria-label`,`Program input — press Enter to send`),n.autocapitalize=`off`,n.autocomplete=`off`,n.spellcheck=!1;let r=document.createElement(`button`);r.type=`submit`,r.className=`cp-send`,r.textContent=`⏎`,r.title=`Send this line (Enter)`;let i=document.createElement(`button`);i.type=`button`,i.className=`cp-eof`,i.textContent=`EOF`,i.title=`End of input (Ctrl-D) — makes input() raise EOFError`;let a=n=>{this.#A===e&&(this.#A=null,this.#j=null,t.remove(),n===null?this.#X(`
|
|
322
|
+
`,`cp-in`):this.#X(n+`
|
|
323
|
+
`,`cp-in`),this.#Z(),e(n))};t.addEventListener(`submit`,e=>{e.preventDefault(),a(n.value)}),i.addEventListener(`click`,()=>a(null)),n.addEventListener(`keydown`,e=>{(e.key===`Escape`||e.key===`d`&&e.ctrlKey)&&(e.preventDefault(),a(null))}),t.append(n,r,i),this.#s.hidden=!1,this.#s.appendChild(t),this.#s.scrollTop=this.#s.scrollHeight,this.#A=e,this.#j=a,n.focus({preventScroll:!0})})}#$(e){this.#j?.(e),this.#j=null,this.#A=null}#ee(e,t){this.#Z();let n=document.createElement(`div`);n.className=`cp-hint`,n.textContent=e,this.#s.hidden=!1,this.#s.appendChild(n),this.#s.scrollTop=this.#s.scrollHeight,t&&(this.#c.hidden=!1,this.#c.classList.add(`cp-attention`))}#te(e){this.#Z();let t=document.createElement(`table`);t.className=`cp-table`;let n=t.createTHead().insertRow();for(let t of e.columns){let e=document.createElement(`th`);e.textContent=t,n.appendChild(e)}let r=t.createTBody();for(let t of e.rows){let e=r.insertRow();for(let n of t)e.insertCell().textContent=n==null?``:String(n)}this.#s.hidden=!1,this.#s.appendChild(t)}#ne(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}};function R(e=O){typeof window>`u`||typeof customElements>`u`||customElements.get(e)||customElements.define(e,L)}R();export{E as a,T as c,l as d,s as f,e as h,w as i,u as l,a as m,R as n,C as o,o as p,D as r,S as s,L as t,c as u};
|
package/dist/element.d.ts
CHANGED
|
@@ -51,6 +51,9 @@ export declare class CodePlayPadElement extends ElementBase {
|
|
|
51
51
|
reset(): void;
|
|
52
52
|
/** Runs the entry file, with every other file placed alongside it first. */
|
|
53
53
|
run(): Promise<Result | undefined>;
|
|
54
|
+
/** Stops this widget's own run — queued or executing — and nobody else's.
|
|
55
|
+
* The runtime is shared, so a bare runtime.stop() would kill whichever
|
|
56
|
+
* widget happens to be running. */
|
|
54
57
|
stop(): void;
|
|
55
58
|
/** Boot the runtime without running anything. Safe to call repeatedly. */
|
|
56
59
|
prewarm(): Promise<Runtime>;
|
package/dist/element.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./element-
|
|
1
|
+
import{n as e,t}from"./element-BYcX5Z6z.js";export{t as CodePlayPadElement,e as defineCodePlayPad};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* code-playpad — MIT © 2026 Seung Hun Lee
|
|
3
|
+
* Bundles CodeMirror 6 and Lezer (MIT) © Marijn Haverbeke and others.
|
|
4
|
+
* Full third-party licences: THIRD-PARTY-NOTICES.txt in this package.
|
|
5
|
+
*/
|
|
6
|
+
var e=class extends Error{constructor(e=`Execution stopped`){super(e),this.name=`RunStopped`}},t=class extends Error{constructor(e=`Web Workers are unavailable in this page`){super(e),this.name=`WorkerUnavailable`}},n=new WeakSet;export{e as n,t as r,n as t};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,f as r,i,
|
|
1
|
+
import{a as e,c as t,d as n,f as r,h as i,i as a,m as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./element-BYcX5Z6z.js";import{n as m,o as h,r as g,t as _}from"./config-DZqcFPEP.js";export{f as CodePlayPadElement,_ as PYODIDE_VERSION,p as RunStopped,n as WorkerUnavailable,u as allProgress,a as clearSnippet,m as configurePython,g as configureTypeScript,i as createEditor,s as defineCodePlayPad,e as getProgress,r as getRuntime,l as listRuntimes,c as loadSnippet,h as pyodideAssetUrls,o as registerRuntime,d as saveSnippet,t as setProgress};
|